@remnic/core 10.0.69 → 10.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.js +80 -77
- package/dist/access-authorization-probe.js +81 -78
- package/dist/access-boundary.js +80 -77
- package/dist/access-cli.js +194 -191
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.js +80 -77
- package/dist/access-http-briefing.js +81 -78
- package/dist/access-http-query.js +82 -79
- package/dist/access-http.js +104 -101
- package/dist/access-identity-continuity-surface.js +80 -77
- package/dist/access-lcm-surface.js +80 -77
- package/dist/access-mcp.js +93 -90
- package/dist/access-namespace-preflight.js +80 -77
- package/dist/access-observe-lcm-archive.d.ts +5 -0
- package/dist/access-observe-lcm-archive.d.ts.map +1 -0
- package/dist/access-observe-lcm-archive.js +9 -0
- package/dist/access-observe-objective-state.d.ts +8 -0
- package/dist/access-observe-objective-state.d.ts.map +1 -0
- package/dist/access-observe-objective-state.js +17 -0
- package/dist/access-observe-stage-timing.d.ts +11 -0
- package/dist/access-observe-stage-timing.d.ts.map +1 -0
- package/dist/access-observe-stage-timing.js +9 -0
- package/dist/access-observe-stage-timing.js.map +1 -0
- package/dist/access-observe-write-category.js +13 -13
- package/dist/access-observe-write-surface.d.ts.map +1 -1
- package/dist/access-observe-write-surface.js +80 -77
- package/dist/access-offline-manifest.js +8 -8
- package/dist/access-operations-batch.js +83 -80
- package/dist/access-operations.js +90 -87
- package/dist/access-recall-concurrency.js +80 -77
- package/dist/access-recall-response.js +80 -77
- package/dist/access-recall-surface.js +80 -77
- package/dist/access-schema.js +12 -12
- package/dist/access-service.d.ts +1 -0
- package/dist/access-service.d.ts.map +1 -1
- package/dist/access-service.js +80 -77
- package/dist/access-surface-catalog.js +82 -79
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-recall.js +24 -24
- package/dist/adapters/index.js +4 -4
- package/dist/adapters/registry.js +2 -2
- package/dist/briefing.js +15 -15
- package/dist/buffer.js +8 -8
- package/dist/calibration.js +4 -4
- package/dist/{capsule-crypto-GWVG7LGC.js → capsule-crypto-7FJQINUR.js} +2 -2
- package/dist/capsule-crypto-7FJQINUR.js.map +1 -0
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.js +20 -20
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.js +3 -3
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-NCZGGGWI.js → chunk-2BBMCMJS.js} +12 -12
- package/dist/{chunk-UVVFPCPX.js → chunk-2GV24KFD.js} +2 -2
- package/dist/{chunk-OWHERGF2.js → chunk-2NLLXCJG.js} +2 -2
- package/dist/{chunk-QDZWQBLU.js → chunk-2R7OCBRR.js} +2 -2
- package/dist/{chunk-U2CAGMUD.js → chunk-2YPIFJHL.js} +2 -2
- package/dist/{chunk-4SOWMA55.js → chunk-3AASGFR4.js} +3 -3
- package/dist/{chunk-CI3MAAIY.js → chunk-3F7N4I5I.js} +2 -2
- package/dist/{chunk-PLCYKAWH.js → chunk-3ICAWZUU.js} +4 -4
- package/dist/{chunk-B4DXREWC.js → chunk-3W37NITP.js} +2 -2
- package/dist/{chunk-R4ZHF4K2.js → chunk-43FLJLT2.js} +4 -4
- package/dist/{chunk-RLVI2M5Q.js → chunk-4BOBW6H4.js} +2 -2
- package/dist/{chunk-HXFIILGF.js → chunk-4RASUAN3.js} +4 -4
- package/dist/{chunk-JLMOH5JA.js → chunk-5FMGPV34.js} +2 -2
- package/dist/{chunk-EI6M5NVK.js → chunk-5JBVPJCT.js} +2 -2
- package/dist/{chunk-74AY3S7U.js → chunk-5RW247F5.js} +10 -10
- package/dist/{chunk-P4TV3TQ2.js → chunk-5VQSKBNF.js} +5 -5
- package/dist/{chunk-H5DIRCZP.js → chunk-64U42JL5.js} +18 -18
- package/dist/{chunk-4XINO77L.js → chunk-66JOLMWS.js} +2 -2
- package/dist/{chunk-WHROVQ5Q.js → chunk-66PEACZP.js} +3 -3
- package/dist/{chunk-GKL6QYZO.js → chunk-6L63IN3M.js} +1 -1
- package/dist/{chunk-Y3XPSGNF.js → chunk-6QS5NQJH.js} +2 -2
- package/dist/{chunk-KOLJJN5G.js → chunk-AQNHEDXP.js} +11 -4
- package/dist/chunk-AQNHEDXP.js.map +1 -0
- package/dist/{chunk-6WKWL53V.js → chunk-B7YAIHAV.js} +127 -121
- package/dist/chunk-B7YAIHAV.js.map +1 -0
- package/dist/{chunk-M4IEZGCK.js → chunk-BFBS7OFQ.js} +7 -7
- package/dist/{chunk-4PG5R6BJ.js → chunk-BNU5TQLR.js} +2 -2
- package/dist/{chunk-B3MWELZ3.js → chunk-BW33YTF3.js} +2 -2
- package/dist/{chunk-H6VJSITJ.js → chunk-CIL4GHMD.js} +3 -3
- package/dist/{chunk-5UM4H64E.js → chunk-D3AGBN6G.js} +2 -2
- package/dist/{chunk-IG3EZ3TF.js → chunk-DM3UZUCN.js} +2 -2
- package/dist/{chunk-PMDOGXA2.js → chunk-EF3HNVL4.js} +2 -2
- package/dist/{chunk-TVE7W67N.js → chunk-EIZ4MK33.js} +2 -2
- package/dist/{chunk-AUFPPBC3.js → chunk-ENPJX3BB.js} +3 -3
- package/dist/{chunk-63A2BU2B.js → chunk-F4ZHKDBW.js} +5 -5
- package/dist/{chunk-3LBDEGQA.js → chunk-FDUCIUQ5.js} +2 -2
- package/dist/{chunk-CTH2CQCB.js → chunk-FM6UKZAE.js} +2 -2
- package/dist/{chunk-XVZA6VXC.js → chunk-FZVROZKC.js} +4 -4
- package/dist/{chunk-IAGVM7EY.js → chunk-GMSRLDVR.js} +2 -2
- package/dist/{chunk-HPB5TF55.js → chunk-GT4G2S2Y.js} +3 -3
- package/dist/{chunk-645WOU5I.js → chunk-H7BZBSP6.js} +4 -4
- package/dist/{chunk-5MGKGEL7.js → chunk-HNF7IMYQ.js} +2 -2
- package/dist/{chunk-W7K5BP3M.js → chunk-HQPFACXO.js} +2 -2
- package/dist/{chunk-TECK5IVY.js → chunk-HZNURRDS.js} +2 -2
- package/dist/{chunk-SXTVZ6JL.js → chunk-I6HRHJRA.js} +2 -2
- package/dist/{chunk-NHWDTOBN.js → chunk-ILD7N3XC.js} +20 -20
- package/dist/{chunk-4NV7O76Q.js → chunk-J5TVHCDG.js} +2 -2
- package/dist/{chunk-AL3TCNSJ.js → chunk-J6GZ2254.js} +4 -4
- package/dist/{chunk-OH55F76C.js → chunk-JEX2JL3U.js} +2 -2
- package/dist/{chunk-AVGDYYMA.js → chunk-JGQEF33K.js} +3 -3
- package/dist/{chunk-6P7U3HWG.js → chunk-K36RMINQ.js} +3 -3
- package/dist/{chunk-UW6LBFYN.js → chunk-K47G2CBP.js} +6 -6
- package/dist/{chunk-3RHU5MD7.js → chunk-K7LLGCPH.js} +2 -2
- package/dist/{chunk-BUKK5SWA.js → chunk-KQAFEZQX.js} +2 -2
- package/dist/chunk-L3E7MLMK.js +20 -0
- package/dist/chunk-L3E7MLMK.js.map +1 -0
- package/dist/{chunk-R2BIVU2Z.js → chunk-LTST4R7U.js} +2 -2
- package/dist/{chunk-IZBIDPMY.js → chunk-LYTKNK5O.js} +2 -2
- package/dist/{chunk-HH73M65H.js → chunk-MCFI6G7U.js} +3 -3
- package/dist/{chunk-V6SBA5O7.js → chunk-MFKBYXBY.js} +5 -5
- package/dist/{chunk-AYJQ644F.js → chunk-MK7HXGM6.js} +2 -2
- package/dist/{chunk-MOIJWWNA.js → chunk-MKMIY3E7.js} +13 -13
- package/dist/{chunk-EXQJMFRF.js → chunk-MRN2MKB7.js} +2 -2
- package/dist/{chunk-W26D2USW.js → chunk-MUH7RR6T.js} +6 -6
- package/dist/{chunk-64JLBFCQ.js → chunk-N7NAGECH.js} +2 -2
- package/dist/{chunk-75DCOS6I.js → chunk-OAKOAOEG.js} +67 -67
- package/dist/{chunk-DDBB55L2.js → chunk-OAQO5AZJ.js} +121 -121
- package/dist/{chunk-OPFVXM2D.js → chunk-OX6GY22Q.js} +2 -2
- package/dist/chunk-QCFZDYYG.js +34 -0
- package/dist/chunk-QCFZDYYG.js.map +1 -0
- package/dist/{chunk-MMCO4SRG.js → chunk-QNN4FYBD.js} +19 -11
- package/dist/chunk-QNN4FYBD.js.map +1 -0
- package/dist/{chunk-XWE3EOWX.js → chunk-RZED7FAU.js} +2 -2
- package/dist/{chunk-YSATDEBY.js → chunk-SBRUTD5O.js} +5 -5
- package/dist/{chunk-WVP2I6C5.js → chunk-SDL22RRW.js} +50 -11
- package/dist/chunk-SDL22RRW.js.map +1 -0
- package/dist/{chunk-ZORS5BG5.js → chunk-SQO5SEKA.js} +10 -10
- package/dist/{chunk-PRKNAIGZ.js → chunk-T6T2RMWW.js} +5 -5
- package/dist/{chunk-O5ZINWW3.js → chunk-THFSCUFC.js} +2 -2
- package/dist/{chunk-CIEEYVUB.js → chunk-TPX7XXY4.js} +2 -2
- package/dist/{chunk-OCK4D5PC.js → chunk-TSZP7GGJ.js} +2 -2
- package/dist/{chunk-L334PSLW.js → chunk-U2A56LLF.js} +8 -8
- package/dist/{chunk-TGQW3AMK.js → chunk-UIFWZMO7.js} +23 -23
- package/dist/{chunk-LN4X2NDA.js → chunk-UJ2FP2RV.js} +10 -10
- package/dist/{chunk-4MPAKYZU.js → chunk-VDYRXI3E.js} +5 -5
- package/dist/{chunk-IHCXMYSE.js → chunk-VPEIWMUT.js} +2 -2
- package/dist/{chunk-ELHJK7LM.js → chunk-WBN66HPI.js} +6 -6
- package/dist/{chunk-BJLCV2P3.js → chunk-WGRAB3KB.js} +2 -2
- package/dist/{chunk-IVUVQPTQ.js → chunk-WIW4LOZL.js} +2 -2
- package/dist/{chunk-5KDDAQ6K.js → chunk-WN2DASTS.js} +10 -10
- package/dist/chunk-WZU5AGO6.js +38 -0
- package/dist/chunk-WZU5AGO6.js.map +1 -0
- package/dist/{chunk-UVYI6VIX.js → chunk-X7Y7WX73.js} +1 -1
- package/dist/{chunk-5Y6VA6X2.js → chunk-XDUP6SWG.js} +2 -2
- package/dist/{chunk-GHHQLSSY.js → chunk-XR4QR3JT.js} +3 -3
- package/dist/{chunk-64S6X4IU.js → chunk-XTN54NML.js} +4 -4
- package/dist/{chunk-QGFR73SN.js → chunk-YIG4HPY4.js} +2 -2
- package/dist/{chunk-UYUFDTIX.js → chunk-YIXWY4OZ.js} +2 -2
- package/dist/{chunk-GJ4HU6LK.js → chunk-YLMTFRZR.js} +2 -2
- package/dist/{chunk-GGD2YDS6.js → chunk-YRMSHA7H.js} +2 -2
- package/dist/{chunk-Y7427SL7.js → chunk-ZG4GNPRE.js} +216 -50
- package/dist/chunk-ZG4GNPRE.js.map +1 -0
- package/dist/{chunk-KZZ5EZ7O.js → chunk-ZS5LREUZ.js} +2 -2
- package/dist/{chunk-JLGBJ4AX.js → chunk-ZYEWTVNQ.js} +10 -10
- package/dist/cli.js +131 -128
- package/dist/coding/export-okf-codegraph.js +14 -14
- package/dist/coding/pre-action-gate.js +2 -2
- package/dist/compounding/engine.js +16 -16
- package/dist/config.js +24 -24
- package/dist/connectors/codex-materialize-runner.js +17 -17
- package/dist/connectors/codex-materialize.js +2 -2
- package/dist/connectors/index.js +18 -18
- package/dist/consolidation-provenance-check.js +2 -2
- package/dist/convergence-refresh.js +18 -18
- package/dist/corpus-watermark.js +18 -18
- package/dist/deep-recall-http-glue.js +13 -13
- package/dist/deep-recall.js +2 -2
- package/dist/embedding-fallback.js +2 -2
- package/dist/entity-retrieval.js +18 -18
- package/dist/event-order-recall.js +2 -2
- package/dist/external-wiki-access.js +81 -78
- package/dist/extraction-span-materialize.js +2 -2
- package/dist/extraction.js +30 -30
- package/dist/{graph-edge-decay-OEX5OGMI.js → graph-edge-decay-CXTNJ7IQ.js} +6 -6
- package/dist/graph-edge-decay-CXTNJ7IQ.js.map +1 -0
- package/dist/graph-jsonl.js +4 -4
- package/dist/graph-snapshot.js +4 -4
- package/dist/graph.js +3 -3
- package/dist/harmonic-retrieval.js +15 -15
- package/dist/index.js +279 -276
- package/dist/lcm/archive.d.ts +12 -2
- package/dist/lcm/archive.d.ts.map +1 -1
- package/dist/lcm/archive.js +2 -2
- package/dist/lcm/engine.d.ts +59 -8
- package/dist/lcm/engine.d.ts.map +1 -1
- package/dist/lcm/engine.js +6 -6
- package/dist/lcm/index.js +16 -16
- package/dist/lcm/queue.d.ts +7 -3
- package/dist/lcm/queue.d.ts.map +1 -1
- package/dist/lcm/queue.js +1 -1
- package/dist/lcm/summarizer.d.ts +8 -1
- package/dist/lcm/summarizer.d.ts.map +1 -1
- package/dist/lcm/summarizer.js +3 -3
- package/dist/local-llm.js +4 -4
- package/dist/location/index.js +17 -17
- package/dist/maintenance/memory-governance.js +16 -16
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +15 -15
- package/dist/maintenance/rebuild-memory-projection-runner.js +18 -18
- package/dist/maintenance/rebuild-memory-projection.js +17 -17
- package/dist/memory-browse-operations.js +81 -78
- package/dist/memory-browse.js +6 -6
- package/dist/namespaces/migrate.js +16 -16
- package/dist/namespaces/search.js +7 -7
- package/dist/namespaces/storage.js +15 -15
- package/dist/offline-sync-changeset-generations.js +5 -5
- package/dist/offline-sync-embedding-generation.js +4 -4
- package/dist/offline-sync-snapshot-stream.js +7 -7
- package/dist/offline-sync.js +9 -9
- package/dist/operator-doctor-corpus.js +19 -19
- package/dist/operator-toolkit.js +39 -39
- package/dist/orchestration/buffer-drain-runner.js +194 -191
- package/dist/orchestration/buffer-drain-runner.js.map +1 -1
- package/dist/orchestration/maintenance.js +31 -31
- package/dist/orchestrator.js +195 -192
- package/dist/qmd.js +4 -4
- package/dist/recall-navigation-operations.js +81 -78
- package/dist/recall-navigation.js +80 -77
- package/dist/recall-state-view-admission.js +6 -6
- package/dist/recall-why-service.js +6 -6
- package/dist/resume-bundles.js +27 -27
- package/dist/search/factory.js +6 -6
- package/dist/search/index.js +12 -12
- package/dist/semantic-consolidation.js +23 -23
- package/dist/semantic-rule-promotion.js +15 -15
- package/dist/semantic-rule-verifier.js +15 -15
- package/dist/source-agent-qualifier.js +22 -22
- package/dist/standup/build.js +15 -15
- package/dist/storage.js +14 -14
- package/dist/summarizer.js +6 -6
- package/dist/support-passport/index.js +83 -80
- package/dist/transfer/backup.js +2 -2
- package/dist/transfer/capsule-export.js +2 -2
- package/dist/transfer/capsule-import.js +2 -2
- package/dist/transfer/export-okf.js +15 -15
- package/dist/verified-recall.js +15 -15
- package/dist/who-knows-cli.js +16 -16
- package/dist/who-knows.js +15 -15
- package/package.json +2 -2
- package/src/access-observe-lcm-archive.ts +30 -0
- package/src/access-observe-lcm-fail-closed.test.ts +118 -0
- package/src/access-observe-objective-state.ts +40 -0
- package/src/access-observe-stage-timing.test.ts +246 -0
- package/src/access-observe-stage-timing.ts +58 -0
- package/src/access-observe-write-surface.ts +45 -45
- package/src/access-service.ts +1 -0
- package/src/lcm/archive.ts +59 -7
- package/src/lcm/engine.ts +256 -53
- package/src/lcm/queue.test.ts +32 -14
- package/src/lcm/queue.ts +24 -16
- package/src/lcm/summarizer.ts +15 -2
- package/src/lcm-durability.test.ts +856 -0
- package/src/lcm-engine.test.ts +12 -3
- package/dist/chunk-6WKWL53V.js.map +0 -1
- package/dist/chunk-KOLJJN5G.js.map +0 -1
- package/dist/chunk-MMCO4SRG.js.map +0 -1
- package/dist/chunk-WVP2I6C5.js.map +0 -1
- package/dist/chunk-Y7427SL7.js.map +0 -1
- /package/dist/{capsule-crypto-GWVG7LGC.js.map → access-observe-lcm-archive.js.map} +0 -0
- /package/dist/{graph-edge-decay-OEX5OGMI.js.map → access-observe-objective-state.js.map} +0 -0
- /package/dist/{chunk-NCZGGGWI.js.map → chunk-2BBMCMJS.js.map} +0 -0
- /package/dist/{chunk-UVVFPCPX.js.map → chunk-2GV24KFD.js.map} +0 -0
- /package/dist/{chunk-OWHERGF2.js.map → chunk-2NLLXCJG.js.map} +0 -0
- /package/dist/{chunk-QDZWQBLU.js.map → chunk-2R7OCBRR.js.map} +0 -0
- /package/dist/{chunk-U2CAGMUD.js.map → chunk-2YPIFJHL.js.map} +0 -0
- /package/dist/{chunk-4SOWMA55.js.map → chunk-3AASGFR4.js.map} +0 -0
- /package/dist/{chunk-CI3MAAIY.js.map → chunk-3F7N4I5I.js.map} +0 -0
- /package/dist/{chunk-PLCYKAWH.js.map → chunk-3ICAWZUU.js.map} +0 -0
- /package/dist/{chunk-B4DXREWC.js.map → chunk-3W37NITP.js.map} +0 -0
- /package/dist/{chunk-R4ZHF4K2.js.map → chunk-43FLJLT2.js.map} +0 -0
- /package/dist/{chunk-RLVI2M5Q.js.map → chunk-4BOBW6H4.js.map} +0 -0
- /package/dist/{chunk-HXFIILGF.js.map → chunk-4RASUAN3.js.map} +0 -0
- /package/dist/{chunk-JLMOH5JA.js.map → chunk-5FMGPV34.js.map} +0 -0
- /package/dist/{chunk-EI6M5NVK.js.map → chunk-5JBVPJCT.js.map} +0 -0
- /package/dist/{chunk-74AY3S7U.js.map → chunk-5RW247F5.js.map} +0 -0
- /package/dist/{chunk-P4TV3TQ2.js.map → chunk-5VQSKBNF.js.map} +0 -0
- /package/dist/{chunk-H5DIRCZP.js.map → chunk-64U42JL5.js.map} +0 -0
- /package/dist/{chunk-4XINO77L.js.map → chunk-66JOLMWS.js.map} +0 -0
- /package/dist/{chunk-WHROVQ5Q.js.map → chunk-66PEACZP.js.map} +0 -0
- /package/dist/{chunk-GKL6QYZO.js.map → chunk-6L63IN3M.js.map} +0 -0
- /package/dist/{chunk-Y3XPSGNF.js.map → chunk-6QS5NQJH.js.map} +0 -0
- /package/dist/{chunk-M4IEZGCK.js.map → chunk-BFBS7OFQ.js.map} +0 -0
- /package/dist/{chunk-4PG5R6BJ.js.map → chunk-BNU5TQLR.js.map} +0 -0
- /package/dist/{chunk-B3MWELZ3.js.map → chunk-BW33YTF3.js.map} +0 -0
- /package/dist/{chunk-H6VJSITJ.js.map → chunk-CIL4GHMD.js.map} +0 -0
- /package/dist/{chunk-5UM4H64E.js.map → chunk-D3AGBN6G.js.map} +0 -0
- /package/dist/{chunk-IG3EZ3TF.js.map → chunk-DM3UZUCN.js.map} +0 -0
- /package/dist/{chunk-PMDOGXA2.js.map → chunk-EF3HNVL4.js.map} +0 -0
- /package/dist/{chunk-TVE7W67N.js.map → chunk-EIZ4MK33.js.map} +0 -0
- /package/dist/{chunk-AUFPPBC3.js.map → chunk-ENPJX3BB.js.map} +0 -0
- /package/dist/{chunk-63A2BU2B.js.map → chunk-F4ZHKDBW.js.map} +0 -0
- /package/dist/{chunk-3LBDEGQA.js.map → chunk-FDUCIUQ5.js.map} +0 -0
- /package/dist/{chunk-CTH2CQCB.js.map → chunk-FM6UKZAE.js.map} +0 -0
- /package/dist/{chunk-XVZA6VXC.js.map → chunk-FZVROZKC.js.map} +0 -0
- /package/dist/{chunk-IAGVM7EY.js.map → chunk-GMSRLDVR.js.map} +0 -0
- /package/dist/{chunk-HPB5TF55.js.map → chunk-GT4G2S2Y.js.map} +0 -0
- /package/dist/{chunk-645WOU5I.js.map → chunk-H7BZBSP6.js.map} +0 -0
- /package/dist/{chunk-5MGKGEL7.js.map → chunk-HNF7IMYQ.js.map} +0 -0
- /package/dist/{chunk-W7K5BP3M.js.map → chunk-HQPFACXO.js.map} +0 -0
- /package/dist/{chunk-TECK5IVY.js.map → chunk-HZNURRDS.js.map} +0 -0
- /package/dist/{chunk-SXTVZ6JL.js.map → chunk-I6HRHJRA.js.map} +0 -0
- /package/dist/{chunk-NHWDTOBN.js.map → chunk-ILD7N3XC.js.map} +0 -0
- /package/dist/{chunk-4NV7O76Q.js.map → chunk-J5TVHCDG.js.map} +0 -0
- /package/dist/{chunk-AL3TCNSJ.js.map → chunk-J6GZ2254.js.map} +0 -0
- /package/dist/{chunk-OH55F76C.js.map → chunk-JEX2JL3U.js.map} +0 -0
- /package/dist/{chunk-AVGDYYMA.js.map → chunk-JGQEF33K.js.map} +0 -0
- /package/dist/{chunk-6P7U3HWG.js.map → chunk-K36RMINQ.js.map} +0 -0
- /package/dist/{chunk-UW6LBFYN.js.map → chunk-K47G2CBP.js.map} +0 -0
- /package/dist/{chunk-3RHU5MD7.js.map → chunk-K7LLGCPH.js.map} +0 -0
- /package/dist/{chunk-BUKK5SWA.js.map → chunk-KQAFEZQX.js.map} +0 -0
- /package/dist/{chunk-R2BIVU2Z.js.map → chunk-LTST4R7U.js.map} +0 -0
- /package/dist/{chunk-IZBIDPMY.js.map → chunk-LYTKNK5O.js.map} +0 -0
- /package/dist/{chunk-HH73M65H.js.map → chunk-MCFI6G7U.js.map} +0 -0
- /package/dist/{chunk-V6SBA5O7.js.map → chunk-MFKBYXBY.js.map} +0 -0
- /package/dist/{chunk-AYJQ644F.js.map → chunk-MK7HXGM6.js.map} +0 -0
- /package/dist/{chunk-MOIJWWNA.js.map → chunk-MKMIY3E7.js.map} +0 -0
- /package/dist/{chunk-EXQJMFRF.js.map → chunk-MRN2MKB7.js.map} +0 -0
- /package/dist/{chunk-W26D2USW.js.map → chunk-MUH7RR6T.js.map} +0 -0
- /package/dist/{chunk-64JLBFCQ.js.map → chunk-N7NAGECH.js.map} +0 -0
- /package/dist/{chunk-75DCOS6I.js.map → chunk-OAKOAOEG.js.map} +0 -0
- /package/dist/{chunk-DDBB55L2.js.map → chunk-OAQO5AZJ.js.map} +0 -0
- /package/dist/{chunk-OPFVXM2D.js.map → chunk-OX6GY22Q.js.map} +0 -0
- /package/dist/{chunk-XWE3EOWX.js.map → chunk-RZED7FAU.js.map} +0 -0
- /package/dist/{chunk-YSATDEBY.js.map → chunk-SBRUTD5O.js.map} +0 -0
- /package/dist/{chunk-ZORS5BG5.js.map → chunk-SQO5SEKA.js.map} +0 -0
- /package/dist/{chunk-PRKNAIGZ.js.map → chunk-T6T2RMWW.js.map} +0 -0
- /package/dist/{chunk-O5ZINWW3.js.map → chunk-THFSCUFC.js.map} +0 -0
- /package/dist/{chunk-CIEEYVUB.js.map → chunk-TPX7XXY4.js.map} +0 -0
- /package/dist/{chunk-OCK4D5PC.js.map → chunk-TSZP7GGJ.js.map} +0 -0
- /package/dist/{chunk-L334PSLW.js.map → chunk-U2A56LLF.js.map} +0 -0
- /package/dist/{chunk-TGQW3AMK.js.map → chunk-UIFWZMO7.js.map} +0 -0
- /package/dist/{chunk-LN4X2NDA.js.map → chunk-UJ2FP2RV.js.map} +0 -0
- /package/dist/{chunk-4MPAKYZU.js.map → chunk-VDYRXI3E.js.map} +0 -0
- /package/dist/{chunk-IHCXMYSE.js.map → chunk-VPEIWMUT.js.map} +0 -0
- /package/dist/{chunk-ELHJK7LM.js.map → chunk-WBN66HPI.js.map} +0 -0
- /package/dist/{chunk-BJLCV2P3.js.map → chunk-WGRAB3KB.js.map} +0 -0
- /package/dist/{chunk-IVUVQPTQ.js.map → chunk-WIW4LOZL.js.map} +0 -0
- /package/dist/{chunk-5KDDAQ6K.js.map → chunk-WN2DASTS.js.map} +0 -0
- /package/dist/{chunk-UVYI6VIX.js.map → chunk-X7Y7WX73.js.map} +0 -0
- /package/dist/{chunk-5Y6VA6X2.js.map → chunk-XDUP6SWG.js.map} +0 -0
- /package/dist/{chunk-GHHQLSSY.js.map → chunk-XR4QR3JT.js.map} +0 -0
- /package/dist/{chunk-64S6X4IU.js.map → chunk-XTN54NML.js.map} +0 -0
- /package/dist/{chunk-QGFR73SN.js.map → chunk-YIG4HPY4.js.map} +0 -0
- /package/dist/{chunk-UYUFDTIX.js.map → chunk-YIXWY4OZ.js.map} +0 -0
- /package/dist/{chunk-GJ4HU6LK.js.map → chunk-YLMTFRZR.js.map} +0 -0
- /package/dist/{chunk-GGD2YDS6.js.map → chunk-YRMSHA7H.js.map} +0 -0
- /package/dist/{chunk-KZZ5EZ7O.js.map → chunk-ZS5LREUZ.js.map} +0 -0
- /package/dist/{chunk-JLGBJ4AX.js.map → chunk-ZYEWTVNQ.js.map} +0 -0
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
EMBEDDING_SHARD_FILE_PATTERN
|
|
3
|
+
} from "./chunk-LDWE7OZS.js";
|
|
4
4
|
import {
|
|
5
5
|
prepareSafeArchiveRoot,
|
|
6
6
|
resolveSafeArchiveTarget
|
|
7
7
|
} from "./chunk-GCGJW34D.js";
|
|
8
8
|
import {
|
|
9
|
-
|
|
10
|
-
} from "./chunk-
|
|
9
|
+
matchesOfflineSyncDefaultExclude
|
|
10
|
+
} from "./chunk-63LFM77Z.js";
|
|
11
|
+
import {
|
|
12
|
+
assertEmbeddingGenerationLockHeld,
|
|
13
|
+
embeddingGenerationLockPath,
|
|
14
|
+
withEmbeddingGenerationLock
|
|
15
|
+
} from "./chunk-XZ66U5M3.js";
|
|
11
16
|
import {
|
|
12
17
|
EmbeddingIndexFileStore,
|
|
13
18
|
EmbeddingIndexStorageError,
|
|
@@ -16,11 +21,6 @@ import {
|
|
|
16
21
|
shardEntriesForIndex,
|
|
17
22
|
validateShardMembership
|
|
18
23
|
} from "./chunk-SWRRZNHM.js";
|
|
19
|
-
import {
|
|
20
|
-
assertEmbeddingGenerationLockHeld,
|
|
21
|
-
embeddingGenerationLockPath,
|
|
22
|
-
withEmbeddingGenerationLock
|
|
23
|
-
} from "./chunk-XZ66U5M3.js";
|
|
24
24
|
import {
|
|
25
25
|
GENERATION_MARKER_BASENAME,
|
|
26
26
|
beginGenerationMarker,
|
|
@@ -709,4 +709,4 @@ export {
|
|
|
709
709
|
divergedEmbeddingGenerationDeferrals,
|
|
710
710
|
applyIncomingEmbeddingGenerations
|
|
711
711
|
};
|
|
712
|
-
//# sourceMappingURL=chunk-
|
|
712
|
+
//# sourceMappingURL=chunk-WN2DASTS.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
log
|
|
3
|
+
} from "./chunk-3WCASNQZ.js";
|
|
4
|
+
|
|
5
|
+
// src/access-observe-stage-timing.ts
|
|
6
|
+
var OBSERVE_SLOW_LOG_MS = 1e4;
|
|
7
|
+
function createObserveStageTimer() {
|
|
8
|
+
const startedAtMs = performance.now();
|
|
9
|
+
const stageMs = {};
|
|
10
|
+
const formatStages = () => Object.entries(stageMs).map(([stage, ms]) => `${stage}Ms=${Math.round(ms)}`).join(" ");
|
|
11
|
+
return {
|
|
12
|
+
async timed(stage, fn) {
|
|
13
|
+
const stageStartMs = performance.now();
|
|
14
|
+
try {
|
|
15
|
+
return await fn();
|
|
16
|
+
} finally {
|
|
17
|
+
stageMs[stage] = (stageMs[stage] ?? 0) + (performance.now() - stageStartMs);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
logSlow(messages) {
|
|
21
|
+
const totalMs = Math.round(performance.now() - startedAtMs);
|
|
22
|
+
if (totalMs < OBSERVE_SLOW_LOG_MS) return;
|
|
23
|
+
log.warn(
|
|
24
|
+
`access-observe-slow totalMs=${totalMs} messages=${messages} ${formatStages()}`
|
|
25
|
+
);
|
|
26
|
+
},
|
|
27
|
+
logFailed(messages) {
|
|
28
|
+
log.warn(
|
|
29
|
+
`access-observe-failed totalMs=${Math.round(performance.now() - startedAtMs)} messages=${messages} ${formatStages()}`
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
createObserveStageTimer
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-WZU5AGO6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/access-observe-stage-timing.ts"],"sourcesContent":["/**\n * Noncontent stage timing for the observe surface.\n *\n * Durations only — never message content, session keys, namespaces or\n * principals. A monotonic clock (`performance.now`) keeps phase durations\n * sane under wall-clock corrections.\n *\n * A slow observe logs `access-observe-slow`; a failed observe always logs\n * `access-observe-failed`, so a 25s-class stall attributes to a phase\n * instead of a guess.\n */\nimport { log } from \"./logger.js\";\n\n/** Observes slower than this log `access-observe-slow` with per-stage durations. */\nconst OBSERVE_SLOW_LOG_MS = 10_000;\n\nexport interface ObserveStageTimer {\n /** Run one stage, recording its duration even when the stage rejects. */\n timed<T>(stage: string, fn: () => Promise<T>): Promise<T>;\n /** Log a slow successful observe with per-stage durations. */\n logSlow(messages: number): void;\n /** Log a failed observe with per-stage durations. */\n logFailed(messages: number): void;\n}\n\n/** Timer for one observe request. */\nexport function createObserveStageTimer(): ObserveStageTimer {\n const startedAtMs = performance.now();\n const stageMs: Record<string, number> = {};\n\n const formatStages = (): string =>\n Object.entries(stageMs)\n .map(([stage, ms]) => `${stage}Ms=${Math.round(ms)}`)\n .join(\" \");\n\n return {\n async timed<T>(stage: string, fn: () => Promise<T>): Promise<T> {\n const stageStartMs = performance.now();\n try {\n return await fn();\n } finally {\n stageMs[stage] = (stageMs[stage] ?? 0) + (performance.now() - stageStartMs);\n }\n },\n logSlow(messages: number): void {\n const totalMs = Math.round(performance.now() - startedAtMs);\n if (totalMs < OBSERVE_SLOW_LOG_MS) return;\n log.warn(\n `access-observe-slow totalMs=${totalMs} messages=${messages} ${formatStages()}`,\n );\n },\n logFailed(messages: number): void {\n log.warn(\n `access-observe-failed totalMs=${Math.round(performance.now() - startedAtMs)} messages=${messages} ${formatStages()}`,\n );\n },\n };\n}\n"],"mappings":";;;;;AAcA,IAAM,sBAAsB;AAYrB,SAAS,0BAA6C;AAC3D,QAAM,cAAc,YAAY,IAAI;AACpC,QAAM,UAAkC,CAAC;AAEzC,QAAM,eAAe,MACnB,OAAO,QAAQ,OAAO,EACnB,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC,EAAE,EACnD,KAAK,GAAG;AAEb,SAAO;AAAA,IACL,MAAM,MAAS,OAAe,IAAkC;AAC9D,YAAM,eAAe,YAAY,IAAI;AACrC,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,UAAE;AACA,gBAAQ,KAAK,KAAK,QAAQ,KAAK,KAAK,MAAM,YAAY,IAAI,IAAI;AAAA,MAChE;AAAA,IACF;AAAA,IACA,QAAQ,UAAwB;AAC9B,YAAM,UAAU,KAAK,MAAM,YAAY,IAAI,IAAI,WAAW;AAC1D,UAAI,UAAU,oBAAqB;AACnC,UAAI;AAAA,QACF,+BAA+B,OAAO,aAAa,QAAQ,IAAI,aAAa,CAAC;AAAA,MAC/E;AAAA,IACF;AAAA,IACA,UAAU,UAAwB;AAChC,UAAI;AAAA,QACF,iCAAiC,KAAK,MAAM,YAAY,IAAI,IAAI,WAAW,CAAC,aAAa,QAAQ,IAAI,aAAa,CAAC;AAAA,MACrH;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StorageManager
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-ILD7N3XC.js";
|
|
4
4
|
import {
|
|
5
5
|
composeMemoryEnvelope
|
|
6
6
|
} from "./chunk-JRVMCZE3.js";
|
|
@@ -546,4 +546,4 @@ export {
|
|
|
546
546
|
setSemanticRulePromotionTestHooks,
|
|
547
547
|
promoteSemanticRuleFromMemory
|
|
548
548
|
};
|
|
549
|
-
//# sourceMappingURL=chunk-
|
|
549
|
+
//# sourceMappingURL=chunk-XDUP6SWG.js.map
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
} from "./chunk-YUTT4ZTI.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveDefaultNamespaceRoot
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-D3AGBN6G.js";
|
|
12
12
|
import {
|
|
13
13
|
StorageManager,
|
|
14
14
|
readRawMemoryDocument
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-ILD7N3XC.js";
|
|
16
16
|
import {
|
|
17
17
|
parseContinuityImprovementLoops
|
|
18
18
|
} from "./chunk-LDXUBPMO.js";
|
|
@@ -1869,4 +1869,4 @@ export {
|
|
|
1869
1869
|
defaultTierMigrationCycleBudget,
|
|
1870
1870
|
CompoundingEngine
|
|
1871
1871
|
};
|
|
1872
|
-
//# sourceMappingURL=chunk-
|
|
1872
|
+
//# sourceMappingURL=chunk-XR4QR3JT.js.map
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ClaudeCodeAdapter
|
|
3
|
+
} from "./chunk-3JKYQBLC.js";
|
|
1
4
|
import {
|
|
2
5
|
CodexAdapter
|
|
3
6
|
} from "./chunk-7RKSJVOQ.js";
|
|
@@ -7,9 +10,6 @@ import {
|
|
|
7
10
|
import {
|
|
8
11
|
ReplitAdapter
|
|
9
12
|
} from "./chunk-SI36RWC3.js";
|
|
10
|
-
import {
|
|
11
|
-
ClaudeCodeAdapter
|
|
12
|
-
} from "./chunk-3JKYQBLC.js";
|
|
13
13
|
import {
|
|
14
14
|
headerValue
|
|
15
15
|
} from "./chunk-NJAIR57U.js";
|
|
@@ -110,4 +110,4 @@ export {
|
|
|
110
110
|
OpenCodeAdapter,
|
|
111
111
|
AdapterRegistry
|
|
112
112
|
};
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
113
|
+
//# sourceMappingURL=chunk-XTN54NML.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
defineOperation
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-B7YAIHAV.js";
|
|
4
4
|
import {
|
|
5
5
|
EngramAccessInputError
|
|
6
6
|
} from "./chunk-LGEH473S.js";
|
|
@@ -92,4 +92,4 @@ defineOperation({
|
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
94
|
});
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-YIG4HPY4.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-AJG2TAMR.js";
|
|
4
4
|
import {
|
|
5
5
|
deepRecallRequestSchema
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-CIL4GHMD.js";
|
|
7
7
|
import {
|
|
8
8
|
EngramAccessInputError
|
|
9
9
|
} from "./chunk-LGEH473S.js";
|
|
@@ -40,4 +40,4 @@ async function respondDeepRecall(req, res, respondJson, readJsonBody, service, s
|
|
|
40
40
|
export {
|
|
41
41
|
respondDeepRecall
|
|
42
42
|
};
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
43
|
+
//# sourceMappingURL=chunk-YIXWY4OZ.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SupportPassportError,
|
|
3
3
|
getOperation
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-B7YAIHAV.js";
|
|
5
5
|
import {
|
|
6
6
|
abortError,
|
|
7
7
|
isAbortError
|
|
@@ -499,4 +499,4 @@ export {
|
|
|
499
499
|
buildSupportPassportPublicRequestHandler,
|
|
500
500
|
composeSupportPassportExternalRequestHandlers
|
|
501
501
|
};
|
|
502
|
-
//# sourceMappingURL=chunk-
|
|
502
|
+
//# sourceMappingURL=chunk-YLMTFRZR.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SUPPORT_PASSPORT_DRAFT_MAX_CONTENT_CHARACTERS,
|
|
3
3
|
SUPPORT_PASSPORT_DRAFT_MAX_MEMORIES
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-B7YAIHAV.js";
|
|
5
5
|
import {
|
|
6
6
|
SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH
|
|
7
7
|
} from "./chunk-PWPIERBM.js";
|
|
@@ -343,4 +343,4 @@ export {
|
|
|
343
343
|
parseSupportPassportModelJob,
|
|
344
344
|
SupportPassportModelBridge
|
|
345
345
|
};
|
|
346
|
-
//# sourceMappingURL=chunk-
|
|
346
|
+
//# sourceMappingURL=chunk-YRMSHA7H.js.map
|
|
@@ -1,6 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
LcmSummarizer
|
|
3
|
+
} from "./chunk-AQNHEDXP.js";
|
|
4
|
+
import {
|
|
5
|
+
LcmArchive
|
|
6
|
+
} from "./chunk-SDL22RRW.js";
|
|
7
|
+
import {
|
|
8
|
+
LcmDag
|
|
9
|
+
} from "./chunk-7N4KAIGN.js";
|
|
1
10
|
import {
|
|
2
11
|
LcmWorkQueue
|
|
3
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-QNN4FYBD.js";
|
|
4
13
|
import {
|
|
5
14
|
assembleCompressedHistoryWithTrace
|
|
6
15
|
} from "./chunk-UXPUUL3G.js";
|
|
@@ -8,15 +17,6 @@ import {
|
|
|
8
17
|
ensureLcmStateDir,
|
|
9
18
|
openLcmDatabase
|
|
10
19
|
} from "./chunk-DDA47TES.js";
|
|
11
|
-
import {
|
|
12
|
-
LcmSummarizer
|
|
13
|
-
} from "./chunk-KOLJJN5G.js";
|
|
14
|
-
import {
|
|
15
|
-
LcmArchive
|
|
16
|
-
} from "./chunk-WVP2I6C5.js";
|
|
17
|
-
import {
|
|
18
|
-
LcmDag
|
|
19
|
-
} from "./chunk-7N4KAIGN.js";
|
|
20
20
|
import {
|
|
21
21
|
nativeBindingRecoveryHint
|
|
22
22
|
} from "./chunk-LD72P4YS.js";
|
|
@@ -74,6 +74,9 @@ var EMPTY_LCM_STATS = {
|
|
|
74
74
|
totalSummaryNodes: 0,
|
|
75
75
|
maxDepth: -1
|
|
76
76
|
};
|
|
77
|
+
var LCM_SUMMARIZE_MAX_LEAF_BATCHES_PER_JOB = 16;
|
|
78
|
+
var LCM_SUMMARIZE_RETRY_BASE_MS = 500;
|
|
79
|
+
var LCM_SUMMARIZE_RETRY_MAX_MS = 3e4;
|
|
77
80
|
var LcmEngine = class {
|
|
78
81
|
constructor(pluginConfig, summarizeFn) {
|
|
79
82
|
this.summarizeFn = summarizeFn;
|
|
@@ -90,6 +93,14 @@ var LcmEngine = class {
|
|
|
90
93
|
config;
|
|
91
94
|
memoryDir;
|
|
92
95
|
initPromise = null;
|
|
96
|
+
summarizeRetryTimers = /* @__PURE__ */ new Map();
|
|
97
|
+
summarizeRetryAttempts = /* @__PURE__ */ new Map();
|
|
98
|
+
/** Resolved when the session's pending retry timer has fired or been cleared. */
|
|
99
|
+
summarizeRetryWaiters = /* @__PURE__ */ new Map();
|
|
100
|
+
/** Explicit idle waiters per session; referenced only while nonzero. */
|
|
101
|
+
summarizeRetryIdleWaiters = /* @__PURE__ */ new Map();
|
|
102
|
+
/** Base backoff delay; tests shrink it to keep the retry loop fast. */
|
|
103
|
+
summarizeRetryBaseMs = LCM_SUMMARIZE_RETRY_BASE_MS;
|
|
93
104
|
pendingObserveInitCounts = /* @__PURE__ */ new Map();
|
|
94
105
|
pendingObserveInitWaiters = /* @__PURE__ */ new Map();
|
|
95
106
|
pendingObserveInitIdleWaiters = [];
|
|
@@ -130,8 +141,8 @@ var LcmEngine = class {
|
|
|
130
141
|
);
|
|
131
142
|
const observeQueue = new LcmWorkQueue({
|
|
132
143
|
concurrency: this.config.observeConcurrency,
|
|
133
|
-
worker: async (sessionId
|
|
134
|
-
await this.
|
|
144
|
+
worker: async (sessionId) => {
|
|
145
|
+
await this.processSummarizeJob(sessionId);
|
|
135
146
|
},
|
|
136
147
|
hooks: {
|
|
137
148
|
onJobStart: ({ sessionId, depth, inFlight, waitMs }) => {
|
|
@@ -169,47 +180,73 @@ var LcmEngine = class {
|
|
|
169
180
|
this.dag = dag;
|
|
170
181
|
this.summarizer = summarizer;
|
|
171
182
|
this.observeQueue = observeQueue;
|
|
183
|
+
this.resumeOutstandingSummaries();
|
|
172
184
|
log.info("LCM engine initialized");
|
|
173
185
|
}
|
|
174
186
|
/**
|
|
175
|
-
*
|
|
176
|
-
*
|
|
187
|
+
* Restart resume: sessions whose durable archive still holds complete
|
|
188
|
+
* unsummarized batches get a summary job without any new observe call.
|
|
189
|
+
* Only session references are queued — the content already lives in SQLite.
|
|
190
|
+
*/
|
|
191
|
+
resumeOutstandingSummaries() {
|
|
192
|
+
if (!this.archive || !this.observeQueue) return;
|
|
193
|
+
const sessions = this.archive.listSessionsWithUnsummarizedTurns(
|
|
194
|
+
this.config.leafBatchSize
|
|
195
|
+
);
|
|
196
|
+
if (sessions.length === 0) return;
|
|
197
|
+
for (const sessionId of sessions) this.observeQueue.enqueue(sessionId);
|
|
198
|
+
log.info(`LCM resume scheduled summary jobs: sessions=${sessions.length}`);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Archive observed messages and schedule background summarization.
|
|
202
|
+
*
|
|
203
|
+
* The archive append completes BEFORE this resolves: an accepted observe is
|
|
204
|
+
* already durable in SQLite, so a crash cannot lose it. Only the
|
|
205
|
+
* summarization is background work, and it resumes from the durable archive.
|
|
177
206
|
*/
|
|
178
207
|
async observeMessages(sessionId, messages) {
|
|
179
208
|
const normalizedSessionId = normalizeLcmSessionId(sessionId);
|
|
180
209
|
if (!normalizedSessionId) return;
|
|
181
|
-
this.enqueueObserveMessages(normalizedSessionId, messages);
|
|
210
|
+
await this.enqueueObserveMessages(normalizedSessionId, messages);
|
|
182
211
|
}
|
|
183
|
-
/**
|
|
184
|
-
|
|
185
|
-
|
|
212
|
+
/**
|
|
213
|
+
* Durably archive messages, then queue a metadata-only summary job.
|
|
214
|
+
*
|
|
215
|
+
* Rejects when the archive append fails — callers must not treat a failed
|
|
216
|
+
* archive as an accepted observation.
|
|
217
|
+
*/
|
|
218
|
+
async enqueueObserveMessages(sessionId, messages) {
|
|
219
|
+
if (!this.config.enabled) return;
|
|
220
|
+
if (this.closed) throw new Error("LCM engine is closed");
|
|
186
221
|
const normalizedSessionId = normalizeLcmSessionId(sessionId);
|
|
187
222
|
if (!normalizedSessionId) return;
|
|
188
223
|
if (messages.length === 0) return;
|
|
189
224
|
this.reservePendingObserveInit(normalizedSessionId);
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
this.
|
|
225
|
+
try {
|
|
226
|
+
await this.ensureInitialized();
|
|
227
|
+
if (this.closed) throw new Error("LCM engine is closed");
|
|
228
|
+
if (!this.archive || !this.observeQueue) {
|
|
229
|
+
throw new Error("LCM engine is not initialized");
|
|
230
|
+
}
|
|
231
|
+
const archived = this.archiveObservedMessages(normalizedSessionId, messages);
|
|
232
|
+
this.observeQueue.enqueue(normalizedSessionId);
|
|
193
233
|
log.debug(
|
|
194
|
-
`LCM observe
|
|
234
|
+
`LCM observe archived: session=${normalizedSessionId}, messages=${archived}, depth=${this.observeQueue.depth}, inFlight=${this.observeQueue.inFlightCount}`
|
|
195
235
|
);
|
|
196
|
-
}
|
|
197
|
-
if (this.closed) return;
|
|
236
|
+
} catch (err) {
|
|
198
237
|
log.error(
|
|
199
|
-
`LCM observe
|
|
238
|
+
`LCM observe archive failed: session=${normalizedSessionId}, error=${err}${nativeBindingRecoveryHint(err)}`
|
|
200
239
|
);
|
|
201
|
-
|
|
240
|
+
throw err;
|
|
241
|
+
} finally {
|
|
202
242
|
this.releasePendingObserveInit(normalizedSessionId);
|
|
203
|
-
}
|
|
243
|
+
}
|
|
204
244
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
await this.ensureInitialized();
|
|
208
|
-
if (this.closed || !this.archive || !this.summarizer) return;
|
|
209
|
-
if (messages.length === 0) return;
|
|
245
|
+
/** Append observed messages to the archive; returns the number of rows. */
|
|
246
|
+
archiveObservedMessages(sessionId, messages) {
|
|
210
247
|
const currentMax = this.archive.getMaxTurnIndex(sessionId);
|
|
211
248
|
const { messagePartsEnabled } = this.config;
|
|
212
|
-
const
|
|
249
|
+
const rows = messages.map((m, i) => ({
|
|
213
250
|
turnIndex: currentMax + 1 + i,
|
|
214
251
|
role: m.role,
|
|
215
252
|
content: m.content,
|
|
@@ -217,14 +254,90 @@ var LcmEngine = class {
|
|
|
217
254
|
rawContent: messagePartsEnabled ? m.rawContent : void 0,
|
|
218
255
|
sourceFormat: messagePartsEnabled ? m.sourceFormat : void 0
|
|
219
256
|
}));
|
|
220
|
-
this.archive.appendMessages(sessionId,
|
|
221
|
-
|
|
222
|
-
|
|
257
|
+
this.archive.appendMessages(sessionId, rows, { messagePartsEnabled });
|
|
258
|
+
return rows.length;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Summarize one session's durable backlog.
|
|
262
|
+
*
|
|
263
|
+
* The pass is capped so a long backlog never holds a job open indefinitely;
|
|
264
|
+
* remaining batches stay durable and the job re-queues itself.
|
|
265
|
+
*/
|
|
266
|
+
async processSummarizeJob(sessionId) {
|
|
267
|
+
if (this.closed) return;
|
|
268
|
+
await this.ensureInitialized();
|
|
269
|
+
if (this.closed || !this.archive || !this.summarizer || !this.observeQueue)
|
|
270
|
+
return;
|
|
223
271
|
try {
|
|
224
|
-
await this.summarizer.summarizeIncremental(sessionId
|
|
272
|
+
await this.summarizer.summarizeIncremental(sessionId, {
|
|
273
|
+
maxLeafBatches: LCM_SUMMARIZE_MAX_LEAF_BATCHES_PER_JOB
|
|
274
|
+
});
|
|
225
275
|
} catch (err) {
|
|
226
|
-
log.
|
|
276
|
+
log.error(`LCM incremental summarization failed: session=${sessionId}, error=${err}`);
|
|
277
|
+
this.scheduleSummarizeRetry(sessionId);
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
this.clearSummarizeRetry(sessionId);
|
|
281
|
+
if (this.hasCompleteBatchPending(sessionId)) {
|
|
282
|
+
this.observeQueue.enqueue(sessionId);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Schedule a metadata-only retry for a failed summary pass.
|
|
287
|
+
*
|
|
288
|
+
* The retry keeps trying for as long as the engine is open and complete
|
|
289
|
+
* batches remain — a transient failure must never strand durable work.
|
|
290
|
+
* What is bounded is the RATE, not the ability to retry: one pending timer
|
|
291
|
+
* per session, exponential backoff capped at
|
|
292
|
+
* {@link LCM_SUMMARIZE_RETRY_MAX_MS}, and an unreferenced timer that is
|
|
293
|
+
* cleared when the engine closes.
|
|
294
|
+
*/
|
|
295
|
+
scheduleSummarizeRetry(sessionId) {
|
|
296
|
+
if (this.closed || this.summarizeRetryTimers.has(sessionId)) return;
|
|
297
|
+
const attempt = (this.summarizeRetryAttempts.get(sessionId) ?? 0) + 1;
|
|
298
|
+
this.summarizeRetryAttempts.set(sessionId, attempt);
|
|
299
|
+
const delayMs = Math.min(
|
|
300
|
+
LCM_SUMMARIZE_RETRY_MAX_MS,
|
|
301
|
+
this.summarizeRetryBaseMs * 2 ** Math.min(attempt - 1, 16)
|
|
302
|
+
);
|
|
303
|
+
const retry = Promise.withResolvers();
|
|
304
|
+
this.summarizeRetryWaiters.set(sessionId, retry);
|
|
305
|
+
const timer = setTimeout(() => {
|
|
306
|
+
this.summarizeRetryTimers.delete(sessionId);
|
|
307
|
+
this.summarizeRetryWaiters.delete(sessionId);
|
|
308
|
+
if (this.closed) {
|
|
309
|
+
retry.resolve();
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (!this.hasCompleteBatchPending(sessionId)) {
|
|
313
|
+
this.summarizeRetryAttempts.delete(sessionId);
|
|
314
|
+
retry.resolve();
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
this.observeQueue?.enqueue(sessionId);
|
|
318
|
+
retry.resolve();
|
|
319
|
+
}, delayMs);
|
|
320
|
+
timer.unref?.();
|
|
321
|
+
this.summarizeRetryTimers.set(sessionId, timer);
|
|
322
|
+
}
|
|
323
|
+
/** True when the session still holds a complete unsummarized batch. */
|
|
324
|
+
hasCompleteBatchPending(sessionId) {
|
|
325
|
+
if (!this.archive) return false;
|
|
326
|
+
return this.archive.countUnsummarizedMessages(sessionId) >= this.config.leafBatchSize;
|
|
327
|
+
}
|
|
328
|
+
/** Drop a pending retry, its attempt counter, and release idle waiters. */
|
|
329
|
+
clearSummarizeRetry(sessionId) {
|
|
330
|
+
const timer = this.summarizeRetryTimers.get(sessionId);
|
|
331
|
+
if (timer) {
|
|
332
|
+
clearTimeout(timer);
|
|
333
|
+
this.summarizeRetryTimers.delete(sessionId);
|
|
334
|
+
}
|
|
335
|
+
const waiter = this.summarizeRetryWaiters.get(sessionId);
|
|
336
|
+
if (waiter) {
|
|
337
|
+
this.summarizeRetryWaiters.delete(sessionId);
|
|
338
|
+
waiter.resolve();
|
|
227
339
|
}
|
|
340
|
+
this.summarizeRetryAttempts.delete(sessionId);
|
|
228
341
|
}
|
|
229
342
|
get observeQueueDepth() {
|
|
230
343
|
return this.observeQueue?.depth ?? 0;
|
|
@@ -232,12 +345,21 @@ var LcmEngine = class {
|
|
|
232
345
|
get observeQueueInFlightCount() {
|
|
233
346
|
return this.observeQueue?.inFlightCount ?? 0;
|
|
234
347
|
}
|
|
235
|
-
async waitForObserveQueueIdle() {
|
|
348
|
+
async waitForObserveQueueIdle(abortSignal) {
|
|
349
|
+
abortSignal?.throwIfAborted();
|
|
236
350
|
if (!this.config.enabled || this.closed) return;
|
|
237
351
|
await this.ensureInitialized();
|
|
352
|
+
abortSignal?.throwIfAborted();
|
|
238
353
|
if (this.closed) return;
|
|
239
|
-
|
|
240
|
-
|
|
354
|
+
for (; ; ) {
|
|
355
|
+
abortSignal?.throwIfAborted();
|
|
356
|
+
await this.waitForPendingObserveInitIdle(void 0, abortSignal);
|
|
357
|
+
await this.observeQueue?.whenIdle(abortSignal);
|
|
358
|
+
abortSignal?.throwIfAborted();
|
|
359
|
+
const entry = [...this.summarizeRetryWaiters.entries()][0];
|
|
360
|
+
if (!entry) return;
|
|
361
|
+
await this.awaitSummarizeRetry(entry[0], entry[1], abortSignal);
|
|
362
|
+
}
|
|
241
363
|
}
|
|
242
364
|
async waitForSessionObserveIdle(sessionId, abortSignal) {
|
|
243
365
|
abortSignal?.throwIfAborted();
|
|
@@ -247,8 +369,34 @@ var LcmEngine = class {
|
|
|
247
369
|
await this.ensureInitialized();
|
|
248
370
|
abortSignal?.throwIfAborted();
|
|
249
371
|
if (this.closed) return;
|
|
250
|
-
|
|
251
|
-
|
|
372
|
+
for (; ; ) {
|
|
373
|
+
await this.waitForPendingObserveInitIdle(normalizedSessionId, abortSignal);
|
|
374
|
+
await this.observeQueue?.whenSessionIdle(normalizedSessionId, abortSignal) ?? Promise.resolve();
|
|
375
|
+
const waiter = this.summarizeRetryWaiters.get(normalizedSessionId);
|
|
376
|
+
if (!waiter) return;
|
|
377
|
+
await this.awaitSummarizeRetry(normalizedSessionId, waiter, abortSignal);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Park an explicit idle wait on a pending retry. While any wait is parked,
|
|
382
|
+
* the retry timer is referenced so a one-shot host cannot exit under the
|
|
383
|
+
* wait; with no waiters the timer stays unreferenced background work.
|
|
384
|
+
*/
|
|
385
|
+
async awaitSummarizeRetry(sessionId, waiter, abortSignal) {
|
|
386
|
+
const waiters = (this.summarizeRetryIdleWaiters.get(sessionId) ?? 0) + 1;
|
|
387
|
+
this.summarizeRetryIdleWaiters.set(sessionId, waiters);
|
|
388
|
+
this.summarizeRetryTimers.get(sessionId)?.ref?.();
|
|
389
|
+
try {
|
|
390
|
+
await abortOnSignal(abortSignal, waiter.promise);
|
|
391
|
+
} finally {
|
|
392
|
+
const remaining = (this.summarizeRetryIdleWaiters.get(sessionId) ?? 1) - 1;
|
|
393
|
+
if (remaining <= 0) {
|
|
394
|
+
this.summarizeRetryIdleWaiters.delete(sessionId);
|
|
395
|
+
this.summarizeRetryTimers.get(sessionId)?.unref?.();
|
|
396
|
+
} else {
|
|
397
|
+
this.summarizeRetryIdleWaiters.set(sessionId, remaining);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
252
400
|
}
|
|
253
401
|
reservePendingObserveInit(sessionId) {
|
|
254
402
|
const count = this.pendingObserveInitCounts.get(sessionId) ?? 0;
|
|
@@ -296,8 +444,18 @@ var LcmEngine = class {
|
|
|
296
444
|
return;
|
|
297
445
|
}
|
|
298
446
|
if (this.pendingObserveInitCounts.size === 0) return;
|
|
299
|
-
await new Promise((resolve) => {
|
|
300
|
-
|
|
447
|
+
await new Promise((resolve, reject) => {
|
|
448
|
+
const finish = () => {
|
|
449
|
+
abortSignal?.removeEventListener("abort", onAbort);
|
|
450
|
+
resolve();
|
|
451
|
+
};
|
|
452
|
+
const onAbort = () => {
|
|
453
|
+
const remaining = this.pendingObserveInitIdleWaiters.filter((waiter) => waiter !== finish);
|
|
454
|
+
this.pendingObserveInitIdleWaiters.splice(0, this.pendingObserveInitIdleWaiters.length, ...remaining);
|
|
455
|
+
reject(abortSignal?.reason instanceof Error ? abortSignal.reason : new DOMException("Aborted", "AbortError"));
|
|
456
|
+
};
|
|
457
|
+
this.pendingObserveInitIdleWaiters.push(finish);
|
|
458
|
+
abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
301
459
|
});
|
|
302
460
|
}
|
|
303
461
|
/** Build the compressed history recall section for a session. */
|
|
@@ -536,22 +694,24 @@ ${preview}`,
|
|
|
536
694
|
};
|
|
537
695
|
}
|
|
538
696
|
/** Clear all LCM archive and summary state for one session. */
|
|
539
|
-
async clearSession(sessionId) {
|
|
697
|
+
async clearSession(sessionId, abortSignal) {
|
|
540
698
|
if (!this.config.enabled || this.closed) return;
|
|
541
699
|
const normalizedSessionId = normalizeLcmSessionId(sessionId);
|
|
542
700
|
if (!normalizedSessionId) return;
|
|
543
701
|
await this.ensureInitialized();
|
|
544
702
|
if (this.closed || !this.archive || !this.dag) return;
|
|
545
|
-
await this.waitForSessionObserveIdle(normalizedSessionId);
|
|
703
|
+
await this.waitForSessionObserveIdle(normalizedSessionId, abortSignal);
|
|
704
|
+
abortSignal?.throwIfAborted();
|
|
546
705
|
this.dag.deleteSession(normalizedSessionId);
|
|
547
706
|
this.archive.deleteSession(normalizedSessionId);
|
|
548
707
|
}
|
|
549
708
|
/** Clear all LCM archive and summary state without closing the engine. */
|
|
550
|
-
async clearAll() {
|
|
709
|
+
async clearAll(abortSignal) {
|
|
551
710
|
if (!this.config.enabled || this.closed) return;
|
|
552
711
|
await this.ensureInitialized();
|
|
553
712
|
if (this.closed || !this.archive || !this.dag) return;
|
|
554
|
-
await this.waitForObserveQueueIdle();
|
|
713
|
+
await this.waitForObserveQueueIdle(abortSignal);
|
|
714
|
+
abortSignal?.throwIfAborted();
|
|
555
715
|
this.dag.deleteAll();
|
|
556
716
|
this.archive.deleteAll();
|
|
557
717
|
}
|
|
@@ -570,6 +730,12 @@ ${preview}`,
|
|
|
570
730
|
/** Close the database connection. */
|
|
571
731
|
close() {
|
|
572
732
|
this.closed = true;
|
|
733
|
+
for (const timer of this.summarizeRetryTimers.values()) clearTimeout(timer);
|
|
734
|
+
this.summarizeRetryTimers.clear();
|
|
735
|
+
this.summarizeRetryAttempts.clear();
|
|
736
|
+
for (const retry of this.summarizeRetryWaiters.values()) retry.resolve();
|
|
737
|
+
this.summarizeRetryWaiters.clear();
|
|
738
|
+
this.summarizeRetryIdleWaiters.clear();
|
|
573
739
|
if (this.db) {
|
|
574
740
|
this.db.close();
|
|
575
741
|
}
|
|
@@ -602,4 +768,4 @@ export {
|
|
|
602
768
|
extractLcmConfig,
|
|
603
769
|
LcmEngine
|
|
604
770
|
};
|
|
605
|
-
//# sourceMappingURL=chunk-
|
|
771
|
+
//# sourceMappingURL=chunk-ZG4GNPRE.js.map
|