@graphrefly/graphrefly 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -19
- package/dist/_internal-B23BagFd.d.cts +33 -0
- package/dist/_internal-B23BagFd.d.ts +33 -0
- package/dist/adaptive-rate-limiter-Dch_xYIi.d.cts +111 -0
- package/dist/adaptive-rate-limiter-Dch_xYIi.d.ts +111 -0
- package/dist/agents-C0Ji9ldU.d.cts +629 -0
- package/dist/agents-C9zexT7I.d.ts +629 -0
- package/dist/audit-BAXb3VOg.d.ts +246 -0
- package/dist/audit-C_bPfkqS.d.cts +246 -0
- package/dist/backoff-7KIK3WQW.js +24 -0
- package/dist/backoff-7KIK3WQW.js.map +1 -0
- package/dist/backoff-Bnb9OoPh.d.cts +6 -0
- package/dist/backoff-Bnb9OoPh.d.ts +6 -0
- package/dist/base/composition/index.cjs +811 -0
- package/dist/base/composition/index.cjs.map +1 -0
- package/dist/base/composition/index.d.cts +469 -0
- package/dist/base/composition/index.d.ts +469 -0
- package/dist/base/composition/index.js +40 -0
- package/dist/base/composition/index.js.map +1 -0
- package/dist/base/index.cjs +6336 -0
- package/dist/base/index.cjs.map +1 -0
- package/dist/base/index.d.cts +22 -0
- package/dist/base/index.d.ts +22 -0
- package/dist/base/index.js +259 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/io/index.cjs +3270 -0
- package/dist/base/io/index.cjs.map +1 -0
- package/dist/base/io/index.d.cts +2245 -0
- package/dist/base/io/index.d.ts +2245 -0
- package/dist/base/io/index.js +117 -0
- package/dist/base/io/index.js.map +1 -0
- package/dist/base/meta/index.cjs +43 -0
- package/dist/base/meta/index.cjs.map +1 -0
- package/dist/base/meta/index.d.cts +45 -0
- package/dist/base/meta/index.d.ts +45 -0
- package/dist/base/meta/index.js +13 -0
- package/dist/base/meta/index.js.map +1 -0
- package/dist/base/mutation/index.cjs +200 -0
- package/dist/base/mutation/index.cjs.map +1 -0
- package/dist/base/mutation/index.d.cts +177 -0
- package/dist/base/mutation/index.d.ts +177 -0
- package/dist/base/mutation/index.js +22 -0
- package/dist/base/mutation/index.js.map +1 -0
- package/dist/base/render/index.cjs +1120 -0
- package/dist/base/render/index.cjs.map +1 -0
- package/dist/{extra/render/index.d.ts → base/render/index.d.cts} +75 -31
- package/dist/{extra/render/index.d.cts → base/render/index.d.ts} +75 -31
- package/dist/base/render/index.js +24 -0
- package/dist/base/render/index.js.map +1 -0
- package/dist/base/sources/browser/index.cjs +172 -0
- package/dist/base/sources/browser/index.cjs.map +1 -0
- package/dist/base/sources/browser/index.d.cts +84 -0
- package/dist/base/sources/browser/index.d.ts +84 -0
- package/dist/base/sources/browser/index.js +151 -0
- package/dist/base/sources/browser/index.js.map +1 -0
- package/dist/base/sources/event/index.cjs +98 -0
- package/dist/base/sources/event/index.cjs.map +1 -0
- package/dist/base/sources/event/index.d.cts +91 -0
- package/dist/base/sources/event/index.d.ts +91 -0
- package/dist/base/sources/event/index.js +13 -0
- package/dist/base/sources/event/index.js.map +1 -0
- package/dist/base/sources/index.cjs +755 -0
- package/dist/base/sources/index.cjs.map +1 -0
- package/dist/{extra/sources.d.ts → base/sources/index.d.cts} +74 -301
- package/dist/{extra/sources.d.cts → base/sources/index.d.ts} +74 -301
- package/dist/base/sources/index.js +42 -0
- package/dist/base/sources/index.js.map +1 -0
- package/dist/base/sources/node/index.cjs +320 -0
- package/dist/base/sources/node/index.cjs.map +1 -0
- package/dist/{extra/node.d.ts → base/sources/node/index.d.cts} +35 -37
- package/dist/{extra/node.d.cts → base/sources/node/index.d.ts} +35 -37
- package/dist/base/sources/node/index.js +306 -0
- package/dist/base/sources/node/index.js.map +1 -0
- package/dist/base/utils/index.cjs +37 -0
- package/dist/base/utils/index.cjs.map +1 -0
- package/dist/base/utils/index.d.cts +37 -0
- package/dist/base/utils/index.d.ts +37 -0
- package/dist/base/utils/index.js +11 -0
- package/dist/base/utils/index.js.map +1 -0
- package/dist/base/worker/index.cjs +548 -0
- package/dist/base/worker/index.cjs.map +1 -0
- package/dist/base/worker/index.d.cts +207 -0
- package/dist/base/worker/index.d.ts +207 -0
- package/dist/base/worker/index.js +20 -0
- package/dist/base/worker/index.js.map +1 -0
- package/dist/breaker-C9skL3d8.d.ts +175 -0
- package/dist/breaker-ugSdq54q.d.cts +175 -0
- package/dist/{cascading-BglDkMdX.d.cts → cascading-CSSbKGrJ.d.ts} +3 -3
- package/dist/{cascading-MFgxu7Yo.d.ts → cascading-baGkiihI.d.cts} +3 -3
- package/dist/chunk-255UCBG4.js +58 -0
- package/dist/chunk-255UCBG4.js.map +1 -0
- package/dist/chunk-2LO3EL4W.js +1 -0
- package/dist/chunk-2LO3EL4W.js.map +1 -0
- package/dist/chunk-2OB3CEJS.js +1065 -0
- package/dist/chunk-2OB3CEJS.js.map +1 -0
- package/dist/chunk-36NMM65U.js +144 -0
- package/dist/chunk-36NMM65U.js.map +1 -0
- package/dist/chunk-3CEXCBN6.js +1 -0
- package/dist/chunk-3CEXCBN6.js.map +1 -0
- package/dist/chunk-3MUSLI6E.js +105 -0
- package/dist/chunk-3MUSLI6E.js.map +1 -0
- package/dist/chunk-3PSLNJDU.js +884 -0
- package/dist/chunk-3PSLNJDU.js.map +1 -0
- package/dist/chunk-3QZY5BI7.js +92 -0
- package/dist/chunk-3QZY5BI7.js.map +1 -0
- package/dist/chunk-42FQ27MQ.js +594 -0
- package/dist/chunk-42FQ27MQ.js.map +1 -0
- package/dist/chunk-4GYMCUDZ.js +1085 -0
- package/dist/chunk-4GYMCUDZ.js.map +1 -0
- package/dist/chunk-4S53H2KR.js +382 -0
- package/dist/chunk-4S53H2KR.js.map +1 -0
- package/dist/chunk-4XCHZRUJ.js +128 -0
- package/dist/chunk-4XCHZRUJ.js.map +1 -0
- package/dist/chunk-5THCXDWY.js +725 -0
- package/dist/chunk-5THCXDWY.js.map +1 -0
- package/dist/chunk-6XZYT4SW.js +256 -0
- package/dist/chunk-6XZYT4SW.js.map +1 -0
- package/dist/chunk-7EGRP2VX.js +76 -0
- package/dist/chunk-7EGRP2VX.js.map +1 -0
- package/dist/chunk-A7KV5UK4.js +150 -0
- package/dist/chunk-A7KV5UK4.js.map +1 -0
- package/dist/chunk-APY2SS5X.js +156 -0
- package/dist/chunk-APY2SS5X.js.map +1 -0
- package/dist/chunk-AZDQPQ3V.js +66 -0
- package/dist/chunk-AZDQPQ3V.js.map +1 -0
- package/dist/chunk-BU3SEFA5.js +90 -0
- package/dist/chunk-BU3SEFA5.js.map +1 -0
- package/dist/chunk-BXGZFGZ4.js +189 -0
- package/dist/chunk-BXGZFGZ4.js.map +1 -0
- package/dist/chunk-CGHORL6G.js +579 -0
- package/dist/chunk-CGHORL6G.js.map +1 -0
- package/dist/chunk-CXANAIZU.js +530 -0
- package/dist/chunk-CXANAIZU.js.map +1 -0
- package/dist/chunk-CZQHCKKG.js +1 -0
- package/dist/chunk-CZQHCKKG.js.map +1 -0
- package/dist/chunk-DKNHAICT.js +133 -0
- package/dist/chunk-DKNHAICT.js.map +1 -0
- package/dist/chunk-DM4OMPWK.js +584 -0
- package/dist/chunk-DM4OMPWK.js.map +1 -0
- package/dist/chunk-DMSNO6ZB.js +452 -0
- package/dist/chunk-DMSNO6ZB.js.map +1 -0
- package/dist/chunk-E5OZPDIW.js +229 -0
- package/dist/chunk-E5OZPDIW.js.map +1 -0
- package/dist/chunk-EVYY4X5A.js +509 -0
- package/dist/chunk-EVYY4X5A.js.map +1 -0
- package/dist/chunk-FDFD67UO.js +1 -0
- package/dist/chunk-FDFD67UO.js.map +1 -0
- package/dist/chunk-FMPF42Q4.js +13 -0
- package/dist/chunk-FMPF42Q4.js.map +1 -0
- package/dist/chunk-FR6RGA3B.js +1277 -0
- package/dist/chunk-FR6RGA3B.js.map +1 -0
- package/dist/chunk-FW23JYNQ.js +454 -0
- package/dist/chunk-FW23JYNQ.js.map +1 -0
- package/dist/chunk-GBCENOLN.js +1575 -0
- package/dist/chunk-GBCENOLN.js.map +1 -0
- package/dist/chunk-HL7HUJIX.js +1 -0
- package/dist/chunk-HL7HUJIX.js.map +1 -0
- package/dist/chunk-HULCUY35.js +2508 -0
- package/dist/chunk-HULCUY35.js.map +1 -0
- package/dist/chunk-IHTWQEDR.js +169 -0
- package/dist/chunk-IHTWQEDR.js.map +1 -0
- package/dist/chunk-IJRR6YAI.js +128 -0
- package/dist/chunk-IJRR6YAI.js.map +1 -0
- package/dist/chunk-JGFRAFDL.js +221 -0
- package/dist/chunk-JGFRAFDL.js.map +1 -0
- package/dist/chunk-KIIXR252.js +211 -0
- package/dist/chunk-KIIXR252.js.map +1 -0
- package/dist/chunk-KN3H5CNT.js +11 -0
- package/dist/chunk-KN3H5CNT.js.map +1 -0
- package/dist/chunk-KPG3DGLA.js +1 -0
- package/dist/chunk-KPG3DGLA.js.map +1 -0
- package/dist/chunk-KRNQ6RGQ.js +1 -0
- package/dist/chunk-KRNQ6RGQ.js.map +1 -0
- package/dist/chunk-LBAJK24K.js +1071 -0
- package/dist/chunk-LBAJK24K.js.map +1 -0
- package/dist/chunk-MLTPJMH6.js +417 -0
- package/dist/chunk-MLTPJMH6.js.map +1 -0
- package/dist/chunk-N3SZ7BMH.js +95 -0
- package/dist/chunk-N3SZ7BMH.js.map +1 -0
- package/dist/chunk-NDUD3IMO.js +540 -0
- package/dist/chunk-NDUD3IMO.js.map +1 -0
- package/dist/chunk-NY2PYHNC.js +873 -0
- package/dist/chunk-NY2PYHNC.js.map +1 -0
- package/dist/chunk-O3MT7DYI.js +225 -0
- package/dist/chunk-O3MT7DYI.js.map +1 -0
- package/dist/chunk-OCUDSN63.js +2386 -0
- package/dist/chunk-OCUDSN63.js.map +1 -0
- package/dist/chunk-OIWU3NYV.js +199 -0
- package/dist/chunk-OIWU3NYV.js.map +1 -0
- package/dist/chunk-OO5BM6CJ.js +1153 -0
- package/dist/chunk-OO5BM6CJ.js.map +1 -0
- package/dist/chunk-OQUIJT7A.js +1 -0
- package/dist/chunk-OQUIJT7A.js.map +1 -0
- package/dist/chunk-P5LBT622.js +105 -0
- package/dist/chunk-P5LBT622.js.map +1 -0
- package/dist/chunk-PKGQG5QQ.js +519 -0
- package/dist/chunk-PKGQG5QQ.js.map +1 -0
- package/dist/chunk-PKPO3JTZ.js +561 -0
- package/dist/chunk-PKPO3JTZ.js.map +1 -0
- package/dist/chunk-PL5UDIQ5.js +118 -0
- package/dist/chunk-PL5UDIQ5.js.map +1 -0
- package/dist/chunk-PZWISPIQ.js +432 -0
- package/dist/chunk-PZWISPIQ.js.map +1 -0
- package/dist/chunk-Q3EYOCZB.js +510 -0
- package/dist/chunk-Q3EYOCZB.js.map +1 -0
- package/dist/chunk-QMBYUVRL.js +15 -0
- package/dist/chunk-QMBYUVRL.js.map +1 -0
- package/dist/chunk-RAGGHLCV.js +200 -0
- package/dist/chunk-RAGGHLCV.js.map +1 -0
- package/dist/chunk-RGL53X5G.js +574 -0
- package/dist/chunk-RGL53X5G.js.map +1 -0
- package/dist/chunk-RJOG4IJU.js +1039 -0
- package/dist/chunk-RJOG4IJU.js.map +1 -0
- package/dist/chunk-SOOKUYVM.js +403 -0
- package/dist/chunk-SOOKUYVM.js.map +1 -0
- package/dist/chunk-T5BN5KG7.js +1 -0
- package/dist/chunk-T5BN5KG7.js.map +1 -0
- package/dist/chunk-TP7244Y6.js +207 -0
- package/dist/chunk-TP7244Y6.js.map +1 -0
- package/dist/chunk-TSBFTJKM.js +57 -0
- package/dist/chunk-TSBFTJKM.js.map +1 -0
- package/dist/chunk-URQ2CBBF.js +143 -0
- package/dist/chunk-URQ2CBBF.js.map +1 -0
- package/dist/chunk-W2BOPXTI.js +1 -0
- package/dist/chunk-W2BOPXTI.js.map +1 -0
- package/dist/chunk-WKSWLSCX.js +207 -0
- package/dist/chunk-WKSWLSCX.js.map +1 -0
- package/dist/chunk-Y52CS6YA.js +88 -0
- package/dist/chunk-Y52CS6YA.js.map +1 -0
- package/dist/chunk-YCBUWK77.js +92 -0
- package/dist/chunk-YCBUWK77.js.map +1 -0
- package/dist/chunk-YJ4U2D2C.js +314 -0
- package/dist/chunk-YJ4U2D2C.js.map +1 -0
- package/dist/chunk-Z4YXAUDN.js +239 -0
- package/dist/chunk-Z4YXAUDN.js.map +1 -0
- package/dist/chunk-Z6EGP5D7.js +92 -0
- package/dist/chunk-Z6EGP5D7.js.map +1 -0
- package/dist/compat/index.cjs +3100 -9
- package/dist/compat/index.cjs.map +1 -0
- package/dist/compat/index.d.cts +112 -18
- package/dist/compat/index.d.ts +112 -18
- package/dist/compat/index.js +176 -1
- package/dist/compat/index.js.map +1 -0
- package/dist/compat/jotai/index.cjs +149 -1
- package/dist/compat/jotai/index.cjs.map +1 -0
- package/dist/compat/jotai/index.d.cts +2 -2
- package/dist/compat/jotai/index.d.ts +2 -2
- package/dist/compat/jotai/index.js +8 -1
- package/dist/compat/jotai/index.js.map +1 -0
- package/dist/compat/nanostores/index.cjs +205 -1
- package/dist/compat/nanostores/index.cjs.map +1 -0
- package/dist/compat/nanostores/index.d.cts +2 -2
- package/dist/compat/nanostores/index.d.ts +2 -2
- package/dist/compat/nanostores/index.js +22 -1
- package/dist/compat/nanostores/index.js.map +1 -0
- package/dist/compat/nestjs/index.cjs +2241 -9
- package/dist/compat/nestjs/index.cjs.map +1 -0
- package/dist/compat/nestjs/index.d.cts +7 -10
- package/dist/compat/nestjs/index.d.ts +7 -10
- package/dist/compat/nestjs/index.js +78 -1
- package/dist/compat/nestjs/index.js.map +1 -0
- package/dist/compat/react/index.cjs +114 -1
- package/dist/compat/react/index.cjs.map +1 -0
- package/dist/compat/react/index.d.cts +2 -2
- package/dist/compat/react/index.d.ts +2 -2
- package/dist/compat/react/index.js +12 -1
- package/dist/compat/react/index.js.map +1 -0
- package/dist/compat/solid/index.cjs +101 -1
- package/dist/compat/solid/index.cjs.map +1 -0
- package/dist/compat/solid/index.d.cts +2 -2
- package/dist/compat/solid/index.d.ts +2 -2
- package/dist/compat/solid/index.js +12 -1
- package/dist/compat/solid/index.js.map +1 -0
- package/dist/compat/svelte/index.cjs +104 -1
- package/dist/compat/svelte/index.cjs.map +1 -0
- package/dist/compat/svelte/index.d.cts +2 -2
- package/dist/compat/svelte/index.d.ts +2 -2
- package/dist/compat/svelte/index.js +12 -1
- package/dist/compat/svelte/index.js.map +1 -0
- package/dist/compat/vue/index.cjs +119 -1
- package/dist/compat/vue/index.cjs.map +1 -0
- package/dist/compat/vue/index.d.cts +2 -2
- package/dist/compat/vue/index.d.ts +2 -2
- package/dist/compat/vue/index.js +12 -1
- package/dist/compat/vue/index.js.map +1 -0
- package/dist/compat/zustand/index.cjs +69 -3
- package/dist/compat/zustand/index.cjs.map +1 -0
- package/dist/compat/zustand/index.d.cts +2 -6
- package/dist/compat/zustand/index.d.ts +2 -6
- package/dist/compat/zustand/index.js +8 -1
- package/dist/compat/zustand/index.js.map +1 -0
- package/dist/distill-De6Rnn15.d.cts +48 -0
- package/dist/distill-De6Rnn15.d.ts +48 -0
- package/dist/external-register-CWyroXb_.d.cts +138 -0
- package/dist/external-register-CWyroXb_.d.ts +138 -0
- package/dist/{fallback-74oxi34l.d.cts → fallback-Bx46zqky.d.cts} +3 -10
- package/dist/{fallback-DUyyBTBK.d.ts → fallback-pIWW8A2d.d.ts} +3 -10
- package/dist/guarded-execution-BcdtxeBk.d.ts +207 -0
- package/dist/guarded-execution-C-3hnP6A.d.cts +207 -0
- package/dist/{index-CBGUK09R.d.ts → index-5SU_O78r.d.cts} +5 -5
- package/dist/{index-BmZXHqkE.d.ts → index-B6pxYJzO.d.cts} +1 -1
- package/dist/{index-hcDJ8PSI.d.cts → index-B6pxYJzO.d.ts} +1 -1
- package/dist/{index-C5stwKcw.d.cts → index-BFsng6v1.d.cts} +1 -1
- package/dist/{index-CdAlHFEt.d.ts → index-BFsng6v1.d.ts} +1 -1
- package/dist/{index-_6ODbuOu.d.cts → index-Bg-LwEt-.d.cts} +1 -1
- package/dist/{index-CviRnE4K.d.ts → index-Bg-LwEt-.d.ts} +1 -1
- package/dist/{index-CBBLl_rc.d.ts → index-Brp888t0.d.cts} +1 -1
- package/dist/{index-BQSKmbuG.d.cts → index-Brp888t0.d.ts} +1 -1
- package/dist/{index-sqkqlb1p.d.ts → index-CDfk6jHN.d.cts} +1 -1
- package/dist/{index-ZVQhLa2i.d.cts → index-CDfk6jHN.d.ts} +1 -1
- package/dist/{index-Climxqsu.d.cts → index-CEXCtYYJ.d.ts} +5 -5
- package/dist/index-DLAxYaN5.d.cts +169 -0
- package/dist/index-DLAxYaN5.d.ts +169 -0
- package/dist/{index-CK29LV56.d.cts → index-DeWbQzMe.d.cts} +1 -1
- package/dist/{index-CPQlGA29.d.ts → index-DeWbQzMe.d.ts} +1 -1
- package/dist/{index-BrPrLl4e.d.cts → index-dX9IzPqj.d.cts} +1 -1
- package/dist/{index-Dgl1HpPn.d.ts → index-dX9IzPqj.d.ts} +1 -1
- package/dist/index.cjs +25934 -191
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +58 -94
- package/dist/index.d.ts +58 -94
- package/dist/index.js +852 -1
- package/dist/index.js.map +1 -0
- package/dist/layout-types-B5aiHYgk.d.cts +72 -0
- package/dist/layout-types-B5aiHYgk.d.ts +72 -0
- package/dist/memory-composers-BryDrRBX.d.cts +529 -0
- package/dist/memory-composers-CVQqPYEV.d.ts +529 -0
- package/dist/{observable-DWjNfLvC.d.ts → observable-BXQoW1P-.d.cts} +1 -1
- package/dist/{observable-e3eiPPFy.d.cts → observable-BXQoW1P-.d.ts} +1 -1
- package/dist/{pipeline-graph-Sgj0gCwn.d.ts → pipeline-graph-Ce47CB6Y.d.cts} +13 -10
- package/dist/{pipeline-graph-CIKhynsF.d.cts → pipeline-graph-DXCwY9vG.d.ts} +13 -10
- package/dist/presets/ai/index.cjs +4377 -0
- package/dist/presets/ai/index.cjs.map +1 -0
- package/dist/presets/ai/index.d.cts +98 -0
- package/dist/presets/ai/index.d.ts +98 -0
- package/dist/presets/ai/index.js +54 -0
- package/dist/presets/ai/index.js.map +1 -0
- package/dist/presets/harness/index.cjs +5929 -0
- package/dist/presets/harness/index.cjs.map +1 -0
- package/dist/presets/harness/index.d.cts +566 -0
- package/dist/presets/harness/index.d.ts +566 -0
- package/dist/presets/harness/index.js +71 -0
- package/dist/presets/harness/index.js.map +1 -0
- package/dist/presets/index.cjs +9782 -0
- package/dist/presets/index.cjs.map +1 -0
- package/dist/presets/index.d.cts +28 -0
- package/dist/presets/index.d.ts +28 -0
- package/dist/presets/index.js +129 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/inspect/index.cjs +1087 -0
- package/dist/presets/inspect/index.cjs.map +1 -0
- package/dist/presets/inspect/index.d.cts +172 -0
- package/dist/presets/inspect/index.d.ts +172 -0
- package/dist/presets/inspect/index.js +21 -0
- package/dist/presets/inspect/index.js.map +1 -0
- package/dist/presets/resilience/index.cjs +1593 -0
- package/dist/presets/resilience/index.cjs.map +1 -0
- package/dist/presets/resilience/index.d.cts +205 -0
- package/dist/presets/resilience/index.d.ts +205 -0
- package/dist/presets/resilience/index.js +18 -0
- package/dist/presets/resilience/index.js.map +1 -0
- package/dist/rate-limiter-CEALq4N1.d.ts +559 -0
- package/dist/rate-limiter-DpVbSYdH.d.cts +559 -0
- package/dist/{reactive-layout-DOTs9P3X.d.ts → reactive-layout-fswlBUvX.d.cts} +19 -7
- package/dist/{reactive-layout-DgctbqZo.d.cts → reactive-layout-fswlBUvX.d.ts} +19 -7
- package/dist/retry-BDbRZ_gx.d.ts +125 -0
- package/dist/retry-DWuhjvsA.d.cts +125 -0
- package/dist/solutions/index.cjs +8200 -0
- package/dist/solutions/index.cjs.map +1 -0
- package/dist/solutions/index.d.cts +23 -0
- package/dist/solutions/index.d.ts +23 -0
- package/dist/solutions/index.js +55 -0
- package/dist/solutions/index.js.map +1 -0
- package/dist/spawnable-5mDY501F.d.cts +746 -0
- package/dist/spawnable-D3lR0oQu.d.ts +746 -0
- package/dist/status-U-rUI79b.d.cts +84 -0
- package/dist/status-U-rUI79b.d.ts +84 -0
- package/dist/timeout-U5O4ESK3.js +12 -0
- package/dist/timeout-U5O4ESK3.js.map +1 -0
- package/dist/{types-CWFysE9E.d.ts → types-BB5Lw-pB.d.cts} +3 -3
- package/dist/{types-C0_yquda.d.cts → types-BB5Lw-pB.d.ts} +3 -3
- package/dist/types-CJWIMJiZ.d.ts +548 -0
- package/dist/types-vCq7ShIm.d.cts +548 -0
- package/dist/utils/ai/browser.cjs +2169 -0
- package/dist/utils/ai/browser.cjs.map +1 -0
- package/dist/{patterns → utils}/ai/browser.d.cts +7 -5
- package/dist/{patterns → utils}/ai/browser.d.ts +7 -5
- package/dist/utils/ai/browser.js +255 -0
- package/dist/utils/ai/browser.js.map +1 -0
- package/dist/utils/ai/index.cjs +8468 -0
- package/dist/utils/ai/index.cjs.map +1 -0
- package/dist/{index-CR8QpwX8.d.ts → utils/ai/index.d.cts} +73 -976
- package/dist/{index-UPSiS-X7.d.cts → utils/ai/index.d.ts} +73 -976
- package/dist/utils/ai/index.js +173 -0
- package/dist/utils/ai/index.js.map +1 -0
- package/dist/utils/ai/node.cjs +648 -0
- package/dist/utils/ai/node.cjs.map +1 -0
- package/dist/{patterns → utils}/ai/node.d.cts +5 -7
- package/dist/{patterns → utils}/ai/node.d.ts +5 -7
- package/dist/utils/ai/node.js +84 -0
- package/dist/utils/ai/node.js.map +1 -0
- package/dist/utils/cqrs/index.cjs +1036 -0
- package/dist/utils/cqrs/index.cjs.map +1 -0
- package/dist/{index-CeFiHtAg.d.ts → utils/cqrs/index.d.cts} +7 -37
- package/dist/{index-B-_tFaqV.d.cts → utils/cqrs/index.d.ts} +7 -37
- package/dist/utils/cqrs/index.js +18 -0
- package/dist/utils/cqrs/index.js.map +1 -0
- package/dist/utils/demo-shell/index.cjs +865 -0
- package/dist/utils/demo-shell/index.cjs.map +1 -0
- package/dist/{index-B8YnZpIR.d.ts → utils/demo-shell/index.d.cts} +4 -16
- package/dist/{index-Cwv0KWcU.d.cts → utils/demo-shell/index.d.ts} +4 -16
- package/dist/utils/demo-shell/index.js +13 -0
- package/dist/utils/demo-shell/index.js.map +1 -0
- package/dist/utils/domain-templates/index.cjs +732 -0
- package/dist/utils/domain-templates/index.cjs.map +1 -0
- package/dist/{index-CzLVrjxn.d.ts → utils/domain-templates/index.d.cts} +3 -20
- package/dist/{index-BaQaY_IQ.d.cts → utils/domain-templates/index.d.ts} +3 -20
- package/dist/utils/domain-templates/index.js +17 -0
- package/dist/utils/domain-templates/index.js.map +1 -0
- package/dist/utils/graphspec/index.cjs +1174 -0
- package/dist/utils/graphspec/index.cjs.map +1 -0
- package/dist/{index-CMh5Rz1y.d.ts → utils/graphspec/index.d.cts} +106 -42
- package/dist/{index-CS0LTlB8.d.cts → utils/graphspec/index.d.ts} +106 -42
- package/dist/utils/graphspec/index.js +35 -0
- package/dist/utils/graphspec/index.js.map +1 -0
- package/dist/utils/harness/index.cjs +656 -0
- package/dist/utils/harness/index.cjs.map +1 -0
- package/dist/utils/harness/index.d.cts +542 -0
- package/dist/utils/harness/index.d.ts +542 -0
- package/dist/utils/harness/index.js +56 -0
- package/dist/utils/harness/index.js.map +1 -0
- package/dist/utils/index.cjs +17609 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +96 -0
- package/dist/utils/index.d.ts +96 -0
- package/dist/utils/index.js +514 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/inspect/index.cjs +807 -0
- package/dist/utils/inspect/index.cjs.map +1 -0
- package/dist/utils/inspect/index.d.cts +123 -0
- package/dist/utils/inspect/index.d.ts +123 -0
- package/dist/utils/inspect/index.js +30 -0
- package/dist/utils/inspect/index.js.map +1 -0
- package/dist/utils/job-queue/index.cjs +717 -0
- package/dist/utils/job-queue/index.cjs.map +1 -0
- package/dist/{index-DisjX8a-.d.ts → utils/job-queue/index.d.cts} +5 -26
- package/dist/{index-DV_1YuVk.d.cts → utils/job-queue/index.d.ts} +5 -26
- package/dist/utils/job-queue/index.js +18 -0
- package/dist/utils/job-queue/index.js.map +1 -0
- package/dist/utils/memory/index.cjs +1451 -0
- package/dist/utils/memory/index.cjs.map +1 -0
- package/dist/{index-CZ3r5Rxp.d.ts → utils/memory/index.d.cts} +242 -34
- package/dist/{index-B17QddL1.d.cts → utils/memory/index.d.ts} +242 -34
- package/dist/utils/memory/index.js +19 -0
- package/dist/utils/memory/index.js.map +1 -0
- package/dist/utils/messaging/index.cjs +666 -0
- package/dist/utils/messaging/index.cjs.map +1 -0
- package/dist/utils/messaging/index.d.cts +562 -0
- package/dist/utils/messaging/index.d.ts +562 -0
- package/dist/utils/messaging/index.js +50 -0
- package/dist/utils/messaging/index.js.map +1 -0
- package/dist/utils/orchestration/index.cjs +876 -0
- package/dist/utils/orchestration/index.cjs.map +1 -0
- package/dist/utils/orchestration/index.d.cts +233 -0
- package/dist/utils/orchestration/index.d.ts +233 -0
- package/dist/utils/orchestration/index.js +19 -0
- package/dist/utils/orchestration/index.js.map +1 -0
- package/dist/utils/process/index.cjs +743 -0
- package/dist/utils/process/index.cjs.map +1 -0
- package/dist/{index-p09KSrTN.d.ts → utils/process/index.d.cts} +97 -44
- package/dist/{index-CasX6Pfq.d.cts → utils/process/index.d.ts} +97 -44
- package/dist/utils/process/index.js +14 -0
- package/dist/utils/process/index.js.map +1 -0
- package/dist/utils/reactive-layout/index.cjs +1607 -0
- package/dist/utils/reactive-layout/index.cjs.map +1 -0
- package/dist/{index-B5S8ULbU.d.ts → utils/reactive-layout/index.d.cts} +58 -81
- package/dist/{index-Dc4AYqrJ.d.cts → utils/reactive-layout/index.d.ts} +58 -81
- package/dist/utils/reactive-layout/index.js +52 -0
- package/dist/utils/reactive-layout/index.js.map +1 -0
- package/dist/utils/reduction/index.cjs +203 -0
- package/dist/utils/reduction/index.cjs.map +1 -0
- package/dist/{index-Byu-OpX_.d.ts → utils/reduction/index.d.cts} +6 -17
- package/dist/{index-tRCxuAXF.d.cts → utils/reduction/index.d.ts} +6 -17
- package/dist/utils/reduction/index.js +14 -0
- package/dist/utils/reduction/index.js.map +1 -0
- package/dist/utils/resilience/index.cjs +1617 -0
- package/dist/utils/resilience/index.cjs.map +1 -0
- package/dist/utils/resilience/index.d.cts +9 -0
- package/dist/utils/resilience/index.d.ts +9 -0
- package/dist/utils/resilience/index.js +44 -0
- package/dist/utils/resilience/index.js.map +1 -0
- package/dist/utils/surface/index.cjs +1070 -0
- package/dist/utils/surface/index.cjs.map +1 -0
- package/dist/{index-CYq8vAyV.d.ts → utils/surface/index.d.cts} +7 -58
- package/dist/{index-CSOmP7xT.d.cts → utils/surface/index.d.ts} +7 -58
- package/dist/utils/surface/index.js +30 -0
- package/dist/utils/surface/index.js.map +1 -0
- package/dist/utils/topology-view/index.cjs +620 -0
- package/dist/utils/topology-view/index.cjs.map +1 -0
- package/dist/utils/topology-view/index.d.cts +68 -0
- package/dist/utils/topology-view/index.d.ts +68 -0
- package/dist/utils/topology-view/index.js +11 -0
- package/dist/utils/topology-view/index.js.map +1 -0
- package/package.json +664 -584
- package/dist/backoff-HPZMEZNF.js +0 -1
- package/dist/chunk-2T7U5EU6.js +0 -1
- package/dist/chunk-3G5U5QNE.js +0 -5
- package/dist/chunk-4VVTGLXJ.js +0 -1
- package/dist/chunk-5M4CCMMD.js +0 -45
- package/dist/chunk-5QDBSZBV.js +0 -1
- package/dist/chunk-5XJ6B66J.js +0 -1
- package/dist/chunk-6QZNQS5B.js +0 -1
- package/dist/chunk-6X7AFUJV.js +0 -9
- package/dist/chunk-7K6PWTDQ.js +0 -1
- package/dist/chunk-7LIAPXJB.js +0 -1
- package/dist/chunk-7WPU3UHQ.js +0 -1
- package/dist/chunk-A5WCQ5NO.js +0 -1
- package/dist/chunk-APPIWSGD.js +0 -84
- package/dist/chunk-BEZWM2SY.js +0 -1
- package/dist/chunk-C72GO4IZ.js +0 -1
- package/dist/chunk-CB676TKJ.js +0 -1
- package/dist/chunk-CE6TI2TL.js +0 -1
- package/dist/chunk-CE72X3WO.js +0 -1
- package/dist/chunk-CK2E7BTU.js +0 -1
- package/dist/chunk-CLVB32RD.js +0 -1
- package/dist/chunk-CRVT7D2P.js +0 -1
- package/dist/chunk-D5RFJOZ2.js +0 -1
- package/dist/chunk-D7GPHKFH.js +0 -1
- package/dist/chunk-DHRX7JX4.js +0 -2
- package/dist/chunk-ESMPEKEV.js +0 -1
- package/dist/chunk-F672GV32.js +0 -1
- package/dist/chunk-FZMYDOWV.js +0 -1
- package/dist/chunk-GHBWHMRZ.js +0 -1
- package/dist/chunk-GLERH466.js +0 -1
- package/dist/chunk-GPW2V3RE.js +0 -1
- package/dist/chunk-HIDYF36O.js +0 -1
- package/dist/chunk-HITNVN6B.js +0 -3
- package/dist/chunk-HY4DJBA7.js +0 -5
- package/dist/chunk-KZIEYVXN.js +0 -1
- package/dist/chunk-L6NSJVJZ.js +0 -1
- package/dist/chunk-N4MQX6JU.js +0 -18
- package/dist/chunk-N7FHEL4D.js +0 -1
- package/dist/chunk-NTEURFZH.js +0 -1
- package/dist/chunk-OIVP6KFV.js +0 -1
- package/dist/chunk-OPHBU3LG.js +0 -1
- package/dist/chunk-OYQOZP2F.js +0 -5
- package/dist/chunk-PTZK576G.js +0 -1
- package/dist/chunk-QYADASLV.js +0 -1
- package/dist/chunk-ST7UXLWR.js +0 -1
- package/dist/chunk-SVY7VUYU.js +0 -1
- package/dist/chunk-TK3NWWD4.js +0 -1
- package/dist/chunk-TSOYJ743.js +0 -1
- package/dist/chunk-UNGSTR4X.js +0 -61
- package/dist/chunk-VIMF6LGM.js +0 -1
- package/dist/chunk-VJLMUKOI.js +0 -1
- package/dist/chunk-VN6RDSK2.js +0 -1
- package/dist/chunk-VV4N5P64.js +0 -1
- package/dist/chunk-W3I423PS.js +0 -1
- package/dist/chunk-WJR24TAG.js +0 -1
- package/dist/chunk-XTGKMHSW.js +0 -1
- package/dist/chunk-YBB7ZGTY.js +0 -1
- package/dist/chunk-Z4NPUARF.js +0 -1
- package/dist/chunk-ZGNQRPDT.js +0 -1
- package/dist/chunk-ZKPSFFKU.js +0 -1
- package/dist/chunk-ZLV5SQSX.js +0 -1
- package/dist/content-addressed-storage-4-ST1tYk.d.cts +0 -124
- package/dist/content-addressed-storage-DuYMjV7o.d.ts +0 -124
- package/dist/core/index.cjs +0 -1
- package/dist/core/index.d.cts +0 -3
- package/dist/core/index.d.ts +0 -3
- package/dist/core/index.js +0 -1
- package/dist/decay-BvOWTZ00.d.ts +0 -112
- package/dist/decay-CFlLvXUT.d.cts +0 -112
- package/dist/extra/browser.cjs +0 -1
- package/dist/extra/browser.d.cts +0 -4
- package/dist/extra/browser.d.ts +0 -4
- package/dist/extra/browser.js +0 -1
- package/dist/extra/index.cjs +0 -20
- package/dist/extra/index.d.cts +0 -17
- package/dist/extra/index.d.ts +0 -17
- package/dist/extra/index.js +0 -1
- package/dist/extra/node.cjs +0 -2
- package/dist/extra/node.js +0 -2
- package/dist/extra/operators.cjs +0 -1
- package/dist/extra/operators.d.cts +0 -958
- package/dist/extra/operators.d.ts +0 -958
- package/dist/extra/operators.js +0 -1
- package/dist/extra/reactive.cjs +0 -1
- package/dist/extra/reactive.d.cts +0 -353
- package/dist/extra/reactive.d.ts +0 -353
- package/dist/extra/reactive.js +0 -1
- package/dist/extra/render/index.cjs +0 -5
- package/dist/extra/render/index.js +0 -1
- package/dist/extra/sources.cjs +0 -3
- package/dist/extra/sources.js +0 -1
- package/dist/extra/storage-browser.cjs +0 -1
- package/dist/extra/storage-browser.d.cts +0 -37
- package/dist/extra/storage-browser.d.ts +0 -37
- package/dist/extra/storage-browser.js +0 -1
- package/dist/extra/storage-core.cjs +0 -1
- package/dist/extra/storage-core.d.cts +0 -28
- package/dist/extra/storage-core.d.ts +0 -28
- package/dist/extra/storage-core.js +0 -1
- package/dist/extra/storage-node.cjs +0 -1
- package/dist/extra/storage-node.d.cts +0 -2
- package/dist/extra/storage-node.d.ts +0 -2
- package/dist/extra/storage-node.js +0 -0
- package/dist/extra/storage-tiers-browser.cjs +0 -1
- package/dist/extra/storage-tiers-browser.d.cts +0 -120
- package/dist/extra/storage-tiers-browser.d.ts +0 -120
- package/dist/extra/storage-tiers-browser.js +0 -1
- package/dist/extra/storage-tiers-node.cjs +0 -1
- package/dist/extra/storage-tiers-node.d.cts +0 -210
- package/dist/extra/storage-tiers-node.d.ts +0 -210
- package/dist/extra/storage-tiers-node.js +0 -1
- package/dist/extra/storage-tiers.cjs +0 -1
- package/dist/extra/storage-tiers.d.cts +0 -412
- package/dist/extra/storage-tiers.d.ts +0 -412
- package/dist/extra/storage-tiers.js +0 -1
- package/dist/graph/index.cjs +0 -7
- package/dist/graph/index.d.cts +0 -7
- package/dist/graph/index.d.ts +0 -7
- package/dist/graph/index.js +0 -1
- package/dist/graph-CWvEUQAq.d.cts +0 -1861
- package/dist/graph-D9LFnda9.d.ts +0 -1861
- package/dist/index-5k1T6jl0.d.cts +0 -121
- package/dist/index-9770hRuQ.d.cts +0 -779
- package/dist/index-B1F8Enjf.d.ts +0 -704
- package/dist/index-BHskSB8v.d.ts +0 -3413
- package/dist/index-BIYAkbAi.d.cts +0 -26
- package/dist/index-BoJ5JHxI.d.ts +0 -557
- package/dist/index-BocU7pqs.d.ts +0 -779
- package/dist/index-BxNs2HB9.d.cts +0 -1858
- package/dist/index-C1T3d7V-.d.cts +0 -704
- package/dist/index-C5ri2Axc.d.cts +0 -301
- package/dist/index-C9l6OEBL.d.ts +0 -26
- package/dist/index-CC-AvFTy.d.cts +0 -557
- package/dist/index-CJF1URuX.d.ts +0 -121
- package/dist/index-CdTelp1M.d.ts +0 -202
- package/dist/index-Cj3WohTd.d.cts +0 -202
- package/dist/index-Co7uli2l.d.cts +0 -3413
- package/dist/index-D0aciIex.d.cts +0 -209
- package/dist/index-DHen9Klo.d.ts +0 -1858
- package/dist/index-Yq60JP3s.d.ts +0 -209
- package/dist/index-nozs3fFC.d.ts +0 -301
- package/dist/node-kK3CvTrR.d.cts +0 -1347
- package/dist/node-kK3CvTrR.d.ts +0 -1347
- package/dist/patterns/ai/browser.cjs +0 -8
- package/dist/patterns/ai/browser.js +0 -3
- package/dist/patterns/ai/index.cjs +0 -74
- package/dist/patterns/ai/index.d.cts +0 -20
- package/dist/patterns/ai/index.d.ts +0 -20
- package/dist/patterns/ai/index.js +0 -1
- package/dist/patterns/ai/node.cjs +0 -1
- package/dist/patterns/ai/node.js +0 -1
- package/dist/patterns/cqrs/index.cjs +0 -3
- package/dist/patterns/cqrs/index.d.cts +0 -8
- package/dist/patterns/cqrs/index.d.ts +0 -8
- package/dist/patterns/cqrs/index.js +0 -1
- package/dist/patterns/demo-shell/index.cjs +0 -5
- package/dist/patterns/demo-shell/index.d.cts +0 -7
- package/dist/patterns/demo-shell/index.d.ts +0 -7
- package/dist/patterns/demo-shell/index.js +0 -1
- package/dist/patterns/domain-templates/index.cjs +0 -3
- package/dist/patterns/domain-templates/index.d.cts +0 -6
- package/dist/patterns/domain-templates/index.d.ts +0 -6
- package/dist/patterns/domain-templates/index.js +0 -1
- package/dist/patterns/graphspec/index.cjs +0 -86
- package/dist/patterns/graphspec/index.d.cts +0 -8
- package/dist/patterns/graphspec/index.d.ts +0 -8
- package/dist/patterns/graphspec/index.js +0 -1
- package/dist/patterns/harness/index.cjs +0 -48
- package/dist/patterns/harness/index.d.cts +0 -13
- package/dist/patterns/harness/index.d.ts +0 -13
- package/dist/patterns/harness/index.js +0 -1
- package/dist/patterns/inspect/index.cjs +0 -3
- package/dist/patterns/inspect/index.d.cts +0 -9
- package/dist/patterns/inspect/index.d.ts +0 -9
- package/dist/patterns/inspect/index.js +0 -1
- package/dist/patterns/job-queue/index.cjs +0 -3
- package/dist/patterns/job-queue/index.d.cts +0 -9
- package/dist/patterns/job-queue/index.d.ts +0 -9
- package/dist/patterns/job-queue/index.js +0 -1
- package/dist/patterns/memory/index.cjs +0 -3
- package/dist/patterns/memory/index.d.cts +0 -8
- package/dist/patterns/memory/index.d.ts +0 -8
- package/dist/patterns/memory/index.js +0 -1
- package/dist/patterns/messaging/index.cjs +0 -3
- package/dist/patterns/messaging/index.d.cts +0 -7
- package/dist/patterns/messaging/index.d.ts +0 -7
- package/dist/patterns/messaging/index.js +0 -1
- package/dist/patterns/orchestration/index.cjs +0 -3
- package/dist/patterns/orchestration/index.d.cts +0 -8
- package/dist/patterns/orchestration/index.d.ts +0 -8
- package/dist/patterns/orchestration/index.js +0 -1
- package/dist/patterns/process/index.cjs +0 -3
- package/dist/patterns/process/index.d.cts +0 -10
- package/dist/patterns/process/index.d.ts +0 -10
- package/dist/patterns/process/index.js +0 -1
- package/dist/patterns/reactive-layout/index.cjs +0 -4
- package/dist/patterns/reactive-layout/index.d.cts +0 -7
- package/dist/patterns/reactive-layout/index.d.ts +0 -7
- package/dist/patterns/reactive-layout/index.js +0 -1
- package/dist/patterns/reduction/index.cjs +0 -3
- package/dist/patterns/reduction/index.d.cts +0 -6
- package/dist/patterns/reduction/index.d.ts +0 -6
- package/dist/patterns/reduction/index.js +0 -1
- package/dist/patterns/surface/index.cjs +0 -13
- package/dist/patterns/surface/index.d.cts +0 -9
- package/dist/patterns/surface/index.d.ts +0 -9
- package/dist/patterns/surface/index.js +0 -1
- package/dist/reactive-log-BKALbfal.d.ts +0 -223
- package/dist/reactive-log-DIGdYqQ6.d.cts +0 -223
- package/dist/reactive-map-CEFGp8TK.d.cts +0 -296
- package/dist/reactive-map-DS_SIAxv.d.ts +0 -296
- package/dist/resilience-6LYQJAC5.js +0 -1
- package/dist/sugar-DQjFmVqb.d.cts +0 -399
- package/dist/sugar-fhLIE7TT.d.ts +0 -399
- package/dist/topology-tree-Bcz27hpF.d.cts +0 -25
- package/dist/topology-tree-xvaD0fOX.d.ts +0 -25
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import {
|
|
2
|
+
llmConsolidator,
|
|
3
|
+
llmExtractor,
|
|
4
|
+
memoryRetrieval,
|
|
5
|
+
memoryWithKG,
|
|
6
|
+
memoryWithTiers,
|
|
7
|
+
memoryWithVectors
|
|
8
|
+
} from "./chunk-OO5BM6CJ.js";
|
|
9
|
+
import {
|
|
10
|
+
distill
|
|
11
|
+
} from "./chunk-A7KV5UK4.js";
|
|
12
|
+
|
|
13
|
+
// src/presets/ai/agent-memory.ts
|
|
14
|
+
import { DATA, node, placeholderArgs, RESOLVED } from "@graphrefly/pure-ts/core";
|
|
15
|
+
import { fromAny, fromTimer, switchMap } from "@graphrefly/pure-ts/extra";
|
|
16
|
+
import { Graph } from "@graphrefly/pure-ts/graph";
|
|
17
|
+
var AgentMemoryGraph = class extends Graph {
|
|
18
|
+
distillBundle;
|
|
19
|
+
compact;
|
|
20
|
+
size;
|
|
21
|
+
/** Vector index bundle (null if not enabled). */
|
|
22
|
+
vectors;
|
|
23
|
+
/** Knowledge graph (null if not enabled). */
|
|
24
|
+
kg;
|
|
25
|
+
/** Memory tiers bundle (null if not configured). */
|
|
26
|
+
memoryTiers;
|
|
27
|
+
/**
|
|
28
|
+
* The mounted `MemoryWithTiersGraph` subgraph (null when `opts.tiers` was
|
|
29
|
+
* omitted). Surfaces the inner graph for `describe()` / `explain()` walks
|
|
30
|
+
* and for callers that need direct access to the tiers subgraph (e.g.
|
|
31
|
+
* to register additional disposers or attach storage). Companion to
|
|
32
|
+
* `memoryTiers`, which carries only the bundle's reactive surface (B5e).
|
|
33
|
+
*/
|
|
34
|
+
tiers;
|
|
35
|
+
/**
|
|
36
|
+
* Reactive consumer API. Given a reactive `RetrievalQuery | null` source,
|
|
37
|
+
* returns a `Node` emitting the packed retrieval results. Composable with
|
|
38
|
+
* graph topology — subscribe it, chain it into `promptNode`, or switchMap
|
|
39
|
+
* over a user-input node.
|
|
40
|
+
*
|
|
41
|
+
* Each call mounts its own per-input subgraph at
|
|
42
|
+
* `retrieval::retrieve_${id}` (via `MemoryRetrievalGraph`); concurrent
|
|
43
|
+
* calls don't share state mirrors. One-shot consumers wrap with
|
|
44
|
+
* `awaitSettled(retrieveReactive(query))`.
|
|
45
|
+
*
|
|
46
|
+
* Null when no retrieval pipeline is configured.
|
|
47
|
+
*
|
|
48
|
+
* **QA F-9 (2026-04-30):** the prior `retrieval` / `retrievalTrace`
|
|
49
|
+
* shared state-node mirrors have been dropped. Use `retrieveReactive`
|
|
50
|
+
* for per-call reactive results; one-shot trace consumers should
|
|
51
|
+
* subscribe to the projection's upstream `result` derived directly
|
|
52
|
+
* via `view.target.resolve("retrieval::retrieve_${id}::result")`.
|
|
53
|
+
*/
|
|
54
|
+
retrieveReactive;
|
|
55
|
+
constructor(name, source, opts) {
|
|
56
|
+
super(name, opts.graph);
|
|
57
|
+
let rawExtractFn;
|
|
58
|
+
if (opts.extractFn) {
|
|
59
|
+
rawExtractFn = opts.extractFn;
|
|
60
|
+
} else if (opts.adapter && opts.extractPrompt) {
|
|
61
|
+
rawExtractFn = llmExtractor(opts.extractPrompt, { adapter: opts.adapter });
|
|
62
|
+
} else {
|
|
63
|
+
throw new Error("agentMemory: provide either extractFn or adapter + extractPrompt");
|
|
64
|
+
}
|
|
65
|
+
this.tagFactory("agentMemory", placeholderArgs(opts));
|
|
66
|
+
const extractFn = (rawNode, existingNode) => {
|
|
67
|
+
let latestExisting = existingNode.cache ?? /* @__PURE__ */ new Map();
|
|
68
|
+
const unsubExisting = existingNode.subscribe((msgs) => {
|
|
69
|
+
for (const m of msgs) {
|
|
70
|
+
if (m[0] === DATA) latestExisting = m[1];
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.addDisposer(unsubExisting);
|
|
74
|
+
return switchMap(rawNode, (raw) => {
|
|
75
|
+
if (raw == null) return { upsert: [] };
|
|
76
|
+
return rawExtractFn(raw, latestExisting);
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
let filteredSource = source;
|
|
80
|
+
if (opts.admissionFilter) {
|
|
81
|
+
const srcNode = fromAny(source);
|
|
82
|
+
const filter = opts.admissionFilter;
|
|
83
|
+
filteredSource = node(
|
|
84
|
+
[srcNode],
|
|
85
|
+
(batchData, actions, ctx) => {
|
|
86
|
+
const data = batchData.map(
|
|
87
|
+
(batch, i) => batch != null && batch.length > 0 ? batch.at(-1) : ctx.prevData[i]
|
|
88
|
+
);
|
|
89
|
+
const raw = data[0];
|
|
90
|
+
if (filter(raw)) {
|
|
91
|
+
actions.emit(raw);
|
|
92
|
+
} else {
|
|
93
|
+
actions.down([[RESOLVED]]);
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
{ name: "admissionFilter", describeKind: "derived" }
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
let consolidateFn;
|
|
100
|
+
if (opts.consolidateFn) {
|
|
101
|
+
consolidateFn = opts.consolidateFn;
|
|
102
|
+
} else if (opts.adapter && opts.consolidatePrompt) {
|
|
103
|
+
consolidateFn = llmConsolidator(opts.consolidatePrompt, { adapter: opts.adapter });
|
|
104
|
+
}
|
|
105
|
+
let consolidateTrigger = opts.consolidateTrigger;
|
|
106
|
+
if (!consolidateTrigger && consolidateFn && opts.reflection?.enabled !== false) {
|
|
107
|
+
const interval = opts.reflection?.interval ?? 3e5;
|
|
108
|
+
consolidateTrigger = fromTimer(interval, { period: interval });
|
|
109
|
+
}
|
|
110
|
+
const distillOpts = {
|
|
111
|
+
score: opts.score,
|
|
112
|
+
cost: opts.cost,
|
|
113
|
+
budget: opts.budget ?? 2e3,
|
|
114
|
+
context: opts.context,
|
|
115
|
+
consolidate: consolidateFn,
|
|
116
|
+
consolidateTrigger
|
|
117
|
+
};
|
|
118
|
+
let distillBundle;
|
|
119
|
+
let memoryTiersBundle = null;
|
|
120
|
+
let tiersSubgraph = null;
|
|
121
|
+
if (opts.tiers) {
|
|
122
|
+
const tiersGraph = memoryWithTiers({
|
|
123
|
+
// User customization first; canonical agent-memory-level overrides
|
|
124
|
+
// last so they always win even if `MemoryTiersOptions` later adds
|
|
125
|
+
// any of the same keys.
|
|
126
|
+
...opts.tiers,
|
|
127
|
+
name: "tiers",
|
|
128
|
+
source: filteredSource,
|
|
129
|
+
extractFn,
|
|
130
|
+
score: opts.score,
|
|
131
|
+
cost: opts.cost,
|
|
132
|
+
...opts.budget !== void 0 ? { budget: opts.budget } : { budget: 2e3 },
|
|
133
|
+
...opts.context !== void 0 ? { context: opts.context } : {},
|
|
134
|
+
...consolidateFn !== void 0 ? { consolidate: consolidateFn } : {},
|
|
135
|
+
...consolidateTrigger !== void 0 ? { consolidateTrigger } : {}
|
|
136
|
+
});
|
|
137
|
+
this.mount("tiers", tiersGraph);
|
|
138
|
+
distillBundle = tiersGraph.store;
|
|
139
|
+
memoryTiersBundle = tiersGraph.tiers;
|
|
140
|
+
tiersSubgraph = tiersGraph;
|
|
141
|
+
} else {
|
|
142
|
+
distillBundle = distill(filteredSource, extractFn, distillOpts);
|
|
143
|
+
this.add(distillBundle.store.entries, { name: "store" });
|
|
144
|
+
this.add(distillBundle.compact, { name: "compact" });
|
|
145
|
+
this.add(distillBundle.size, { name: "size" });
|
|
146
|
+
}
|
|
147
|
+
let vectors = null;
|
|
148
|
+
if (opts.vectorDimensions && opts.vectorDimensions > 0 && opts.embedFn) {
|
|
149
|
+
const vectorsGraph = memoryWithVectors({
|
|
150
|
+
name: "vectors",
|
|
151
|
+
store: distillBundle,
|
|
152
|
+
dimension: opts.vectorDimensions,
|
|
153
|
+
embedFn: opts.embedFn
|
|
154
|
+
});
|
|
155
|
+
this.mount("vectors", vectorsGraph);
|
|
156
|
+
vectors = vectorsGraph.vectors;
|
|
157
|
+
}
|
|
158
|
+
let kg = null;
|
|
159
|
+
if (opts.enableKnowledgeGraph) {
|
|
160
|
+
const kgGraph = memoryWithKG({
|
|
161
|
+
name: "knowledge",
|
|
162
|
+
store: distillBundle,
|
|
163
|
+
kgName: `${name}-kg`,
|
|
164
|
+
mountPath: "knowledge-kg",
|
|
165
|
+
...opts.entityFn !== void 0 ? { entityFn: opts.entityFn } : {}
|
|
166
|
+
});
|
|
167
|
+
this.mount("knowledge", kgGraph);
|
|
168
|
+
kg = kgGraph.kg;
|
|
169
|
+
}
|
|
170
|
+
let retrieveReactive = null;
|
|
171
|
+
if (vectors || kg) {
|
|
172
|
+
const retrievalGraph = memoryRetrieval({
|
|
173
|
+
name: "retrieval",
|
|
174
|
+
store: distillBundle,
|
|
175
|
+
vectors,
|
|
176
|
+
kg,
|
|
177
|
+
score: opts.score,
|
|
178
|
+
cost: opts.cost,
|
|
179
|
+
...opts.budget !== void 0 ? { budget: opts.budget } : {},
|
|
180
|
+
...opts.retrieval?.topK !== void 0 ? { topK: opts.retrieval.topK } : {},
|
|
181
|
+
...opts.retrieval?.graphDepth !== void 0 ? { graphDepth: opts.retrieval.graphDepth } : {},
|
|
182
|
+
...opts.contextOf !== void 0 ? { contextOf: opts.contextOf } : {},
|
|
183
|
+
...opts.contextWeight !== void 0 ? { contextWeight: opts.contextWeight } : {},
|
|
184
|
+
...opts.context !== void 0 ? { context: opts.context } : {}
|
|
185
|
+
});
|
|
186
|
+
this.mount("retrieval", retrievalGraph);
|
|
187
|
+
retrieveReactive = retrievalGraph.retrieveReactive.bind(retrievalGraph);
|
|
188
|
+
}
|
|
189
|
+
this.distillBundle = distillBundle;
|
|
190
|
+
this.compact = distillBundle.compact;
|
|
191
|
+
this.size = distillBundle.size;
|
|
192
|
+
this.vectors = vectors;
|
|
193
|
+
this.kg = kg;
|
|
194
|
+
this.memoryTiers = memoryTiersBundle;
|
|
195
|
+
this.tiers = tiersSubgraph;
|
|
196
|
+
this.retrieveReactive = retrieveReactive;
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
function agentMemory(name, source, opts) {
|
|
200
|
+
return new AgentMemoryGraph(name, source, opts);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export {
|
|
204
|
+
AgentMemoryGraph,
|
|
205
|
+
agentMemory
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=chunk-WKSWLSCX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/presets/ai/agent-memory.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// agentMemory — sugar over the memoryWith* composers (Unit 7 B).\n//\n// Thin wiring: distill() builds the core store (when no tiers configured);\n// optional capabilities delegate to the composer Graph subclasses in\n// `memory-composers.ts`. Each composer is a self-contained\n// `MemoryWithXxxGraph` that AgentMemoryGraph mounts on itself (Class B\n// audit, 2026-04-30) — teardown cascades via `Graph.destroy()`.\n//\n// **Phase 12.D (2026-04-30):** Migrated from the `Object.assign(graph, ...)`\n// factory pattern to `class extends Graph` (mirrors the\n// `MemoryWith*Graph` precedent). Required by Phase 13.G `agent(spec)` —\n// `AgentBundle.graph: AgentGraph<TIn, TOut>` consumers want `instanceof`\n// narrowing on agent-memory subgraphs.\n// ---------------------------------------------------------------------------\n\nimport { DATA, type Node, node, placeholderArgs, RESOLVED } from \"@graphrefly/pure-ts/core\";\nimport { fromAny, fromTimer, type NodeInput, switchMap } from \"@graphrefly/pure-ts/extra\";\nimport { Graph, type GraphOptions } from \"@graphrefly/pure-ts/graph\";\nimport {\n\ttype DistillBundle,\n\ttype DistillOptions,\n\tdistill,\n\ttype Extraction,\n} from \"../../base/composition/distill.js\";\nimport type { LLMAdapter } from \"../../utils/ai/adapters/core/types.js\";\nimport {\n\ttype MemoryWithTiersGraph,\n\tmemoryRetrieval,\n\tmemoryWithKG,\n\tmemoryWithTiers,\n\tmemoryWithVectors,\n} from \"../../utils/ai/memory/memory-composers.js\";\nimport type { RetrievalEntry, RetrievalQuery } from \"../../utils/ai/memory/retrieval.js\";\nimport type { MemoryTiersBundle, MemoryTiersOptions } from \"../../utils/ai/memory/tiers.js\";\nimport { llmConsolidator, llmExtractor } from \"../../utils/ai/prompts/prompt-call.js\";\nimport type { KnowledgeGraph, VectorIndexGraph } from \"../../utils/memory/index.js\";\n\nexport type AgentMemoryOptions<TMem = unknown> = {\n\tgraph?: GraphOptions;\n\t/** LLM adapter for extraction and consolidation. */\n\tadapter?: LLMAdapter;\n\t/** System prompt for the extractor LLM. */\n\textractPrompt?: string;\n\t/** Custom extractFn (overrides adapter + extractPrompt). */\n\textractFn?: (raw: unknown, existing: ReadonlyMap<string, TMem>) => NodeInput<Extraction<TMem>>;\n\t/** System prompt for the consolidation LLM. */\n\tconsolidatePrompt?: string;\n\t/** Custom consolidateFn (overrides adapter + consolidatePrompt). */\n\tconsolidateFn?: (entries: ReadonlyMap<string, TMem>) => NodeInput<Extraction<TMem>>;\n\t/** Reactive trigger for consolidation (caller supplies e.g. `fromTimer`). */\n\tconsolidateTrigger?: NodeInput<unknown>;\n\t/** Score function for budget packing (required). */\n\tscore: (mem: TMem, context: unknown) => number;\n\t/** Cost function for budget packing (required). */\n\tcost: (mem: TMem) => number;\n\t/** Token budget for compact view (default 2000). */\n\tbudget?: number;\n\t/** Context node for scoring. */\n\tcontext?: NodeInput<unknown>;\n\t/** Admission filter (default: admit all). */\n\tadmissionFilter?: (candidate: unknown) => boolean;\n\t/** Vector index dimensions (> 0 enables vector index for retrieval). */\n\tvectorDimensions?: number;\n\t/**\n\t * B12: optional accessor for an entry's hierarchical context breadcrumb\n\t * (e.g. `[\"projects\", \"auth\", \"tokens\"]`). When supplied alongside\n\t * `contextWeight > 0`, retrieval applies a score boost for entries whose\n\t * context shares a prefix with the query's `context`. Entries without\n\t * a breadcrumb are scored flatly.\n\t */\n\tcontextOf?: (mem: TMem) => readonly string[] | undefined;\n\t/**\n\t * B12: hierarchical context boost multiplier. Score is scaled by\n\t * `(1 + contextWeight * sharedDepth / queryDepth)` when both the query\n\t * and entry supply a `context`. Default: 0.\n\t */\n\tcontextWeight?: number;\n\n\t// --- In-factory composition (new) ---\n\n\t/** Extract embedding vector from a memory entry (enables vector index). */\n\tembedFn?: (mem: TMem) => readonly number[] | undefined;\n\t/** Enable knowledge graph for entity/relation tracking. */\n\tenableKnowledgeGraph?: boolean;\n\t/** Extract entities and relations from a memory entry. */\n\tentityFn?: (\n\t\tkey: string,\n\t\tmem: TMem,\n\t) =>\n\t\t| {\n\t\t\t\tentities?: Array<{ id: string; value: unknown }>;\n\t\t\t\trelations?: Array<{ from: string; to: string; relation: string; weight?: number }>;\n\t\t }\n\t\t| undefined;\n\n\t/** 3-tier storage configuration. Omit to use single-tier (existing behavior). */\n\ttiers?: MemoryTiersOptions<TMem>;\n\n\t/** Retrieval pipeline configuration. Requires vector index or knowledge graph. */\n\tretrieval?: {\n\t\t/** Max candidates from vector search (default 20). */\n\t\ttopK?: number;\n\t\t/** KG expansion depth in hops (default 1). */\n\t\tgraphDepth?: number;\n\t};\n\n\t/** Periodic reflection/consolidation configuration. */\n\treflection?: {\n\t\t/** Interval in ms between consolidation runs (default 300_000 = 5 min). */\n\t\tinterval?: number;\n\t\t/** Enable/disable periodic reflection (default true when consolidateFn is available). */\n\t\tenabled?: boolean;\n\t};\n};\n\n/**\n * Pre-wired agentic memory graph. Sugar over `distill` plus the\n * `memoryWithVectors` / `memoryWithKG` / `memoryWithTiers` / `memoryRetrieval`\n * composers. Power users who want a subset of capabilities can call those\n * composers directly; this class bundles them into one ergonomic Graph subclass.\n *\n * Mounts:\n * - `tiers/*` — present when `opts.tiers` configured (replaces the\n * default distill bundle).\n * - `vectors/*` — present when `opts.vectorDimensions > 0 && opts.embedFn`.\n * - `knowledge/*` — present when `opts.enableKnowledgeGraph`.\n * - `retrieval/*` — present when vectors or kg configured.\n *\n * When `opts.tiers` is omitted, `store` / `compact` / `size` are added as\n * top-level nodes on this graph (visible in `describe()` / `explain()`).\n */\nexport class AgentMemoryGraph<TMem = unknown> extends Graph {\n\treadonly distillBundle: DistillBundle<TMem>;\n\treadonly compact: Node<Array<{ key: string; value: TMem; score: number }>>;\n\treadonly size: Node<number>;\n\t/** Vector index bundle (null if not enabled). */\n\treadonly vectors: VectorIndexGraph<TMem> | null;\n\t/** Knowledge graph (null if not enabled). */\n\treadonly kg: KnowledgeGraph<unknown, string> | null;\n\t/** Memory tiers bundle (null if not configured). */\n\treadonly memoryTiers: MemoryTiersBundle<TMem> | null;\n\t/**\n\t * The mounted `MemoryWithTiersGraph` subgraph (null when `opts.tiers` was\n\t * omitted). Surfaces the inner graph for `describe()` / `explain()` walks\n\t * and for callers that need direct access to the tiers subgraph (e.g.\n\t * to register additional disposers or attach storage). Companion to\n\t * `memoryTiers`, which carries only the bundle's reactive surface (B5e).\n\t */\n\treadonly tiers: MemoryWithTiersGraph<unknown, TMem> | null;\n\t/**\n\t * Reactive consumer API. Given a reactive `RetrievalQuery | null` source,\n\t * returns a `Node` emitting the packed retrieval results. Composable with\n\t * graph topology — subscribe it, chain it into `promptNode`, or switchMap\n\t * over a user-input node.\n\t *\n\t * Each call mounts its own per-input subgraph at\n\t * `retrieval::retrieve_${id}` (via `MemoryRetrievalGraph`); concurrent\n\t * calls don't share state mirrors. One-shot consumers wrap with\n\t * `awaitSettled(retrieveReactive(query))`.\n\t *\n\t * Null when no retrieval pipeline is configured.\n\t *\n\t * **QA F-9 (2026-04-30):** the prior `retrieval` / `retrievalTrace`\n\t * shared state-node mirrors have been dropped. Use `retrieveReactive`\n\t * for per-call reactive results; one-shot trace consumers should\n\t * subscribe to the projection's upstream `result` derived directly\n\t * via `view.target.resolve(\"retrieval::retrieve_${id}::result\")`.\n\t */\n\treadonly retrieveReactive:\n\t\t| ((queryInput: NodeInput<RetrievalQuery | null>) => Node<ReadonlyArray<RetrievalEntry<TMem>>>)\n\t\t| null;\n\n\tconstructor(name: string, source: NodeInput<unknown>, opts: AgentMemoryOptions<TMem>) {\n\t\tsuper(name, opts.graph);\n\n\t\t// --- Extract function resolution ---\n\t\t// /qa A3 (2026-04-30): validate BEFORE tagFactory so an invalid-opts\n\t\t// throw doesn't leave a tagged-but-empty Graph instance behind.\n\t\tlet rawExtractFn: (\n\t\t\traw: unknown,\n\t\t\texisting: ReadonlyMap<string, TMem>,\n\t\t) => NodeInput<Extraction<TMem>>;\n\t\tif (opts.extractFn) {\n\t\t\trawExtractFn = opts.extractFn;\n\t\t} else if (opts.adapter && opts.extractPrompt) {\n\t\t\trawExtractFn = llmExtractor<unknown, TMem>(opts.extractPrompt, { adapter: opts.adapter });\n\t\t} else {\n\t\t\tthrow new Error(\"agentMemory: provide either extractFn or adapter + extractPrompt\");\n\t\t}\n\n\t\t// Tier 1.5.3 Phase 2.5 (DG1=B): tag the Graph with its constructing\n\t\t// factory so `describe()` exposes provenance. Opts contain non-JSON\n\t\t// fields (`adapter`, `extractFn`, `embedFn`, `score`, `cost`, `evict`,\n\t\t// callbacks, etc.) so route through `placeholderArgs` (DG2=ii).\n\t\tthis.tagFactory(\"agentMemory\", placeholderArgs(opts as unknown as Record<string, unknown>));\n\t\t// Tier 1.5.4 — distill's `extractFn` is now reactive (called once with\n\t\t// nodes). Adapt the AgentMemoryOptions callback shape via switchMap +\n\t\t// closure-mirror for `existing` (COMPOSITION-GUIDE §40 recipe).\n\t\t// QA F9: register the closure-mirror's unsub with the host graph so\n\t\t// `graph.destroy()` reclaims it — was previously leaked.\n\t\t//\n\t\t// **Phase 16 attempt (2026-04-29) reverted.** Tried `withLatestFrom(\n\t\t// rawNode, existingNode) + switchMap`; this is the WRONG migration per\n\t\t// COMPOSITION-GUIDE §28. **Phase 10.5 (same-day partial-flag flip on\n\t\t// `withLatestFrom`)** removes the initial-pair drop, but this site stays\n\t\t// on closure-mirror form pending Phase 11 restricted signatures. See\n\t\t// `archive/docs/SESSION-graph-narrow-waist.md` § \"Status of existing\n\t\t// modifications\" + § \"Phase 10.5\".\n\t\tconst extractFn = (\n\t\t\trawNode: Node<unknown>,\n\t\t\texistingNode: Node<ReadonlyMap<string, TMem>>,\n\t\t): NodeInput<Extraction<TMem>> => {\n\t\t\tlet latestExisting: ReadonlyMap<string, TMem> =\n\t\t\t\t(existingNode.cache as ReadonlyMap<string, TMem> | undefined) ?? new Map();\n\t\t\tconst unsubExisting = existingNode.subscribe((msgs) => {\n\t\t\t\tfor (const m of msgs) {\n\t\t\t\t\tif (m[0] === DATA) latestExisting = m[1] as ReadonlyMap<string, TMem>;\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.addDisposer(unsubExisting);\n\t\t\treturn switchMap(rawNode, (raw) => {\n\t\t\t\tif (raw == null) return { upsert: [] };\n\t\t\t\treturn rawExtractFn(raw, latestExisting);\n\t\t\t});\n\t\t};\n\n\t\t// --- Admission filter ---\n\t\tlet filteredSource = source;\n\t\tif (opts.admissionFilter) {\n\t\t\tconst srcNode = fromAny(source);\n\t\t\tconst filter = opts.admissionFilter;\n\t\t\tfilteredSource = node(\n\t\t\t\t[srcNode],\n\t\t\t\t(batchData, actions, ctx) => {\n\t\t\t\t\tconst data = batchData.map((batch, i) =>\n\t\t\t\t\t\tbatch != null && batch.length > 0 ? batch.at(-1) : ctx.prevData[i],\n\t\t\t\t\t);\n\t\t\t\t\tconst raw = data[0];\n\t\t\t\t\tif (filter(raw)) {\n\t\t\t\t\t\tactions.emit(raw);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// EC1 (qa 2026-04-30): emitting `undefined` would violate spec §5.12\n\t\t\t\t\t\t// (undefined is the protocol SENTINEL — TopicGraph.publish even\n\t\t\t\t\t\t// throws on it). Downstream `batch.at(-1) : ctx.prevData[i]`\n\t\t\t\t\t\t// would also resolve `undefined` back to the prior accepted\n\t\t\t\t\t\t// value, leaking past-the-filter. Emit a tier-3 RESOLVED so the\n\t\t\t\t\t\t// wave settles cleanly without surfacing a stale DATA.\n\t\t\t\t\t\tactions.down([[RESOLVED]]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ name: \"admissionFilter\", describeKind: \"derived\" },\n\t\t\t);\n\t\t}\n\n\t\t// --- Consolidation ---\n\t\tlet consolidateFn:\n\t\t\t| ((entries: ReadonlyMap<string, TMem>) => NodeInput<Extraction<TMem>>)\n\t\t\t| undefined;\n\t\tif (opts.consolidateFn) {\n\t\t\tconsolidateFn = opts.consolidateFn;\n\t\t} else if (opts.adapter && opts.consolidatePrompt) {\n\t\t\tconsolidateFn = llmConsolidator<TMem>(opts.consolidatePrompt, { adapter: opts.adapter });\n\t\t}\n\n\t\t// --- Reflection: default consolidateTrigger from fromTimer ---\n\t\tlet consolidateTrigger = opts.consolidateTrigger;\n\t\tif (!consolidateTrigger && consolidateFn && opts.reflection?.enabled !== false) {\n\t\t\tconst interval = opts.reflection?.interval ?? 300_000;\n\t\t\tconsolidateTrigger = fromTimer(interval, { period: interval });\n\t\t}\n\n\t\t// --- Build distill bundle (the core) ---\n\t\t// Tier 4.1 B (2026-04-29): when tiers are configured, `memoryWithTiers`\n\t\t// is the construction site for the distill bundle so it can wire\n\t\t// `reactiveMap.retention` into the store at construction (no §7 cycle).\n\t\t// When tiers are NOT configured, agentMemory calls `distill` directly.\n\t\tconst distillOpts: DistillOptions<TMem> = {\n\t\t\tscore: opts.score,\n\t\t\tcost: opts.cost,\n\t\t\tbudget: opts.budget ?? 2000,\n\t\t\tcontext: opts.context,\n\t\t\tconsolidate: consolidateFn,\n\t\t\tconsolidateTrigger,\n\t\t};\n\n\t\tlet distillBundle: DistillBundle<TMem>;\n\t\tlet memoryTiersBundle: MemoryTiersBundle<TMem> | null = null;\n\t\tlet tiersSubgraph: MemoryWithTiersGraph<unknown, TMem> | null = null;\n\t\tif (opts.tiers) {\n\t\t\tconst tiersGraph = memoryWithTiers<unknown, TMem>({\n\t\t\t\t// User customization first; canonical agent-memory-level overrides\n\t\t\t\t// last so they always win even if `MemoryTiersOptions` later adds\n\t\t\t\t// any of the same keys.\n\t\t\t\t...opts.tiers,\n\t\t\t\tname: \"tiers\",\n\t\t\t\tsource: filteredSource,\n\t\t\t\textractFn,\n\t\t\t\tscore: opts.score,\n\t\t\t\tcost: opts.cost,\n\t\t\t\t...(opts.budget !== undefined ? { budget: opts.budget } : { budget: 2000 }),\n\t\t\t\t...(opts.context !== undefined ? { context: opts.context } : {}),\n\t\t\t\t...(consolidateFn !== undefined ? { consolidate: consolidateFn } : {}),\n\t\t\t\t...(consolidateTrigger !== undefined ? { consolidateTrigger } : {}),\n\t\t\t});\n\t\t\tthis.mount(\"tiers\", tiersGraph);\n\t\t\tdistillBundle = tiersGraph.store;\n\t\t\tmemoryTiersBundle = tiersGraph.tiers;\n\t\t\ttiersSubgraph = tiersGraph;\n\t\t} else {\n\t\t\tdistillBundle = distill<unknown, TMem>(filteredSource, extractFn, distillOpts);\n\t\t\tthis.add(distillBundle.store.entries, { name: \"store\" });\n\t\t\tthis.add(distillBundle.compact, { name: \"compact\" });\n\t\t\tthis.add(distillBundle.size, { name: \"size\" });\n\t\t}\n\n\t\t// --- Vector index (composer) ---\n\t\tlet vectors: VectorIndexGraph<TMem> | null = null;\n\t\tif (opts.vectorDimensions && opts.vectorDimensions > 0 && opts.embedFn) {\n\t\t\tconst vectorsGraph = memoryWithVectors<TMem>({\n\t\t\t\tname: \"vectors\",\n\t\t\t\tstore: distillBundle,\n\t\t\t\tdimension: opts.vectorDimensions,\n\t\t\t\tembedFn: opts.embedFn,\n\t\t\t});\n\t\t\tthis.mount(\"vectors\", vectorsGraph);\n\t\t\tvectors = vectorsGraph.vectors;\n\t\t}\n\n\t\t// --- Knowledge graph (composer) ---\n\t\tlet kg: KnowledgeGraph<unknown, string> | null = null;\n\t\tif (opts.enableKnowledgeGraph) {\n\t\t\tconst kgGraph = memoryWithKG<TMem>({\n\t\t\t\tname: \"knowledge\",\n\t\t\t\tstore: distillBundle,\n\t\t\t\tkgName: `${name}-kg`,\n\t\t\t\tmountPath: \"knowledge-kg\",\n\t\t\t\t...(opts.entityFn !== undefined ? { entityFn: opts.entityFn } : {}),\n\t\t\t});\n\t\t\tthis.mount(\"knowledge\", kgGraph);\n\t\t\tkg = kgGraph.kg;\n\t\t}\n\n\t\t// --- Retrieval pipeline (composer) ---\n\t\tlet retrieveReactive:\n\t\t\t| ((\n\t\t\t\t\tqueryInput: NodeInput<RetrievalQuery | null>,\n\t\t\t ) => Node<ReadonlyArray<RetrievalEntry<TMem>>>)\n\t\t\t| null = null;\n\n\t\tif (vectors || kg) {\n\t\t\tconst retrievalGraph = memoryRetrieval<TMem>({\n\t\t\t\tname: \"retrieval\",\n\t\t\t\tstore: distillBundle,\n\t\t\t\tvectors,\n\t\t\t\tkg,\n\t\t\t\tscore: opts.score,\n\t\t\t\tcost: opts.cost,\n\t\t\t\t...(opts.budget !== undefined ? { budget: opts.budget } : {}),\n\t\t\t\t...(opts.retrieval?.topK !== undefined ? { topK: opts.retrieval.topK } : {}),\n\t\t\t\t...(opts.retrieval?.graphDepth !== undefined\n\t\t\t\t\t? { graphDepth: opts.retrieval.graphDepth }\n\t\t\t\t\t: {}),\n\t\t\t\t...(opts.contextOf !== undefined ? { contextOf: opts.contextOf } : {}),\n\t\t\t\t...(opts.contextWeight !== undefined ? { contextWeight: opts.contextWeight } : {}),\n\t\t\t\t...(opts.context !== undefined ? { context: opts.context } : {}),\n\t\t\t});\n\t\t\tthis.mount(\"retrieval\", retrievalGraph);\n\t\t\tretrieveReactive = retrievalGraph.retrieveReactive.bind(retrievalGraph);\n\t\t}\n\n\t\tthis.distillBundle = distillBundle;\n\t\tthis.compact = distillBundle.compact;\n\t\tthis.size = distillBundle.size;\n\t\tthis.vectors = vectors;\n\t\tthis.kg = kg;\n\t\tthis.memoryTiers = memoryTiersBundle;\n\t\tthis.tiers = tiersSubgraph;\n\t\tthis.retrieveReactive = retrieveReactive;\n\t}\n}\n\n/**\n * Pre-wired agentic memory graph. Sugar over `distill` plus the\n * `memoryWithVectors` / `memoryWithKG` / `memoryWithTiers` / `memoryRetrieval`\n * composers. Power users who want a subset of capabilities can call those\n * composers directly; this factory bundles them into one ergonomic call.\n *\n * Returns an {@link AgentMemoryGraph} subclass instance — `instanceof\n * AgentMemoryGraph` narrows in callers (e.g. Phase 13.G `agent(spec)`).\n */\nexport function agentMemory<TMem = unknown>(\n\tname: string,\n\tsource: NodeInput<unknown>,\n\topts: AgentMemoryOptions<TMem>,\n): AgentMemoryGraph<TMem> {\n\treturn new AgentMemoryGraph<TMem>(name, source, opts);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import {
|
|
2
|
+
msgVal,
|
|
3
|
+
operatorOpts
|
|
4
|
+
} from "./chunk-TSBFTJKM.js";
|
|
5
|
+
|
|
6
|
+
// src/base/resilience/status.ts
|
|
7
|
+
import {
|
|
8
|
+
batch,
|
|
9
|
+
COMPLETE,
|
|
10
|
+
DATA,
|
|
11
|
+
DIRTY,
|
|
12
|
+
ERROR,
|
|
13
|
+
factoryTag,
|
|
14
|
+
node,
|
|
15
|
+
RESOLVED
|
|
16
|
+
} from "@graphrefly/pure-ts/core";
|
|
17
|
+
function withStatus(src, options) {
|
|
18
|
+
const initialStatus = options?.initialStatus ?? "pending";
|
|
19
|
+
const callerMeta = options?.meta;
|
|
20
|
+
const out = node(
|
|
21
|
+
[],
|
|
22
|
+
(_deps, a) => {
|
|
23
|
+
let currentStatus = initialStatus;
|
|
24
|
+
out.meta.status.down([[DATA, initialStatus]]);
|
|
25
|
+
out.meta.error.down([[DATA, null]]);
|
|
26
|
+
const unsub = src.subscribe((msgs) => {
|
|
27
|
+
for (const m of msgs) {
|
|
28
|
+
const t = m[0];
|
|
29
|
+
if (t === DIRTY) a.down([[DIRTY]]);
|
|
30
|
+
else if (t === DATA) {
|
|
31
|
+
if (currentStatus === "errored") {
|
|
32
|
+
batch(() => {
|
|
33
|
+
out.meta.error.down([[DATA, null]]);
|
|
34
|
+
out.meta.status.down([[DATA, "running"]]);
|
|
35
|
+
a.emit(m[1]);
|
|
36
|
+
});
|
|
37
|
+
currentStatus = "running";
|
|
38
|
+
} else if (currentStatus !== "running") {
|
|
39
|
+
batch(() => {
|
|
40
|
+
out.meta.status.down([[DATA, "running"]]);
|
|
41
|
+
a.emit(m[1]);
|
|
42
|
+
});
|
|
43
|
+
currentStatus = "running";
|
|
44
|
+
} else {
|
|
45
|
+
a.emit(m[1]);
|
|
46
|
+
}
|
|
47
|
+
} else if (t === RESOLVED) a.down([[RESOLVED]]);
|
|
48
|
+
else if (t === COMPLETE) {
|
|
49
|
+
out.meta.status.down([[DATA, "completed"]]);
|
|
50
|
+
currentStatus = "completed";
|
|
51
|
+
a.down([[COMPLETE]]);
|
|
52
|
+
} else if (t === ERROR) {
|
|
53
|
+
const err = msgVal(m);
|
|
54
|
+
batch(() => {
|
|
55
|
+
out.meta.error.down([[DATA, err]]);
|
|
56
|
+
out.meta.status.down([[DATA, "errored"]]);
|
|
57
|
+
});
|
|
58
|
+
currentStatus = "errored";
|
|
59
|
+
a.down([m]);
|
|
60
|
+
} else a.down([m]);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
return unsub;
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
...operatorOpts(),
|
|
67
|
+
meta: {
|
|
68
|
+
...callerMeta ?? {},
|
|
69
|
+
status: initialStatus,
|
|
70
|
+
error: null,
|
|
71
|
+
...factoryTag("withStatus", { initialStatus })
|
|
72
|
+
},
|
|
73
|
+
completeWhenDepsComplete: false,
|
|
74
|
+
resubscribable: true,
|
|
75
|
+
initial: src.cache
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
return {
|
|
79
|
+
node: out,
|
|
80
|
+
status: out.meta.status,
|
|
81
|
+
error: out.meta.error
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
withStatus
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=chunk-Y52CS6YA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/base/resilience/status.ts"],"sourcesContent":["/**\n * Status wrapper — surface lifecycle state alongside output.\n *\n * `withStatus` mirrors a source `Node<T>` and produces companion `status` /\n * `error` reactive nodes for UI and meta-snapshot consumers.\n */\n\nimport {\n\tbatch,\n\tCOMPLETE,\n\tDATA,\n\tDIRTY,\n\tERROR,\n\tfactoryTag,\n\ttype Node,\n\tnode,\n\tRESOLVED,\n} from \"@graphrefly/pure-ts/core\";\nimport { msgVal, operatorOpts } from \"./_internal.js\";\n\n/**\n * Central lifecycle vocabulary for resilience primitives + `processManager`.\n *\n * **DS-13.5.B follow-on (2026-05-01).** Widened from\n * `\"pending\" | \"running\" | \"completed\" | \"errored\"` to add `\"cancelled\"`\n * (replaces `processManager`'s prior `\"compensated\"` semantics) and\n * `\"paused\"` (carried by `<Primitive>State` lifecycle-shaped companions\n * on `retry` / `circuitBreaker` / `rateLimiter`).\n *\n * Resilience primitives use this enum as the literal vocabulary inside\n * lifecycle-shaped state nodes; `withStatus` (legacy) only emits the\n * original four (pre-widening) — the cancelled / paused values are added\n * for downstream consumers that need richer lifecycle reporting.\n */\nexport type StatusValue = \"pending\" | \"running\" | \"completed\" | \"errored\" | \"cancelled\" | \"paused\";\n\nexport type WithStatusBundle<T> = {\n\tnode: Node<T>;\n\tstatus: Node<StatusValue>;\n\terror: Node<unknown | null>;\n};\n\n/**\n * Wraps `src` with `status` and `error` {@link state} companions for UI or meta snapshots.\n *\n * @param src - Upstream node to mirror.\n * @param options - `initialStatus` defaults to `\"pending\"`.\n * @returns `{ node, status, error }` where `out` is the mirrored stream, `status` is a\n * reactive `Node<StatusValue>` (`\"pending\" | \"running\" | \"completed\" | \"errored\"`),\n * and `error` holds the last `ERROR` payload (cleared to `null` on the next `DATA`\n * after `errored`).\n *\n * @remarks\n * **Lifecycle:** `pending` (no DATA yet) → `running` (on first DATA) → `completed`\n * (on COMPLETE) or `errored` (on ERROR). After `errored`, the next `DATA` clears\n * `error` and re-enters `running` inside a {@link batch} so subscribers see one\n * consistent transition (matches graphrefly-py).\n *\n * **Producer-pattern visibility:** `out` is built via `node([], fn, …)`, so `src`\n * appears as the source dependency in `describe()` traversal but the `status` /\n * `error` companions are mirrored via subscribe-callback effects — they appear\n * under `out.meta.status` / `out.meta.error` (and as `<name>::__meta__::status`\n * paths in `describe()`) rather than as separate top-level edges. Subscribers\n * to `out` see the throttled DATA stream; `status` / `error` companions may not\n * appear as edges in `describe()` if no consumer subscribes to them (per\n * COMPOSITION-GUIDE §1, push-on-subscribe semantics).\n *\n * **Per-subscribe lifecycle (DF8, 2026-04-29 doc lock).** When the wrapped\n * source is `resubscribable: true` and multiple consumers attach in\n * sequence, each new subscription cycle re-runs the producer fn AND\n * re-emits the initial `pending` + `null` companion DATAs. Downstream\n * subscribers to the `status` / `error` companions see thrash:\n * `pending → running → completed → pending → running …`. This is the\n * intended fresh-cycle semantic (each subscription cycle reports its own\n * lifecycle); consumers that need a \"stable\" status across cycles should\n * derive a snapshot via a separate `state()` mirror rather than depending\n * on the per-cycle reset.\n *\n * @example\n * ```ts\n * import { withStatus, state } from \"@graphrefly/graphrefly-ts\";\n *\n * const src = state<number>(0);\n * const { node, status, error } = withStatus(src);\n *\n * status.subscribe((msgs) => console.log(\"status:\", msgs));\n * src.down([[DATA, 42]]); // status → \"running\"\n * ```\n *\n * @category extra\n */\nexport function withStatus<T>(\n\tsrc: Node<T>,\n\toptions?: { initialStatus?: StatusValue; meta?: Record<string, unknown> },\n): WithStatusBundle<T> {\n\tconst initialStatus = options?.initialStatus ?? \"pending\";\n\tconst callerMeta = options?.meta;\n\n\tconst out = node<T>(\n\t\t[],\n\t\t(_deps, a) => {\n\t\t\tlet currentStatus: StatusValue = initialStatus;\n\t\t\tout.meta.status.down([[DATA, initialStatus]]);\n\t\t\tout.meta.error.down([[DATA, null]]);\n\n\t\t\tconst unsub = src.subscribe((msgs) => {\n\t\t\t\tfor (const m of msgs) {\n\t\t\t\t\tconst t = m[0];\n\t\t\t\t\tif (t === DIRTY) a.down([[DIRTY]]);\n\t\t\t\t\telse if (t === DATA) {\n\t\t\t\t\t\tif (currentStatus === \"errored\") {\n\t\t\t\t\t\t\tbatch(() => {\n\t\t\t\t\t\t\t\tout.meta.error.down([[DATA, null]]);\n\t\t\t\t\t\t\t\tout.meta.status.down([[DATA, \"running\"]]);\n\t\t\t\t\t\t\t\ta.emit(m[1] as T);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcurrentStatus = \"running\";\n\t\t\t\t\t\t} else if (currentStatus !== \"running\") {\n\t\t\t\t\t\t\t// First DATA after `pending` (or another non-running state):\n\t\t\t\t\t\t\t// flip status to \"running\" alongside the DATA emit so external\n\t\t\t\t\t\t\t// observers see one coherent wave (no torn reads between the\n\t\t\t\t\t\t\t// status companion and the mirrored stream).\n\t\t\t\t\t\t\tbatch(() => {\n\t\t\t\t\t\t\t\tout.meta.status.down([[DATA, \"running\"]]);\n\t\t\t\t\t\t\t\ta.emit(m[1] as T);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcurrentStatus = \"running\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// A9 (QA fix 2026-05-01): already in \"running\" — skip the\n\t\t\t\t\t\t\t// redundant status emit that the previous code did on every\n\t\t\t\t\t\t\t// DATA. Saves a wave walk per DATA on hot streams (e.g. SSE\n\t\t\t\t\t\t\t// token streams through withStatus).\n\t\t\t\t\t\t\ta.emit(m[1] as T);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (t === RESOLVED) a.down([[RESOLVED]]);\n\t\t\t\t\telse if (t === COMPLETE) {\n\t\t\t\t\t\tout.meta.status.down([[DATA, \"completed\"]]);\n\t\t\t\t\t\tcurrentStatus = \"completed\";\n\t\t\t\t\t\ta.down([[COMPLETE]]);\n\t\t\t\t\t} else if (t === ERROR) {\n\t\t\t\t\t\tconst err = msgVal(m);\n\t\t\t\t\t\tbatch(() => {\n\t\t\t\t\t\t\tout.meta.error.down([[DATA, err]]);\n\t\t\t\t\t\t\tout.meta.status.down([[DATA, \"errored\"]]);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcurrentStatus = \"errored\";\n\t\t\t\t\t\ta.down([m]);\n\t\t\t\t\t} else a.down([m]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn unsub;\n\t\t},\n\t\t{\n\t\t\t...operatorOpts(),\n\t\t\tmeta: {\n\t\t\t\t...(callerMeta ?? {}),\n\t\t\t\tstatus: initialStatus,\n\t\t\t\terror: null,\n\t\t\t\t...factoryTag(\"withStatus\", { initialStatus }),\n\t\t\t},\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\tresubscribable: true,\n\t\t\tinitial: src.cache,\n\t\t},\n\t);\n\n\treturn {\n\t\tnode: out,\n\t\tstatus: out.meta.status as Node<StatusValue>,\n\t\terror: out.meta.error as Node<unknown | null>,\n\t};\n}\n"],"mappings":";;;;;;AAOA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,OACM;AA0EA,SAAS,WACf,KACA,SACsB;AACtB,QAAM,gBAAgB,SAAS,iBAAiB;AAChD,QAAM,aAAa,SAAS;AAE5B,QAAM,MAAM;AAAA,IACX,CAAC;AAAA,IACD,CAAC,OAAO,MAAM;AACb,UAAI,gBAA6B;AACjC,UAAI,KAAK,OAAO,KAAK,CAAC,CAAC,MAAM,aAAa,CAAC,CAAC;AAC5C,UAAI,KAAK,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAElC,YAAM,QAAQ,IAAI,UAAU,CAAC,SAAS;AACrC,mBAAW,KAAK,MAAM;AACrB,gBAAM,IAAI,EAAE,CAAC;AACb,cAAI,MAAM,MAAO,GAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AAAA,mBACxB,MAAM,MAAM;AACpB,gBAAI,kBAAkB,WAAW;AAChC,oBAAM,MAAM;AACX,oBAAI,KAAK,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;AAClC,oBAAI,KAAK,OAAO,KAAK,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;AACxC,kBAAE,KAAK,EAAE,CAAC,CAAM;AAAA,cACjB,CAAC;AACD,8BAAgB;AAAA,YACjB,WAAW,kBAAkB,WAAW;AAKvC,oBAAM,MAAM;AACX,oBAAI,KAAK,OAAO,KAAK,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;AACxC,kBAAE,KAAK,EAAE,CAAC,CAAM;AAAA,cACjB,CAAC;AACD,8BAAgB;AAAA,YACjB,OAAO;AAKN,gBAAE,KAAK,EAAE,CAAC,CAAM;AAAA,YACjB;AAAA,UACD,WAAW,MAAM,SAAU,GAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;AAAA,mBACrC,MAAM,UAAU;AACxB,gBAAI,KAAK,OAAO,KAAK,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC;AAC1C,4BAAgB;AAChB,cAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;AAAA,UACpB,WAAW,MAAM,OAAO;AACvB,kBAAM,MAAM,OAAO,CAAC;AACpB,kBAAM,MAAM;AACX,kBAAI,KAAK,MAAM,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,kBAAI,KAAK,OAAO,KAAK,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;AAAA,YACzC,CAAC;AACD,4BAAgB;AAChB,cAAE,KAAK,CAAC,CAAC,CAAC;AAAA,UACX,MAAO,GAAE,KAAK,CAAC,CAAC,CAAC;AAAA,QAClB;AAAA,MACD,CAAC;AAED,aAAO;AAAA,IACR;AAAA,IACA;AAAA,MACC,GAAG,aAAa;AAAA,MAChB,MAAM;AAAA,QACL,GAAI,cAAc,CAAC;AAAA,QACnB,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,GAAG,WAAW,cAAc,EAAE,cAAc,CAAC;AAAA,MAC9C;AAAA,MACA,0BAA0B;AAAA,MAC1B,gBAAgB;AAAA,MAChB,SAAS,IAAI;AAAA,IACd;AAAA,EACD;AAEA,SAAO;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,IAAI,KAAK;AAAA,IACjB,OAAO,IAAI,KAAK;AAAA,EACjB;AACD;","names":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-AZDQPQ3V.js";
|
|
4
|
+
|
|
5
|
+
// src/compat/solid/index.ts
|
|
6
|
+
var solid_exports = {};
|
|
7
|
+
__export(solid_exports, {
|
|
8
|
+
useStore: () => useStore,
|
|
9
|
+
useSubscribe: () => useSubscribe,
|
|
10
|
+
useSubscribeRecord: () => useSubscribeRecord
|
|
11
|
+
});
|
|
12
|
+
import { DATA, DIRTY, RESOLVED } from "@graphrefly/pure-ts/core";
|
|
13
|
+
import { createSignal, getOwner, onCleanup } from "solid-js";
|
|
14
|
+
function useSubscribe(node) {
|
|
15
|
+
const [value, setValue] = createSignal(node.cache, { equals: false });
|
|
16
|
+
const unsub = node.subscribe(() => {
|
|
17
|
+
setValue(() => node.cache);
|
|
18
|
+
});
|
|
19
|
+
if (getOwner()) {
|
|
20
|
+
onCleanup(() => unsub());
|
|
21
|
+
} else if (typeof console !== "undefined") {
|
|
22
|
+
console.warn(
|
|
23
|
+
"[graphrefly-ts] useSubscribe called outside a Solid reactive owner \u2014 subscription will not be auto-disposed."
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
function useStore(node) {
|
|
29
|
+
const value = useSubscribe(node);
|
|
30
|
+
const setter = (v) => {
|
|
31
|
+
node.down([[DIRTY], [DATA, v]]);
|
|
32
|
+
};
|
|
33
|
+
return [value, setter];
|
|
34
|
+
}
|
|
35
|
+
function useSubscribeRecord(keysNode, factory) {
|
|
36
|
+
const [value, setValue] = createSignal({}, { equals: false });
|
|
37
|
+
let entrySubs = [];
|
|
38
|
+
const cleanupEntries = () => {
|
|
39
|
+
for (const unsub of entrySubs) unsub();
|
|
40
|
+
entrySubs = [];
|
|
41
|
+
};
|
|
42
|
+
const buildSnapshot = () => {
|
|
43
|
+
const snap = {};
|
|
44
|
+
for (const key of keysNode.cache ?? []) {
|
|
45
|
+
const nodes = factory(key);
|
|
46
|
+
const values = {};
|
|
47
|
+
for (const field of Object.keys(nodes)) {
|
|
48
|
+
values[field] = nodes[field].cache;
|
|
49
|
+
}
|
|
50
|
+
snap[key] = values;
|
|
51
|
+
}
|
|
52
|
+
return snap;
|
|
53
|
+
};
|
|
54
|
+
const sync = (nextKeys) => {
|
|
55
|
+
cleanupEntries();
|
|
56
|
+
for (const key of nextKeys) {
|
|
57
|
+
const nodes = factory(key);
|
|
58
|
+
for (const field of Object.keys(nodes)) {
|
|
59
|
+
const unsub = nodes[field].subscribe(() => {
|
|
60
|
+
setValue(() => buildSnapshot());
|
|
61
|
+
});
|
|
62
|
+
entrySubs.push(unsub);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
setValue(() => buildSnapshot());
|
|
66
|
+
};
|
|
67
|
+
const keysUnsub = keysNode.subscribe((msgs) => {
|
|
68
|
+
if (msgs.some((m) => m[0] === DATA || m[0] === RESOLVED)) {
|
|
69
|
+
sync(keysNode.cache ?? []);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
sync(keysNode.cache ?? []);
|
|
73
|
+
if (getOwner()) {
|
|
74
|
+
onCleanup(() => {
|
|
75
|
+
keysUnsub();
|
|
76
|
+
cleanupEntries();
|
|
77
|
+
});
|
|
78
|
+
} else if (typeof console !== "undefined") {
|
|
79
|
+
console.warn(
|
|
80
|
+
"[graphrefly-ts] useSubscribeRecord called outside a Solid reactive owner \u2014 subscription will not be auto-disposed."
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export {
|
|
87
|
+
useSubscribe,
|
|
88
|
+
useStore,
|
|
89
|
+
useSubscribeRecord,
|
|
90
|
+
solid_exports
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=chunk-YCBUWK77.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/compat/solid/index.ts"],"sourcesContent":["// ---------------------------------------------------------------------------\n// Solid bindings — useSubscribe / useStore\n// ---------------------------------------------------------------------------\n// Bridges GraphReFly nodes into Solid reactivity via createSignal.\n// Works with any Node<T>, including companion nodes (node.meta.status).\n//\n// Usage:\n// import { useSubscribe, useStore } from '@graphrefly/graphrefly-ts/compat/solid';\n// // Optional peer install (only for this adapter): pnpm add solid-js\n// const status = useSubscribe(wsStatusNode); // Accessor<string | undefined>\n// const [count, setCount] = useStore(countNode); // [Accessor<number | undefined>, Setter]\n// ---------------------------------------------------------------------------\n\nimport { DATA, DIRTY, type Messages, type Node, RESOLVED } from \"@graphrefly/pure-ts/core\";\nimport { createSignal, getOwner, onCleanup } from \"solid-js\";\n\n/** Solid accessor function — returns current value when called. */\nexport type Accessor<T> = () => T;\n\n/**\n * Subscribe to a `Node<T>` as a Solid signal. Auto-cleans up with the owning scope.\n * Subscription lifecycle is tied to Solid scope cleanup (not node terminal messages).\n */\nexport function useSubscribe<T>(node: Node<T>): Accessor<T | undefined | null> {\n\tconst [value, setValue] = createSignal(node.cache, { equals: false });\n\n\tconst unsub = node.subscribe(() => {\n\t\tsetValue(() => node.cache);\n\t});\n\n\tif (getOwner()) {\n\t\tonCleanup(() => unsub());\n\t} else if (typeof console !== \"undefined\") {\n\t\tconsole.warn(\n\t\t\t\"[graphrefly-ts] useSubscribe called outside a Solid reactive owner — subscription will not be auto-disposed.\",\n\t\t);\n\t}\n\n\treturn value;\n}\n\n/**\n * Bind a writable `Node<T>` as a Solid resource tuple `[accessor, setter]`.\n * Setter always forwards `[[DIRTY], [DATA, value]]`, including `value === undefined`.\n * Subscription lifecycle is tied to Solid scope cleanup (not node terminal messages).\n */\nexport function useStore<T>(node: Node<T>): [Accessor<T | undefined | null>, (v: T) => void] {\n\tconst value = useSubscribe(node);\n\tconst setter = (v: T) => {\n\t\tnode.down([[DIRTY], [DATA, v]]);\n\t};\n\treturn [value, setter];\n}\n\n/** Maps a key to an object of nodes. Used by `useSubscribeRecord`. */\nexport type NodeFactory<K, R extends Record<string, any>> = (key: K) => {\n\t[P in keyof R]: Node<R[P]>;\n};\n\n/**\n * Subscribe to a dynamic set of keyed node records as a Solid accessor.\n * Re-subscribes all per-key fields whenever `keys` changes.\n * Key re-sync is gated to settled batches (`messageTier >= 3`) to avoid DIRTY-phase churn.\n */\nexport function useSubscribeRecord<K extends string, R extends Record<string, any>>(\n\tkeysNode: Node<K[]>,\n\tfactory: NodeFactory<K, R>,\n): Accessor<Record<K, R>> {\n\tconst [value, setValue] = createSignal({} as Record<K, R>, { equals: false });\n\tlet entrySubs: Array<() => void> = [];\n\n\tconst cleanupEntries = () => {\n\t\tfor (const unsub of entrySubs) unsub();\n\t\tentrySubs = [];\n\t};\n\n\tconst buildSnapshot = (): Record<K, R> => {\n\t\tconst snap = {} as Record<K, R>;\n\t\tfor (const key of keysNode.cache ?? []) {\n\t\t\tconst nodes = factory(key);\n\t\t\tconst values = {} as R;\n\t\t\tfor (const field of Object.keys(nodes) as (keyof R)[]) {\n\t\t\t\tvalues[field] = nodes[field].cache as R[keyof R];\n\t\t\t}\n\t\t\tsnap[key] = values;\n\t\t}\n\t\treturn snap;\n\t};\n\n\tconst sync = (nextKeys: K[]) => {\n\t\tcleanupEntries();\n\t\tfor (const key of nextKeys) {\n\t\t\tconst nodes = factory(key);\n\t\t\tfor (const field of Object.keys(nodes) as (keyof R)[]) {\n\t\t\t\tconst unsub = nodes[field].subscribe(() => {\n\t\t\t\t\tsetValue(() => buildSnapshot());\n\t\t\t\t});\n\t\t\t\tentrySubs.push(unsub);\n\t\t\t}\n\t\t}\n\t\tsetValue(() => buildSnapshot());\n\t};\n\n\tconst keysUnsub = keysNode.subscribe((msgs: Messages) => {\n\t\tif (msgs.some((m) => m[0] === DATA || m[0] === RESOLVED)) {\n\t\t\tsync(keysNode.cache ?? []);\n\t\t}\n\t});\n\tsync(keysNode.cache ?? []);\n\n\tif (getOwner()) {\n\t\tonCleanup(() => {\n\t\t\tkeysUnsub();\n\t\t\tcleanupEntries();\n\t\t});\n\t} else if (typeof console !== \"undefined\") {\n\t\tconsole.warn(\n\t\t\t\"[graphrefly-ts] useSubscribeRecord called outside a Solid reactive owner — subscription will not be auto-disposed.\",\n\t\t);\n\t}\n\n\treturn value;\n}\n"],"mappings":";;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,SAAS,MAAM,OAAiC,gBAAgB;AAChE,SAAS,cAAc,UAAU,iBAAiB;AAS3C,SAAS,aAAgB,MAA+C;AAC9E,QAAM,CAAC,OAAO,QAAQ,IAAI,aAAa,KAAK,OAAO,EAAE,QAAQ,MAAM,CAAC;AAEpE,QAAM,QAAQ,KAAK,UAAU,MAAM;AAClC,aAAS,MAAM,KAAK,KAAK;AAAA,EAC1B,CAAC;AAED,MAAI,SAAS,GAAG;AACf,cAAU,MAAM,MAAM,CAAC;AAAA,EACxB,WAAW,OAAO,YAAY,aAAa;AAC1C,YAAQ;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAOO,SAAS,SAAY,MAAiE;AAC5F,QAAM,QAAQ,aAAa,IAAI;AAC/B,QAAM,SAAS,CAAC,MAAS;AACxB,SAAK,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAAA,EAC/B;AACA,SAAO,CAAC,OAAO,MAAM;AACtB;AAYO,SAAS,mBACf,UACA,SACyB;AACzB,QAAM,CAAC,OAAO,QAAQ,IAAI,aAAa,CAAC,GAAmB,EAAE,QAAQ,MAAM,CAAC;AAC5E,MAAI,YAA+B,CAAC;AAEpC,QAAM,iBAAiB,MAAM;AAC5B,eAAW,SAAS,UAAW,OAAM;AACrC,gBAAY,CAAC;AAAA,EACd;AAEA,QAAM,gBAAgB,MAAoB;AACzC,UAAM,OAAO,CAAC;AACd,eAAW,OAAO,SAAS,SAAS,CAAC,GAAG;AACvC,YAAM,QAAQ,QAAQ,GAAG;AACzB,YAAM,SAAS,CAAC;AAChB,iBAAW,SAAS,OAAO,KAAK,KAAK,GAAkB;AACtD,eAAO,KAAK,IAAI,MAAM,KAAK,EAAE;AAAA,MAC9B;AACA,WAAK,GAAG,IAAI;AAAA,IACb;AACA,WAAO;AAAA,EACR;AAEA,QAAM,OAAO,CAAC,aAAkB;AAC/B,mBAAe;AACf,eAAW,OAAO,UAAU;AAC3B,YAAM,QAAQ,QAAQ,GAAG;AACzB,iBAAW,SAAS,OAAO,KAAK,KAAK,GAAkB;AACtD,cAAM,QAAQ,MAAM,KAAK,EAAE,UAAU,MAAM;AAC1C,mBAAS,MAAM,cAAc,CAAC;AAAA,QAC/B,CAAC;AACD,kBAAU,KAAK,KAAK;AAAA,MACrB;AAAA,IACD;AACA,aAAS,MAAM,cAAc,CAAC;AAAA,EAC/B;AAEA,QAAM,YAAY,SAAS,UAAU,CAAC,SAAmB;AACxD,QAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,QAAQ,EAAE,CAAC,MAAM,QAAQ,GAAG;AACzD,WAAK,SAAS,SAAS,CAAC,CAAC;AAAA,IAC1B;AAAA,EACD,CAAC;AACD,OAAK,SAAS,SAAS,CAAC,CAAC;AAEzB,MAAI,SAAS,GAAG;AACf,cAAU,MAAM;AACf,gBAAU;AACV,qBAAe;AAAA,IAChB,CAAC;AAAA,EACF,WAAW,OAAO,YAAY,aAAa;AAC1C,YAAQ;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;","names":[]}
|