@remnic/core 10.0.60 → 10.0.62
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 +25 -24
- package/dist/access-authorization-probe.js +26 -25
- package/dist/access-boundary.js +25 -24
- package/dist/access-cli.js +73 -72
- package/dist/access-cli.js.map +1 -1
- package/dist/access-extraction-force-flush.js +25 -24
- package/dist/access-http-briefing.js +26 -25
- package/dist/access-http-query.js +27 -26
- package/dist/access-http.js +44 -43
- package/dist/access-identity-continuity-surface.js +25 -24
- package/dist/access-lcm-surface.js +25 -24
- package/dist/access-mcp.js +36 -35
- package/dist/access-namespace-preflight.js +25 -24
- package/dist/access-observe-write-category.js +4 -4
- package/dist/access-observe-write-surface.js +25 -24
- package/dist/access-operations-batch.js +27 -26
- package/dist/access-operations.js +34 -33
- package/dist/access-recall-concurrency.js +25 -24
- package/dist/access-recall-diagnostics.js +2 -2
- package/dist/access-recall-response.js +25 -24
- package/dist/access-recall-surface.js +25 -24
- package/dist/access-schema.js +3 -3
- package/dist/access-service.js +25 -24
- package/dist/access-surface-catalog.js +27 -26
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/active-recall.js +8 -6
- package/dist/active-recall.js.map +1 -1
- package/dist/briefing.js +8 -6
- package/dist/buffer-persistence.d.ts +14 -3
- package/dist/buffer-persistence.d.ts.map +1 -1
- package/dist/buffer-persistence.js +1 -1
- package/dist/buffer-turn-helpers.d.ts +7 -0
- package/dist/buffer-turn-helpers.d.ts.map +1 -1
- package/dist/buffer-turn-helpers.js +5 -3
- package/dist/buffer.d.ts +5 -1
- package/dist/buffer.d.ts.map +1 -1
- package/dist/buffer.js +3 -3
- package/dist/{capsule-crypto-7FJQINUR.js → capsule-crypto-GWVG7LGC.js} +2 -2
- package/dist/causal-consolidation.js +9 -7
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/{chunk-VHBGJAYC.js → chunk-25QK3LR2.js} +2 -2
- package/dist/{chunk-X2TZWVCC.js → chunk-3HLWLYRD.js} +2 -2
- package/dist/{chunk-TIS6T6UP.js → chunk-3VNRDRBM.js} +2 -2
- package/dist/{chunk-4O4VAEWH.js → chunk-4NLHEE2Z.js} +2 -2
- package/dist/{chunk-3DG2YAAX.js → chunk-6EZPYZT3.js} +62 -35
- package/dist/chunk-6EZPYZT3.js.map +1 -0
- package/dist/{chunk-I6UTOUBK.js → chunk-6VBKU3FY.js} +150 -345
- package/dist/chunk-6VBKU3FY.js.map +1 -0
- package/dist/{chunk-66CC6L6R.js → chunk-76LKZ42K.js} +2 -2
- package/dist/{chunk-LR7RW4T6.js → chunk-7ETWIBTO.js} +3 -3
- package/dist/{chunk-JM2WJBP7.js → chunk-7JFXXA57.js} +2 -2
- package/dist/{chunk-PIVSUPF2.js → chunk-A6JV3WHI.js} +2 -2
- package/dist/{chunk-MOB4JHG6.js → chunk-BDNPW3KM.js} +2 -2
- package/dist/{chunk-IJFX4JRI.js → chunk-BQOOUKEN.js} +7 -7
- package/dist/{chunk-PRSF7DWT.js → chunk-BU4W2ISH.js} +2 -2
- package/dist/{chunk-KQAFEZQX.js → chunk-BUKK5SWA.js} +2 -2
- package/dist/{chunk-JRY55I6Z.js → chunk-C2AYUXEF.js} +2 -2
- package/dist/{chunk-DF4SYU4Z.js → chunk-C5OW2FFB.js} +2 -2
- package/dist/{chunk-74Z2BYEK.js → chunk-CYEEVWQ6.js} +2 -2
- package/dist/{chunk-M7KAJBO2.js → chunk-EADUOZWH.js} +3 -3
- package/dist/{chunk-N5H22V75.js → chunk-ECT5ME6X.js} +2 -2
- package/dist/{chunk-M3GOWG2P.js → chunk-FMOUUWQN.js} +2 -2
- package/dist/{chunk-2EJAPJ5G.js → chunk-FYPKSR6Z.js} +2 -2
- package/dist/{chunk-L5RMURVI.js → chunk-GDCKOER4.js} +41 -13
- package/dist/chunk-GDCKOER4.js.map +1 -0
- package/dist/{chunk-LGLLCWA2.js → chunk-GNEB3WXR.js} +2 -2
- package/dist/{chunk-Z4EH5TSO.js → chunk-HNZH57JK.js} +2 -2
- package/dist/{chunk-PTJWUN4H.js → chunk-IJKBIOWL.js} +30 -30
- package/dist/{chunk-C5GTIRIO.js → chunk-IMNJJKHW.js} +22 -22
- package/dist/{chunk-ADK5TMQL.js → chunk-IVJI5FDA.js} +2 -2
- package/dist/{chunk-F3GX76LV.js → chunk-IWAB7JVH.js} +2 -2
- package/dist/{chunk-JFRO5HJY.js → chunk-J62O2UW5.js} +2 -2
- package/dist/chunk-JCL7RO2G.js +674 -0
- package/dist/chunk-JCL7RO2G.js.map +1 -0
- package/dist/{chunk-A3UFV4K3.js → chunk-JIYJIH5N.js} +2 -2
- package/dist/{chunk-UIX4JLVV.js → chunk-JVFYP2LD.js} +2 -2
- package/dist/{chunk-KJ3MDX4V.js → chunk-KXY4HW2Y.js} +2 -2
- package/dist/{chunk-VQ6H4DL6.js → chunk-L334PSLW.js} +4 -4
- package/dist/{chunk-IA3XZG4V.js → chunk-L74VVEJA.js} +2 -2
- package/dist/{chunk-UY67YP6Q.js → chunk-LIUI46BX.js} +2 -2
- package/dist/{chunk-4OFXLQJD.js → chunk-MPDLLLOG.js} +8 -3
- package/dist/chunk-MPDLLLOG.js.map +1 -0
- package/dist/{chunk-UP2Q7U4G.js → chunk-MTVC5S5N.js} +2 -2
- package/dist/{chunk-QWURVT5Z.js → chunk-N7CATBYH.js} +2 -2
- package/dist/{chunk-JEDS2QYV.js → chunk-OH55F76C.js} +2 -2
- package/dist/{chunk-2NLLXCJG.js → chunk-OWHERGF2.js} +2 -2
- package/dist/{chunk-G6GMZJQ4.js → chunk-PA6ZNFB7.js} +2 -2
- package/dist/{chunk-6BKSUA6P.js → chunk-PWEIZCPS.js} +2 -2
- package/dist/{chunk-T4SMMTGY.js → chunk-Q3DAWUAV.js} +2 -2
- package/dist/{chunk-AWKADEMO.js → chunk-QCAJMIAE.js} +3 -3
- package/dist/{chunk-ZRDEOC4X.js → chunk-QI7LLSWX.js} +2 -2
- package/dist/{chunk-7DHNBABU.js → chunk-QJ6IR35B.js} +3 -3
- package/dist/{chunk-J53IBVMF.js → chunk-R25JMO5O.js} +2 -2
- package/dist/{chunk-PARM6OYL.js → chunk-SEA56G6S.js} +1 -1
- package/dist/chunk-SEA56G6S.js.map +1 -0
- package/dist/{chunk-HL643H2F.js → chunk-TMWSCE2L.js} +8 -8
- package/dist/{chunk-FLDXEJFX.js → chunk-TPCRDPUY.js} +2 -2
- package/dist/{chunk-KZMRMKC7.js → chunk-U7MIMS2Y.js} +11 -1
- package/dist/chunk-U7MIMS2Y.js.map +1 -0
- package/dist/{chunk-WJC5KGYC.js → chunk-UFQB5VQ5.js} +6 -6
- package/dist/{chunk-64WHWIPL.js → chunk-UVHXLVFJ.js} +2 -2
- package/dist/{chunk-X7Y7WX73.js → chunk-UVYI6VIX.js} +1 -1
- package/dist/{chunk-5XY46Z2W.js → chunk-UXRCORZX.js} +3 -3
- package/dist/{chunk-WUL6LDJ4.js → chunk-VPEA63FC.js} +2 -2
- package/dist/{chunk-MHSUEA32.js → chunk-WA6XRNWE.js} +3 -3
- package/dist/{chunk-GGHX4YHM.js → chunk-WB3OFPM2.js} +2 -2
- package/dist/{chunk-RSYFSCKL.js → chunk-WZEDFDJ6.js} +14 -14
- package/dist/{chunk-2HVCTFKG.js → chunk-X2ZLHUEO.js} +2 -2
- package/dist/{chunk-PJLJN23N.js → chunk-XICJL56Z.js} +2 -2
- package/dist/{chunk-ZXEPLZUQ.js → chunk-YGM47S7M.js} +7 -7
- package/dist/{chunk-XWXBXBOX.js → chunk-YLB7TW2B.js} +2 -1
- package/dist/chunk-YLB7TW2B.js.map +1 -0
- package/dist/{chunk-KXDUSGPM.js → chunk-YRL4PGPP.js} +2 -2
- package/dist/{chunk-GJF337YM.js → chunk-Z45353ML.js} +2 -2
- package/dist/{chunk-NJZY5LOC.js → chunk-ZARHK7PT.js} +2 -2
- package/dist/{chunk-NF5EHQTJ.js → chunk-ZFU2B2GM.js} +5 -5
- package/dist/{chunk-W37MS6SX.js → chunk-ZRSXXWIX.js} +2 -2
- package/dist/cli.js +60 -59
- package/dist/coding/export-okf-codegraph.js +7 -5
- package/dist/coding/export-okf-codegraph.js.map +1 -1
- package/dist/compounding/engine.js +9 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +8 -6
- package/dist/connectors/codex-materialize-runner.js +8 -6
- package/dist/connectors/index.js +8 -6
- package/dist/convergence-refresh.js +10 -8
- package/dist/corpus-watermark.js +10 -8
- package/dist/deep-recall-http-glue.js +4 -4
- package/dist/entity-retrieval.js +8 -6
- package/dist/external-wiki-access.js +26 -25
- package/dist/extraction.js +8 -6
- package/dist/harmonic-retrieval.js +8 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -72
- package/dist/location/index.js +10 -8
- package/dist/maintenance/memory-governance.js +8 -6
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -6
- package/dist/maintenance/rebuild-memory-projection-runner.js +10 -8
- package/dist/maintenance/rebuild-memory-projection.js +9 -7
- package/dist/memory-browse-operations.js +26 -25
- package/dist/namespaces/migrate.js +9 -7
- package/dist/namespaces/search.js +3 -3
- package/dist/namespaces/storage.js +8 -6
- package/dist/operator-doctor-corpus.js +11 -9
- package/dist/operator-toolkit.js +17 -15
- package/dist/orchestration/buffer-drain-gate.d.ts +21 -0
- package/dist/orchestration/buffer-drain-gate.d.ts.map +1 -0
- package/dist/orchestration/buffer-drain-runner.d.ts +79 -0
- package/dist/orchestration/buffer-drain-runner.d.ts.map +1 -0
- package/dist/orchestration/buffer-drain-runner.js +780 -0
- package/dist/orchestration/buffer-drain-runner.js.map +1 -0
- package/dist/orchestration/buffer-swap.d.ts +12 -0
- package/dist/orchestration/buffer-swap.d.ts.map +1 -0
- package/dist/orchestration/maintenance.js +18 -16
- package/dist/orchestration/turn-ingestion.d.ts.map +1 -1
- package/dist/orchestrator.d.ts +4 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +73 -72
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-navigate-access.js +2 -2
- package/dist/recall-navigate-disclosure.js +2 -2
- package/dist/recall-navigate.js +2 -2
- package/dist/recall-navigation-operations.js +26 -25
- package/dist/recall-navigation.js +25 -24
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.js +2 -2
- package/dist/resume-bundles.js +9 -7
- package/dist/search/factory.js +2 -2
- package/dist/search/index.js +4 -4
- package/dist/semantic-consolidation.js +9 -7
- package/dist/semantic-rule-promotion.js +8 -6
- package/dist/semantic-rule-verifier.js +8 -6
- package/dist/source-agent-qualifier.js +8 -6
- package/dist/standup/build.js +8 -6
- package/dist/storage/buffer-drain-claims.d.ts +159 -0
- package/dist/storage/buffer-drain-claims.d.ts.map +1 -0
- package/dist/storage/buffer-drain-claims.js +18 -0
- package/dist/storage/buffer-drain-claims.js.map +1 -0
- package/dist/storage/buffer-session-files.d.ts +14 -2
- package/dist/storage/buffer-session-files.d.ts.map +1 -1
- package/dist/storage/buffer-session-files.js +22 -0
- package/dist/storage/buffer-session-files.js.map +1 -0
- package/dist/storage.d.ts +6 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +7 -5
- package/dist/support-passport/index.js +28 -27
- 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 +8 -6
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/dist/verified-recall.js +8 -6
- package/dist/who-knows-cli.js +9 -7
- package/dist/who-knows.js +8 -6
- package/package.json +32 -2
- package/src/access-observe-replay-durability.test.ts +1 -0
- package/src/buffer-drain-handover.test.ts +307 -0
- package/src/buffer-incremental-persistence.test.ts +19 -1
- package/src/buffer-persistence.ts +27 -5
- package/src/buffer-session.test.ts +3 -3
- package/src/buffer-turn-helpers.ts +16 -0
- package/src/buffer.ts +50 -10
- package/src/config.ts +1 -0
- package/src/index.ts +1 -1
- package/src/orchestration/buffer-drain-gate.test.ts +40 -0
- package/src/orchestration/buffer-drain-gate.ts +38 -0
- package/src/orchestration/buffer-drain-runner.ts +312 -0
- package/src/orchestration/buffer-swap.ts +27 -0
- package/src/orchestration/turn-ingestion.ts +2 -0
- package/src/orchestrator.ts +9 -6
- package/src/storage/buffer-drain-claims.test.ts +448 -0
- package/src/storage/buffer-drain-claims.ts +593 -0
- package/src/storage/buffer-session-files.ts +50 -3
- package/src/storage.ts +8 -11
- package/src/testing/subjects/extraction-lifecycle.test.ts +34 -0
- package/src/types.ts +2 -0
- package/dist/chunk-3DG2YAAX.js.map +0 -1
- package/dist/chunk-4OFXLQJD.js.map +0 -1
- package/dist/chunk-I6UTOUBK.js.map +0 -1
- package/dist/chunk-KZMRMKC7.js.map +0 -1
- package/dist/chunk-L5RMURVI.js.map +0 -1
- package/dist/chunk-PARM6OYL.js.map +0 -1
- package/dist/chunk-XWXBXBOX.js.map +0 -1
- /package/dist/{capsule-crypto-7FJQINUR.js.map → capsule-crypto-GWVG7LGC.js.map} +0 -0
- /package/dist/{chunk-VHBGJAYC.js.map → chunk-25QK3LR2.js.map} +0 -0
- /package/dist/{chunk-X2TZWVCC.js.map → chunk-3HLWLYRD.js.map} +0 -0
- /package/dist/{chunk-TIS6T6UP.js.map → chunk-3VNRDRBM.js.map} +0 -0
- /package/dist/{chunk-4O4VAEWH.js.map → chunk-4NLHEE2Z.js.map} +0 -0
- /package/dist/{chunk-66CC6L6R.js.map → chunk-76LKZ42K.js.map} +0 -0
- /package/dist/{chunk-LR7RW4T6.js.map → chunk-7ETWIBTO.js.map} +0 -0
- /package/dist/{chunk-JM2WJBP7.js.map → chunk-7JFXXA57.js.map} +0 -0
- /package/dist/{chunk-PIVSUPF2.js.map → chunk-A6JV3WHI.js.map} +0 -0
- /package/dist/{chunk-MOB4JHG6.js.map → chunk-BDNPW3KM.js.map} +0 -0
- /package/dist/{chunk-IJFX4JRI.js.map → chunk-BQOOUKEN.js.map} +0 -0
- /package/dist/{chunk-PRSF7DWT.js.map → chunk-BU4W2ISH.js.map} +0 -0
- /package/dist/{chunk-KQAFEZQX.js.map → chunk-BUKK5SWA.js.map} +0 -0
- /package/dist/{chunk-JRY55I6Z.js.map → chunk-C2AYUXEF.js.map} +0 -0
- /package/dist/{chunk-DF4SYU4Z.js.map → chunk-C5OW2FFB.js.map} +0 -0
- /package/dist/{chunk-74Z2BYEK.js.map → chunk-CYEEVWQ6.js.map} +0 -0
- /package/dist/{chunk-M7KAJBO2.js.map → chunk-EADUOZWH.js.map} +0 -0
- /package/dist/{chunk-N5H22V75.js.map → chunk-ECT5ME6X.js.map} +0 -0
- /package/dist/{chunk-M3GOWG2P.js.map → chunk-FMOUUWQN.js.map} +0 -0
- /package/dist/{chunk-2EJAPJ5G.js.map → chunk-FYPKSR6Z.js.map} +0 -0
- /package/dist/{chunk-LGLLCWA2.js.map → chunk-GNEB3WXR.js.map} +0 -0
- /package/dist/{chunk-Z4EH5TSO.js.map → chunk-HNZH57JK.js.map} +0 -0
- /package/dist/{chunk-PTJWUN4H.js.map → chunk-IJKBIOWL.js.map} +0 -0
- /package/dist/{chunk-C5GTIRIO.js.map → chunk-IMNJJKHW.js.map} +0 -0
- /package/dist/{chunk-ADK5TMQL.js.map → chunk-IVJI5FDA.js.map} +0 -0
- /package/dist/{chunk-F3GX76LV.js.map → chunk-IWAB7JVH.js.map} +0 -0
- /package/dist/{chunk-JFRO5HJY.js.map → chunk-J62O2UW5.js.map} +0 -0
- /package/dist/{chunk-A3UFV4K3.js.map → chunk-JIYJIH5N.js.map} +0 -0
- /package/dist/{chunk-UIX4JLVV.js.map → chunk-JVFYP2LD.js.map} +0 -0
- /package/dist/{chunk-KJ3MDX4V.js.map → chunk-KXY4HW2Y.js.map} +0 -0
- /package/dist/{chunk-VQ6H4DL6.js.map → chunk-L334PSLW.js.map} +0 -0
- /package/dist/{chunk-IA3XZG4V.js.map → chunk-L74VVEJA.js.map} +0 -0
- /package/dist/{chunk-UY67YP6Q.js.map → chunk-LIUI46BX.js.map} +0 -0
- /package/dist/{chunk-UP2Q7U4G.js.map → chunk-MTVC5S5N.js.map} +0 -0
- /package/dist/{chunk-QWURVT5Z.js.map → chunk-N7CATBYH.js.map} +0 -0
- /package/dist/{chunk-JEDS2QYV.js.map → chunk-OH55F76C.js.map} +0 -0
- /package/dist/{chunk-2NLLXCJG.js.map → chunk-OWHERGF2.js.map} +0 -0
- /package/dist/{chunk-G6GMZJQ4.js.map → chunk-PA6ZNFB7.js.map} +0 -0
- /package/dist/{chunk-6BKSUA6P.js.map → chunk-PWEIZCPS.js.map} +0 -0
- /package/dist/{chunk-T4SMMTGY.js.map → chunk-Q3DAWUAV.js.map} +0 -0
- /package/dist/{chunk-AWKADEMO.js.map → chunk-QCAJMIAE.js.map} +0 -0
- /package/dist/{chunk-ZRDEOC4X.js.map → chunk-QI7LLSWX.js.map} +0 -0
- /package/dist/{chunk-7DHNBABU.js.map → chunk-QJ6IR35B.js.map} +0 -0
- /package/dist/{chunk-J53IBVMF.js.map → chunk-R25JMO5O.js.map} +0 -0
- /package/dist/{chunk-HL643H2F.js.map → chunk-TMWSCE2L.js.map} +0 -0
- /package/dist/{chunk-FLDXEJFX.js.map → chunk-TPCRDPUY.js.map} +0 -0
- /package/dist/{chunk-WJC5KGYC.js.map → chunk-UFQB5VQ5.js.map} +0 -0
- /package/dist/{chunk-64WHWIPL.js.map → chunk-UVHXLVFJ.js.map} +0 -0
- /package/dist/{chunk-X7Y7WX73.js.map → chunk-UVYI6VIX.js.map} +0 -0
- /package/dist/{chunk-5XY46Z2W.js.map → chunk-UXRCORZX.js.map} +0 -0
- /package/dist/{chunk-WUL6LDJ4.js.map → chunk-VPEA63FC.js.map} +0 -0
- /package/dist/{chunk-MHSUEA32.js.map → chunk-WA6XRNWE.js.map} +0 -0
- /package/dist/{chunk-GGHX4YHM.js.map → chunk-WB3OFPM2.js.map} +0 -0
- /package/dist/{chunk-RSYFSCKL.js.map → chunk-WZEDFDJ6.js.map} +0 -0
- /package/dist/{chunk-2HVCTFKG.js.map → chunk-X2ZLHUEO.js.map} +0 -0
- /package/dist/{chunk-PJLJN23N.js.map → chunk-XICJL56Z.js.map} +0 -0
- /package/dist/{chunk-ZXEPLZUQ.js.map → chunk-YGM47S7M.js.map} +0 -0
- /package/dist/{chunk-KXDUSGPM.js.map → chunk-YRL4PGPP.js.map} +0 -0
- /package/dist/{chunk-GJF337YM.js.map → chunk-Z45353ML.js.map} +0 -0
- /package/dist/{chunk-NJZY5LOC.js.map → chunk-ZARHK7PT.js.map} +0 -0
- /package/dist/{chunk-NF5EHQTJ.js.map → chunk-ZFU2B2GM.js.map} +0 -0
- /package/dist/{chunk-W37MS6SX.js.map → chunk-ZRSXXWIX.js.map} +0 -0
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
} from "./chunk-TPKB7T6Z.js";
|
|
5
5
|
import {
|
|
6
6
|
buildExtensionsBlockForConsolidation
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-X2ZLHUEO.js";
|
|
8
8
|
import "./chunk-5JMAGU26.js";
|
|
9
9
|
import "./chunk-B7RWBZXW.js";
|
|
10
10
|
import {
|
|
11
11
|
runPostConsolidationMaterialize
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-CYEEVWQ6.js";
|
|
13
13
|
import "./chunk-3UXOZBHV.js";
|
|
14
14
|
import "./chunk-AL3TCNSJ.js";
|
|
15
15
|
import "./chunk-TOTT6S2V.js";
|
|
@@ -19,13 +19,15 @@ import "./chunk-QDW3E4RD.js";
|
|
|
19
19
|
import {
|
|
20
20
|
resolveCausalTrajectoryStoreDir
|
|
21
21
|
} from "./chunk-4P4VLPGB.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-6VBKU3FY.js";
|
|
23
23
|
import "./chunk-UHVXE24Y.js";
|
|
24
24
|
import "./chunk-DM5QZ3YU.js";
|
|
25
25
|
import "./chunk-WVEEVYMH.js";
|
|
26
|
+
import "./chunk-JCL7RO2G.js";
|
|
26
27
|
import "./chunk-G6OFEGUR.js";
|
|
27
|
-
import "./chunk-
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-OH55F76C.js";
|
|
29
|
+
import "./chunk-L334PSLW.js";
|
|
30
|
+
import "./chunk-CYEPCZN5.js";
|
|
29
31
|
import "./chunk-DLZGSZVC.js";
|
|
30
32
|
import "./chunk-OVZIYLBZ.js";
|
|
31
33
|
import "./chunk-EXYT52NR.js";
|
|
@@ -33,7 +35,6 @@ import "./chunk-DOJBV6WR.js";
|
|
|
33
35
|
import "./chunk-PFUXPTBT.js";
|
|
34
36
|
import "./chunk-WNEVEMJ3.js";
|
|
35
37
|
import "./chunk-Y5NLBXPV.js";
|
|
36
|
-
import "./chunk-CYEPCZN5.js";
|
|
37
38
|
import "./chunk-TFA6HPOA.js";
|
|
38
39
|
import "./chunk-F4TWWUMP.js";
|
|
39
40
|
import "./chunk-72A4L5JJ.js";
|
|
@@ -77,6 +78,7 @@ import "./chunk-OR42ZI54.js";
|
|
|
77
78
|
import "./chunk-23G5P7TA.js";
|
|
78
79
|
import "./chunk-C64XATK7.js";
|
|
79
80
|
import "./chunk-42JKGUFJ.js";
|
|
81
|
+
import "./chunk-U7MIMS2Y.js";
|
|
80
82
|
import {
|
|
81
83
|
FallbackLlmClient
|
|
82
84
|
} from "./chunk-AVVCPA7U.js";
|
|
@@ -93,7 +95,7 @@ import "./chunk-YCVB7X56.js";
|
|
|
93
95
|
import "./chunk-PQVCH2AE.js";
|
|
94
96
|
import "./chunk-PJKTFXE2.js";
|
|
95
97
|
import "./chunk-W5BIQOAJ.js";
|
|
96
|
-
import "./chunk-
|
|
98
|
+
import "./chunk-SEA56G6S.js";
|
|
97
99
|
import "./chunk-YBA52OKG.js";
|
|
98
100
|
import "./chunk-TWRPWJJT.js";
|
|
99
101
|
import "./chunk-BT7NVCML.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/causal-consolidation.ts"],"sourcesContent":["/**\n * causal-consolidation.ts — CMC Phase 2: LLM-Assisted Causal Consolidation\n *\n * Uses an LLM to analyze causal trajectory patterns across sessions.\n * The LLM receives the causal chain graph as context — connected trajectories\n * from different sessions — and identifies recurring behavioral patterns,\n * preference signals, and actionable rules.\n *\n * This is the core CMC innovation: the LLM gets cross-session causal context\n * that no other memory system provides. It can see that a user investigated\n * a bug in session 1, attempted a fix in session 2, and succeeded in session 3 —\n * and synthesize a rule or preference from that chain.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { resolveCausalTrajectoryStoreDir, type CausalTrajectoryRecord } from \"./causal-trajectory.js\";\nimport { readChainIndex, resolveChainsDir, type CausalChainIndex, type CausalEdge } from \"./causal-chain.js\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport { isRecord } from \"./store-contract.js\";\nimport { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig } from \"./fallback-llm.js\";\nimport type { AgentPersonaModelConfig, GatewayConfig, MemoryFile, PluginConfig } from \"./types.js\";\nimport path from \"node:path\";\nimport { log } from \"./logger.js\";\nimport { runPostConsolidationMaterialize } from \"./connectors/codex-materialize-runner.js\";\nimport type { MaterializeResult, RolloutSummaryInput } from \"./connectors/codex-materialize.js\";\nimport { buildExtensionsBlockForConsolidation } from \"./semantic-consolidation.js\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CausalPatternCandidate {\n id: string;\n sourceType: \"causal-pattern\";\n subject: string;\n category: \"principle\" | \"rule\" | \"preference\";\n content: string;\n score: number;\n rationale: string;\n outcome: null;\n provenance: string[];\n agent: string | null;\n workflow: string | null;\n}\n\nexport interface ConsolidationConfig {\n minRecurrence: number;\n minSessions: number;\n successThreshold: number;\n}\n\nexport interface LlmConsolidationResult {\n rules: Array<{\n content: string;\n category: \"rule\" | \"principle\" | \"preference\";\n confidence: number;\n evidence: string[];\n }>;\n preferences: Array<{\n statement: string;\n confidence: number;\n evidence: string[];\n }>;\n}\n\nconst CAUSAL_RULE_CATEGORIES = new Set([\"rule\", \"principle\", \"preference\"]);\n\ninterface ConsolidationLlmClient {\n isAvailable(options?: { agentId?: string; modelChain?: AgentPersonaModelConfig }): boolean;\n chatCompletion(\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n options?: { temperature?: number; maxTokens?: number; agentId?: string; modelChain?: AgentPersonaModelConfig },\n ): Promise<{ content: string } | null>;\n}\n\n// ─── Trajectory Reading ──────────────────────────────────────────────────────\n\nasync function readAllTrajectories(\n memoryDir: string,\n causalTrajectoryStoreDir?: string,\n): Promise<CausalTrajectoryRecord[]> {\n const root = resolveCausalTrajectoryStoreDir(memoryDir, causalTrajectoryStoreDir);\n const trajectoriesDir = path.join(root, \"trajectories\");\n\n const files = await listJsonFiles(trajectoriesDir).catch(() => [] as string[]);\n const results: CausalTrajectoryRecord[] = [];\n\n for (const filePath of files) {\n try {\n const raw = await readJsonFile(filePath);\n if (isRecord(raw) && typeof raw.trajectoryId === \"string\") {\n results.push(raw as unknown as CausalTrajectoryRecord);\n }\n } catch {\n // skip invalid\n }\n }\n\n return results;\n}\n\n// ─── Context Formatting ──────────────────────────────────────────────────────\n\n/**\n * Format trajectories and their causal connections as a readable context\n * for the LLM. Groups by session and shows chain connections.\n */\nfunction formatCausalContext(\n trajectories: CausalTrajectoryRecord[],\n chainIndex: CausalChainIndex,\n maxChars: number = 8000,\n): string {\n // Group trajectories by session\n const bySession = new Map<string, CausalTrajectoryRecord[]>();\n for (const t of trajectories) {\n const list = bySession.get(t.sessionKey) ?? [];\n list.push(t);\n bySession.set(t.sessionKey, list);\n }\n\n const lines: string[] = [];\n lines.push(`## Causal Trajectories (${trajectories.length} across ${bySession.size} sessions)`);\n lines.push(\"\");\n\n // Format each session's trajectories\n for (const [sessionKey, sessionTrajs] of bySession) {\n lines.push(`### Session: ${sessionKey}`);\n for (const t of sessionTrajs.slice(0, 5)) {\n const outcome = t.outcomeKind === \"success\" ? \"+\" : t.outcomeKind === \"failure\" ? \"-\" : \"~\";\n lines.push(`[${outcome}] Goal: ${t.goal}`);\n lines.push(` Action: ${t.actionSummary}`);\n lines.push(` Outcome: ${t.outcomeSummary}`);\n if (t.followUpSummary) lines.push(` Follow-up: ${t.followUpSummary}`);\n if (t.entityRefs?.length) lines.push(` Entities: ${t.entityRefs.join(\", \")}`);\n }\n lines.push(\"\");\n }\n\n // Format causal chain connections\n const edgeCount = Object.keys(chainIndex.edges).length;\n if (edgeCount > 0) {\n lines.push(`## Cross-Session Causal Chains (${edgeCount} connections)`);\n lines.push(\"\");\n\n const trajectoryMap = new Map(trajectories.map((t) => [t.trajectoryId, t]));\n const shown = new Set<string>();\n\n for (const [edgeId, edge] of Object.entries(chainIndex.edges)) {\n if (shown.size >= 10) break; // limit output size\n const from = trajectoryMap.get(edge.fromTrajectoryId);\n const to = trajectoryMap.get(edge.toTrajectoryId);\n if (!from || !to) continue;\n\n lines.push(`${edge.edgeType}: \"${from.goal}\" (${from.sessionKey}) → \"${to.goal}\" (${to.sessionKey})`);\n shown.add(edgeId);\n }\n lines.push(\"\");\n }\n\n const result = lines.join(\"\\n\");\n return result.length > maxChars ? result.slice(0, maxChars) + \"\\n[truncated]\" : result;\n}\n\n// ─── LLM Consolidation ──────────────────────────────────────────────────────\n\nconst CONSOLIDATION_PROMPT = `You are analyzing a user's causal trajectory history across multiple sessions. Trajectories record what the user tried to do (goal), what they did (action), and what happened (outcome).\n\nYour job is to identify:\n1. BEHAVIORAL RULES: Recurring patterns where the same approach consistently succeeds or fails. These should be actionable guidance for future sessions.\n2. PREFERENCES: What the user cares about, prefers, or consistently chooses — even if never explicitly stated. Infer preferences from what they repeatedly do, retry until successful, or always include in their workflow.\n\nIMPORTANT:\n- Look for CROSS-SESSION patterns — things that repeat across different sessions are more significant than within-session patterns.\n- A user who retries the same goal across sessions has a strong implicit preference for that outcome.\n- Consistent action choices reveal preferences even when the user never says \"I prefer X.\"\n- Frame preferences as \"The user would prefer responses that...\" when applicable.\n\nOutput valid JSON only:\n{\n \"rules\": [\n {\"content\": \"actionable rule text\", \"category\": \"rule|principle\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ],\n \"preferences\": [\n {\"statement\": \"The user would prefer...\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ]\n}\n\nIf no clear patterns exist, return {\"rules\": [], \"preferences\": []}.`;\n\nasync function consolidateWithLlm(\n context: string,\n llm: ConsolidationLlmClient,\n options: { agentId?: string; modelChain?: AgentPersonaModelConfig } = {},\n): Promise<LlmConsolidationResult> {\n const response = await llm.chatCompletion(\n [\n { role: \"system\", content: CONSOLIDATION_PROMPT },\n { role: \"user\", content: context },\n ],\n { temperature: 0.2, maxTokens: 2000, agentId: options.agentId, modelChain: options.modelChain },\n );\n\n if (!response?.content) {\n return { rules: [], preferences: [] };\n }\n\n try {\n // Extract JSON from response (may have markdown code fences)\n let jsonStr = response.content.trim();\n const fenceMatch = jsonStr.match(/```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?\\s*```/);\n if (fenceMatch) jsonStr = fenceMatch[1];\n\n const parsed = JSON.parse(jsonStr);\n const rawRules: unknown[] = Array.isArray(parsed.rules) ? parsed.rules : [];\n const rawPreferences: unknown[] = Array.isArray(parsed.preferences) ? parsed.preferences : [];\n return {\n rules: rawRules\n .map(parseLlmRule)\n .filter((rule): rule is LlmConsolidationResult[\"rules\"][number] => !!rule),\n preferences: rawPreferences\n .map(parseLlmPreference)\n .filter((pref): pref is LlmConsolidationResult[\"preferences\"][number] => !!pref),\n };\n } catch {\n log.warn(\"[cmc] failed to parse LLM consolidation response\");\n return { rules: [], preferences: [] };\n }\n}\n\n// ─── Candidate Generation ────────────────────────────────────────────────────\n\nfunction stablePatternId(content: string): string {\n const digest = createHash(\"sha256\")\n .update(`causal-pattern\\0${content}`)\n .digest(\"hex\")\n .slice(0, 16);\n return `causal-pattern:${digest}`;\n}\n\nfunction parseConfidence(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction parseEvidence(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n}\n\nfunction parseLlmRule(raw: unknown): LlmConsolidationResult[\"rules\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const content = typeof r.content === \"string\" ? r.content.trim() : \"\";\n const category = typeof r.category === \"string\" ? r.category : \"\";\n const confidence = parseConfidence(r.confidence);\n if (content.length <= 5 || !CAUSAL_RULE_CATEGORIES.has(category) || confidence === undefined) {\n return undefined;\n }\n return {\n content,\n category: category as \"rule\" | \"principle\" | \"preference\",\n confidence,\n evidence: parseEvidence(r.evidence),\n };\n}\n\nfunction parseLlmPreference(raw: unknown): LlmConsolidationResult[\"preferences\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const p = raw as Record<string, unknown>;\n const statement = typeof p.statement === \"string\" ? p.statement.trim() : \"\";\n const confidence = parseConfidence(p.confidence);\n if (statement.length <= 5 || confidence === undefined) return undefined;\n return {\n statement,\n confidence,\n evidence: parseEvidence(p.evidence),\n };\n}\n\nfunction llmResultToCandidates(result: LlmConsolidationResult): CausalPatternCandidate[] {\n const candidates: CausalPatternCandidate[] = [];\n\n for (const rule of result.rules) {\n const category =\n rule.category === \"principle\" || rule.category === \"preference\"\n ? rule.category\n : \"rule\";\n candidates.push({\n id: stablePatternId(rule.content),\n sourceType: \"causal-pattern\",\n subject: rule.content.slice(0, 80),\n category,\n content: rule.content,\n score: Math.min(1, rule.confidence ?? 0.7),\n rationale: \"LLM-identified causal pattern from cross-session trajectory analysis\",\n outcome: null,\n provenance: (rule.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n for (const preference of result.preferences) {\n candidates.push({\n id: stablePatternId(preference.statement),\n sourceType: \"causal-pattern\",\n subject: preference.statement.slice(0, 80),\n category: \"preference\",\n content: preference.statement,\n score: Math.min(1, preference.confidence ?? 0.7),\n rationale: \"LLM-identified preference from cross-session trajectory analysis\",\n outcome: null,\n provenance: (preference.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n return candidates;\n}\n\nfunction normalizePositiveInteger(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeSuccessThreshold(value: number): number {\n if (!Number.isFinite(value) || value <= 0) return 0;\n return Math.min(1, value);\n}\n\nfunction trajectorySuccessScore(trajectory: CausalTrajectoryRecord): number {\n if (trajectory.outcomeKind === \"success\") return 1;\n if (trajectory.outcomeKind === \"partial\") return 0.5;\n return 0;\n}\n\nfunction averageSuccessScore(trajectories: CausalTrajectoryRecord[]): number {\n if (trajectories.length === 0) return 0;\n const total = trajectories.reduce((sum, trajectory) => sum + trajectorySuccessScore(trajectory), 0);\n return total / trajectories.length;\n}\n\nfunction passesConsolidationGates(\n trajectories: CausalTrajectoryRecord[],\n config: ConsolidationConfig,\n): boolean {\n const minRecurrence = normalizePositiveInteger(config.minRecurrence, 1);\n if (trajectories.length < minRecurrence) return false;\n\n const minSessions = normalizePositiveInteger(config.minSessions, 1);\n const sessionCount = new Set(trajectories.map((trajectory) => trajectory.sessionKey)).size;\n if (sessionCount < minSessions) return false;\n\n const successThreshold = normalizeSuccessThreshold(config.successThreshold);\n if (successThreshold > 0 && averageSuccessScore(trajectories) < successThreshold) {\n return false;\n }\n\n return true;\n}\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\n/**\n * Run LLM-assisted consolidation: read trajectories, format causal context,\n * ask LLM to identify patterns and preferences.\n */\nexport async function deriveCausalPromotionCandidates(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n config: ConsolidationConfig;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n pluginConfig?: PluginConfig;\n llmClient?: ConsolidationLlmClient;\n}): Promise<CausalPatternCandidate[]> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (!passesConsolidationGates(trajectories, options.config)) return [];\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n\n // Format the causal context for the LLM\n let context = formatCausalContext(trajectories, chainIndex);\n\n // Append memory extensions block if available (#382)\n if (options.pluginConfig) {\n const extBlock = await buildExtensionsBlockForConsolidation(options.pluginConfig);\n if (extBlock.length > 0) {\n context += \"\\n\\n\" + extBlock;\n }\n }\n\n // If no LLM available, fall back to empty (no deterministic fallback)\n const llm = options.llmClient ?? new FallbackLlmClient(\n options.gatewayConfig,\n options.pluginConfig\n ? fallbackLlmRuntimeContextFromConfig(options.pluginConfig, {\n workspaceDir: options.workspaceDir ?? options.pluginConfig.workspaceDir,\n })\n : { workspaceDir: options.workspaceDir },\n );\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) {\n log.debug(\"[cmc] no LLM available for consolidation — skipping\");\n return [];\n }\n\n // Call LLM for pattern analysis\n const result = await consolidateWithLlm(context, llm, llmOptions);\n const candidates = llmResultToCandidates(result);\n\n log.debug(`[cmc] LLM consolidation produced ${candidates.length} rule(s) and ${result.preferences.length} preference(s)`);\n return candidates;\n } catch (error) {\n log.warn(`[cmc] consolidation failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n}\n\n/**\n * Get LLM-synthesized preferences from causal trajectory analysis.\n * Returns formatted preference statements for recall injection.\n */\nexport async function synthesizeCausalPreferencesViaLlm(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n minTrajectories?: number;\n}): Promise<string | null> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (trajectories.length < (options.minTrajectories ?? 2)) return null;\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n const context = formatCausalContext(trajectories, chainIndex);\n\n const llm = new FallbackLlmClient(options.gatewayConfig, {\n workspaceDir: options.workspaceDir,\n });\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) return null;\n\n const result = await consolidateWithLlm(context, llm, llmOptions);\n if (result.preferences.length === 0 && result.rules.length === 0) return null;\n\n const lines: string[] = [\"## Behavioral Insights (from Causal Chain Analysis)\", \"\"];\n\n for (const pref of result.preferences) {\n lines.push(`- ${pref.statement}`);\n }\n\n for (const rule of result.rules) {\n lines.push(`- ${rule.content}`);\n }\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n } catch (error) {\n log.warn(`[cmc] preference synthesis failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Optional post-consolidation hook — materializes Codex-native memory artifacts\n * after a causal consolidation run. Guarded by `codexMaterializeMemories` and\n * `codexMaterializeOnConsolidation`. Returns `null` when disabled or when the\n * sentinel is missing (honors user hand-edits).\n *\n * Split from the orchestrator-owned flow so #378 avoids touching\n * orchestrator.ts while Wave 1 edits are in flight.\n */\nexport async function materializeAfterCausalConsolidation(options: {\n config: PluginConfig;\n namespace?: string;\n memories?: MemoryFile[];\n memoryDir?: string;\n codexHome?: string;\n rolloutSummaries?: RolloutSummaryInput[];\n now?: Date;\n}): Promise<MaterializeResult | null> {\n // Delegates to the shared post-consolidation helper — see\n // runPostConsolidationMaterialize in codex-materialize-runner.ts.\n return runPostConsolidationMaterialize(\"[cmc]\", options);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/causal-consolidation.ts"],"sourcesContent":["/**\n * causal-consolidation.ts — CMC Phase 2: LLM-Assisted Causal Consolidation\n *\n * Uses an LLM to analyze causal trajectory patterns across sessions.\n * The LLM receives the causal chain graph as context — connected trajectories\n * from different sessions — and identifies recurring behavioral patterns,\n * preference signals, and actionable rules.\n *\n * This is the core CMC innovation: the LLM gets cross-session causal context\n * that no other memory system provides. It can see that a user investigated\n * a bug in session 1, attempted a fix in session 2, and succeeded in session 3 —\n * and synthesize a rule or preference from that chain.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { resolveCausalTrajectoryStoreDir, type CausalTrajectoryRecord } from \"./causal-trajectory.js\";\nimport { readChainIndex, resolveChainsDir, type CausalChainIndex, type CausalEdge } from \"./causal-chain.js\";\nimport { listJsonFiles, readJsonFile } from \"./json-store.js\";\nimport { isRecord } from \"./store-contract.js\";\nimport { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig } from \"./fallback-llm.js\";\nimport type { AgentPersonaModelConfig, GatewayConfig, MemoryFile, PluginConfig } from \"./types.js\";\nimport path from \"node:path\";\nimport { log } from \"./logger.js\";\nimport { runPostConsolidationMaterialize } from \"./connectors/codex-materialize-runner.js\";\nimport type { MaterializeResult, RolloutSummaryInput } from \"./connectors/codex-materialize.js\";\nimport { buildExtensionsBlockForConsolidation } from \"./semantic-consolidation.js\";\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CausalPatternCandidate {\n id: string;\n sourceType: \"causal-pattern\";\n subject: string;\n category: \"principle\" | \"rule\" | \"preference\";\n content: string;\n score: number;\n rationale: string;\n outcome: null;\n provenance: string[];\n agent: string | null;\n workflow: string | null;\n}\n\nexport interface ConsolidationConfig {\n minRecurrence: number;\n minSessions: number;\n successThreshold: number;\n}\n\nexport interface LlmConsolidationResult {\n rules: Array<{\n content: string;\n category: \"rule\" | \"principle\" | \"preference\";\n confidence: number;\n evidence: string[];\n }>;\n preferences: Array<{\n statement: string;\n confidence: number;\n evidence: string[];\n }>;\n}\n\nconst CAUSAL_RULE_CATEGORIES = new Set([\"rule\", \"principle\", \"preference\"]);\n\ninterface ConsolidationLlmClient {\n isAvailable(options?: { agentId?: string; modelChain?: AgentPersonaModelConfig }): boolean;\n chatCompletion(\n messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }>,\n options?: { temperature?: number; maxTokens?: number; agentId?: string; modelChain?: AgentPersonaModelConfig },\n ): Promise<{ content: string } | null>;\n}\n\n// ─── Trajectory Reading ──────────────────────────────────────────────────────\n\nasync function readAllTrajectories(\n memoryDir: string,\n causalTrajectoryStoreDir?: string,\n): Promise<CausalTrajectoryRecord[]> {\n const root = resolveCausalTrajectoryStoreDir(memoryDir, causalTrajectoryStoreDir);\n const trajectoriesDir = path.join(root, \"trajectories\");\n\n const files = await listJsonFiles(trajectoriesDir).catch(() => [] as string[]);\n const results: CausalTrajectoryRecord[] = [];\n\n for (const filePath of files) {\n try {\n const raw = await readJsonFile(filePath);\n if (isRecord(raw) && typeof raw.trajectoryId === \"string\") {\n results.push(raw as unknown as CausalTrajectoryRecord);\n }\n } catch {\n // skip invalid\n }\n }\n\n return results;\n}\n\n// ─── Context Formatting ──────────────────────────────────────────────────────\n\n/**\n * Format trajectories and their causal connections as a readable context\n * for the LLM. Groups by session and shows chain connections.\n */\nfunction formatCausalContext(\n trajectories: CausalTrajectoryRecord[],\n chainIndex: CausalChainIndex,\n maxChars: number = 8000,\n): string {\n // Group trajectories by session\n const bySession = new Map<string, CausalTrajectoryRecord[]>();\n for (const t of trajectories) {\n const list = bySession.get(t.sessionKey) ?? [];\n list.push(t);\n bySession.set(t.sessionKey, list);\n }\n\n const lines: string[] = [];\n lines.push(`## Causal Trajectories (${trajectories.length} across ${bySession.size} sessions)`);\n lines.push(\"\");\n\n // Format each session's trajectories\n for (const [sessionKey, sessionTrajs] of bySession) {\n lines.push(`### Session: ${sessionKey}`);\n for (const t of sessionTrajs.slice(0, 5)) {\n const outcome = t.outcomeKind === \"success\" ? \"+\" : t.outcomeKind === \"failure\" ? \"-\" : \"~\";\n lines.push(`[${outcome}] Goal: ${t.goal}`);\n lines.push(` Action: ${t.actionSummary}`);\n lines.push(` Outcome: ${t.outcomeSummary}`);\n if (t.followUpSummary) lines.push(` Follow-up: ${t.followUpSummary}`);\n if (t.entityRefs?.length) lines.push(` Entities: ${t.entityRefs.join(\", \")}`);\n }\n lines.push(\"\");\n }\n\n // Format causal chain connections\n const edgeCount = Object.keys(chainIndex.edges).length;\n if (edgeCount > 0) {\n lines.push(`## Cross-Session Causal Chains (${edgeCount} connections)`);\n lines.push(\"\");\n\n const trajectoryMap = new Map(trajectories.map((t) => [t.trajectoryId, t]));\n const shown = new Set<string>();\n\n for (const [edgeId, edge] of Object.entries(chainIndex.edges)) {\n if (shown.size >= 10) break; // limit output size\n const from = trajectoryMap.get(edge.fromTrajectoryId);\n const to = trajectoryMap.get(edge.toTrajectoryId);\n if (!from || !to) continue;\n\n lines.push(`${edge.edgeType}: \"${from.goal}\" (${from.sessionKey}) → \"${to.goal}\" (${to.sessionKey})`);\n shown.add(edgeId);\n }\n lines.push(\"\");\n }\n\n const result = lines.join(\"\\n\");\n return result.length > maxChars ? result.slice(0, maxChars) + \"\\n[truncated]\" : result;\n}\n\n// ─── LLM Consolidation ──────────────────────────────────────────────────────\n\nconst CONSOLIDATION_PROMPT = `You are analyzing a user's causal trajectory history across multiple sessions. Trajectories record what the user tried to do (goal), what they did (action), and what happened (outcome).\n\nYour job is to identify:\n1. BEHAVIORAL RULES: Recurring patterns where the same approach consistently succeeds or fails. These should be actionable guidance for future sessions.\n2. PREFERENCES: What the user cares about, prefers, or consistently chooses — even if never explicitly stated. Infer preferences from what they repeatedly do, retry until successful, or always include in their workflow.\n\nIMPORTANT:\n- Look for CROSS-SESSION patterns — things that repeat across different sessions are more significant than within-session patterns.\n- A user who retries the same goal across sessions has a strong implicit preference for that outcome.\n- Consistent action choices reveal preferences even when the user never says \"I prefer X.\"\n- Frame preferences as \"The user would prefer responses that...\" when applicable.\n\nOutput valid JSON only:\n{\n \"rules\": [\n {\"content\": \"actionable rule text\", \"category\": \"rule|principle\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ],\n \"preferences\": [\n {\"statement\": \"The user would prefer...\", \"confidence\": 0.0-1.0, \"evidence\": [\"trajectory IDs\"]}\n ]\n}\n\nIf no clear patterns exist, return {\"rules\": [], \"preferences\": []}.`;\n\nasync function consolidateWithLlm(\n context: string,\n llm: ConsolidationLlmClient,\n options: { agentId?: string; modelChain?: AgentPersonaModelConfig } = {},\n): Promise<LlmConsolidationResult> {\n const response = await llm.chatCompletion(\n [\n { role: \"system\", content: CONSOLIDATION_PROMPT },\n { role: \"user\", content: context },\n ],\n { temperature: 0.2, maxTokens: 2000, agentId: options.agentId, modelChain: options.modelChain },\n );\n\n if (!response?.content) {\n return { rules: [], preferences: [] };\n }\n\n try {\n // Extract JSON from response (may have markdown code fences)\n let jsonStr = response.content.trim();\n const fenceMatch = jsonStr.match(/```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?\\s*```/);\n if (fenceMatch) jsonStr = fenceMatch[1];\n\n const parsed = JSON.parse(jsonStr);\n const rawRules: unknown[] = Array.isArray(parsed.rules) ? parsed.rules : [];\n const rawPreferences: unknown[] = Array.isArray(parsed.preferences) ? parsed.preferences : [];\n return {\n rules: rawRules\n .map(parseLlmRule)\n .filter((rule): rule is LlmConsolidationResult[\"rules\"][number] => !!rule),\n preferences: rawPreferences\n .map(parseLlmPreference)\n .filter((pref): pref is LlmConsolidationResult[\"preferences\"][number] => !!pref),\n };\n } catch {\n log.warn(\"[cmc] failed to parse LLM consolidation response\");\n return { rules: [], preferences: [] };\n }\n}\n\n// ─── Candidate Generation ────────────────────────────────────────────────────\n\nfunction stablePatternId(content: string): string {\n const digest = createHash(\"sha256\")\n .update(`causal-pattern\\0${content}`)\n .digest(\"hex\")\n .slice(0, 16);\n return `causal-pattern:${digest}`;\n}\n\nfunction parseConfidence(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return undefined;\n return Math.max(0, Math.min(1, value));\n}\n\nfunction parseEvidence(value: unknown): string[] {\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === \"string\" && item.trim().length > 0);\n}\n\nfunction parseLlmRule(raw: unknown): LlmConsolidationResult[\"rules\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const content = typeof r.content === \"string\" ? r.content.trim() : \"\";\n const category = typeof r.category === \"string\" ? r.category : \"\";\n const confidence = parseConfidence(r.confidence);\n if (content.length <= 5 || !CAUSAL_RULE_CATEGORIES.has(category) || confidence === undefined) {\n return undefined;\n }\n return {\n content,\n category: category as \"rule\" | \"principle\" | \"preference\",\n confidence,\n evidence: parseEvidence(r.evidence),\n };\n}\n\nfunction parseLlmPreference(raw: unknown): LlmConsolidationResult[\"preferences\"][number] | undefined {\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) return undefined;\n const p = raw as Record<string, unknown>;\n const statement = typeof p.statement === \"string\" ? p.statement.trim() : \"\";\n const confidence = parseConfidence(p.confidence);\n if (statement.length <= 5 || confidence === undefined) return undefined;\n return {\n statement,\n confidence,\n evidence: parseEvidence(p.evidence),\n };\n}\n\nfunction llmResultToCandidates(result: LlmConsolidationResult): CausalPatternCandidate[] {\n const candidates: CausalPatternCandidate[] = [];\n\n for (const rule of result.rules) {\n const category =\n rule.category === \"principle\" || rule.category === \"preference\"\n ? rule.category\n : \"rule\";\n candidates.push({\n id: stablePatternId(rule.content),\n sourceType: \"causal-pattern\",\n subject: rule.content.slice(0, 80),\n category,\n content: rule.content,\n score: Math.min(1, rule.confidence ?? 0.7),\n rationale: \"LLM-identified causal pattern from cross-session trajectory analysis\",\n outcome: null,\n provenance: (rule.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n for (const preference of result.preferences) {\n candidates.push({\n id: stablePatternId(preference.statement),\n sourceType: \"causal-pattern\",\n subject: preference.statement.slice(0, 80),\n category: \"preference\",\n content: preference.statement,\n score: Math.min(1, preference.confidence ?? 0.7),\n rationale: \"LLM-identified preference from cross-session trajectory analysis\",\n outcome: null,\n provenance: (preference.evidence ?? []).slice(0, 5),\n agent: null,\n workflow: null,\n });\n }\n\n return candidates;\n}\n\nfunction normalizePositiveInteger(value: number, fallback: number): number {\n return Number.isFinite(value) && value > 0 ? Math.floor(value) : fallback;\n}\n\nfunction normalizeSuccessThreshold(value: number): number {\n if (!Number.isFinite(value) || value <= 0) return 0;\n return Math.min(1, value);\n}\n\nfunction trajectorySuccessScore(trajectory: CausalTrajectoryRecord): number {\n if (trajectory.outcomeKind === \"success\") return 1;\n if (trajectory.outcomeKind === \"partial\") return 0.5;\n return 0;\n}\n\nfunction averageSuccessScore(trajectories: CausalTrajectoryRecord[]): number {\n if (trajectories.length === 0) return 0;\n const total = trajectories.reduce((sum, trajectory) => sum + trajectorySuccessScore(trajectory), 0);\n return total / trajectories.length;\n}\n\nfunction passesConsolidationGates(\n trajectories: CausalTrajectoryRecord[],\n config: ConsolidationConfig,\n): boolean {\n const minRecurrence = normalizePositiveInteger(config.minRecurrence, 1);\n if (trajectories.length < minRecurrence) return false;\n\n const minSessions = normalizePositiveInteger(config.minSessions, 1);\n const sessionCount = new Set(trajectories.map((trajectory) => trajectory.sessionKey)).size;\n if (sessionCount < minSessions) return false;\n\n const successThreshold = normalizeSuccessThreshold(config.successThreshold);\n if (successThreshold > 0 && averageSuccessScore(trajectories) < successThreshold) {\n return false;\n }\n\n return true;\n}\n\n// ─── Public API ──────────────────────────────────────────────────────────────\n\n/**\n * Run LLM-assisted consolidation: read trajectories, format causal context,\n * ask LLM to identify patterns and preferences.\n */\nexport async function deriveCausalPromotionCandidates(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n config: ConsolidationConfig;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n pluginConfig?: PluginConfig;\n llmClient?: ConsolidationLlmClient;\n}): Promise<CausalPatternCandidate[]> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (!passesConsolidationGates(trajectories, options.config)) return [];\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n\n // Format the causal context for the LLM\n let context = formatCausalContext(trajectories, chainIndex);\n\n // Append memory extensions block if available (#382)\n if (options.pluginConfig) {\n const extBlock = await buildExtensionsBlockForConsolidation(options.pluginConfig);\n if (extBlock.length > 0) {\n context += \"\\n\\n\" + extBlock;\n }\n }\n\n // If no LLM available, fall back to empty (no deterministic fallback)\n const llm = options.llmClient ?? new FallbackLlmClient(\n options.gatewayConfig,\n options.pluginConfig\n ? fallbackLlmRuntimeContextFromConfig(options.pluginConfig, {\n workspaceDir: options.workspaceDir ?? options.pluginConfig.workspaceDir,\n })\n : { workspaceDir: options.workspaceDir },\n );\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) {\n log.debug(\"[cmc] no LLM available for consolidation — skipping\");\n return [];\n }\n\n // Call LLM for pattern analysis\n const result = await consolidateWithLlm(context, llm, llmOptions);\n const candidates = llmResultToCandidates(result);\n\n log.debug(`[cmc] LLM consolidation produced ${candidates.length} rule(s) and ${result.preferences.length} preference(s)`);\n return candidates;\n } catch (error) {\n log.warn(`[cmc] consolidation failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return [];\n }\n}\n\n/**\n * Get LLM-synthesized preferences from causal trajectory analysis.\n * Returns formatted preference statements for recall injection.\n */\nexport async function synthesizeCausalPreferencesViaLlm(options: {\n memoryDir: string;\n causalTrajectoryStoreDir?: string;\n gatewayConfig?: GatewayConfig;\n gatewayAgentId?: string;\n modelChain?: AgentPersonaModelConfig;\n workspaceDir?: string;\n minTrajectories?: number;\n}): Promise<string | null> {\n try {\n const trajectories = await readAllTrajectories(options.memoryDir, options.causalTrajectoryStoreDir);\n if (trajectories.length < (options.minTrajectories ?? 2)) return null;\n\n const chainsDir = resolveChainsDir(options.memoryDir, options.causalTrajectoryStoreDir);\n const chainIndex = await readChainIndex(chainsDir);\n const context = formatCausalContext(trajectories, chainIndex);\n\n const llm = new FallbackLlmClient(options.gatewayConfig, {\n workspaceDir: options.workspaceDir,\n });\n const llmOptions = { agentId: options.gatewayAgentId, modelChain: options.modelChain };\n if (!llm.isAvailable(llmOptions)) return null;\n\n const result = await consolidateWithLlm(context, llm, llmOptions);\n if (result.preferences.length === 0 && result.rules.length === 0) return null;\n\n const lines: string[] = [\"## Behavioral Insights (from Causal Chain Analysis)\", \"\"];\n\n for (const pref of result.preferences) {\n lines.push(`- ${pref.statement}`);\n }\n\n for (const rule of result.rules) {\n lines.push(`- ${rule.content}`);\n }\n\n lines.push(\"\");\n return lines.join(\"\\n\");\n } catch (error) {\n log.warn(`[cmc] preference synthesis failed (non-fatal): ${error instanceof Error ? error.message : String(error)}`);\n return null;\n }\n}\n\n/**\n * Optional post-consolidation hook — materializes Codex-native memory artifacts\n * after a causal consolidation run. Guarded by `codexMaterializeMemories` and\n * `codexMaterializeOnConsolidation`. Returns `null` when disabled or when the\n * sentinel is missing (honors user hand-edits).\n *\n * Split from the orchestrator-owned flow so #378 avoids touching\n * orchestrator.ts while Wave 1 edits are in flight.\n */\nexport async function materializeAfterCausalConsolidation(options: {\n config: PluginConfig;\n namespace?: string;\n memories?: MemoryFile[];\n memoryDir?: string;\n codexHome?: string;\n rolloutSummaries?: RolloutSummaryInput[];\n now?: Date;\n}): Promise<MaterializeResult | null> {\n // Delegates to the shared post-consolidation helper — see\n // runPostConsolidationMaterialize in codex-materialize-runner.ts.\n return runPostConsolidationMaterialize(\"[cmc]\", options);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-TOTT6S2V.js";
|
|
4
4
|
import {
|
|
5
5
|
isRecallDisclosure
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SEA56G6S.js";
|
|
7
7
|
import {
|
|
8
8
|
normalizeRetrievedMemoryProvenance
|
|
9
9
|
} from "./chunk-I4WBNM3M.js";
|
|
@@ -312,4 +312,4 @@ export {
|
|
|
312
312
|
RecallXrayBuilder,
|
|
313
313
|
summarizeDisclosureTokens
|
|
314
314
|
};
|
|
315
|
-
//# sourceMappingURL=chunk-
|
|
315
|
+
//# sourceMappingURL=chunk-25QK3LR2.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
getOperation,
|
|
4
4
|
operationRequiresAuthorizedNamespace,
|
|
5
5
|
operationUsesPrincipalNamespace
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-IMNJJKHW.js";
|
|
7
7
|
import {
|
|
8
8
|
assertOperationAuthorizationAllowed
|
|
9
9
|
} from "./chunk-YO2JEX2Z.js";
|
|
@@ -60,4 +60,4 @@ export {
|
|
|
60
60
|
authorizationProbeNamespaces,
|
|
61
61
|
authorizationProbeRequiresPrincipalNamespace
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=chunk-
|
|
63
|
+
//# sourceMappingURL=chunk-3HLWLYRD.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
defineOperation
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IMNJJKHW.js";
|
|
4
4
|
import {
|
|
5
5
|
EngramAccessInputError
|
|
6
6
|
} from "./chunk-LGEH473S.js";
|
|
@@ -71,4 +71,4 @@ defineOperation({
|
|
|
71
71
|
})
|
|
72
72
|
})
|
|
73
73
|
});
|
|
74
|
-
//# sourceMappingURL=chunk-
|
|
74
|
+
//# sourceMappingURL=chunk-3VNRDRBM.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
parseFrontmatter
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6VBKU3FY.js";
|
|
4
4
|
import {
|
|
5
5
|
activityDigestPath,
|
|
6
6
|
isValidActivityDate
|
|
@@ -199,4 +199,4 @@ export {
|
|
|
199
199
|
buildStandup,
|
|
200
200
|
standupHelp
|
|
201
201
|
};
|
|
202
|
-
//# sourceMappingURL=chunk-
|
|
202
|
+
//# sourceMappingURL=chunk-4NLHEE2Z.js.map
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
ActivityStore,
|
|
15
15
|
MaintenanceScheduler
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-YGM47S7M.js";
|
|
17
17
|
import {
|
|
18
18
|
runPeerProfileReasoner
|
|
19
19
|
} from "./chunk-I74SUMNI.js";
|
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
import {
|
|
33
33
|
CompoundingEngine,
|
|
34
34
|
defaultTierMigrationCycleBudget
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-EADUOZWH.js";
|
|
36
36
|
import {
|
|
37
37
|
SharedContextManager
|
|
38
38
|
} from "./chunk-5KBIOI4G.js";
|
|
@@ -210,7 +210,7 @@ import {
|
|
|
210
210
|
buildEntityRecallSection,
|
|
211
211
|
entityRecentTranscriptLookbackHours,
|
|
212
212
|
readRecentEntityTranscriptEntries
|
|
213
|
-
} from "./chunk-
|
|
213
|
+
} from "./chunk-MTVC5S5N.js";
|
|
214
214
|
import {
|
|
215
215
|
planEpisodeWindowsWithFallback
|
|
216
216
|
} from "./chunk-T3GIETKV.js";
|
|
@@ -225,7 +225,7 @@ import {
|
|
|
225
225
|
} from "./chunk-7G5NTS7F.js";
|
|
226
226
|
import {
|
|
227
227
|
refreshConvergedNamespaces
|
|
228
|
-
} from "./chunk-
|
|
228
|
+
} from "./chunk-ZARHK7PT.js";
|
|
229
229
|
import {
|
|
230
230
|
builtInConnectorPackageSpecifier,
|
|
231
231
|
ensureBuiltInWearableConnectors,
|
|
@@ -234,7 +234,7 @@ import {
|
|
|
234
234
|
runTimelinePublishCli,
|
|
235
235
|
screenCandidateFact,
|
|
236
236
|
summarizeVaultPublish
|
|
237
|
-
} from "./chunk-
|
|
237
|
+
} from "./chunk-IJKBIOWL.js";
|
|
238
238
|
import {
|
|
239
239
|
normalizeReplaySessionKey
|
|
240
240
|
} from "./chunk-AJVLDJU6.js";
|
|
@@ -244,14 +244,14 @@ import {
|
|
|
244
244
|
import {
|
|
245
245
|
compareVerifiedEpisodeResults,
|
|
246
246
|
searchVerifiedEpisodes
|
|
247
|
-
} from "./chunk-
|
|
247
|
+
} from "./chunk-76LKZ42K.js";
|
|
248
248
|
import {
|
|
249
249
|
ThreadingManager
|
|
250
250
|
} from "./chunk-R7WYAXPO.js";
|
|
251
251
|
import {
|
|
252
252
|
compareVerifiedSemanticRuleResults,
|
|
253
253
|
searchVerifiedSemanticRules
|
|
254
|
-
} from "./chunk-
|
|
254
|
+
} from "./chunk-N7CATBYH.js";
|
|
255
255
|
import {
|
|
256
256
|
searchWorkProductLedgerEntries
|
|
257
257
|
} from "./chunk-B2NXOVZN.js";
|
|
@@ -264,10 +264,10 @@ import {
|
|
|
264
264
|
import {
|
|
265
265
|
runNamespaceMaintenanceFanout,
|
|
266
266
|
summarizeNamespaceMaintenanceHealth
|
|
267
|
-
} from "./chunk-
|
|
267
|
+
} from "./chunk-TMWSCE2L.js";
|
|
268
268
|
import {
|
|
269
269
|
planNamespaceMaintenance
|
|
270
|
-
} from "./chunk-
|
|
270
|
+
} from "./chunk-QCAJMIAE.js";
|
|
271
271
|
import {
|
|
272
272
|
isAboveImportanceThreshold,
|
|
273
273
|
scoreImportance
|
|
@@ -296,10 +296,10 @@ import {
|
|
|
296
296
|
materializeAfterSemanticConsolidation,
|
|
297
297
|
parseConsolidationResponse,
|
|
298
298
|
parseOperatorAwareConsolidationResponse
|
|
299
|
-
} from "./chunk-
|
|
299
|
+
} from "./chunk-X2ZLHUEO.js";
|
|
300
300
|
import {
|
|
301
301
|
SmartBuffer
|
|
302
|
-
} from "./chunk-
|
|
302
|
+
} from "./chunk-GDCKOER4.js";
|
|
303
303
|
import {
|
|
304
304
|
semanticChunkContent
|
|
305
305
|
} from "./chunk-2GBFKHBZ.js";
|
|
@@ -335,7 +335,7 @@ import {
|
|
|
335
335
|
embeddingsFromCosineHits,
|
|
336
336
|
normalizeConnectorScope,
|
|
337
337
|
runSeedGraduationPass
|
|
338
|
-
} from "./chunk-
|
|
338
|
+
} from "./chunk-YLB7TW2B.js";
|
|
339
339
|
import {
|
|
340
340
|
compileCorrectionRule,
|
|
341
341
|
correctionsFilePath,
|
|
@@ -373,7 +373,7 @@ import {
|
|
|
373
373
|
} from "./chunk-QW27DOHG.js";
|
|
374
374
|
import {
|
|
375
375
|
MeetingsInputError
|
|
376
|
-
} from "./chunk-
|
|
376
|
+
} from "./chunk-WZEDFDJ6.js";
|
|
377
377
|
import {
|
|
378
378
|
WearablesInputError,
|
|
379
379
|
describeErrorForOperator
|
|
@@ -391,7 +391,7 @@ import {
|
|
|
391
391
|
} from "./chunk-FZVZYU5C.js";
|
|
392
392
|
import {
|
|
393
393
|
NamespaceCatalog
|
|
394
|
-
} from "./chunk-
|
|
394
|
+
} from "./chunk-QI7LLSWX.js";
|
|
395
395
|
import {
|
|
396
396
|
RecallResultFormatter,
|
|
397
397
|
SessionContextCoordinator,
|
|
@@ -400,10 +400,10 @@ import {
|
|
|
400
400
|
detectPassiveCorrections,
|
|
401
401
|
renderSessionExperiencePreview,
|
|
402
402
|
scoreSessionExperienceForPrompt
|
|
403
|
-
} from "./chunk-
|
|
403
|
+
} from "./chunk-IMNJJKHW.js";
|
|
404
404
|
import {
|
|
405
405
|
importCapsule
|
|
406
|
-
} from "./chunk-
|
|
406
|
+
} from "./chunk-JIYJIH5N.js";
|
|
407
407
|
import {
|
|
408
408
|
isCodingGraphInstalled
|
|
409
409
|
} from "./chunk-VQ7B2Q6M.js";
|
|
@@ -429,7 +429,7 @@ import {
|
|
|
429
429
|
} from "./chunk-HTTZ3GJ6.js";
|
|
430
430
|
import {
|
|
431
431
|
buildXraySnapshot
|
|
432
|
-
} from "./chunk-
|
|
432
|
+
} from "./chunk-25QK3LR2.js";
|
|
433
433
|
import {
|
|
434
434
|
objectiveStateStoreOverrideForNamespace,
|
|
435
435
|
searchObjectiveStateSnapshots
|
|
@@ -443,7 +443,7 @@ import {
|
|
|
443
443
|
} from "./chunk-BJLCV2P3.js";
|
|
444
444
|
import {
|
|
445
445
|
searchHarmonicRetrieval
|
|
446
|
-
} from "./chunk-
|
|
446
|
+
} from "./chunk-C5OW2FFB.js";
|
|
447
447
|
import {
|
|
448
448
|
ProfilingCollector
|
|
449
449
|
} from "./chunk-DOWACHYO.js";
|
|
@@ -466,7 +466,7 @@ import {
|
|
|
466
466
|
} from "./chunk-NVKO5YKP.js";
|
|
467
467
|
import {
|
|
468
468
|
NamespaceStorageRouter
|
|
469
|
-
} from "./chunk-
|
|
469
|
+
} from "./chunk-FMOUUWQN.js";
|
|
470
470
|
import {
|
|
471
471
|
pruneOrphanCueAnchors
|
|
472
472
|
} from "./chunk-LXATZLSC.js";
|
|
@@ -527,17 +527,12 @@ import {
|
|
|
527
527
|
isTaskInitiationIntent,
|
|
528
528
|
planRecallMode
|
|
529
529
|
} from "./chunk-CSAKJVXW.js";
|
|
530
|
-
import {
|
|
531
|
-
bufferTurnsEqual,
|
|
532
|
-
describeError,
|
|
533
|
-
groupTurnsByExtractionScope
|
|
534
|
-
} from "./chunk-KZMRMKC7.js";
|
|
535
530
|
import {
|
|
536
531
|
LocalLlmClient
|
|
537
532
|
} from "./chunk-74AY3S7U.js";
|
|
538
533
|
import {
|
|
539
534
|
buildChainFollowupGenerator
|
|
540
|
-
} from "./chunk-
|
|
535
|
+
} from "./chunk-ZRSXXWIX.js";
|
|
541
536
|
import {
|
|
542
537
|
decideLifecycleTransition,
|
|
543
538
|
resolveLifecycleState
|
|
@@ -582,7 +577,7 @@ import {
|
|
|
582
577
|
reconstructFusionInputs,
|
|
583
578
|
selfDeps,
|
|
584
579
|
serializeFusionDay
|
|
585
|
-
} from "./chunk-
|
|
580
|
+
} from "./chunk-6VBKU3FY.js";
|
|
586
581
|
import {
|
|
587
582
|
bodyIsEscaped,
|
|
588
583
|
decodeTranscriptBody,
|
|
@@ -599,12 +594,12 @@ import {
|
|
|
599
594
|
import {
|
|
600
595
|
NamespaceSearchRouter,
|
|
601
596
|
namespaceCollectionName
|
|
602
|
-
} from "./chunk-
|
|
597
|
+
} from "./chunk-OH55F76C.js";
|
|
603
598
|
import {
|
|
604
599
|
createConversationIndexRuntime,
|
|
605
600
|
createSearchBackend,
|
|
606
601
|
isSearchBackendEnabled
|
|
607
|
-
} from "./chunk-
|
|
602
|
+
} from "./chunk-L334PSLW.js";
|
|
608
603
|
import {
|
|
609
604
|
NoopSearchBackend
|
|
610
605
|
} from "./chunk-CYEPCZN5.js";
|
|
@@ -683,6 +678,11 @@ import {
|
|
|
683
678
|
getCachedQmdRecall,
|
|
684
679
|
setCachedQmdRecall
|
|
685
680
|
} from "./chunk-42JKGUFJ.js";
|
|
681
|
+
import {
|
|
682
|
+
bufferTurnsEqual,
|
|
683
|
+
describeError,
|
|
684
|
+
groupTurnsByExtractionScope
|
|
685
|
+
} from "./chunk-U7MIMS2Y.js";
|
|
686
686
|
import {
|
|
687
687
|
FallbackLlmClient,
|
|
688
688
|
gatewayTaskChainOptions
|
|
@@ -707,7 +707,7 @@ import {
|
|
|
707
707
|
} from "./chunk-PJKTFXE2.js";
|
|
708
708
|
import {
|
|
709
709
|
confidenceTier
|
|
710
|
-
} from "./chunk-
|
|
710
|
+
} from "./chunk-SEA56G6S.js";
|
|
711
711
|
import {
|
|
712
712
|
extractJsonCandidates
|
|
713
713
|
} from "./chunk-YBA52OKG.js";
|
|
@@ -893,6 +893,18 @@ import {
|
|
|
893
893
|
import path23 from "path";
|
|
894
894
|
import { createHash as createHash10 } from "crypto";
|
|
895
895
|
|
|
896
|
+
// src/orchestration/buffer-swap.ts
|
|
897
|
+
async function withBufferStorage(orchestrator, storage, task) {
|
|
898
|
+
const live = orchestrator.buffer;
|
|
899
|
+
orchestrator.buffer = new SmartBuffer(orchestrator.config, storage);
|
|
900
|
+
try {
|
|
901
|
+
await orchestrator.buffer.load();
|
|
902
|
+
return await task();
|
|
903
|
+
} finally {
|
|
904
|
+
orchestrator.buffer = live;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
|
|
896
908
|
// src/orchestration/tier-migration-coordinator.ts
|
|
897
909
|
import path from "path";
|
|
898
910
|
var TierMigrationCoordinator = class {
|
|
@@ -15864,6 +15876,19 @@ var ExtractionDrain = class {
|
|
|
15864
15876
|
}
|
|
15865
15877
|
};
|
|
15866
15878
|
|
|
15879
|
+
// src/orchestration/buffer-drain-gate.ts
|
|
15880
|
+
function skipClaimedSession(buffer, bufferKey, settle) {
|
|
15881
|
+
if (!buffer?.isSessionClaimed?.(bufferKey)) return false;
|
|
15882
|
+
log.debug(`extraction skip: session claimed by buffer drain (${bufferKey})`);
|
|
15883
|
+
settle({
|
|
15884
|
+
status: "skipped",
|
|
15885
|
+
reason: "claimed_by_buffer_drain",
|
|
15886
|
+
persistedCount: 0,
|
|
15887
|
+
durableOutputCount: 0
|
|
15888
|
+
});
|
|
15889
|
+
return true;
|
|
15890
|
+
}
|
|
15891
|
+
|
|
15867
15892
|
// src/orchestration/turn-ingestion.ts
|
|
15868
15893
|
var ReplayAdmissionRefusedError = class extends Error {
|
|
15869
15894
|
constructor(message) {
|
|
@@ -16331,6 +16356,7 @@ var TurnIngestionCoordinator = class {
|
|
|
16331
16356
|
}
|
|
16332
16357
|
async queueBufferedExtraction(turnsToExtract, reason, options = {}) {
|
|
16333
16358
|
const bufferKey = options.bufferKey ?? turnsToExtract[0]?.sessionKey ?? "default";
|
|
16359
|
+
if (skipClaimedSession(this.deps.buffer, bufferKey, (result) => options.onTaskSettled?.(void 0, result))) return;
|
|
16334
16360
|
if (!options.skipDedupeCheck && !this.deps.shouldQueueExtraction(turnsToExtract, { bufferKey })) {
|
|
16335
16361
|
log.debug(`extraction dedupe skip: preserving buffer (${reason})`);
|
|
16336
16362
|
options.onTaskSettled?.(void 0, {
|
|
@@ -23152,11 +23178,7 @@ ${doc.content}` : doc.content,
|
|
|
23152
23178
|
}
|
|
23153
23179
|
async recall(prompt, sessionKey, options = {}) {
|
|
23154
23180
|
if (options.xrayCapture === true) {
|
|
23155
|
-
const { result } = await this.runRecallWithXrayCapture(
|
|
23156
|
-
prompt,
|
|
23157
|
-
sessionKey,
|
|
23158
|
-
options
|
|
23159
|
-
);
|
|
23181
|
+
const { result } = await this.runRecallWithXrayCapture(prompt, sessionKey, options);
|
|
23160
23182
|
return result;
|
|
23161
23183
|
}
|
|
23162
23184
|
return this.invokeRecall(prompt, sessionKey, options);
|
|
@@ -23560,6 +23582,10 @@ ${doc.content}` : doc.content,
|
|
|
23560
23582
|
options
|
|
23561
23583
|
);
|
|
23562
23584
|
}
|
|
23585
|
+
/** Run `task` with the buffer backed by `storage` (the drain claims). */
|
|
23586
|
+
async withBufferStorage(storage, task) {
|
|
23587
|
+
return withBufferStorage(this, storage, task);
|
|
23588
|
+
}
|
|
23563
23589
|
async flushSession(sessionKey, options) {
|
|
23564
23590
|
return (this.sessionContextCoordinator ?? new SessionContextCoordinator(
|
|
23565
23591
|
selfDeps(this)
|
|
@@ -31614,7 +31640,8 @@ export {
|
|
|
31614
31640
|
mergeGraphExpandedResults,
|
|
31615
31641
|
graphPathRelativeToStorage,
|
|
31616
31642
|
blendGraphExpandedRecallScore,
|
|
31643
|
+
TurnIngestionCoordinator,
|
|
31617
31644
|
qmdStartupCollectionChecksWithTimeout,
|
|
31618
31645
|
Orchestrator
|
|
31619
31646
|
};
|
|
31620
|
-
//# sourceMappingURL=chunk-
|
|
31647
|
+
//# sourceMappingURL=chunk-6EZPYZT3.js.map
|