@remnic/core 9.69.23 → 9.69.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstraction-nodes.js +3 -2
- package/dist/access-admin-ops-surface.d.ts +1 -1
- package/dist/access-admin-ops-surface.js +53 -53
- package/dist/access-authorization-probe.d.ts +1 -1
- package/dist/access-authorization-probe.js +54 -54
- package/dist/access-boundary.d.ts +1 -1
- package/dist/access-boundary.js +53 -53
- package/dist/access-citation-namespace.js +3 -3
- package/dist/access-cli.js +112 -112
- package/dist/access-extraction-force-flush.d.ts +1 -1
- package/dist/access-extraction-force-flush.js +53 -53
- package/dist/access-http-briefing.d.ts +1 -1
- package/dist/access-http-briefing.js +54 -54
- package/dist/access-http-lcm-compaction.d.ts +1 -1
- package/dist/access-http-lifecycle-flush.d.ts +1 -1
- package/dist/access-http-offline-stream.d.ts +1 -1
- package/dist/access-http-query.js +55 -55
- package/dist/access-http.d.ts +2 -2
- package/dist/access-http.js +72 -72
- package/dist/access-identity-continuity-surface.js +53 -53
- package/dist/access-lcm-surface.d.ts +1 -1
- package/dist/access-lcm-surface.js +53 -53
- package/dist/access-mcp.d.ts +1 -1
- package/dist/access-mcp.js +64 -64
- package/dist/access-namespace-preflight.js +53 -53
- package/dist/access-observe-write-surface.d.ts +1 -1
- package/dist/access-observe-write-surface.js +53 -53
- package/dist/access-offline-manifest.js +10 -10
- package/dist/access-operations-batch.js +58 -58
- package/dist/access-operations.d.ts +1 -1
- package/dist/access-operations.js +63 -63
- package/dist/access-recall-concurrency.d.ts +1 -1
- package/dist/access-recall-concurrency.js +53 -53
- package/dist/access-recall-response.d.ts +1 -1
- package/dist/access-recall-response.js +53 -53
- package/dist/access-recall-surface.d.ts +1 -1
- package/dist/access-recall-surface.js +53 -53
- package/dist/access-schema.js +6 -5
- package/dist/access-service-helpers.d.ts +1 -1
- package/dist/access-service.d.ts +1 -1
- package/dist/access-service.js +53 -53
- package/dist/access-surface-catalog.d.ts +1 -1
- package/dist/access-surface-catalog.js +55 -55
- package/dist/active-recall.js +12 -11
- package/dist/active-recall.js.map +1 -1
- package/dist/{auto-sync-TTIEWJ5X.js → auto-sync-WNGG2GC2.js} +7 -7
- package/dist/briefing.js +20 -20
- package/dist/buffer.js +9 -9
- package/dist/calibration.js +2 -1
- package/dist/calibration.js.map +1 -1
- package/dist/{capsule-merge-CU6QJBSV.js → capsule-merge-IPG4IOFP.js} +4 -4
- package/dist/causal-behavior.js +4 -3
- package/dist/causal-behavior.js.map +1 -1
- package/dist/causal-chain.js +4 -3
- package/dist/causal-consolidation.js +25 -25
- package/dist/causal-retrieval.js +4 -3
- package/dist/causal-retrieval.js.map +1 -1
- package/dist/causal-trajectory-graph.js +2 -1
- package/dist/causal-trajectory-graph.js.map +1 -1
- package/dist/causal-trajectory.js +3 -2
- package/dist/{chunk-5RWHODVF.js → chunk-27QVNSQ3.js} +2 -2
- package/dist/{chunk-2MX7RU7B.js → chunk-2EKJDQZB.js} +2 -2
- package/dist/{chunk-XLRM6PPI.js → chunk-2IOHTUP3.js} +4 -4
- package/dist/{chunk-ZGQDTD5T.js → chunk-2ITE4C2Z.js} +2 -2
- package/dist/{chunk-O5ZR7SXV.js → chunk-2SGLMP2E.js} +2 -2
- package/dist/{chunk-FYWLSFFS.js → chunk-2Z4GS5E6.js} +2 -2
- package/dist/{chunk-WELP4CG6.js → chunk-37KUQPX4.js} +6 -6
- package/dist/{chunk-DDQQY2E3.js → chunk-3BTFBQLO.js} +7 -7
- package/dist/chunk-3BTFBQLO.js.map +1 -0
- package/dist/{chunk-UR6PBX2J.js → chunk-3K7V3HE6.js} +35 -60
- package/dist/chunk-3K7V3HE6.js.map +1 -0
- package/dist/{chunk-MRSLR6TB.js → chunk-3QQTXYZ6.js} +2 -2
- package/dist/{chunk-DJUKBGAD.js → chunk-46EST7JO.js} +5 -5
- package/dist/chunk-46EST7JO.js.map +1 -0
- package/dist/{chunk-CI6C33EO.js → chunk-46ZPIGWI.js} +3 -3
- package/dist/{chunk-HTIIXNJQ.js → chunk-4FIH6MPS.js} +6 -3
- package/dist/chunk-4FIH6MPS.js.map +1 -0
- package/dist/{chunk-MCA2X4WH.js → chunk-4IHBN6WU.js} +2 -2
- package/dist/{chunk-W7IGLX4G.js → chunk-4O6WRBGE.js} +7 -7
- package/dist/chunk-4O6WRBGE.js.map +1 -0
- package/dist/{chunk-TOZCM7WN.js → chunk-4TKJGOCJ.js} +2 -2
- package/dist/{chunk-3ADRFFRO.js → chunk-54WHLA65.js} +4 -4
- package/dist/{chunk-Z2N2AHEM.js → chunk-56Y6EKZN.js} +2 -2
- package/dist/{chunk-2H2N5UQW.js → chunk-5ATKSPEQ.js} +2 -2
- package/dist/{chunk-MSOXFXCA.js → chunk-5FAGCOZD.js} +5 -5
- package/dist/chunk-5FAGCOZD.js.map +1 -0
- package/dist/{chunk-ZVZHG7AI.js → chunk-5UBH37SL.js} +3 -3
- package/dist/{chunk-YZYZ2BEU.js → chunk-66OJSCI6.js} +2 -2
- package/dist/{chunk-HNPE66LB.js → chunk-6CVNSDCZ.js} +4 -4
- package/dist/{chunk-ERVJFFTR.js → chunk-6NXSYYGP.js} +2 -2
- package/dist/{chunk-2HIJHXB3.js → chunk-6WHJ2EAB.js} +2 -2
- package/dist/{chunk-34VTBPNE.js → chunk-6XL73HQ4.js} +4 -4
- package/dist/{chunk-YK3UIF7X.js → chunk-AQ7SYDVO.js} +2 -2
- package/dist/{chunk-DSCCM66R.js → chunk-B3O3IRZN.js} +2 -2
- package/dist/{chunk-P77QX3ID.js → chunk-B6O2YLUR.js} +21 -20
- package/dist/chunk-B6O2YLUR.js.map +1 -0
- package/dist/{chunk-N37X5RU7.js → chunk-BD7JTBYP.js} +2 -2
- package/dist/{chunk-VO43BJ2F.js → chunk-BLJWYCNO.js} +5 -5
- package/dist/{chunk-ACPCA4NO.js → chunk-BMWN7B3Y.js} +6 -6
- package/dist/chunk-BMWN7B3Y.js.map +1 -0
- package/dist/{chunk-HSKSVY3Q.js → chunk-C553ZTLF.js} +15 -15
- package/dist/{chunk-GCASGYIO.js → chunk-C7HJ3NEI.js} +2 -2
- package/dist/{chunk-WVGXCBOC.js → chunk-D5F7TKMH.js} +2 -2
- package/dist/{chunk-UFT2XNBW.js → chunk-DGS34QSY.js} +2 -2
- package/dist/{chunk-VAOL3SOT.js → chunk-DZD3WGCD.js} +4 -4
- package/dist/{chunk-KHMS2FQS.js → chunk-E2P7TZTF.js} +2 -2
- package/dist/{chunk-6FC3IZ26.js → chunk-EBA5DA77.js} +2 -2
- package/dist/{chunk-E6EANYLD.js → chunk-EOQ6FSQP.js} +2 -2
- package/dist/{chunk-7RPPCA26.js → chunk-FVOP3NT7.js} +2 -2
- package/dist/{chunk-NRLELHAY.js → chunk-G7NYVKD6.js} +2 -2
- package/dist/{chunk-QY34X2QJ.js → chunk-GHTSNGBZ.js} +2 -2
- package/dist/{chunk-SLIOMMPF.js → chunk-H272ZPQ3.js} +5 -5
- package/dist/{chunk-ZZBQNQS6.js → chunk-H3TKENU4.js} +2 -2
- package/dist/{chunk-5OPNUUBX.js → chunk-H4SEGIZY.js} +2 -2
- package/dist/{chunk-F2HMDGLC.js → chunk-H54VWRPS.js} +13 -13
- package/dist/{chunk-HTP6XRUI.js → chunk-HM7RHKS4.js} +2 -2
- package/dist/{chunk-O7H3P2SJ.js → chunk-HWLIMQE2.js} +2 -2
- package/dist/{chunk-62WZDHTW.js → chunk-ICKJ52PE.js} +33 -33
- package/dist/chunk-ICKJ52PE.js.map +1 -0
- package/dist/{chunk-I3FDDCY3.js → chunk-JEC4DVM3.js} +8 -8
- package/dist/chunk-JEC4DVM3.js.map +1 -0
- package/dist/{chunk-ET2CNMLD.js → chunk-JN72EPOE.js} +2 -2
- package/dist/{chunk-E7UQOS4C.js → chunk-JPKK466T.js} +2 -2
- package/dist/{chunk-JCCWJHOP.js → chunk-JYZSRNR7.js} +2 -2
- package/dist/{chunk-7IUESBLV.js → chunk-K7724CH2.js} +2 -2
- package/dist/{chunk-UK7HXNNJ.js → chunk-KAXCYM66.js} +3 -3
- package/dist/{chunk-7XVP4P4O.js → chunk-KB2G2I6Q.js} +3 -3
- package/dist/{chunk-K7LTRJZU.js → chunk-KEF46KL2.js} +2 -2
- package/dist/{chunk-5UZXUTVO.js → chunk-KNA3BXXL.js} +6 -2
- package/dist/chunk-KNA3BXXL.js.map +1 -0
- package/dist/{chunk-JYYTWCPU.js → chunk-KTWG7CNY.js} +6 -6
- package/dist/{chunk-XTYDEO7M.js → chunk-L7Z57SID.js} +2 -2
- package/dist/{chunk-EYMPUXAN.js → chunk-LO4UKPKX.js} +3 -3
- package/dist/{chunk-LDWIPYJ6.js → chunk-LS2FHUML.js} +3 -3
- package/dist/{chunk-GDB4J2H3.js → chunk-MPC7TYTZ.js} +2 -2
- package/dist/{chunk-2GF27PGH.js → chunk-MRPOZBJC.js} +3 -3
- package/dist/{chunk-7OLKAQMG.js → chunk-MWN6QEI2.js} +2 -2
- package/dist/{chunk-J62HG52Z.js → chunk-MY5EDR46.js} +4 -4
- package/dist/{chunk-IZRMWPGS.js → chunk-N3ZOP7KC.js} +2 -2
- package/dist/{chunk-N6A2RP5S.js → chunk-NB3LRY4T.js} +3 -3
- package/dist/{chunk-4N5BIR2U.js → chunk-ND6IQGSZ.js} +2 -2
- package/dist/{chunk-NOB2T2FC.js → chunk-NHLLKEKK.js} +2 -2
- package/dist/{chunk-WW6B7NQJ.js → chunk-NLYVH66G.js} +6 -6
- package/dist/chunk-NLYVH66G.js.map +1 -0
- package/dist/{chunk-M5CQNOQN.js → chunk-O6ZNNVSP.js} +2 -2
- package/dist/{chunk-NNBZS3DY.js → chunk-OB3XMWX5.js} +2 -2
- package/dist/{chunk-TXJNRGMI.js → chunk-OEYZXDQI.js} +6 -6
- package/dist/chunk-OEYZXDQI.js.map +1 -0
- package/dist/{chunk-SIBVIP2Y.js → chunk-PAZY2ZKP.js} +2 -2
- package/dist/{chunk-LXESHEBP.js → chunk-PX4UMA5Z.js} +2 -2
- package/dist/{chunk-4KNRKJXQ.js → chunk-QOOBICJF.js} +5 -5
- package/dist/chunk-QOOBICJF.js.map +1 -0
- package/dist/{chunk-NNZFPYYX.js → chunk-R7QY5ZVB.js} +2 -2
- package/dist/{chunk-WTRTFIIN.js → chunk-R7RTXEYG.js} +2 -2
- package/dist/{chunk-XRBJ5R3P.js → chunk-RBCQVOVJ.js} +3 -3
- package/dist/{chunk-WFZNT4KB.js → chunk-RC5DXXWC.js} +2 -2
- package/dist/{chunk-OH7LZHGJ.js → chunk-RJYJ7KR7.js} +52 -52
- package/dist/{chunk-OH7LZHGJ.js.map → chunk-RJYJ7KR7.js.map} +1 -1
- package/dist/{chunk-5QZR2RA3.js → chunk-ROBHL3GL.js} +2 -2
- package/dist/{chunk-6PST2SFW.js → chunk-SCXURCVT.js} +3 -3
- package/dist/{chunk-AYG7ML7O.js → chunk-SJDQ5RSN.js} +3 -3
- package/dist/{chunk-3ZBLKIHJ.js → chunk-SMWTZLHE.js} +51 -41
- package/dist/{chunk-3ZBLKIHJ.js.map → chunk-SMWTZLHE.js.map} +1 -1
- package/dist/{chunk-IQXDSKTL.js → chunk-SVXJLDDC.js} +6 -6
- package/dist/{chunk-SEF4IOFE.js → chunk-SWIKABKI.js} +2 -2
- package/dist/{chunk-ZJABRLCZ.js → chunk-TBXAY2SS.js} +4 -4
- package/dist/{chunk-GIC6BASP.js → chunk-TNSCIPBQ.js} +2 -2
- package/dist/{chunk-ZMDMHSV2.js → chunk-TVEONGBU.js} +2 -2
- package/dist/{chunk-4FSEZRGK.js → chunk-TWF35IC6.js} +2 -2
- package/dist/{chunk-LS2SGMQE.js → chunk-U6N5IBVY.js} +2 -2
- package/dist/{chunk-62YW6OYI.js → chunk-UCKYTA2T.js} +3 -3
- package/dist/{chunk-YFCHNOGJ.js → chunk-UNNPNBR2.js} +9 -9
- package/dist/{chunk-Z2M7F4QM.js → chunk-VVX5PZFS.js} +3 -3
- package/dist/{chunk-NTYLZXDX.js → chunk-VYCOJKSX.js} +2 -2
- package/dist/{chunk-UICSQESY.js → chunk-W24T5YMW.js} +2 -2
- package/dist/{chunk-HDQUQBPW.js → chunk-W3K3HITK.js} +2 -2
- package/dist/{chunk-GDASG7NC.js → chunk-W4F3C7N7.js} +2 -2
- package/dist/{chunk-YBLZFNIQ.js → chunk-WJHGDE7X.js} +2 -2
- package/dist/{chunk-ZBPXG5PJ.js → chunk-WMLEPWMO.js} +9 -9
- package/dist/chunk-WMLEPWMO.js.map +1 -0
- package/dist/{chunk-4F24PHNX.js → chunk-WQZZDN5M.js} +2 -2
- package/dist/{chunk-CDZEUCV7.js → chunk-X5K5TAQZ.js} +4 -4
- package/dist/{chunk-5AUODSOQ.js → chunk-XM24CDZX.js} +3 -3
- package/dist/{chunk-6VML2LII.js → chunk-XOVKXJEP.js} +3 -3
- package/dist/{chunk-OU5TIWDQ.js → chunk-XSGUMQQQ.js} +12 -12
- package/dist/{chunk-7CFVBWDC.js → chunk-XUE46UYW.js} +3 -3
- package/dist/{chunk-DJORULH3.js → chunk-YRLHEEQT.js} +2 -2
- package/dist/{chunk-YRWDPE32.js → chunk-Z3O53WZR.js} +2 -2
- package/dist/{chunk-CSY5DA7O.js → chunk-Z6COGHHN.js} +2 -2
- package/dist/{chunk-OYR3IPHD.js → chunk-ZIW5JVRM.js} +2 -2
- package/dist/{cli-B_YwqoIr.d.ts → cli-BqMNkQn5.d.ts} +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +94 -94
- package/dist/coding/export-okf-codegraph.js +21 -21
- package/dist/coding/pre-action-gate.js +4 -3
- package/dist/commitment-ledger.js +3 -2
- package/dist/compounding/engine.js +21 -21
- package/dist/config.js +12 -11
- package/dist/connectors/codex-materialize-runner.js +21 -21
- package/dist/connectors/codex-materialize.js +3 -3
- package/dist/connectors/index.js +21 -21
- package/dist/consolidation-provenance-check.js +4 -4
- package/dist/consolidation-undo.js +3 -3
- package/dist/contradiction/index.js +7 -7
- package/dist/convergence-refresh.js +22 -22
- package/dist/corpus-watermark.js +22 -22
- package/dist/cue-anchors.js +4 -3
- package/dist/deep-recall-http-glue.d.ts +1 -1
- package/dist/deep-recall-http-glue.js +7 -6
- package/dist/deep-recall-mcp-tools.d.ts +1 -1
- package/dist/entity-retrieval.js +20 -20
- package/dist/eval-trajectory-store.js +4 -3
- package/dist/eval-trajectory.js +4 -3
- package/dist/evals.js +3 -2
- package/dist/explicit-capture.js +8 -8
- package/dist/external-wiki-access.d.ts +1 -1
- package/dist/external-wiki-access.js +54 -54
- package/dist/external-wiki-mcp-tools.d.ts +1 -1
- package/dist/extraction.js +25 -25
- package/dist/{first-start-migration-KHIMCBIC.js → first-start-migration-RC345GPL.js} +6 -5
- package/dist/{first-start-migration-KHIMCBIC.js.map → first-start-migration-RC345GPL.js.map} +1 -1
- package/dist/{graph-edge-decay-CJW4OT2X.js → graph-edge-decay-MKIRZ762.js} +5 -4
- package/dist/graph-jsonl.js +3 -2
- package/dist/graph-snapshot.js +3 -2
- package/dist/graph.js +2 -1
- package/dist/harmonic-construction.js +5 -4
- package/dist/harmonic-retrieval.js +5 -4
- package/dist/index.d.ts +19 -7
- package/dist/index.js +114 -112
- package/dist/json-store.js +2 -1
- package/dist/live-connectors-runner.js +3 -2
- package/dist/location/index.js +23 -23
- package/dist/maintenance/memory-governance.js +20 -20
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +20 -20
- package/dist/maintenance/rebuild-memory-projection.js +21 -21
- package/dist/mcp-memory-inspector-app.d.ts +1 -1
- package/dist/memory-projection-mutations.js +3 -3
- package/dist/memory-subject-cli.d.ts +1 -1
- package/dist/memory-subject.d.ts +1 -1
- package/dist/memory-subject.js +4 -4
- package/dist/namespaces/migrate.js +21 -21
- package/dist/namespaces/search.js +8 -8
- package/dist/namespaces/storage.js +20 -20
- package/dist/objective-state-writers.js +4 -3
- package/dist/objective-state.js +3 -2
- package/dist/offline-sync-file-io.js +4 -3
- package/dist/offline-sync-impression-drain.js +5 -5
- package/dist/offline-sync.js +5 -4
- package/dist/operator-doctor-corpus.js +23 -23
- package/dist/operator-toolkit.js +38 -38
- package/dist/orchestration/maintenance.js +29 -29
- package/dist/orchestrator.js +112 -112
- package/dist/page-versioning.js +3 -3
- package/dist/{public-http-D6d4W8x-.d.ts → public-http-ByX2eTla.d.ts} +1 -1
- package/dist/{purge-OP6BEDFY.js → purge-TZKRE6ZQ.js} +5 -5
- package/dist/purge-TZKRE6ZQ.js.map +1 -0
- package/dist/recall-state.js +3 -3
- package/dist/reconcile/manifest.js +4 -4
- package/dist/{resolution-U5O4QANY.js → resolution-VKATP2HT.js} +8 -8
- package/dist/resume-bundles.js +16 -15
- package/dist/salvage-envelope.js +6 -6
- package/dist/schemas.d.ts +42 -42
- package/dist/search/document-scanner.js +3 -3
- package/dist/search/factory.js +7 -7
- package/dist/search/index.js +7 -7
- package/dist/search/lancedb-backend.js +4 -4
- package/dist/search/meilisearch-backend.js +4 -4
- package/dist/search/orama-backend.js +4 -4
- package/dist/secure-store/index.js +3 -3
- package/dist/semantic-consolidation.js +22 -22
- package/dist/semantic-rule-promotion.js +20 -20
- package/dist/semantic-rule-verifier.js +20 -20
- package/dist/source-agent-qualifier.js +24 -24
- package/dist/standup/build.js +20 -20
- package/dist/storage.js +19 -19
- package/dist/subject-config.js +5 -5
- package/dist/support-passport/index.d.ts +4 -4
- package/dist/support-passport/index.js +56 -56
- package/dist/{tier-stats-2TOW3QNL.js → tier-stats-KA6OZX2C.js} +6 -5
- package/dist/{tier-stats-2TOW3QNL.js.map → tier-stats-KA6OZX2C.js.map} +1 -1
- package/dist/transfer/capsule-import.js +4 -4
- package/dist/transfer/export-okf.js +21 -21
- package/dist/transfer/types.d.ts +12 -12
- package/dist/trust-zones.js +3 -2
- package/dist/utility-learner.js +4 -3
- package/dist/utility-runtime.js +5 -4
- package/dist/utility-telemetry.js +3 -2
- package/dist/verified-recall.js +20 -20
- package/dist/who-knows-cli.d.ts +1 -1
- package/dist/who-knows-cli.js +21 -21
- package/dist/who-knows.d.ts +1 -1
- package/dist/who-knows.js +20 -20
- package/dist/work/board.js +3 -3
- package/dist/work/storage.js +2 -2
- package/dist/work-product-ledger.js +3 -2
- package/dist/write-envelope.js +5 -5
- package/package.json +2 -2
- package/src/abstraction-nodes.ts +1 -4
- package/src/binary-lifecycle/backend.ts +2 -1
- package/src/connectors/live/github.ts +10 -17
- package/src/connectors/live/gmail.ts +8 -19
- package/src/connectors/live/google-drive.ts +6 -13
- package/src/connectors/live/notion.ts +11 -21
- package/src/cue-anchors.ts +1 -6
- package/src/graph.ts +2 -4
- package/src/json-store.ts +17 -20
- package/src/live-connectors-runner.ts +2 -1
- package/src/location/store.ts +1 -4
- package/src/maintenance/purge.ts +2 -5
- package/src/maintenance/rebuild-memory-lifecycle-ledger.ts +3 -6
- package/src/maintenance/rebuild-memory-projection.ts +2 -5
- package/src/namespaces/catalog.ts +1 -9
- package/src/offline-sync-file-io.test.ts +39 -0
- package/src/offline-sync-file-io.ts +3 -7
- package/src/procedural/procedure-miner.ts +1 -9
- package/src/search/document-scanner.ts +3 -6
- package/src/semantic-rule-promotion.ts +1 -4
- package/src/utils/errno.test.ts +31 -0
- package/src/utils/errno.ts +5 -0
- package/src/wearables/index.ts +1 -0
- package/src/wearables/registry.ts +23 -0
- package/dist/chunk-4KNRKJXQ.js.map +0 -1
- package/dist/chunk-5UZXUTVO.js.map +0 -1
- package/dist/chunk-62WZDHTW.js.map +0 -1
- package/dist/chunk-ACPCA4NO.js.map +0 -1
- package/dist/chunk-DDQQY2E3.js.map +0 -1
- package/dist/chunk-DJUKBGAD.js.map +0 -1
- package/dist/chunk-HTIIXNJQ.js.map +0 -1
- package/dist/chunk-I3FDDCY3.js.map +0 -1
- package/dist/chunk-MSOXFXCA.js.map +0 -1
- package/dist/chunk-P77QX3ID.js.map +0 -1
- package/dist/chunk-TXJNRGMI.js.map +0 -1
- package/dist/chunk-UR6PBX2J.js.map +0 -1
- package/dist/chunk-W7IGLX4G.js.map +0 -1
- package/dist/chunk-WW6B7NQJ.js.map +0 -1
- package/dist/chunk-ZBPXG5PJ.js.map +0 -1
- package/dist/purge-OP6BEDFY.js.map +0 -1
- package/dist/{access-service-Cv8Rizo0.d.ts → access-service-GrdVg_-Z.d.ts} +6 -6
- /package/dist/{auto-sync-TTIEWJ5X.js.map → auto-sync-WNGG2GC2.js.map} +0 -0
- /package/dist/{capsule-merge-CU6QJBSV.js.map → capsule-merge-IPG4IOFP.js.map} +0 -0
- /package/dist/{chunk-5RWHODVF.js.map → chunk-27QVNSQ3.js.map} +0 -0
- /package/dist/{chunk-2MX7RU7B.js.map → chunk-2EKJDQZB.js.map} +0 -0
- /package/dist/{chunk-XLRM6PPI.js.map → chunk-2IOHTUP3.js.map} +0 -0
- /package/dist/{chunk-ZGQDTD5T.js.map → chunk-2ITE4C2Z.js.map} +0 -0
- /package/dist/{chunk-O5ZR7SXV.js.map → chunk-2SGLMP2E.js.map} +0 -0
- /package/dist/{chunk-FYWLSFFS.js.map → chunk-2Z4GS5E6.js.map} +0 -0
- /package/dist/{chunk-WELP4CG6.js.map → chunk-37KUQPX4.js.map} +0 -0
- /package/dist/{chunk-MRSLR6TB.js.map → chunk-3QQTXYZ6.js.map} +0 -0
- /package/dist/{chunk-CI6C33EO.js.map → chunk-46ZPIGWI.js.map} +0 -0
- /package/dist/{chunk-MCA2X4WH.js.map → chunk-4IHBN6WU.js.map} +0 -0
- /package/dist/{chunk-TOZCM7WN.js.map → chunk-4TKJGOCJ.js.map} +0 -0
- /package/dist/{chunk-3ADRFFRO.js.map → chunk-54WHLA65.js.map} +0 -0
- /package/dist/{chunk-Z2N2AHEM.js.map → chunk-56Y6EKZN.js.map} +0 -0
- /package/dist/{chunk-2H2N5UQW.js.map → chunk-5ATKSPEQ.js.map} +0 -0
- /package/dist/{chunk-ZVZHG7AI.js.map → chunk-5UBH37SL.js.map} +0 -0
- /package/dist/{chunk-YZYZ2BEU.js.map → chunk-66OJSCI6.js.map} +0 -0
- /package/dist/{chunk-HNPE66LB.js.map → chunk-6CVNSDCZ.js.map} +0 -0
- /package/dist/{chunk-ERVJFFTR.js.map → chunk-6NXSYYGP.js.map} +0 -0
- /package/dist/{chunk-2HIJHXB3.js.map → chunk-6WHJ2EAB.js.map} +0 -0
- /package/dist/{chunk-34VTBPNE.js.map → chunk-6XL73HQ4.js.map} +0 -0
- /package/dist/{chunk-YK3UIF7X.js.map → chunk-AQ7SYDVO.js.map} +0 -0
- /package/dist/{chunk-DSCCM66R.js.map → chunk-B3O3IRZN.js.map} +0 -0
- /package/dist/{chunk-N37X5RU7.js.map → chunk-BD7JTBYP.js.map} +0 -0
- /package/dist/{chunk-VO43BJ2F.js.map → chunk-BLJWYCNO.js.map} +0 -0
- /package/dist/{chunk-HSKSVY3Q.js.map → chunk-C553ZTLF.js.map} +0 -0
- /package/dist/{chunk-GCASGYIO.js.map → chunk-C7HJ3NEI.js.map} +0 -0
- /package/dist/{chunk-WVGXCBOC.js.map → chunk-D5F7TKMH.js.map} +0 -0
- /package/dist/{chunk-UFT2XNBW.js.map → chunk-DGS34QSY.js.map} +0 -0
- /package/dist/{chunk-VAOL3SOT.js.map → chunk-DZD3WGCD.js.map} +0 -0
- /package/dist/{chunk-KHMS2FQS.js.map → chunk-E2P7TZTF.js.map} +0 -0
- /package/dist/{chunk-6FC3IZ26.js.map → chunk-EBA5DA77.js.map} +0 -0
- /package/dist/{chunk-E6EANYLD.js.map → chunk-EOQ6FSQP.js.map} +0 -0
- /package/dist/{chunk-7RPPCA26.js.map → chunk-FVOP3NT7.js.map} +0 -0
- /package/dist/{chunk-NRLELHAY.js.map → chunk-G7NYVKD6.js.map} +0 -0
- /package/dist/{chunk-QY34X2QJ.js.map → chunk-GHTSNGBZ.js.map} +0 -0
- /package/dist/{chunk-SLIOMMPF.js.map → chunk-H272ZPQ3.js.map} +0 -0
- /package/dist/{chunk-ZZBQNQS6.js.map → chunk-H3TKENU4.js.map} +0 -0
- /package/dist/{chunk-5OPNUUBX.js.map → chunk-H4SEGIZY.js.map} +0 -0
- /package/dist/{chunk-F2HMDGLC.js.map → chunk-H54VWRPS.js.map} +0 -0
- /package/dist/{chunk-HTP6XRUI.js.map → chunk-HM7RHKS4.js.map} +0 -0
- /package/dist/{chunk-O7H3P2SJ.js.map → chunk-HWLIMQE2.js.map} +0 -0
- /package/dist/{chunk-ET2CNMLD.js.map → chunk-JN72EPOE.js.map} +0 -0
- /package/dist/{chunk-E7UQOS4C.js.map → chunk-JPKK466T.js.map} +0 -0
- /package/dist/{chunk-JCCWJHOP.js.map → chunk-JYZSRNR7.js.map} +0 -0
- /package/dist/{chunk-7IUESBLV.js.map → chunk-K7724CH2.js.map} +0 -0
- /package/dist/{chunk-UK7HXNNJ.js.map → chunk-KAXCYM66.js.map} +0 -0
- /package/dist/{chunk-7XVP4P4O.js.map → chunk-KB2G2I6Q.js.map} +0 -0
- /package/dist/{chunk-K7LTRJZU.js.map → chunk-KEF46KL2.js.map} +0 -0
- /package/dist/{chunk-JYYTWCPU.js.map → chunk-KTWG7CNY.js.map} +0 -0
- /package/dist/{chunk-XTYDEO7M.js.map → chunk-L7Z57SID.js.map} +0 -0
- /package/dist/{chunk-EYMPUXAN.js.map → chunk-LO4UKPKX.js.map} +0 -0
- /package/dist/{chunk-LDWIPYJ6.js.map → chunk-LS2FHUML.js.map} +0 -0
- /package/dist/{chunk-GDB4J2H3.js.map → chunk-MPC7TYTZ.js.map} +0 -0
- /package/dist/{chunk-2GF27PGH.js.map → chunk-MRPOZBJC.js.map} +0 -0
- /package/dist/{chunk-7OLKAQMG.js.map → chunk-MWN6QEI2.js.map} +0 -0
- /package/dist/{chunk-J62HG52Z.js.map → chunk-MY5EDR46.js.map} +0 -0
- /package/dist/{chunk-IZRMWPGS.js.map → chunk-N3ZOP7KC.js.map} +0 -0
- /package/dist/{chunk-N6A2RP5S.js.map → chunk-NB3LRY4T.js.map} +0 -0
- /package/dist/{chunk-4N5BIR2U.js.map → chunk-ND6IQGSZ.js.map} +0 -0
- /package/dist/{chunk-NOB2T2FC.js.map → chunk-NHLLKEKK.js.map} +0 -0
- /package/dist/{chunk-M5CQNOQN.js.map → chunk-O6ZNNVSP.js.map} +0 -0
- /package/dist/{chunk-NNBZS3DY.js.map → chunk-OB3XMWX5.js.map} +0 -0
- /package/dist/{chunk-SIBVIP2Y.js.map → chunk-PAZY2ZKP.js.map} +0 -0
- /package/dist/{chunk-LXESHEBP.js.map → chunk-PX4UMA5Z.js.map} +0 -0
- /package/dist/{chunk-NNZFPYYX.js.map → chunk-R7QY5ZVB.js.map} +0 -0
- /package/dist/{chunk-WTRTFIIN.js.map → chunk-R7RTXEYG.js.map} +0 -0
- /package/dist/{chunk-XRBJ5R3P.js.map → chunk-RBCQVOVJ.js.map} +0 -0
- /package/dist/{chunk-WFZNT4KB.js.map → chunk-RC5DXXWC.js.map} +0 -0
- /package/dist/{chunk-5QZR2RA3.js.map → chunk-ROBHL3GL.js.map} +0 -0
- /package/dist/{chunk-6PST2SFW.js.map → chunk-SCXURCVT.js.map} +0 -0
- /package/dist/{chunk-AYG7ML7O.js.map → chunk-SJDQ5RSN.js.map} +0 -0
- /package/dist/{chunk-IQXDSKTL.js.map → chunk-SVXJLDDC.js.map} +0 -0
- /package/dist/{chunk-SEF4IOFE.js.map → chunk-SWIKABKI.js.map} +0 -0
- /package/dist/{chunk-ZJABRLCZ.js.map → chunk-TBXAY2SS.js.map} +0 -0
- /package/dist/{chunk-GIC6BASP.js.map → chunk-TNSCIPBQ.js.map} +0 -0
- /package/dist/{chunk-ZMDMHSV2.js.map → chunk-TVEONGBU.js.map} +0 -0
- /package/dist/{chunk-4FSEZRGK.js.map → chunk-TWF35IC6.js.map} +0 -0
- /package/dist/{chunk-LS2SGMQE.js.map → chunk-U6N5IBVY.js.map} +0 -0
- /package/dist/{chunk-62YW6OYI.js.map → chunk-UCKYTA2T.js.map} +0 -0
- /package/dist/{chunk-YFCHNOGJ.js.map → chunk-UNNPNBR2.js.map} +0 -0
- /package/dist/{chunk-Z2M7F4QM.js.map → chunk-VVX5PZFS.js.map} +0 -0
- /package/dist/{chunk-NTYLZXDX.js.map → chunk-VYCOJKSX.js.map} +0 -0
- /package/dist/{chunk-UICSQESY.js.map → chunk-W24T5YMW.js.map} +0 -0
- /package/dist/{chunk-HDQUQBPW.js.map → chunk-W3K3HITK.js.map} +0 -0
- /package/dist/{chunk-GDASG7NC.js.map → chunk-W4F3C7N7.js.map} +0 -0
- /package/dist/{chunk-YBLZFNIQ.js.map → chunk-WJHGDE7X.js.map} +0 -0
- /package/dist/{chunk-4F24PHNX.js.map → chunk-WQZZDN5M.js.map} +0 -0
- /package/dist/{chunk-CDZEUCV7.js.map → chunk-X5K5TAQZ.js.map} +0 -0
- /package/dist/{chunk-5AUODSOQ.js.map → chunk-XM24CDZX.js.map} +0 -0
- /package/dist/{chunk-6VML2LII.js.map → chunk-XOVKXJEP.js.map} +0 -0
- /package/dist/{chunk-OU5TIWDQ.js.map → chunk-XSGUMQQQ.js.map} +0 -0
- /package/dist/{chunk-7CFVBWDC.js.map → chunk-XUE46UYW.js.map} +0 -0
- /package/dist/{chunk-DJORULH3.js.map → chunk-YRLHEEQT.js.map} +0 -0
- /package/dist/{chunk-YRWDPE32.js.map → chunk-Z3O53WZR.js.map} +0 -0
- /package/dist/{chunk-CSY5DA7O.js.map → chunk-Z6COGHHN.js.map} +0 -0
- /package/dist/{chunk-OYR3IPHD.js.map → chunk-ZIW5JVRM.js.map} +0 -0
- /package/dist/{graph-edge-decay-CJW4OT2X.js.map → graph-edge-decay-MKIRZ762.js.map} +0 -0
- /package/dist/{resolution-U5O4QANY.js.map → resolution-VKATP2HT.js.map} +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
OKF_RESERVED_BASENAMES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XSGUMQQQ.js";
|
|
4
4
|
import {
|
|
5
5
|
MAGIC_BYTES
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JN72EPOE.js";
|
|
7
7
|
|
|
8
8
|
// src/okf/lint.ts
|
|
9
9
|
import fs from "fs";
|
|
@@ -202,4 +202,4 @@ export {
|
|
|
202
202
|
publishBundle,
|
|
203
203
|
rejectSymlinkPath
|
|
204
204
|
};
|
|
205
|
-
//# sourceMappingURL=chunk-
|
|
205
|
+
//# sourceMappingURL=chunk-46ZPIGWI.js.map
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
validateGmailConfig,
|
|
16
16
|
validateGoogleDriveConfig,
|
|
17
17
|
validateNotionConfig
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-3K7V3HE6.js";
|
|
19
19
|
import {
|
|
20
20
|
ConnectorStateLockLostError,
|
|
21
21
|
readConnectorState,
|
|
@@ -25,6 +25,9 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
runConnectorPollOnce
|
|
27
27
|
} from "./chunk-OKTXM5H4.js";
|
|
28
|
+
import {
|
|
29
|
+
abortError
|
|
30
|
+
} from "./chunk-BTTPKDIL.js";
|
|
28
31
|
|
|
29
32
|
// src/live-connectors-runner.ts
|
|
30
33
|
function builtInLiveConnectorDefinitions(config) {
|
|
@@ -311,7 +314,7 @@ function throwIfAborted(signal) {
|
|
|
311
314
|
if (reason instanceof Error) {
|
|
312
315
|
throw reason;
|
|
313
316
|
}
|
|
314
|
-
throw
|
|
317
|
+
throw abortError(reason === void 0 ? "operation aborted" : String(reason));
|
|
315
318
|
}
|
|
316
319
|
async function writeConnectorErrorState(options) {
|
|
317
320
|
return writeConnectorState(options.memoryDir, options.connectorId, {
|
|
@@ -329,4 +332,4 @@ export {
|
|
|
329
332
|
hasEnabledLiveConnector,
|
|
330
333
|
runLiveConnectorsOnce
|
|
331
334
|
};
|
|
332
|
-
//# sourceMappingURL=chunk-
|
|
335
|
+
//# sourceMappingURL=chunk-4FIH6MPS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/live-connectors-runner.ts"],"sourcesContent":["import {\n runConnectorPollOnce,\n type ConnectorRunResult,\n} from \"./connectors-cli.js\";\nimport {\n createGitHubConnector,\n createGmailConnector,\n createGoogleDriveConnector,\n createNotionConnector,\n GITHUB_CONNECTOR_ID,\n GITHUB_DEFAULT_POLL_INTERVAL_MS,\n GMAIL_CONNECTOR_ID,\n GMAIL_DEFAULT_POLL_INTERVAL_MS,\n GOOGLE_DRIVE_CONNECTOR_ID,\n GOOGLE_DRIVE_DEFAULT_POLL_INTERVAL_MS,\n NOTION_CONNECTOR_ID,\n NOTION_DEFAULT_POLL_INTERVAL_MS,\n ConnectorStateLockLostError,\n readConnectorState,\n withConnectorStateLock,\n writeConnectorState,\n validateGitHubConfig,\n validateGmailConfig,\n validateGoogleDriveConfig,\n validateNotionConfig,\n type ConnectorConfig,\n type ConnectorCursor,\n type ConnectorDocument,\n type ConnectorState,\n type LiveConnector,\n} from \"./connectors/live/index.js\";\nimport { abortError } from \"./abort-error.js\";\nimport type { LiveConnectorsConfig } from \"./types.js\";\n\nexport type LiveConnectorSkipReason =\n | \"disabled\"\n | \"not_due\"\n | \"invalid_config\"\n | \"state_read_error\"\n | \"connector_error\";\n\nexport interface LiveConnectorRunItem {\n id: string;\n displayName: string;\n enabled: boolean;\n ran: boolean;\n skippedReason?: LiveConnectorSkipReason;\n docsImported: number;\n error?: string;\n stateWriteError?: string;\n lastSyncAt: string | null;\n nextDueAt: string | null;\n}\n\nexport interface LiveConnectorsRunSummary {\n ranAt: string;\n force: boolean;\n totalDocsImported: number;\n ranCount: number;\n skippedCount: number;\n errorCount: number;\n results: LiveConnectorRunItem[];\n}\n\nexport interface LiveConnectorDefinition {\n id: string;\n displayName: string;\n enabled: boolean;\n pollIntervalMs: number;\n rawConfig: unknown;\n createConnector: () => LiveConnector;\n validateConfig: (raw: unknown) => ConnectorConfig;\n}\n\ntype LiveConnectorsNow = Date | (() => Date);\n\nexport function builtInLiveConnectorDefinitions(\n config: LiveConnectorsConfig,\n): LiveConnectorDefinition[] {\n return [\n {\n id: GOOGLE_DRIVE_CONNECTOR_ID,\n displayName: \"Google Drive\",\n enabled: config.googleDrive.enabled,\n pollIntervalMs:\n config.googleDrive.pollIntervalMs ?? GOOGLE_DRIVE_DEFAULT_POLL_INTERVAL_MS,\n rawConfig: config.googleDrive,\n createConnector: createGoogleDriveConnector,\n validateConfig: (raw) =>\n validateGoogleDriveConfig(raw) as unknown as ConnectorConfig,\n },\n {\n id: NOTION_CONNECTOR_ID,\n displayName: \"Notion\",\n enabled: config.notion.enabled,\n pollIntervalMs: config.notion.pollIntervalMs ?? NOTION_DEFAULT_POLL_INTERVAL_MS,\n rawConfig: config.notion,\n createConnector: createNotionConnector,\n validateConfig: (raw) =>\n validateNotionConfig(raw) as unknown as ConnectorConfig,\n },\n {\n id: GMAIL_CONNECTOR_ID,\n displayName: \"Gmail\",\n enabled: config.gmail.enabled,\n pollIntervalMs: config.gmail.pollIntervalMs ?? GMAIL_DEFAULT_POLL_INTERVAL_MS,\n rawConfig: config.gmail,\n createConnector: createGmailConnector,\n validateConfig: (raw) => validateGmailConfig(raw) as unknown as ConnectorConfig,\n },\n {\n id: GITHUB_CONNECTOR_ID,\n displayName: \"GitHub\",\n enabled: config.github.enabled,\n pollIntervalMs:\n config.github.pollIntervalMs ?? GITHUB_DEFAULT_POLL_INTERVAL_MS,\n rawConfig: config.github,\n createConnector: createGitHubConnector,\n validateConfig: (raw) => validateGitHubConfig(raw) as unknown as ConnectorConfig,\n },\n ];\n}\n\nexport function hasEnabledLiveConnector(config: LiveConnectorsConfig): boolean {\n return (\n config.googleDrive.enabled ||\n config.notion.enabled ||\n config.gmail.enabled ||\n config.github.enabled\n );\n}\n\nexport async function runLiveConnectorsOnce(options: {\n memoryDir: string;\n connectors: LiveConnectorsConfig;\n ingestDocuments: (docs: ConnectorDocument[]) => Promise<void>;\n force?: boolean;\n now?: LiveConnectorsNow;\n abortSignal?: AbortSignal;\n definitions?: LiveConnectorDefinition[];\n}): Promise<LiveConnectorsRunSummary> {\n const ranAt = resolveNow(options.now);\n const force = options.force === true;\n const definitions =\n options.definitions ?? builtInLiveConnectorDefinitions(options.connectors);\n const results: LiveConnectorRunItem[] = [];\n\n for (const definition of definitions) {\n const checkAt = resolveNow(options.now);\n if (!definition.enabled) {\n results.push(skipResult(definition, null, \"disabled\"));\n continue;\n }\n let state: ConnectorState | null;\n try {\n state = await readConnectorState(options.memoryDir, definition.id);\n } catch (err) {\n results.push({\n id: definition.id,\n displayName: definition.displayName,\n enabled: true,\n ran: false,\n skippedReason: \"state_read_error\",\n docsImported: 0,\n error: err instanceof Error ? err.message : String(err),\n lastSyncAt: null,\n nextDueAt: null,\n });\n continue;\n }\n if (!force && !isConnectorDue(state, definition.pollIntervalMs, checkAt)) {\n results.push(skipResult(definition, state, \"not_due\"));\n continue;\n }\n\n let validatedConfig: ConnectorConfig;\n try {\n validatedConfig = definition.validateConfig(definition.rawConfig);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n let stateWriteError: string | undefined;\n let writtenErrorState: ConnectorState | undefined;\n const errorAt = resolveNow(options.now);\n try {\n writtenErrorState = await writeConnectorErrorState({\n memoryDir: options.memoryDir,\n connectorId: definition.id,\n state,\n error: message,\n now: errorAt,\n });\n } catch (writeErr) {\n stateWriteError =\n writeErr instanceof Error ? writeErr.message : String(writeErr);\n }\n const reportedState = writtenErrorState ?? state;\n results.push({\n id: definition.id,\n displayName: definition.displayName,\n enabled: true,\n ran: false,\n skippedReason: \"invalid_config\",\n docsImported: 0,\n error: message,\n ...(stateWriteError !== undefined ? { stateWriteError } : {}),\n lastSyncAt: reportedState?.lastSyncAt ?? null,\n nextDueAt: nextDueAt(reportedState, definition.pollIntervalMs),\n });\n continue;\n }\n\n let runResult: ConnectorRunResult;\n let lastStateWrittenAt: Date | undefined;\n try {\n const connector = definition.createConnector();\n runResult = await withConnectorStateLock(options.memoryDir, definition.id, async (lockSignal) => {\n const pollAbortSignal = combineAbortSignals(options.abortSignal, lockSignal);\n const lockedState = await readConnectorState(options.memoryDir, definition.id);\n if (!force && !isConnectorDue(lockedState, definition.pollIntervalMs, checkAt)) {\n return { docsImported: 0 };\n }\n state = lockedState;\n return runConnectorPollOnce({\n connectorId: definition.id,\n priorState: lockedState,\n syncFn: (cursor: ConnectorCursor | null) =>\n connector.syncIncremental({\n cursor,\n config: validatedConfig,\n abortSignal: pollAbortSignal,\n }),\n ingestFn: async (docs) => {\n throwIfAborted(pollAbortSignal);\n await options.ingestDocuments(docs);\n throwIfAborted(pollAbortSignal);\n },\n writeCursorFn: (writeState) => {\n throwIfAborted(pollAbortSignal);\n const writeAt = resolveNow(options.now);\n return writeConnectorState(options.memoryDir, definition.id, {\n id: definition.id,\n cursor: writeState.cursor,\n lastSyncAt: writeAt.toISOString(),\n lastSyncStatus: writeState.lastSyncStatus,\n ...(writeState.lastSyncError !== undefined\n ? { lastSyncError: writeState.lastSyncError }\n : {}),\n totalDocsImported: writeState.totalDocsImported,\n }).then(() => {\n lastStateWrittenAt = writeAt;\n });\n },\n });\n });\n if (\n runResult.docsImported === 0 &&\n runResult.error === undefined &&\n runResult.stateWriteError === undefined &&\n lastStateWrittenAt === undefined\n ) {\n const lockedState = await readConnectorState(options.memoryDir, definition.id);\n if (!force && !isConnectorDue(lockedState, definition.pollIntervalMs, checkAt)) {\n results.push(skipResult(definition, lockedState, \"not_due\"));\n continue;\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n let stateWriteError: string | undefined;\n let writtenErrorState: ConnectorState | undefined;\n const errorAt = resolveNow(options.now);\n if (!(err instanceof ConnectorStateLockLostError)) {\n try {\n writtenErrorState = await writeConnectorErrorState({\n memoryDir: options.memoryDir,\n connectorId: definition.id,\n state,\n error: message,\n now: errorAt,\n });\n } catch (writeErr) {\n stateWriteError =\n writeErr instanceof Error ? writeErr.message : String(writeErr);\n }\n }\n const reportedState = writtenErrorState ?? state;\n results.push({\n id: definition.id,\n displayName: definition.displayName,\n enabled: true,\n ran: false,\n skippedReason: \"connector_error\",\n docsImported: 0,\n error: message,\n ...(stateWriteError !== undefined ? { stateWriteError } : {}),\n lastSyncAt: reportedState?.lastSyncAt ?? null,\n nextDueAt: nextDueAt(reportedState, definition.pollIntervalMs),\n });\n continue;\n }\n results.push(\n runItemFromResult(\n definition,\n runResult,\n state,\n lastStateWrittenAt ?? resolveNow(options.now),\n ),\n );\n }\n\n return {\n ranAt: ranAt.toISOString(),\n force,\n totalDocsImported: results.reduce((sum, item) => sum + item.docsImported, 0),\n ranCount: results.filter((item) => item.ran).length,\n skippedCount: results.filter((item) => !item.ran).length,\n errorCount: results.filter(\n (item) => item.error !== undefined || item.stateWriteError !== undefined,\n ).length,\n results,\n };\n}\n\nfunction resolveNow(now: LiveConnectorsNow | undefined): Date {\n return typeof now === \"function\" ? now() : now ?? new Date();\n}\n\nfunction isConnectorDue(\n state: ConnectorState | null,\n pollIntervalMs: number,\n now: Date,\n): boolean {\n if (state?.lastSyncAt === null || state?.lastSyncAt === undefined) return true;\n const lastMs = Date.parse(state.lastSyncAt);\n if (!Number.isFinite(lastMs)) return true;\n return now.getTime() - lastMs >= Math.max(1, Math.floor(pollIntervalMs));\n}\n\nfunction nextDueAt(\n state: ConnectorState | null,\n pollIntervalMs: number,\n): string | null {\n if (state?.lastSyncAt === null || state?.lastSyncAt === undefined) return null;\n const lastMs = Date.parse(state.lastSyncAt);\n if (!Number.isFinite(lastMs)) return null;\n return new Date(lastMs + Math.max(1, Math.floor(pollIntervalMs))).toISOString();\n}\n\nfunction skipResult(\n definition: LiveConnectorDefinition,\n state: ConnectorState | null,\n skippedReason: LiveConnectorSkipReason,\n): LiveConnectorRunItem {\n return {\n id: definition.id,\n displayName: definition.displayName,\n enabled: definition.enabled,\n ran: false,\n skippedReason,\n docsImported: 0,\n lastSyncAt: state?.lastSyncAt ?? null,\n nextDueAt:\n skippedReason === \"not_due\"\n ? nextDueAt(state, definition.pollIntervalMs)\n : null,\n };\n}\n\nfunction runItemFromResult(\n definition: LiveConnectorDefinition,\n result: ConnectorRunResult,\n priorState: ConnectorState | null,\n now: Date,\n): LiveConnectorRunItem {\n const stateWriteFailed = result.stateWriteError !== undefined;\n const reportedLastSyncAt = stateWriteFailed\n ? priorState?.lastSyncAt ?? null\n : now.toISOString();\n const reportedNextDueAt = stateWriteFailed\n ? nextDueAt(priorState, definition.pollIntervalMs)\n : new Date(\n now.getTime() + Math.max(1, Math.floor(definition.pollIntervalMs)),\n ).toISOString();\n\n return {\n id: definition.id,\n displayName: definition.displayName,\n enabled: definition.enabled,\n ran: true,\n docsImported: result.docsImported,\n ...(result.error !== undefined ? { error: result.error } : {}),\n ...(result.stateWriteError !== undefined\n ? { stateWriteError: result.stateWriteError }\n : {}),\n lastSyncAt: reportedLastSyncAt,\n nextDueAt: reportedNextDueAt,\n };\n}\n\nfunction combineAbortSignals(...signals: Array<AbortSignal | undefined>): AbortSignal | undefined {\n const activeSignals = signals.filter((signal): signal is AbortSignal => signal !== undefined);\n if (activeSignals.length === 0) return undefined;\n if (activeSignals.length === 1) return activeSignals[0];\n const abortSignalAny = (AbortSignal as typeof AbortSignal & {\n any?: (signals: AbortSignal[]) => AbortSignal;\n }).any;\n if (abortSignalAny !== undefined) {\n return abortSignalAny(activeSignals);\n }\n const controller = new AbortController();\n const abort = (signal: AbortSignal): void => {\n if (!controller.signal.aborted) {\n controller.abort(signal.reason);\n }\n };\n for (const signal of activeSignals) {\n if (signal.aborted) {\n abort(signal);\n break;\n }\n signal.addEventListener(\"abort\", () => abort(signal), { once: true });\n }\n return controller.signal;\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted !== true) return;\n const reason = signal.reason;\n if (reason instanceof Error) {\n throw reason;\n }\n throw abortError(reason === undefined ? \"operation aborted\" : String(reason));\n}\n\nasync function writeConnectorErrorState(options: {\n memoryDir: string;\n connectorId: string;\n state: ConnectorState | null;\n error: string;\n now: Date;\n}): Promise<ConnectorState> {\n return writeConnectorState(options.memoryDir, options.connectorId, {\n id: options.connectorId,\n cursor: options.state?.cursor ?? null,\n lastSyncAt: options.now.toISOString(),\n lastSyncStatus: \"error\",\n lastSyncError: options.error,\n totalDocsImported: options.state?.totalDocsImported ?? 0,\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
listJsonFiles,
|
|
3
3
|
listNamedFiles,
|
|
4
4
|
readJsonFile
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-B6O2YLUR.js";
|
|
6
6
|
|
|
7
7
|
// src/evals.ts
|
|
8
8
|
import path from "path";
|
|
@@ -897,4 +897,4 @@ export {
|
|
|
897
897
|
runEvalStoredBaselineCiGate,
|
|
898
898
|
runEvalBenchmarkCiGate
|
|
899
899
|
};
|
|
900
|
-
//# sourceMappingURL=chunk-
|
|
900
|
+
//# sourceMappingURL=chunk-4IHBN6WU.js.map
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertPathInsideRoot
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-C7HJ3NEI.js";
|
|
4
4
|
import {
|
|
5
5
|
RECALL_FALLBACK_DIRS
|
|
6
6
|
} from "./chunk-VS2IYZRU.js";
|
|
7
|
+
import {
|
|
8
|
+
isErrnoCode
|
|
9
|
+
} from "./chunk-KNA3BXXL.js";
|
|
7
10
|
|
|
8
11
|
// src/search/document-scanner.ts
|
|
9
12
|
import path from "path";
|
|
@@ -63,22 +66,19 @@ async function scanDir(dir, memoryRootReal) {
|
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
68
|
} catch (err) {
|
|
66
|
-
if (
|
|
69
|
+
if (isErrnoCode(err, "ENOENT")) {
|
|
67
70
|
return docs;
|
|
68
71
|
}
|
|
69
72
|
throw err;
|
|
70
73
|
}
|
|
71
74
|
return docs;
|
|
72
75
|
}
|
|
73
|
-
function isNodeError(err) {
|
|
74
|
-
return typeof err === "object" && err !== null && "code" in err;
|
|
75
|
-
}
|
|
76
76
|
async function scanMemoryDir(memoryDir) {
|
|
77
77
|
let memoryRootReal;
|
|
78
78
|
try {
|
|
79
79
|
memoryRootReal = await realpath(memoryDir);
|
|
80
80
|
} catch (err) {
|
|
81
|
-
if (
|
|
81
|
+
if (isErrnoCode(err, "ENOENT")) {
|
|
82
82
|
return [];
|
|
83
83
|
}
|
|
84
84
|
throw err;
|
|
@@ -92,4 +92,4 @@ async function scanMemoryDir(memoryDir) {
|
|
|
92
92
|
export {
|
|
93
93
|
scanMemoryDir
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-4O6WRBGE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/search/document-scanner.ts"],"sourcesContent":["import path from \"node:path\";\nimport { lstat, readdir, readFile, realpath } from \"node:fs/promises\";\nimport { RECALL_FALLBACK_DIRS } from \"../utils/category-dir.js\";\nimport { assertPathInsideRoot } from \"../utils/path-containment.js\";\nimport { isErrnoCode } from \"../utils/errno.js\";\n\nexport interface IndexableDocument {\n /** Memory ID from frontmatter or filename stem */\n docid: string;\n /** Absolute file path */\n path: string;\n /** Markdown body (no YAML frontmatter) */\n content: string;\n /** First ~200 chars for display */\n snippet: string;\n}\n\n/**\n * Parse YAML frontmatter from a markdown string.\n * Returns the frontmatter key-value pairs and body, or null if no frontmatter block.\n */\nfunction parseFrontmatter(raw: string): { data: Record<string, string>; body: string } | null {\n // Support both LF and CRLF line endings\n const normalized = raw.replace(/\\r\\n/g, \"\\n\");\n const match = normalized.match(/^---\\n([\\s\\S]*?)\\n---\\n?([\\s\\S]*)$/);\n if (!match) return null;\n\n const fmBlock = match[1];\n const body = (match[2] ?? \"\").trim();\n const data: Record<string, string> = {};\n\n for (const line of fmBlock.split(\"\\n\")) {\n const colonIdx = line.indexOf(\":\");\n if (colonIdx === -1) continue;\n const key = line.slice(0, colonIdx).trim();\n const value = line.slice(colonIdx + 1).trim();\n data[key] = value;\n }\n\n return { data, body };\n}\n\n/**\n * Recursively scan a directory for `.md` files and return IndexableDocuments.\n */\nasync function scanDir(dir: string, memoryRootReal: string): Promise<IndexableDocument[]> {\n const docs: IndexableDocument[] = [];\n try {\n const dirStat = await lstat(dir);\n if (dirStat.isSymbolicLink()) {\n throw new Error(`Refusing to scan symlinked memory category directory: ${dir}`);\n }\n if (!dirStat.isDirectory()) {\n const error = new Error(`Memory category path is not a directory: ${dir}`) as NodeJS.ErrnoException;\n error.code = \"ENOTDIR\";\n throw error;\n }\n assertPathInsideRoot(memoryRootReal, await realpath(dir), dir);\n\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (entry.isSymbolicLink()) continue;\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n assertPathInsideRoot(memoryRootReal, await realpath(fullPath), fullPath);\n const sub = await scanDir(fullPath, memoryRootReal);\n docs.push(...sub);\n } else if (entry.name.endsWith(\".md\")) {\n try {\n assertPathInsideRoot(memoryRootReal, await realpath(fullPath), fullPath);\n const raw = await readFile(fullPath, \"utf-8\");\n const parsed = parseFrontmatter(raw);\n const body = parsed ? parsed.body : raw.trim();\n const docid = parsed?.data.id || path.basename(entry.name, \".md\");\n docs.push({\n docid,\n path: fullPath,\n content: body,\n snippet: body.slice(0, 200),\n });\n } catch {\n // Skip unreadable files\n }\n }\n }\n } catch (err) {\n if (isErrnoCode(err, \"ENOENT\")) {\n // Optional category directories may not exist yet.\n return docs;\n }\n throw err;\n }\n return docs;\n}\n\n/**\n * Scan every recall category subdir of memoryDir for indexable markdown\n * documents. The directory set is derived from `RECALL_FALLBACK_DIRS`\n * (utils/category-dir.ts → ALL_CATEGORY_DIRS minus non-recall queue dirs) —\n * the single source of truth — so adding a new category never requires\n * touching this scanner. Non-QMD backends (Orama / Meilisearch / LanceDB)\n * build their index through this helper; deriving from RECALL_FALLBACK_DIRS\n * keeps them in parity with writeMemory's category-dir routing (issue #1546)\n * and the QMD filesystem-fallback corpus. reasoning-traces/ and the other\n * category dirs are covered automatically (issue #564 PR 3 no longer needs a\n * hand-maintained list). scanDir tolerates missing dirs (ENOENT), so category\n * dirs that do not exist yet are skipped.\n */\nexport async function scanMemoryDir(memoryDir: string): Promise<IndexableDocument[]> {\n let memoryRootReal: string;\n try {\n memoryRootReal = await realpath(memoryDir);\n } catch (err) {\n if (isErrnoCode(err, \"ENOENT\")) {\n return [];\n }\n throw err;\n }\n const perDir = await Promise.all(\n RECALL_FALLBACK_DIRS.map((dir) => scanDir(path.join(memoryDir, dir), memoryRootReal)),\n );\n return perDir.flat();\n}\n"],"mappings":";;;;;;;;;;;AAAA,OAAO,UAAU;AACjB,SAAS,OAAO,SAAS,UAAU,gBAAgB;AAoBnD,SAAS,iBAAiB,KAAoE;AAE5F,QAAM,aAAa,IAAI,QAAQ,SAAS,IAAI;AAC5C,QAAM,QAAQ,WAAW,MAAM,oCAAoC;AACnE,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,UAAU,MAAM,CAAC;AACvB,QAAM,QAAQ,MAAM,CAAC,KAAK,IAAI,KAAK;AACnC,QAAM,OAA+B,CAAC;AAEtC,aAAW,QAAQ,QAAQ,MAAM,IAAI,GAAG;AACtC,UAAM,WAAW,KAAK,QAAQ,GAAG;AACjC,QAAI,aAAa,GAAI;AACrB,UAAM,MAAM,KAAK,MAAM,GAAG,QAAQ,EAAE,KAAK;AACzC,UAAM,QAAQ,KAAK,MAAM,WAAW,CAAC,EAAE,KAAK;AAC5C,SAAK,GAAG,IAAI;AAAA,EACd;AAEA,SAAO,EAAE,MAAM,KAAK;AACtB;AAKA,eAAe,QAAQ,KAAa,gBAAsD;AACxF,QAAM,OAA4B,CAAC;AACnC,MAAI;AACF,UAAM,UAAU,MAAM,MAAM,GAAG;AAC/B,QAAI,QAAQ,eAAe,GAAG;AAC5B,YAAM,IAAI,MAAM,yDAAyD,GAAG,EAAE;AAAA,IAChF;AACA,QAAI,CAAC,QAAQ,YAAY,GAAG;AAC1B,YAAM,QAAQ,IAAI,MAAM,4CAA4C,GAAG,EAAE;AACzE,YAAM,OAAO;AACb,YAAM;AAAA,IACR;AACA,yBAAqB,gBAAgB,MAAM,SAAS,GAAG,GAAG,GAAG;AAE7D,UAAM,UAAU,MAAM,QAAQ,KAAK,EAAE,eAAe,KAAK,CAAC;AAC1D,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,eAAe,EAAG;AAC5B,YAAM,WAAW,KAAK,KAAK,KAAK,MAAM,IAAI;AAC1C,UAAI,MAAM,YAAY,GAAG;AACvB,6BAAqB,gBAAgB,MAAM,SAAS,QAAQ,GAAG,QAAQ;AACvE,cAAM,MAAM,MAAM,QAAQ,UAAU,cAAc;AAClD,aAAK,KAAK,GAAG,GAAG;AAAA,MAClB,WAAW,MAAM,KAAK,SAAS,KAAK,GAAG;AACrC,YAAI;AACF,+BAAqB,gBAAgB,MAAM,SAAS,QAAQ,GAAG,QAAQ;AACvE,gBAAM,MAAM,MAAM,SAAS,UAAU,OAAO;AAC5C,gBAAM,SAAS,iBAAiB,GAAG;AACnC,gBAAM,OAAO,SAAS,OAAO,OAAO,IAAI,KAAK;AAC7C,gBAAM,QAAQ,QAAQ,KAAK,MAAM,KAAK,SAAS,MAAM,MAAM,KAAK;AAChE,eAAK,KAAK;AAAA,YACR;AAAA,YACA,MAAM;AAAA,YACN,SAAS;AAAA,YACT,SAAS,KAAK,MAAM,GAAG,GAAG;AAAA,UAC5B,CAAC;AAAA,QACH,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,KAAK;AACZ,QAAI,YAAY,KAAK,QAAQ,GAAG;AAE9B,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAeA,eAAsB,cAAc,WAAiD;AACnF,MAAI;AACJ,MAAI;AACF,qBAAiB,MAAM,SAAS,SAAS;AAAA,EAC3C,SAAS,KAAK;AACZ,QAAI,YAAY,KAAK,QAAQ,GAAG;AAC9B,aAAO,CAAC;AAAA,IACV;AACA,UAAM;AAAA,EACR;AACA,QAAM,SAAS,MAAM,QAAQ;AAAA,IAC3B,qBAAqB,IAAI,CAAC,QAAQ,QAAQ,KAAK,KAAK,WAAW,GAAG,GAAG,cAAc,CAAC;AAAA,EACtF;AACA,SAAO,OAAO,KAAK;AACrB;","names":[]}
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
} from "./chunk-7ZNJN5WZ.js";
|
|
24
24
|
import {
|
|
25
25
|
compareEntityTimestamps
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-XSGUMQQQ.js";
|
|
27
27
|
import {
|
|
28
28
|
normalizeEntityName
|
|
29
29
|
} from "./chunk-YXZG5TVN.js";
|
|
@@ -918,4 +918,4 @@ export {
|
|
|
918
918
|
entityIndexVersion,
|
|
919
919
|
entityRecentTranscriptLookbackHours
|
|
920
920
|
};
|
|
921
|
-
//# sourceMappingURL=chunk-
|
|
921
|
+
//# sourceMappingURL=chunk-4TKJGOCJ.js.map
|
|
@@ -2,16 +2,16 @@ import {
|
|
|
2
2
|
RECONCILE_MANIFEST_FORMAT,
|
|
3
3
|
RECONCILE_MANIFEST_SCHEMA_VERSION,
|
|
4
4
|
buildReconcileManifestFile
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TWF35IC6.js";
|
|
6
6
|
import {
|
|
7
7
|
offlineSyncStorageForSnapshot
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DZD3WGCD.js";
|
|
9
9
|
import {
|
|
10
10
|
isSupportPassportPrivateMemory
|
|
11
11
|
} from "./chunk-EEOUMG3J.js";
|
|
12
12
|
import {
|
|
13
13
|
iterateOfflineSyncSnapshotFileRecords
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-WQZZDN5M.js";
|
|
15
15
|
|
|
16
16
|
// src/access-offline-manifest.ts
|
|
17
17
|
import * as nodePath from "path";
|
|
@@ -49,4 +49,4 @@ async function createOfflineSyncManifestStream(orchestrator, namespace, userExcl
|
|
|
49
49
|
export {
|
|
50
50
|
createOfflineSyncManifestStream
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-54WHLA65.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getOperation
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ICKJ52PE.js";
|
|
4
4
|
import {
|
|
5
5
|
EngramAccessInputError
|
|
6
6
|
} from "./chunk-2Z24E5W2.js";
|
|
@@ -21,4 +21,4 @@ async function respondBriefingHttp(options) {
|
|
|
21
21
|
export {
|
|
22
22
|
respondBriefingHttp
|
|
23
23
|
};
|
|
24
|
-
//# sourceMappingURL=chunk-
|
|
24
|
+
//# sourceMappingURL=chunk-56Y6EKZN.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StorageManager
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XSGUMQQQ.js";
|
|
4
4
|
import {
|
|
5
5
|
getCachedRuleMemories,
|
|
6
6
|
setCachedRuleMemories
|
|
@@ -119,4 +119,4 @@ export {
|
|
|
119
119
|
compareVerifiedSemanticRuleResults,
|
|
120
120
|
searchVerifiedSemanticRules
|
|
121
121
|
};
|
|
122
|
-
//# sourceMappingURL=chunk-
|
|
122
|
+
//# sourceMappingURL=chunk-5ATKSPEQ.js.map
|
|
@@ -17,6 +17,9 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
GraphEdgeAppendError
|
|
19
19
|
} from "./chunk-GKCXTSFF.js";
|
|
20
|
+
import {
|
|
21
|
+
isErrnoCode
|
|
22
|
+
} from "./chunk-KNA3BXXL.js";
|
|
20
23
|
|
|
21
24
|
// src/graph.ts
|
|
22
25
|
import { appendFile, mkdir, readFile, stat } from "fs/promises";
|
|
@@ -51,9 +54,6 @@ async function appendEdge(memoryDir, edge) {
|
|
|
51
54
|
confidence: typeof edge.confidence === "number" ? edge.confidence : 1
|
|
52
55
|
});
|
|
53
56
|
}
|
|
54
|
-
function isNodeError(err) {
|
|
55
|
-
return typeof err === "object" && err !== null && "code" in err;
|
|
56
|
-
}
|
|
57
57
|
function parseEdgesJsonl(raw, expectedType) {
|
|
58
58
|
const edges = [];
|
|
59
59
|
for (const line of raw.split("\n")) {
|
|
@@ -94,7 +94,7 @@ async function readEdgesStrict(memoryDir, type) {
|
|
|
94
94
|
const raw = await readFile(filePath, "utf8");
|
|
95
95
|
return await parseEdgesJsonlYielding(raw, type);
|
|
96
96
|
} catch (err) {
|
|
97
|
-
if (
|
|
97
|
+
if (isErrnoCode(err, "ENOENT")) {
|
|
98
98
|
return [];
|
|
99
99
|
}
|
|
100
100
|
throw err;
|
|
@@ -758,4 +758,4 @@ export {
|
|
|
758
758
|
applyPageRankRefinement,
|
|
759
759
|
applyLateralInhibition
|
|
760
760
|
};
|
|
761
|
-
//# sourceMappingURL=chunk-
|
|
761
|
+
//# sourceMappingURL=chunk-5FAGCOZD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graph.ts"],"sourcesContent":["/**\n * Multi-Graph Memory (MAGMA/SYNAPSE-inspired, v8.2)\n *\n * Maintains three typed edge graphs:\n * entity.jsonl — memories sharing a named entity (entityRef)\n * time.jsonl — consecutive memories in the same thread/session\n * causal.jsonl — memories linked by causal language heuristics\n *\n * Stored under `<memoryDir>/state/graphs/`.\n * All writes are fail-open: errors are caught/logged, never thrown.\n */\n\nimport { appendFile, mkdir, readFile, stat } from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { GraphEdgeAppendError } from \"./graph-append-error.js\";\nimport { readEdgeConfidence } from \"./graph-edge-reinforcement.js\";\nimport { emitGraphEvent } from \"./graph-events.js\";\nimport type { GraphConstructionCapabilitySet } from \"./capabilities.js\";\nimport {\n ActivationPathTracker,\n compareActivationPathCandidates,\n reconstructActivationPath,\n type ActivationPathCandidate,\n type ActivationPredecessor,\n} from \"./graph-path-reconstruction.js\";\nexport { reconstructActivationPath, type ActivationPredecessor };\nimport {\n assertGraphLockHeld,\n GraphLockLostError,\n withGraphWriteLock,\n yieldForLockHeartbeat,\n} from \"./graph-write-lock.js\";\nimport { isErrnoCode } from \"./utils/errno.js\";\n\nexport type GraphType = \"entity\" | \"time\" | \"causal\";\n\nexport interface ActivationPath {\n /** Node ids from the seed (inclusive) to the reached node (inclusive). */\n nodeIds: string[];\n /** Edge confidences, parallel to the hops in {@link nodeIds}. */\n edgeConfidences: number[];\n /** Graph types, parallel to the hops in {@link nodeIds}. */\n graphTypes: GraphType[];\n}\n\nexport interface GraphEdge {\n from: string; // relative memory path (e.g. \"facts/2026-02-22/abc.md\")\n to: string; // relative memory path\n type: GraphType;\n weight: number; // 1.0 default, decay applied during traversal\n label: string; // entity name, threadId, or matched causal phrase\n ts: string; // ISO timestamp of edge creation\n\n // Issue #681 — edge confidence + reinforcement (PR 1/3: schema + primitive only).\n // Both fields are optional so existing edges without confidence still validate.\n // Treat a missing `confidence` as 1.0 (legacy behavior) at read sites.\n // PR 2/3 wires the maintenance decay job; PR 3/3 weights PageRank traversal by confidence.\n confidence?: number; // [0, 1]; missing = 1.0\n lastReinforcedAt?: string; // ISO timestamp of most recent reinforcement\n}\n\nexport interface GraphConfig {\n multiGraphMemoryEnabled: boolean;\n entityGraphEnabled: boolean;\n timeGraphEnabled: boolean;\n causalGraphEnabled: boolean;\n maxGraphTraversalSteps: number;\n graphActivationDecay: number;\n maxEntityGraphEdgesPerMemory: number;\n graphLateralInhibitionEnabled: boolean;\n graphLateralInhibitionBeta: number;\n graphLateralInhibitionTopM: number;\n /**\n * Issue #681 PR 3/3 — minimum edge confidence required for traversal.\n * Edges with confidence below this floor are pruned. Legacy edges\n * (no `confidence` field) are treated as 1.0 and always pass.\n * Range `[0, 1]`. Default 0.2.\n */\n graphTraversalConfidenceFloor: number;\n /**\n * Issue #681 PR 3/3 — number of PageRank-style refinement iterations\n * applied on top of BFS activation. Set to 0 to disable refinement\n * and return raw BFS scores. Default 8.\n */\n graphTraversalPageRankIterations: number;\n /**\n * Issue #1904 — incremental GraphIndex edge cache. When true (the default,\n * and the value when omitted), a single-writer edge append is pushed into the\n * warm edge cache in place (revalidated by file size for cross-process\n * coherence) instead of nulling the cache and paying a full 6 MB re-read +\n * parse on the next traversal. Set false to restore the pre-#1904\n * null-on-every-write behavior. Optional here (unlike the required\n * PluginConfig field parseConfig always sets) so GraphConfig can still be\n * constructed directly with a partial config; only an explicit `false` opts\n * out, so an omitted field keeps the incremental default.\n */\n graphEdgeCacheIncrementalEnabled?: boolean;\n}\n\n/** Default minimum edge confidence required for traversal (issue #681 PR 3/3). */\nexport const DEFAULT_GRAPH_TRAVERSAL_CONFIDENCE_FLOOR = 0.2;\n/** Default PageRank-style refinement iteration count (issue #681 PR 3/3). */\nexport const DEFAULT_GRAPH_TRAVERSAL_PAGERANK_ITERATIONS = 8;\n\n// Causal signal phrases — order matters (most specific first)\nexport const CAUSAL_PHRASES = [\"as a result\", \"led to\", \"because of\", \"therefore\", \"caused\", \"because\"];\n\nexport function graphsDir(memoryDir: string): string {\n return path.join(memoryDir, \"state\", \"graphs\");\n}\n\nexport function graphFilePath(memoryDir: string, type: GraphType): string {\n return path.join(graphsDir(memoryDir), `${type}.jsonl`);\n}\n\nexport async function ensureGraphsDir(memoryDir: string): Promise<void> {\n await mkdir(graphsDir(memoryDir), { recursive: true });\n}\n\n// Per-graph-file write lock lives in the graph-write-lock.ts sibling (the\n// in-process chain plus the cross-process advisory lock, issue #2330 round\n// N+18 A). Re-exported here because `@remnic/core/graph` is a public\n// subpath export whose consumers import `withGraphWriteLock` from it.\nexport { withGraphWriteLock, GraphLockLostError };\n\nexport async function appendEdge(memoryDir: string, edge: GraphEdge): Promise<void> {\n await ensureGraphsDir(memoryDir);\n const filePath = graphFilePath(memoryDir, edge.type);\n const line = `${JSON.stringify(edge)}\\n`;\n await withGraphWriteLock(filePath, async (lock) => {\n // Round N+19 A: never append into a file a peer that broke this lock may rename over.\n await assertGraphLockHeld(filePath, lock);\n await appendFile(filePath, line, \"utf8\");\n });\n // Emit edge-added event for SSE subscribers (issue #691 PR 5/5).\n // Fail-open: emitGraphEvent catches listener errors so a bad SSE client\n // can never surface into the extraction pipeline.\n emitGraphEvent(memoryDir, \"edge-added\", {\n source: edge.from,\n target: edge.to,\n kind: edge.type,\n weight: edge.weight,\n label: edge.label,\n confidence: typeof edge.confidence === \"number\" ? edge.confidence : 1.0,\n });\n}\n\nfunction parseEdgesJsonl(raw: string, expectedType: GraphType): GraphEdge[] {\n const edges: GraphEdge[] = [];\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (isValidGraphEdge(parsed, expectedType)) {\n edges.push(parsed);\n }\n } catch {\n // skip corrupt lines — fail-open for partial JSONL recovery\n }\n }\n return edges;\n}\n\n/** Parse batch size at which locked-section parsing yields to the event loop\n * so the graph lock's heartbeat timer can fire (round N+19 A). */\nconst EDGE_PARSE_YIELD_BATCH = 5_000;\n\n/** Chunked {@link parseEdgesJsonl} yielding between batches; used by\n * {@link readEdgesStrict} (the locked-section reader) — the hot recall path\n * (`readEdges`) keeps the synchronous parse. */\nasync function parseEdgesJsonlYielding(raw: string, expectedType: GraphType): Promise<GraphEdge[]> {\n const lines = raw.split(\"\\n\");\n const edges: GraphEdge[] = [];\n for (let i = 0; i < lines.length; i += EDGE_PARSE_YIELD_BATCH) {\n if (i > 0) await yieldForLockHeartbeat();\n edges.push(...parseEdgesJsonl(lines.slice(i, i + EDGE_PARSE_YIELD_BATCH).join(\"\\n\"), expectedType));\n }\n return edges;\n}\n\n/**\n * Read all edges of a given type from the JSONL file.\n * Returns [] if the file doesn't exist or any read error occurs (fail-open).\n *\n * Production traversal callers (recall/PageRank) depend on this fail-open\n * posture so a temporarily missing or unreadable graph file never blocks\n * a recall. Maintenance jobs that need to distinguish ENOENT from real\n * I/O failures must use {@link readEdgesStrict} instead.\n */\nexport async function readEdges(memoryDir: string, type: GraphType): Promise<GraphEdge[]> {\n const filePath = graphFilePath(memoryDir, type);\n try {\n const raw = await readFile(filePath, \"utf8\");\n return parseEdgesJsonl(raw, type);\n } catch {\n return [];\n }\n}\n\n/**\n * Same as {@link readEdges} but only swallows `ENOENT`; all other read\n * errors (`EACCES`, `EIO`, …) are propagated. Used by the graph-edge\n * decay maintenance job so I/O outages surface as a failed run instead\n * of being silently reported as \"no edges to decay\" (issue #729 /\n * Codex P1, line 120).\n */\nexport async function readEdgesStrict(memoryDir: string, type: GraphType): Promise<GraphEdge[]> {\n const filePath = graphFilePath(memoryDir, type);\n try {\n const raw = await readFile(filePath, \"utf8\");\n return await parseEdgesJsonlYielding(raw, type);\n } catch (err) {\n if (isErrnoCode(err, \"ENOENT\")) {\n return [];\n }\n throw err;\n }\n}\n\n/**\n * Read edges from all enabled graph types.\n */\nexport async function readAllEdges(\n memoryDir: string,\n graphCaps: Pick<GraphConstructionCapabilitySet, \"entityGraph\" | \"timeGraph\" | \"causalGraph\">,\n): Promise<GraphEdge[]> {\n const parts: GraphEdge[][] = await Promise.all([\n graphCaps.entityGraph ? readEdges(memoryDir, \"entity\") : Promise.resolve([]),\n graphCaps.timeGraph ? readEdges(memoryDir, \"time\") : Promise.resolve([]),\n graphCaps.causalGraph ? readEdges(memoryDir, \"causal\") : Promise.resolve([]),\n ]);\n return parts.flat();\n}\n\nexport interface GraphHealthFileStats {\n type: GraphType;\n filePath: string;\n exists: boolean;\n totalLines: number;\n validEdges: number;\n corruptLines: number;\n uniqueNodes: number;\n}\n\nexport interface GraphHealthReport {\n generatedAt: string;\n enabledTypes: GraphType[];\n totals: {\n totalLines: number;\n validEdges: number;\n corruptLines: number;\n uniqueNodes: number;\n };\n files: GraphHealthFileStats[];\n repairGuidance?: string[];\n}\n\nfunction isValidGraphEdge(raw: unknown, expectedType: GraphType): raw is GraphEdge {\n if (!raw || typeof raw !== \"object\") return false;\n const edge = raw as Record<string, unknown>;\n return (\n edge.type === expectedType &&\n typeof edge.from === \"string\" &&\n edge.from.length > 0 &&\n typeof edge.to === \"string\" &&\n edge.to.length > 0 &&\n typeof edge.weight === \"number\" &&\n Number.isFinite(edge.weight) &&\n typeof edge.label === \"string\" &&\n typeof edge.ts === \"string\"\n );\n}\n\nexport async function analyzeGraphHealth(\n memoryDir: string,\n options?: {\n entityGraphEnabled?: boolean;\n timeGraphEnabled?: boolean;\n causalGraphEnabled?: boolean;\n includeRepairGuidance?: boolean;\n }\n): Promise<GraphHealthReport> {\n const enabledTypes: GraphType[] = [];\n if (options?.entityGraphEnabled !== false) enabledTypes.push(\"entity\");\n if (options?.timeGraphEnabled !== false) enabledTypes.push(\"time\");\n if (options?.causalGraphEnabled !== false) enabledTypes.push(\"causal\");\n\n const files: GraphHealthFileStats[] = [];\n const globalNodes = new Set<string>();\n\n for (const type of enabledTypes) {\n const filePath = graphFilePath(memoryDir, type);\n let exists = true;\n let totalLines = 0;\n let validEdges = 0;\n let corruptLines = 0;\n const nodes = new Set<string>();\n\n try {\n const raw = await readFile(filePath, \"utf8\");\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n totalLines += 1;\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (!isValidGraphEdge(parsed, type)) {\n corruptLines += 1;\n continue;\n }\n validEdges += 1;\n nodes.add(parsed.from);\n nodes.add(parsed.to);\n globalNodes.add(parsed.from);\n globalNodes.add(parsed.to);\n } catch {\n corruptLines += 1;\n }\n }\n } catch {\n exists = false;\n }\n\n files.push({\n type,\n filePath,\n exists,\n totalLines,\n validEdges,\n corruptLines,\n uniqueNodes: nodes.size,\n });\n }\n\n const totals = files.reduce(\n (acc, item) => {\n acc.totalLines += item.totalLines;\n acc.validEdges += item.validEdges;\n acc.corruptLines += item.corruptLines;\n return acc;\n },\n {\n totalLines: 0,\n validEdges: 0,\n corruptLines: 0,\n uniqueNodes: globalNodes.size,\n }\n );\n totals.uniqueNodes = globalNodes.size;\n\n const report: GraphHealthReport = {\n generatedAt: new Date().toISOString(),\n enabledTypes,\n totals,\n files,\n };\n\n if (options?.includeRepairGuidance === true) {\n const guidance: string[] = [];\n if (totals.corruptLines > 0) {\n guidance.push(\n \"Corrupt graph lines detected: back up memory/state/graphs, then rebuild graphs from clean memory replay/extraction runs.\"\n );\n }\n if (totals.validEdges === 0) {\n guidance.push(\n \"No valid edges detected yet: run normal extraction traffic (or replay ingestion) to seed graph files.\"\n );\n }\n if (guidance.length > 0) report.repairGuidance = guidance;\n }\n\n return report;\n}\n\n/**\n * Detect causal signal phrases in text. Returns the first matched phrase, or null.\n */\nexport function detectCausalPhrase(text: string): string | null {\n const lower = text.toLowerCase();\n for (const phrase of CAUSAL_PHRASES) {\n if (lower.includes(phrase)) return phrase;\n }\n return null;\n}\n\n/**\n * GraphIndex — builds and updates the three memory graphs.\n *\n * Usage (orchestrator):\n * this.graphIndex = new GraphIndex(config.memoryDir, config);\n *\n * // After each memory write:\n * await this.graphIndex.onMemoryWritten(memoryPath, frontmatter, threadId, recentInThread);\n */\n/**\n * Identity of one graph JSONL file used to validate the incremental edge cache\n * (issue #1904). An absent file (ENOENT) is recorded as the all-zero sentinel\n * `{ size: 0, mtimeMs: 0, ino: 0 }` so a later peer creation (ino becomes\n * non-zero) is detected as a change.\n */\ninterface GraphFileMeta {\n size: number;\n mtimeMs: number;\n ino: number;\n}\n\nexport class GraphIndex {\n private readonly memoryDir: string;\n private readonly cfg: GraphConfig;\n\n // Cache for readAllEdges() result. With 30k+ entity edges (6 MB JSONL) the\n // file read + JSON parse takes 2-4 s per call. This instance-level cache\n // eliminates that overhead on every spreadingActivation() call; it is\n // invalidated (set to null) in onMemoryWritten() so new edges appear promptly.\n private edgeCache: {\n allEdges: GraphEdge[];\n loadedAt: number;\n // Per-file identity of each enabled graph file observed at load (issue\n // #1904). An incremental push is trusted only when every file's identity is\n // explained entirely by OUR own append: size grows by exactly the bytes we\n // appended and the inode is unchanged (a local append keeps the inode; an\n // external atomic temp+rename rewrite — e.g. the edge-decay job — changes\n // it). Untouched files must match size AND mtime AND inode exactly. This\n // closes the size-only holes Codex flagged: a peer append racing cache\n // construction, and an equal-length atomic rewrite (e.g. confidence\n // 0.9->0.8) that preserves byte length. Any divergence forces a full reload.\n meta: Partial<Record<GraphType, GraphFileMeta>>;\n } | null = null;\n private static readonly EDGE_CACHE_TTL_MS = 300_000; // 5 minutes\n\n constructor(memoryDir: string, cfg: GraphConfig) {\n this.memoryDir = memoryDir;\n this.cfg = cfg;\n }\n\n /** Clear the edge cache so the next spreadingActivation() re-reads from disk.\n * Call after any code path that appends edges outside of onMemoryWritten(). */\n invalidateEdgeCache(): void {\n this.edgeCache = null;\n }\n\n private async loadEdgesCached(): Promise<GraphEdge[]> {\n if (this.edgeCache && Date.now() - this.edgeCache.loadedAt < GraphIndex.EDGE_CACHE_TTL_MS) {\n return this.edgeCache.allEdges;\n }\n // Consistent snapshot (issue #1904, Codex): capture file identity BEFORE and\n // AFTER reading edges and retry if it changed, so `allEdges` and the recorded\n // `meta` baseline reflect the SAME on-disk state. Without this a peer append\n // landing mid-read would leave the cache holding edges that exclude the peer\n // edge while the baseline already counts its bytes — a later local append\n // would then pass the size-delta check and silently omit the peer edge.\n let allEdges: GraphEdge[] = [];\n let meta = await this.readEnabledGraphFileMeta();\n let stable = false;\n for (let attempt = 0; attempt < 3; attempt++) {\n const before = meta;\n allEdges = await readAllEdges(this.memoryDir, {\n entityGraph: this.cfg.entityGraphEnabled,\n timeGraph: this.cfg.timeGraphEnabled,\n causalGraph: this.cfg.causalGraphEnabled,\n });\n meta = await this.readEnabledGraphFileMeta();\n if (this.graphFileMetaEqual(before, meta)) {\n stable = true;\n break;\n }\n // A write landed during the read; the just-captured `meta` is the new\n // baseline for the next attempt's before-snapshot.\n }\n if (stable) {\n this.edgeCache = { allEdges, loadedAt: Date.now(), meta };\n } else {\n // Contended: a peer kept writing across every attempt, so the final\n // allEdges/meta pair is not guaranteed consistent. Serve THIS read's edges\n // (best effort) but do NOT poison the cache — leave it null so the next\n // call re-reads, instead of installing a baseline that could hide a peer\n // edge for the TTL (Codex).\n this.edgeCache = null;\n }\n return allEdges;\n }\n\n /**\n * Identity ({ size, mtimeMs, ino }) of each ENABLED graph file (issue #1904).\n * Missing files (ENOENT) and any stat error map to the all-zero sentinel so\n * the baseline is fail-open: a later revalidation sees a mismatch (or a peer\n * creation flipping ino from 0 to non-zero) and forces a full reload rather\n * than trusting a stale incremental push.\n */\n private async readEnabledGraphFileMeta(): Promise<Partial<Record<GraphType, GraphFileMeta>>> {\n const enabled: GraphType[] = [];\n if (this.cfg.entityGraphEnabled) enabled.push(\"entity\");\n if (this.cfg.timeGraphEnabled) enabled.push(\"time\");\n if (this.cfg.causalGraphEnabled) enabled.push(\"causal\");\n const meta: Partial<Record<GraphType, GraphFileMeta>> = {};\n for (const type of enabled) {\n try {\n const st = await stat(graphFilePath(this.memoryDir, type));\n meta[type] = { size: st.size, mtimeMs: st.mtimeMs, ino: Number(st.ino) };\n } catch {\n meta[type] = { size: 0, mtimeMs: 0, ino: 0 };\n }\n }\n return meta;\n }\n\n /** True iff both metadata maps carry identical identity for every key. */\n private graphFileMetaEqual(\n a: Partial<Record<GraphType, GraphFileMeta>>,\n b: Partial<Record<GraphType, GraphFileMeta>>,\n ): boolean {\n const types: GraphType[] = [\"entity\", \"time\", \"causal\"];\n for (const type of types) {\n const x = a[type];\n const y = b[type];\n if (!x && !y) continue;\n if (!x || !y) return false;\n if (x.size !== y.size || x.mtimeMs !== y.mtimeMs || x.ino !== y.ino) return false;\n }\n return true;\n }\n\n /**\n * Re-stat every graph file whose identity the cache just committed and return\n * false if any has moved since (issue #1904, Codex). Closes the validation→\n * in-place-push TOCTOU window: a peer process (concurrent CLI / daemon /\n * decay job) can append between edgeFilesUnchangedExceptOurAppends()'s final\n * stat and the allEdges.push(...). Without this re-check the cache would be\n * accepted with identity predating the peer write and miss the peer edge for\n * the TTL. A residual infinitesimal window (peer writes during this re-stat)\n * remains and is TTL-bounded.\n */\n private async edgeCacheIdentityUnchangedSinceCommit(): Promise<boolean> {\n if (!this.edgeCache) return false;\n for (const type of Object.keys(this.edgeCache.meta) as GraphType[]) {\n const committed = this.edgeCache.meta[type];\n if (!committed) continue;\n let cur: GraphFileMeta;\n try {\n const st = await stat(graphFilePath(this.memoryDir, type));\n cur = { size: st.size, mtimeMs: st.mtimeMs, ino: Number(st.ino) };\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n cur = { size: 0, mtimeMs: 0, ino: 0 };\n } else {\n return false;\n }\n }\n if (\n cur.size !== committed.size ||\n cur.mtimeMs !== committed.mtimeMs ||\n cur.ino !== committed.ino\n ) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Called after a memory is written to disk.\n *\n * Throws when an edge append fails (after logging): the merged-target rewrite\n * path depends on the rejection to restore the edges `removeNodeEdgesForRewrite`\n * dropped — swallowing here left that restore dead and the prior edge set\n * permanently lost (#2330). Fail-open is the CALLER's decision; the create\n * paths already catch (see persistence-index.buildGraphEdge).\n *\n * @param memoryPath - relative path from memoryDir (e.g. \"facts/2026-02-22/abc.md\")\n * @param entityRef - entityRef frontmatter field (if any)\n * @param content - full memory text (for causal detection)\n * @param created - ISO timestamp of this memory\n * @param threadId - current thread ID (for time graph)\n * @param recentInThread - paths of the N most-recent memories in this thread (for time graph)\n * @param entitySiblings - paths of other memories that share the same entityRef (for entity graph)\n */\n async onMemoryWritten(opts: {\n memoryPath: string;\n entityRef?: string;\n content: string;\n created: string;\n threadId?: string;\n recentInThread?: string[];\n entitySiblings?: string[];\n causalPredecessor?: string;\n /**\n * Optional frozen gate overrides (from GraphConstructionCapabilitySet).\n * When provided, these take precedence over `this.cfg` so the caller's\n * operation-scoped snapshot is the single source of truth (#1566).\n */\n graphCapsOverride?: {\n entityGraph: boolean;\n timeGraph: boolean;\n causalGraph: boolean;\n multiGraphMemory: boolean;\n };\n }): Promise<GraphEdge[]> {\n const g = opts.graphCapsOverride;\n const multiGraphOn = g ? g.multiGraphMemory : this.cfg.multiGraphMemoryEnabled;\n if (!multiGraphOn) return [];\n const entityOn = g ? g.entityGraph : this.cfg.entityGraphEnabled;\n const timeOn = g ? g.timeGraph : this.cfg.timeGraphEnabled;\n const causalOn = g ? g.causalGraph : this.cfg.causalGraphEnabled;\n const ts = new Date().toISOString();\n // Appended this call: warm-cache in-place push (#1904) + surgical rollback rows (N+14).\n const appended: GraphEdge[] = [];\n\n try {\n // Entity graph\n if (entityOn && opts.entityRef && opts.entitySiblings?.length) {\n const siblings = opts.entitySiblings.slice(0, this.cfg.maxEntityGraphEdgesPerMemory);\n for (const sibling of siblings) {\n const edge: GraphEdge = {\n from: opts.memoryPath,\n to: sibling,\n type: \"entity\",\n weight: 1.0,\n label: opts.entityRef,\n ts,\n };\n appended.push(edge);\n await appendEdge(this.memoryDir, edge);\n }\n }\n\n // Time graph — link to most recent memory in same thread\n if (timeOn && opts.threadId && opts.recentInThread?.length) {\n const predecessor = opts.recentInThread[opts.recentInThread.length - 1];\n if (predecessor && predecessor !== opts.memoryPath) {\n const edge: GraphEdge = {\n from: predecessor,\n to: opts.memoryPath,\n type: \"time\",\n weight: 1.0,\n label: opts.threadId,\n ts,\n };\n appended.push(edge);\n await appendEdge(this.memoryDir, edge);\n }\n }\n\n // Causal graph\n if (causalOn && opts.causalPredecessor) {\n const phrase = detectCausalPhrase(opts.content);\n if (phrase) {\n const edge: GraphEdge = {\n from: opts.causalPredecessor,\n to: opts.memoryPath,\n type: \"causal\",\n weight: 1.0,\n label: phrase,\n ts,\n };\n appended.push(edge);\n await appendEdge(this.memoryDir, edge);\n }\n }\n } catch (err) {\n // Log, then rethrow (#2330): the rewrite path's restore step only runs\n // when this rejection reaches its caller (fail-open callers catch). The\n // error carries the rows already appended (N+16 A) — surgical rollback.\n const { log } = await import(\"./logger.js\");\n log.warn(`[graph] onMemoryWritten error: ${err}`);\n throw new GraphEdgeAppendError(err, appended);\n } finally {\n // Edge-cache coherence (issue #1904). Legacy behavior nulled the cache on\n // every write, paying a 2-4 s full re-read + parse on the next traversal.\n if (!this.edgeCache || Date.now() - this.edgeCache.loadedAt >= GraphIndex.EDGE_CACHE_TTL_MS) {\n // Nothing warm, or the entry is past its 5-min TTL backstop — reload.\n this.edgeCache = null;\n } else if (this.cfg.graphEdgeCacheIncrementalEnabled === false) {\n // Rollback lever: restore the pre-#1904 null-on-every-write behavior.\n this.edgeCache = null;\n } else {\n // Trust an in-place push ONLY when WE are the sole writer since load:\n // every enabled graph file's on-disk size must equal our baseline plus\n // exactly the bytes we appended to it. A divergence means a peer process\n // (backup daemon / CLI / decay job) also wrote — force a full reload for\n // cross-process coherence. Any stat error fails open to a full reload.\n try {\n if (await this.edgeFilesUnchangedExceptOurAppends(appended)) {\n if (appended.length > 0) {\n this.edgeCache.allEdges.push(...appended);\n // Close the validation→push TOCTOU window (#1904, Codex): a peer\n // process can append between the validation stat above and this\n // in-place push. Re-verify every committed identity; if any file\n // moved, the cache would miss the peer edge for the TTL, so null\n // it and let the next traversal reload. (Skipped when this call\n // pushed nothing — no new window was opened, and the validation\n // already confirmed no peer wrote.)\n if (this.edgeCache && !(await this.edgeCacheIdentityUnchangedSinceCommit())) {\n this.edgeCache = null;\n }\n }\n } else {\n this.edgeCache = null;\n }\n } catch {\n this.edgeCache = null;\n }\n }\n }\n return appended;\n }\n\n /**\n * Cross-process coherence check for the incremental edge cache (issue #1904).\n *\n * Returns true iff every ENABLED graph file's current identity is explained\n * ENTIRELY by THIS call's own append — no other process wrote to any graph\n * file since load. Per file:\n * - inode must be unchanged. A local append (`appendFile`) keeps the inode;\n * an external atomic temp+rename rewrite (e.g. the edge-decay job) changes\n * it, so an inode change — even one that preserves byte length, such as\n * decaying confidence 0.9->0.8 — forces a reload (Codex).\n * - a file WE appended to (delta > 0): size must equal baseline + our exact\n * appended bytes. If it was absent at load (sentinel ino 0), our append\n * created it, so we accept size === delta and adopt the new identity.\n * - a file we did NOT touch (delta 0): size AND mtime must be unchanged, so\n * an in-place equal-length rewrite (mtime bump) or a peer append (size\n * bump) both force a reload.\n * On success it commits the new identity baseline so the next append\n * revalidates against post-this-write truth. Fail-open: an unreadable file\n * (non-ENOENT) returns false, forcing a full reload.\n */\n private async edgeFilesUnchangedExceptOurAppends(appended: GraphEdge[]): Promise<boolean> {\n if (!this.edgeCache) return false;\n const expectedDelta: Partial<Record<GraphType, number>> = {};\n for (const edge of appended) {\n const bytes = Buffer.byteLength(`${JSON.stringify(edge)}\\n`, \"utf8\");\n expectedDelta[edge.type] = (expectedDelta[edge.type] ?? 0) + bytes;\n }\n const enabled: GraphType[] = [];\n if (this.cfg.entityGraphEnabled) enabled.push(\"entity\");\n if (this.cfg.timeGraphEnabled) enabled.push(\"time\");\n if (this.cfg.causalGraphEnabled) enabled.push(\"causal\");\n const observed: Partial<Record<GraphType, GraphFileMeta>> = {};\n for (const type of enabled) {\n let cur: GraphFileMeta;\n try {\n const st = await stat(graphFilePath(this.memoryDir, type));\n cur = { size: st.size, mtimeMs: st.mtimeMs, ino: Number(st.ino) };\n } catch (err) {\n // An absent graph file (ENOENT) is the normal partially-populated state\n // (e.g. entity edges written before any causal edge): treat it as the\n // all-zero sentinel so the incremental cache stays warm. Only a genuine\n // stat failure forces a full reload (#1904, Codex).\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") {\n cur = { size: 0, mtimeMs: 0, ino: 0 };\n } else {\n return false;\n }\n }\n const base = this.edgeCache.meta[type] ?? { size: 0, mtimeMs: 0, ino: 0 };\n const delta = expectedDelta[type] ?? 0;\n if (delta > 0) {\n if (base.ino === 0) {\n // File was absent at load; our append created it. Accept iff its whole\n // size is exactly our appended bytes (nothing else wrote it).\n if (cur.ino === 0 || cur.size !== delta) return false;\n } else {\n // Existing file: our append keeps the inode and grows size by exactly\n // our bytes. An atomic rewrite (ino change) or a peer append (size\n // mismatch) both fail here.\n if (cur.ino !== base.ino || cur.size !== base.size + delta) return false;\n }\n } else {\n // Untouched file: identity must be byte-for-byte unchanged.\n if (cur.ino !== base.ino || cur.size !== base.size || cur.mtimeMs !== base.mtimeMs) {\n return false;\n }\n }\n observed[type] = cur;\n }\n this.edgeCache.meta = observed;\n return true;\n }\n\n /**\n * Spreading activation BFS (SYNAPSE-inspired).\n *\n * Starting from `seeds`, traverse the combined graph for up to `maxSteps` hops.\n * Each candidate gets an activation score = edge.weight × edgeConfidence × decay^hop.\n *\n * Issue #681 PR 3/3 — confidence-aware traversal:\n * - Each edge's `weight` is multiplied by its `confidence` (legacy edges\n * missing `confidence` are treated as 1.0, preserving prior behavior).\n * - Edges with `confidence < graphTraversalConfidenceFloor` are pruned and\n * contribute neither activation nor downstream neighbors.\n * - When `graphTraversalPageRankIterations > 0`, an additional PageRank-\n * style refinement pass redistributes activation along confidence-weighted\n * edges, sharpening the ranking among multi-hop candidates.\n * - Per-result provenance includes the highest-confidence edge that landed\n * on each candidate, so the X-ray surface can attribute pruning and\n * ranking decisions back to specific edges.\n *\n * @param seeds - initial memory paths to expand from (e.g. QMD top results)\n * @param maxSteps - max BFS hops (from config: maxGraphTraversalSteps)\n * @returns Array of {path, score, edgeConfidence, ...} sorted descending, not including seed paths\n */\n async spreadingActivation(\n seeds: string[],\n maxSteps?: number,\n opts?: {\n /**\n * Issue #681 — when `true`, bypasses the configured\n * `graphTraversalConfidenceFloor` and includes low-confidence\n * edges in traversal. Equivalent to forcing the floor to `0`.\n * Default `false` (floor from config is applied).\n */\n includeLowConfidence?: boolean;\n /** Record one shortest seed-to-candidate path in each result. */\n recordPaths?: boolean;\n /** Absolute deadline in ms-since-epoch for post-retrieval assembly. */\n deadlineAtMs?: number;\n }\n ): Promise<\n Array<{\n path: string;\n score: number;\n seed: string;\n hopDepth: number;\n decayedWeight: number;\n graphType: \"entity\" | \"time\" | \"causal\";\n /**\n * Confidence of the edge that produced this candidate's recorded\n * provenance (the strongest edge along the chosen entry path).\n * In `[0, 1]`. Legacy edges without `confidence` surface as 1.0.\n */\n edgeConfidence: number;\n activationPath?: ActivationPath | null;\n }>\n > {\n if (!this.cfg.multiGraphMemoryEnabled) return [];\n const steps = maxSteps ?? this.cfg.maxGraphTraversalSteps;\n const decay = this.cfg.graphActivationDecay;\n // When `includeLowConfidence` is set, use floor=0 so all edges\n // participate in traversal regardless of their decay state.\n // Otherwise clamp the configured floor into [0, 1] so misconfiguration\n // cannot (a) admit edges with negative confidence or (b) reject every\n // edge.\n const floor =\n opts?.includeLowConfidence === true ? 0 : clampConfidenceFloor(this.cfg.graphTraversalConfidenceFloor);\n const iterations = clampPageRankIterations(this.cfg.graphTraversalPageRankIterations);\n const recordPaths = opts?.recordPaths === true;\n const deadlineAtMs = opts?.deadlineAtMs;\n const deadlineExpired = (): boolean =>\n typeof deadlineAtMs === \"number\" && Date.now() >= deadlineAtMs;\n\n try {\n if (deadlineExpired()) return [];\n const allEdges = await this.loadEdgesCached();\n if (deadlineExpired()) return [];\n\n // Build adjacency index: from → edges, to → edges (bidirectional for entity/time, directional for causal).\n // Edges below the confidence floor are pruned at index time so neither\n // direct activation nor downstream BFS expansion can re-introduce them.\n const adj = new Map<string, GraphEdge[]>();\n for (let i = 0; i < allEdges.length; i += 1) {\n if ((i & 1023) === 0 && deadlineExpired()) return [];\n const edge = allEdges[i];\n const conf = readEdgeConfidence(edge);\n if (conf < floor) continue;\n if (!adj.has(edge.from)) adj.set(edge.from, []);\n adj.get(edge.from)!.push(edge);\n // Entity and time edges are bidirectional\n if (edge.type !== \"causal\") {\n if (!adj.has(edge.to)) adj.set(edge.to, []);\n adj.get(edge.to)!.push({ ...edge, from: edge.to, to: edge.from });\n }\n }\n const seedSet = new Set(seeds);\n const scores = new Map<string, number>(); // candidate path → accumulated activation score\n\n const provenance = new Map<\n string,\n {\n seed: string;\n hopDepth: number;\n decayedWeight: number;\n graphType: \"entity\" | \"time\" | \"causal\";\n edgeConfidence: number;\n pathKey: string;\n }\n >();\n let frontier = new Map<string, { node: string; seed: string; activation: number }>();\n const reachedBySeed = new Map<string, Set<string>>();\n const pathTracker = recordPaths ? new ActivationPathTracker(seeds) : null;\n const predecessors = pathTracker?.predecessors ?? null;\n for (const seed of seeds) {\n frontier.set(`${seed}\\0${seed}`, { node: seed, seed, activation: 1 });\n reachedBySeed.set(seed, new Set([seed]));\n }\n const finalizeScores = () => {\n const results = Array.from(scores.entries())\n .map(([p, score]) => ({\n path: p,\n score,\n seed: provenance.get(p)?.seed ?? \"\",\n hopDepth: provenance.get(p)?.hopDepth ?? 0,\n decayedWeight: provenance.get(p)?.decayedWeight ?? 0,\n graphType: provenance.get(p)?.graphType ?? \"entity\",\n edgeConfidence: provenance.get(p)?.edgeConfidence ?? 1,\n }))\n .sort((a, b) => {\n const scoreDelta = b.score - a.score;\n if (scoreDelta !== 0 || !recordPaths) return scoreDelta;\n return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;\n });\n if (!recordPaths || !predecessors) return results;\n return results.map((result) => {\n const seed = provenance.get(result.path)?.seed;\n return {\n ...result,\n activationPath:\n seed === undefined ? null : reconstructActivationPath(seed, result.path, predecessors, steps),\n };\n });\n };\n\n for (let hop = 0; hop < steps && frontier.size > 0; hop++) {\n if (deadlineExpired()) return finalizeScores();\n const nextFrontier = new Map<string, { node: string; seed: string; activation: number }>();\n\n for (const { node, seed: sourceSeed, activation } of frontier.values()) {\n const edges = adj.get(node) ?? [];\n for (let i = 0; i < edges.length; i += 1) {\n if ((i & 1023) === 0 && deadlineExpired()) return finalizeScores();\n const edge = edges[i];\n const neighbor = edge.to === node ? edge.from : edge.to;\n const conf = readEdgeConfidence(edge);\n // Defense in depth: the adjacency build already drops sub-floor\n // edges, but if a synthesized reverse edge ever bypassed that\n // path, this guard keeps spreading activation honest.\n if (conf < floor) continue;\n const score = activation * edge.weight * conf * decay;\n const reachedForSeed = reachedBySeed.get(sourceSeed);\n if (reachedForSeed?.has(neighbor)) {\n continue;\n }\n const candidatePathKey =\n pathTracker && !seedSet.has(neighbor)\n ? pathTracker.consider(\n sourceSeed,\n node,\n neighbor,\n hop + 1,\n score,\n conf,\n edge.type,\n )\n : \"\";\n\n if (!seedSet.has(neighbor)) {\n const existing = scores.get(neighbor) ?? 0;\n scores.set(neighbor, existing + score);\n\n const prev = provenance.get(neighbor);\n const candidateWinner: ActivationPathCandidate = {\n hopDepth: hop + 1,\n landingStrength: score,\n pathKey: candidatePathKey,\n };\n const shouldReplace =\n !prev ||\n (recordPaths\n ? compareActivationPathCandidates(candidateWinner, {\n hopDepth: prev.hopDepth,\n landingStrength: prev.decayedWeight,\n pathKey: prev.pathKey,\n }) > 0\n : hop + 1 < prev.hopDepth ||\n (hop + 1 === prev.hopDepth && score > prev.decayedWeight));\n if (shouldReplace) {\n provenance.set(neighbor, {\n seed: sourceSeed,\n hopDepth: hop + 1,\n decayedWeight: score,\n graphType: edge.type,\n edgeConfidence: conf,\n pathKey: candidatePathKey,\n });\n }\n\n\n if (hop + 1 < steps) {\n const frontierKey = `${sourceSeed}\\0${neighbor}`;\n const existingFrontier = nextFrontier.get(frontierKey);\n if (existingFrontier) {\n existingFrontier.activation += score;\n } else {\n nextFrontier.set(frontierKey, {\n node: neighbor,\n seed: sourceSeed,\n activation: score,\n });\n }\n }\n }\n }\n }\n\n for (const { node, seed } of nextFrontier.values()) {\n reachedBySeed.get(seed)?.add(node);\n }\n frontier = nextFrontier;\n }\n\n // Issue #681 PR 3/3 — optional PageRank-style refinement.\n // Redistributes a node's accumulated activation along its outgoing\n // edges, weighted by edge confidence. Damping is fixed at the\n // canonical 0.85 so the ranking stays comparable across queries;\n // the `iterations` knob bounds compute, not behavior shape.\n if (!deadlineExpired() && iterations > 0 && scores.size > 1) {\n applyPageRankRefinement(scores, adj, {\n iterations,\n floor,\n damping: 0.85,\n deadlineAtMs,\n });\n }\n\n // Apply lateral inhibition if enabled (Synapse-inspired competitive suppression)\n if (deadlineExpired()) return finalizeScores();\n if (this.cfg.graphLateralInhibitionEnabled && scores.size > 1) {\n const inhibited = applyLateralInhibition(scores, {\n beta: this.cfg.graphLateralInhibitionBeta,\n topM: this.cfg.graphLateralInhibitionTopM,\n });\n for (const [k, v] of inhibited) {\n scores.set(k, v);\n }\n }\n\n return finalizeScores();\n } catch (err) {\n const { log } = await import(\"./logger.js\");\n log.warn(`[graph] spreadingActivation error: ${err}`);\n return [];\n }\n }\n}\n\n/**\n * Clamp `graphTraversalConfidenceFloor` into the legal range `[0, 1]`.\n * Non-finite or non-numeric values fall back to the documented default\n * so misconfiguration cannot silently disable the floor or reject every edge.\n *\n * Exported for tests; call sites in `spreadingActivation` use it to make\n * the contract explicit at every boundary.\n */\nexport function clampConfidenceFloor(raw: unknown): number {\n if (typeof raw !== \"number\" || !Number.isFinite(raw)) {\n return DEFAULT_GRAPH_TRAVERSAL_CONFIDENCE_FLOOR;\n }\n if (raw < 0) return 0;\n if (raw > 1) return 1;\n return raw;\n}\n\n/**\n * Clamp `graphTraversalPageRankIterations` into a non-negative integer.\n * Negative or non-finite values fall back to 0 (disable refinement) so\n * misconfiguration cannot stall recall in an unbounded loop.\n */\nexport function clampPageRankIterations(raw: unknown): number {\n if (typeof raw !== \"number\" || !Number.isFinite(raw)) return 0;\n if (raw <= 0) return 0;\n return Math.floor(raw);\n}\n\n/**\n * PageRank-style refinement on top of the BFS activation map.\n *\n * Each iteration redistributes a fraction of every node's score along\n * its outgoing edges, scaled by edge confidence. Confidence below\n * `floor` is filtered out before redistribution, mirroring the BFS\n * pruning rule. Mutates `scores` in place.\n *\n * Exported for tests; in production, call sites pass the same adjacency\n * map already used by BFS so behavior stays consistent.\n */\nexport function applyPageRankRefinement(\n scores: Map<string, number>,\n adj: Map<string, GraphEdge[]>,\n opts: { iterations: number; floor: number; damping: number; deadlineAtMs?: number }\n): void {\n const { iterations, floor, damping, deadlineAtMs } = opts;\n if (iterations <= 0 || scores.size === 0) return;\n const safeDamping = Math.min(1, Math.max(0, damping));\n const deadlineExpired = (): boolean =>\n typeof deadlineAtMs === \"number\" && Date.now() >= deadlineAtMs;\n\n // Pre-compute confidence-weighted out-edge totals for normalization.\n // Done once per refinement, not per iteration, since adjacency is\n // immutable inside the loop.\n //\n // Codex P1 (#735): the denominator MUST be computed over the same\n // eligible-neighbor set the iteration redistributes into — i.e.\n // edges whose neighbor is in `scores`. Counting edges-to-seeds (or\n // edges-to-unseen-nodes) in the denominator while dropping their\n // flow during iteration leaks `safeDamping × score` every pass and\n // collapses leaf candidates' scores instead of just re-ranking them.\n const eligible = (edge: GraphEdge, fromNode: string): boolean => {\n if (readEdgeConfidence(edge) < floor) return false;\n const neighbor = edge.to === fromNode ? edge.from : edge.to;\n return scores.has(neighbor);\n };\n const outboundTotal = new Map<string, number>();\n for (const [node, edges] of adj.entries()) {\n if (deadlineExpired()) return;\n if (!scores.has(node)) continue; // only candidate nodes redistribute\n let sum = 0;\n for (const edge of edges) {\n if (!eligible(edge, node)) continue;\n sum += readEdgeConfidence(edge) * edge.weight;\n }\n if (sum > 0) outboundTotal.set(node, sum);\n }\n\n for (let i = 0; i < iterations; i += 1) {\n if (deadlineExpired()) return;\n const next = new Map<string, number>();\n // Teleport / damping floor: every node retains `(1 - damping) * score`\n // of its current activation so dangling nodes do not bleed to zero.\n for (const [node, score] of scores) {\n next.set(node, (1 - safeDamping) * score);\n }\n for (const [node, score] of scores) {\n const outEdges = adj.get(node);\n const total = outboundTotal.get(node);\n // Dangling-node fallback: when a candidate has zero eligible\n // outflow (no in-scores neighbors above the floor), the\n // `safeDamping × score` portion would otherwise evaporate. Keep\n // it on `node` so total mass is conserved and the score reflects\n // the candidate's standing rather than its in-degree topology.\n if (!outEdges || outEdges.length === 0 || !total || total <= 0) {\n next.set(node, (next.get(node) ?? 0) + safeDamping * score);\n continue;\n }\n for (let edgeIndex = 0; edgeIndex < outEdges.length; edgeIndex += 1) {\n if ((edgeIndex & 1023) === 0 && deadlineExpired()) return;\n const edge = outEdges[edgeIndex];\n if (!eligible(edge, node)) continue;\n const conf = readEdgeConfidence(edge);\n const neighbor = edge.to === node ? edge.from : edge.to;\n const flow = safeDamping * score * ((conf * edge.weight) / total);\n next.set(neighbor, (next.get(neighbor) ?? 0) + flow);\n }\n }\n for (const [node, score] of next) {\n scores.set(node, score);\n }\n }\n}\n\n/**\n * Lateral inhibition (Synapse-inspired).\n *\n * For each node, the top-M higher-activation competitors exert inhibition\n * proportional to their activation difference. Output is clamped to [0, ∞).\n *\n * No sigmoid is applied here — downstream `normalizeGraphActivationScore`\n * already applies x/(1+x) soft squash, so adding a sigmoid would double-\n * normalize and cap graph influence at ~50%.\n *\n * Formula: u_hat_i = max(0, u_i - beta * sum_{k in top-M where u_k > u_i}(u_k - u_i))\n *\n * When beta=0 or topM=0, returns original scores unchanged (no-op).\n */\nexport function applyLateralInhibition(\n scores: Map<string, number>,\n opts: { beta: number; topM: number }\n): Map<string, number> {\n const { beta, topM } = opts;\n if (beta === 0 || topM === 0) return new Map(scores);\n\n const sorted = Array.from(scores.entries()).sort((a, b) => b[1] - a[1]);\n const topCompetitors = sorted.slice(0, topM);\n\n const result = new Map<string, number>();\n for (const [node, u] of scores) {\n let inhibition = 0;\n for (const [, uK] of topCompetitors) {\n if (uK > u) {\n inhibition += uK - u;\n }\n }\n result.set(node, Math.max(0, u - beta * inhibition));\n }\n\n return result;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
ensureContainedSpillDir,
|
|
9
9
|
listContainedSpillFiles
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-C7HJ3NEI.js";
|
|
11
11
|
import {
|
|
12
12
|
withHeldFileLock
|
|
13
13
|
} from "./chunk-FFAZ2XFU.js";
|
|
14
14
|
import {
|
|
15
15
|
isErrnoCode
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-KNA3BXXL.js";
|
|
17
17
|
import {
|
|
18
18
|
log
|
|
19
19
|
} from "./chunk-3WCASNQZ.js";
|
|
@@ -689,4 +689,4 @@ export {
|
|
|
689
689
|
TierMigrationStatusStore,
|
|
690
690
|
RecallHandleHistoryStore
|
|
691
691
|
};
|
|
692
|
-
//# sourceMappingURL=chunk-
|
|
692
|
+
//# sourceMappingURL=chunk-5UBH37SL.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
SupportPassportError,
|
|
3
3
|
SupportPassportOwnerCreateGrantRequestSchema,
|
|
4
4
|
getOperation
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ICKJ52PE.js";
|
|
6
6
|
|
|
7
7
|
// src/support-passport/access-http.ts
|
|
8
8
|
var OWNER_ROOT = "/engram/v1/support-passport";
|
|
@@ -137,4 +137,4 @@ export {
|
|
|
137
137
|
SUPPORT_PASSPORT_OWNER_HTTP_ROUTES,
|
|
138
138
|
handleSupportPassportOwnerHttp
|
|
139
139
|
};
|
|
140
|
-
//# sourceMappingURL=chunk-
|
|
140
|
+
//# sourceMappingURL=chunk-66OJSCI6.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LanceDbBackend
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BD7JTBYP.js";
|
|
4
4
|
import {
|
|
5
5
|
MeilisearchBackend
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OB3XMWX5.js";
|
|
7
7
|
import {
|
|
8
8
|
NoopSearchBackend
|
|
9
9
|
} from "./chunk-CYEPCZN5.js";
|
|
10
10
|
import {
|
|
11
11
|
OramaBackend
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TNSCIPBQ.js";
|
|
13
13
|
import {
|
|
14
14
|
RemoteSearchBackend
|
|
15
15
|
} from "./chunk-YQNNHLCG.js";
|
|
@@ -179,4 +179,4 @@ export {
|
|
|
179
179
|
createConversationSearchBackend,
|
|
180
180
|
createConversationIndexRuntime
|
|
181
181
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-6CVNSDCZ.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
rebuildMemoryProjection
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-JEC4DVM3.js";
|
|
4
4
|
|
|
5
5
|
// src/convergence-refresh.ts
|
|
6
6
|
async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, getStorage, searchEnabled) {
|
|
@@ -32,4 +32,4 @@ async function refreshConvergedNamespaces(namespaces, namespaceSearchRouter, get
|
|
|
32
32
|
export {
|
|
33
33
|
refreshConvergedNamespaces
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-6NXSYYGP.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-AQEJKOKI.js";
|
|
4
4
|
import {
|
|
5
5
|
recordObjectiveStateSnapshot
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HM7RHKS4.js";
|
|
7
7
|
|
|
8
8
|
// src/objective-state-writers.ts
|
|
9
9
|
import crypto from "crypto";
|
|
@@ -644,4 +644,4 @@ export {
|
|
|
644
644
|
recordObjectiveStateSnapshotsFromAgentMessages,
|
|
645
645
|
recordObjectiveStateSnapshotsFromObservedMessages
|
|
646
646
|
};
|
|
647
|
-
//# sourceMappingURL=chunk-
|
|
647
|
+
//# sourceMappingURL=chunk-6WHJ2EAB.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveCueAnchorStoreDir,
|
|
3
3
|
validateCueAnchor
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BMWN7B3Y.js";
|
|
5
5
|
import {
|
|
6
6
|
isValidityExpiredNow
|
|
7
7
|
} from "./chunk-6CIAGZ6X.js";
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
HARMONIC_SOURCE_MEMORY_INSERTED_AT_KEY,
|
|
27
27
|
resolveAbstractionNodeStoreDir,
|
|
28
28
|
validateAbstractionNode
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-46EST7JO.js";
|
|
30
30
|
import {
|
|
31
31
|
compareDeterministicStrings
|
|
32
32
|
} from "./chunk-G73MCJKL.js";
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
import {
|
|
37
37
|
listJsonFilesStrict,
|
|
38
38
|
readJsonFile
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-B6O2YLUR.js";
|
|
40
40
|
|
|
41
41
|
// src/harmonic-retrieval.ts
|
|
42
42
|
import path from "path";
|
|
@@ -318,4 +318,4 @@ export {
|
|
|
318
318
|
readProjectedHarmonicGraph,
|
|
319
319
|
searchHarmonicRetrieval
|
|
320
320
|
};
|
|
321
|
-
//# sourceMappingURL=chunk-
|
|
321
|
+
//# sourceMappingURL=chunk-6XL73HQ4.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
listNamespaces
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RBCQVOVJ.js";
|
|
4
4
|
import {
|
|
5
5
|
capabilityAllowsNamespace
|
|
6
6
|
} from "./chunk-MZWSOLMT.js";
|
|
@@ -282,4 +282,4 @@ export {
|
|
|
282
282
|
computeServiceCorpusWatermarks,
|
|
283
283
|
computeServiceCorpusCensus
|
|
284
284
|
};
|
|
285
|
-
//# sourceMappingURL=chunk-
|
|
285
|
+
//# sourceMappingURL=chunk-AQ7SYDVO.js.map
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
import {
|
|
16
16
|
listJsonFiles,
|
|
17
17
|
readJsonFile
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-B6O2YLUR.js";
|
|
19
19
|
|
|
20
20
|
// src/causal-trajectory.ts
|
|
21
21
|
import path from "path";
|
|
@@ -400,4 +400,4 @@ export {
|
|
|
400
400
|
getCausalTrajectoryStoreStatus,
|
|
401
401
|
searchCausalTrajectories
|
|
402
402
|
};
|
|
403
|
-
//# sourceMappingURL=chunk-
|
|
403
|
+
//# sourceMappingURL=chunk-B3O3IRZN.js.map
|