@graphrefly/graphrefly 0.43.0 → 0.44.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/dist/{cascading-CH-_VwG9.d.cts → cascading-BglDkMdX.d.cts} +2 -2
- package/dist/{cascading-OgKQZjsa.d.ts → cascading-MFgxu7Yo.d.ts} +2 -2
- package/dist/{chunk-KVV66NN2.js → chunk-2T7U5EU6.js} +1 -1
- package/dist/chunk-5M4CCMMD.js +45 -0
- package/dist/{chunk-I7IGYPSL.js → chunk-5XJ6B66J.js} +1 -1
- package/dist/{chunk-OFZG3TB3.js → chunk-6X7AFUJV.js} +1 -1
- package/dist/{chunk-EBW4V6JN.js → chunk-7K6PWTDQ.js} +1 -1
- package/dist/{chunk-D27JNOLZ.js → chunk-7LIAPXJB.js} +1 -1
- package/dist/{chunk-CLD3F4R5.js → chunk-7WPU3UHQ.js} +1 -1
- package/dist/{chunk-NNKJUORL.js → chunk-A5WCQ5NO.js} +1 -1
- package/dist/chunk-APPIWSGD.js +84 -0
- package/dist/{chunk-TZQPPQEQ.js → chunk-BEZWM2SY.js} +1 -1
- package/dist/{chunk-K2Q24F5T.js → chunk-CB676TKJ.js} +1 -1
- package/dist/{chunk-SUWT3ZON.js → chunk-CE6TI2TL.js} +1 -1
- package/dist/{chunk-VOPGGIL7.js → chunk-CLVB32RD.js} +1 -1
- package/dist/{chunk-V5A7M7RJ.js → chunk-CRVT7D2P.js} +1 -1
- package/dist/chunk-D7GPHKFH.js +1 -0
- package/dist/{chunk-OCKEEPRJ.js → chunk-DHRX7JX4.js} +1 -1
- package/dist/chunk-FZMYDOWV.js +1 -0
- package/dist/{chunk-35JTVPOX.js → chunk-GHBWHMRZ.js} +1 -1
- package/dist/{chunk-KGKJCHEK.js → chunk-GLERH466.js} +1 -1
- package/dist/{chunk-TPKQW72B.js → chunk-HIDYF36O.js} +1 -1
- package/dist/chunk-HITNVN6B.js +3 -0
- package/dist/{chunk-P6C4WHZO.js → chunk-HY4DJBA7.js} +1 -1
- package/dist/chunk-KZIEYVXN.js +1 -0
- package/dist/{chunk-O2BLLH7M.js → chunk-N4MQX6JU.js} +1 -1
- package/dist/{chunk-4YAN45KM.js → chunk-N7FHEL4D.js} +1 -1
- package/dist/chunk-NTEURFZH.js +1 -0
- package/dist/{chunk-OYJKFY7V.js → chunk-OIVP6KFV.js} +1 -1
- package/dist/{chunk-Q4U3A3L5.js → chunk-OPHBU3LG.js} +1 -1
- package/dist/{chunk-PT7W5FCD.js → chunk-OYQOZP2F.js} +1 -1
- package/dist/{chunk-6HOSXQKF.js → chunk-PTZK576G.js} +1 -1
- package/dist/{chunk-S3EEIPO7.js → chunk-ST7UXLWR.js} +1 -1
- package/dist/chunk-SVY7VUYU.js +1 -0
- package/dist/{chunk-QYVXF7GW.js → chunk-TK3NWWD4.js} +1 -1
- package/dist/chunk-UNGSTR4X.js +61 -0
- package/dist/{chunk-VQ4A6T2A.js → chunk-VV4N5P64.js} +1 -1
- package/dist/{chunk-FDQGFWLF.js → chunk-W3I423PS.js} +1 -1
- package/dist/{chunk-XG62INFA.js → chunk-WJR24TAG.js} +1 -1
- package/dist/{chunk-F3IGTWCQ.js → chunk-XTGKMHSW.js} +1 -1
- package/dist/{chunk-JQFH2DV6.js → chunk-YBB7ZGTY.js} +1 -1
- package/dist/{chunk-CUNIRONA.js → chunk-Z4NPUARF.js} +1 -1
- package/dist/{chunk-KRH66M4O.js → chunk-ZGNQRPDT.js} +1 -1
- package/dist/{chunk-JNWRYDJN.js → chunk-ZKPSFFKU.js} +1 -1
- package/dist/{chunk-FG4TKHMC.js → chunk-ZLV5SQSX.js} +1 -1
- package/dist/compat/index.cjs +5 -5
- package/dist/compat/index.d.cts +16 -16
- package/dist/compat/index.d.ts +16 -16
- package/dist/compat/index.js +1 -1
- package/dist/compat/jotai/index.cjs +1 -1
- package/dist/compat/jotai/index.d.cts +2 -2
- package/dist/compat/jotai/index.d.ts +2 -2
- package/dist/compat/jotai/index.js +1 -1
- package/dist/compat/nanostores/index.cjs +1 -1
- package/dist/compat/nanostores/index.d.cts +2 -2
- package/dist/compat/nanostores/index.d.ts +2 -2
- package/dist/compat/nanostores/index.js +1 -1
- package/dist/compat/nestjs/index.cjs +5 -5
- package/dist/compat/nestjs/index.d.cts +8 -8
- package/dist/compat/nestjs/index.d.ts +8 -8
- package/dist/compat/nestjs/index.js +1 -1
- package/dist/compat/react/index.d.cts +2 -2
- package/dist/compat/react/index.d.ts +2 -2
- package/dist/compat/solid/index.d.cts +2 -2
- package/dist/compat/solid/index.d.ts +2 -2
- package/dist/compat/svelte/index.d.cts +2 -2
- package/dist/compat/svelte/index.d.ts +2 -2
- package/dist/compat/vue/index.d.cts +2 -2
- package/dist/compat/vue/index.d.ts +2 -2
- package/dist/compat/zustand/index.cjs +3 -3
- package/dist/compat/zustand/index.d.cts +4 -4
- package/dist/compat/zustand/index.d.ts +4 -4
- package/dist/compat/zustand/index.js +1 -1
- package/dist/core/index.cjs +1 -1
- package/dist/core/index.d.cts +3 -4
- package/dist/core/index.d.ts +3 -4
- package/dist/core/index.js +1 -1
- package/dist/{decay-CdEBmDIs.d.ts → decay-BvOWTZ00.d.ts} +2 -2
- package/dist/{decay-2ZukgQ4o.d.cts → decay-CFlLvXUT.d.cts} +2 -2
- package/dist/extra/browser.cjs +1 -1
- package/dist/extra/browser.d.cts +1 -1
- package/dist/extra/browser.d.ts +1 -1
- package/dist/extra/browser.js +1 -1
- package/dist/extra/index.cjs +15 -15
- package/dist/extra/index.d.cts +10 -10
- package/dist/extra/index.d.ts +10 -10
- package/dist/extra/index.js +1 -1
- package/dist/extra/node.cjs +2 -2
- package/dist/extra/node.d.cts +1 -1
- package/dist/extra/node.d.ts +1 -1
- package/dist/extra/node.js +1 -1
- package/dist/extra/operators.cjs +1 -1
- package/dist/extra/operators.d.cts +9 -1
- package/dist/extra/operators.d.ts +9 -1
- package/dist/extra/operators.js +1 -1
- package/dist/extra/reactive.cjs +1 -1
- package/dist/extra/reactive.d.cts +3 -3
- package/dist/extra/reactive.d.ts +3 -3
- package/dist/extra/reactive.js +1 -1
- package/dist/extra/render/index.d.cts +3 -3
- package/dist/extra/render/index.d.ts +3 -3
- package/dist/extra/sources.cjs +3 -3
- package/dist/extra/sources.d.cts +1 -1
- package/dist/extra/sources.d.ts +1 -1
- package/dist/extra/sources.js +1 -1
- package/dist/extra/storage-browser.cjs +1 -1
- package/dist/extra/storage-browser.d.cts +1 -1
- package/dist/extra/storage-browser.d.ts +1 -1
- package/dist/extra/storage-browser.js +1 -1
- package/dist/{fallback-Ctlj2tMY.d.cts → fallback-74oxi34l.d.cts} +1 -1
- package/dist/{fallback-CqYVLL6X.d.ts → fallback-DUyyBTBK.d.ts} +1 -1
- package/dist/graph/index.cjs +7 -7
- package/dist/graph/index.d.cts +5 -5
- package/dist/graph/index.d.ts +5 -5
- package/dist/graph/index.js +1 -1
- package/dist/{graph-C4SHb3Ly.d.cts → graph-CWvEUQAq.d.cts} +196 -3
- package/dist/{graph-7VguS7a4.d.ts → graph-D9LFnda9.d.ts} +196 -3
- package/dist/{index-O7fucFrU.d.cts → index-5k1T6jl0.d.cts} +9 -9
- package/dist/{index-DyR7eU5S.d.cts → index-9770hRuQ.d.cts} +4 -4
- package/dist/{index-COD1kVoS.d.cts → index-B-_tFaqV.d.cts} +4 -4
- package/dist/{index-CLon-IWF.d.cts → index-B17QddL1.d.cts} +4 -4
- package/dist/{index-B-i4_g3k.d.ts → index-B1F8Enjf.d.ts} +61 -8
- package/dist/{index-DBevwHj_.d.ts → index-B5S8ULbU.d.ts} +3 -3
- package/dist/{index-Dgs8zcj7.d.ts → index-B8YnZpIR.d.ts} +2 -2
- package/dist/{index-DSZ3ZCHF.d.ts → index-BHskSB8v.d.ts} +28 -17
- package/dist/{index-CDXc9zKM.d.cts → index-BIYAkbAi.d.cts} +1 -1
- package/dist/{index-C9kSENB4.d.cts → index-BQSKmbuG.d.cts} +1 -1
- package/dist/{index-tJoTcnHh.d.cts → index-BaQaY_IQ.d.cts} +2 -2
- package/dist/{index-CJK1JkYy.d.ts → index-BmZXHqkE.d.ts} +1 -1
- package/dist/{index-K0_0eR8g.d.ts → index-BoJ5JHxI.d.ts} +3 -3
- package/dist/{index-JZUPJIJy.d.ts → index-BocU7pqs.d.ts} +4 -4
- package/dist/{index-ChOyVLKm.d.cts → index-BrPrLl4e.d.cts} +1 -1
- package/dist/{index-BiX1Nkgx.d.cts → index-BxNs2HB9.d.cts} +22 -8
- package/dist/{index-Bf7eqeSF.d.ts → index-Byu-OpX_.d.ts} +2 -2
- package/dist/{index-BoLv_OfD.d.cts → index-C1T3d7V-.d.cts} +61 -8
- package/dist/{index-BTQtTb_H.d.cts → index-C5ri2Axc.d.cts} +3 -3
- package/dist/{index-z96luz5O.d.cts → index-C5stwKcw.d.cts} +1 -1
- package/dist/{index-D4Y1cMG0.d.ts → index-C9l6OEBL.d.ts} +1 -1
- package/dist/{index-CCq87F7t.d.ts → index-CBBLl_rc.d.ts} +1 -1
- package/dist/{index-cm1GNcWE.d.ts → index-CBGUK09R.d.ts} +4 -4
- package/dist/{index-0rKFCVFp.d.cts → index-CC-AvFTy.d.cts} +3 -3
- package/dist/{index-C59mYFKp.d.ts → index-CJF1URuX.d.ts} +9 -9
- package/dist/{index-BJX94aud.d.cts → index-CK29LV56.d.cts} +1 -1
- package/dist/{index-BP8a88zx.d.ts → index-CMh5Rz1y.d.ts} +4 -4
- package/dist/{index-CvrqGfNS.d.ts → index-CPQlGA29.d.ts} +1 -1
- package/dist/{index-D-AEQVLo.d.ts → index-CR8QpwX8.d.ts} +49 -24
- package/dist/{index-Du7u1lSf.d.cts → index-CS0LTlB8.d.cts} +4 -4
- package/dist/{index-Bc41FuHp.d.cts → index-CSOmP7xT.d.cts} +2 -2
- package/dist/{index-BsT7F2et.d.ts → index-CYq8vAyV.d.ts} +2 -2
- package/dist/{index-CPT7C_f1.d.ts → index-CZ3r5Rxp.d.ts} +4 -4
- package/dist/{index-BojK2fwH.d.cts → index-CasX6Pfq.d.cts} +68 -9
- package/dist/{index-BG0BN3PB.d.ts → index-CdAlHFEt.d.ts} +1 -1
- package/dist/{index-wAzD9yVj.d.ts → index-CdTelp1M.d.ts} +8 -4
- package/dist/{index-CQG3D1cp.d.ts → index-CeFiHtAg.d.ts} +4 -4
- package/dist/{index-RV_yDjOX.d.cts → index-Cj3WohTd.d.cts} +8 -4
- package/dist/{index-BAOD98JD.d.cts → index-Climxqsu.d.cts} +4 -4
- package/dist/{index-O16yXPK4.d.cts → index-Co7uli2l.d.cts} +28 -17
- package/dist/{index-DIOoAZUX.d.ts → index-CviRnE4K.d.ts} +1 -1
- package/dist/{index-Dhc7a7Xo.d.cts → index-Cwv0KWcU.d.cts} +2 -2
- package/dist/{index-Dn-wI9g4.d.ts → index-CzLVrjxn.d.ts} +2 -2
- package/dist/{index-C9pjcz3l.d.cts → index-D0aciIex.d.cts} +3 -3
- package/dist/{index-DwigL4lY.d.ts → index-DHen9Klo.d.ts} +22 -8
- package/dist/{index-BwLvVVsy.d.cts → index-DV_1YuVk.d.cts} +40 -8
- package/dist/{index-BdGtBX-X.d.cts → index-Dc4AYqrJ.d.cts} +3 -3
- package/dist/{index-Dmqp7KjD.d.ts → index-Dgl1HpPn.d.ts} +1 -1
- package/dist/{index-CAC_rNzm.d.ts → index-DisjX8a-.d.ts} +40 -8
- package/dist/{index-B5iz82A3.d.cts → index-UPSiS-X7.d.cts} +49 -24
- package/dist/{index-CZQXo5tH.d.ts → index-Yq60JP3s.d.ts} +3 -3
- package/dist/{index-f5IivDUX.d.cts → index-ZVQhLa2i.d.cts} +1 -1
- package/dist/{index-hHcaFlJX.d.cts → index-_6ODbuOu.d.cts} +1 -1
- package/dist/{index-BVpm6noz.d.cts → index-hcDJ8PSI.d.cts} +1 -1
- package/dist/{index-DBHK8O6H.d.ts → index-nozs3fFC.d.ts} +3 -3
- package/dist/{index-Dh_HJ82K.d.ts → index-p09KSrTN.d.ts} +68 -9
- package/dist/{index-C7O6r5fV.d.ts → index-sqkqlb1p.d.ts} +1 -1
- package/dist/{index-CZjOhcBy.d.cts → index-tRCxuAXF.d.cts} +2 -2
- package/dist/index.cjs +48 -48
- package/dist/index.d.cts +42 -43
- package/dist/index.d.ts +42 -43
- package/dist/index.js +1 -1
- package/dist/{node-ClS5yC-B.d.cts → node-kK3CvTrR.d.cts} +1 -1
- package/dist/{node-ClS5yC-B.d.ts → node-kK3CvTrR.d.ts} +1 -1
- package/dist/{observable-BsBzUrcI.d.ts → observable-DWjNfLvC.d.ts} +1 -1
- package/dist/{observable-DLGPPtb8.d.cts → observable-e3eiPPFy.d.cts} +1 -1
- package/dist/patterns/ai/browser.cjs +5 -5
- package/dist/patterns/ai/browser.d.cts +4 -4
- package/dist/patterns/ai/browser.d.ts +4 -4
- package/dist/patterns/ai/browser.js +1 -1
- package/dist/patterns/ai/index.cjs +16 -16
- package/dist/patterns/ai/index.d.cts +16 -17
- package/dist/patterns/ai/index.d.ts +16 -17
- package/dist/patterns/ai/index.js +1 -1
- package/dist/patterns/ai/node.cjs +1 -1
- package/dist/patterns/ai/node.d.cts +4 -4
- package/dist/patterns/ai/node.d.ts +4 -4
- package/dist/patterns/ai/node.js +1 -1
- package/dist/patterns/cqrs/index.cjs +3 -3
- package/dist/patterns/cqrs/index.d.cts +6 -6
- package/dist/patterns/cqrs/index.d.ts +6 -6
- package/dist/patterns/cqrs/index.js +1 -1
- package/dist/patterns/demo-shell/index.cjs +5 -5
- package/dist/patterns/demo-shell/index.d.cts +5 -5
- package/dist/patterns/demo-shell/index.d.ts +5 -5
- package/dist/patterns/demo-shell/index.js +1 -1
- package/dist/patterns/domain-templates/index.cjs +3 -3
- package/dist/patterns/domain-templates/index.d.cts +4 -4
- package/dist/patterns/domain-templates/index.d.ts +4 -4
- package/dist/patterns/domain-templates/index.js +1 -1
- package/dist/patterns/graphspec/index.cjs +16 -16
- package/dist/patterns/graphspec/index.d.cts +5 -5
- package/dist/patterns/graphspec/index.d.ts +5 -5
- package/dist/patterns/graphspec/index.js +1 -1
- package/dist/patterns/harness/index.cjs +9 -9
- package/dist/patterns/harness/index.d.cts +10 -11
- package/dist/patterns/harness/index.d.ts +10 -11
- package/dist/patterns/harness/index.js +1 -1
- package/dist/patterns/inspect/index.cjs +3 -3
- package/dist/patterns/inspect/index.d.cts +7 -7
- package/dist/patterns/inspect/index.d.ts +7 -7
- package/dist/patterns/inspect/index.js +1 -1
- package/dist/patterns/job-queue/index.cjs +3 -3
- package/dist/patterns/job-queue/index.d.cts +6 -6
- package/dist/patterns/job-queue/index.d.ts +6 -6
- package/dist/patterns/job-queue/index.js +1 -1
- package/dist/patterns/memory/index.cjs +3 -3
- package/dist/patterns/memory/index.d.cts +6 -6
- package/dist/patterns/memory/index.d.ts +6 -6
- package/dist/patterns/memory/index.js +1 -1
- package/dist/patterns/messaging/index.cjs +3 -3
- package/dist/patterns/messaging/index.d.cts +5 -5
- package/dist/patterns/messaging/index.d.ts +5 -5
- package/dist/patterns/messaging/index.js +1 -1
- package/dist/patterns/orchestration/index.cjs +3 -3
- package/dist/patterns/orchestration/index.d.cts +6 -7
- package/dist/patterns/orchestration/index.d.ts +6 -7
- package/dist/patterns/orchestration/index.js +1 -1
- package/dist/patterns/process/index.cjs +3 -1
- package/dist/patterns/process/index.d.cts +7 -7
- package/dist/patterns/process/index.d.ts +7 -7
- package/dist/patterns/process/index.js +1 -1
- package/dist/patterns/reactive-layout/index.cjs +4 -4
- package/dist/patterns/reactive-layout/index.d.cts +5 -5
- package/dist/patterns/reactive-layout/index.d.ts +5 -5
- package/dist/patterns/reactive-layout/index.js +1 -1
- package/dist/patterns/reduction/index.cjs +3 -3
- package/dist/patterns/reduction/index.d.cts +4 -4
- package/dist/patterns/reduction/index.d.ts +4 -4
- package/dist/patterns/reduction/index.js +1 -1
- package/dist/patterns/surface/index.cjs +10 -10
- package/dist/patterns/surface/index.d.cts +6 -6
- package/dist/patterns/surface/index.d.ts +6 -6
- package/dist/patterns/surface/index.js +1 -1
- package/dist/{pipeline-graph-DPqKDk59.d.cts → pipeline-graph-CIKhynsF.d.cts} +11 -6
- package/dist/{pipeline-graph-loP57TBA.d.ts → pipeline-graph-Sgj0gCwn.d.ts} +11 -6
- package/dist/{reactive-layout-v7KPvxoc.d.ts → reactive-layout-DOTs9P3X.d.ts} +2 -2
- package/dist/{reactive-layout-Dsvob4zD.d.cts → reactive-layout-DgctbqZo.d.cts} +2 -2
- package/dist/{reactive-log-BezYsbA_.d.ts → reactive-log-BKALbfal.d.ts} +1 -1
- package/dist/{reactive-log-B00laMSQ.d.cts → reactive-log-DIGdYqQ6.d.cts} +1 -1
- package/dist/{reactive-map-48mnZ-nu.d.cts → reactive-map-CEFGp8TK.d.cts} +1 -1
- package/dist/{reactive-map-BVVPdvmi.d.ts → reactive-map-DS_SIAxv.d.ts} +1 -1
- package/dist/resilience-6LYQJAC5.js +1 -0
- package/dist/{sugar-DLwvMr3F.d.ts → sugar-DQjFmVqb.d.cts} +178 -2
- package/dist/{sugar-DyVGtczU.d.cts → sugar-fhLIE7TT.d.ts} +178 -2
- package/dist/{topology-tree-BSdfSwMi.d.cts → topology-tree-Bcz27hpF.d.cts} +1 -1
- package/dist/{topology-tree-BNGvuG82.d.ts → topology-tree-xvaD0fOX.d.ts} +1 -1
- package/dist/{types-B1jDWVsM.d.cts → types-C0_yquda.d.cts} +1 -1
- package/dist/{types-DkzUUs0H.d.ts → types-CWFysE9E.d.ts} +1 -1
- package/package.json +1 -1
- package/dist/chunk-3XDYJRYU.js +0 -1
- package/dist/chunk-4I45FVQS.js +0 -1
- package/dist/chunk-626TESAC.js +0 -3
- package/dist/chunk-INQD2KRQ.js +0 -1
- package/dist/chunk-LYCLF26R.js +0 -1
- package/dist/chunk-NON4NLIC.js +0 -45
- package/dist/chunk-QE4IGY7I.js +0 -61
- package/dist/chunk-VNC3TMVY.js +0 -1
- package/dist/chunk-Y4NI3X7O.js +0 -84
- package/dist/meta-BgVAsg9j.d.ts +0 -102
- package/dist/meta-vE8bxW1E.d.cts +0 -102
- package/dist/resilience-YIWPK4YC.js +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { N as Node } from './node-
|
|
2
|
-
import { B as BaseAuditRecord } from './index-
|
|
3
|
-
import { a as ReactiveLogBundle } from './reactive-log-
|
|
1
|
+
import { N as Node } from './node-kK3CvTrR.js';
|
|
2
|
+
import { B as BaseAuditRecord } from './index-Yq60JP3s.js';
|
|
3
|
+
import { a as ReactiveLogBundle } from './reactive-log-BKALbfal.js';
|
|
4
4
|
import { NodeInput } from './extra/sources.js';
|
|
5
5
|
import { AppendLogStorageTier } from './extra/storage-tiers.js';
|
|
6
|
-
import { G as Graph, a as GraphOptions } from './graph-
|
|
6
|
+
import { G as Graph, a as GraphOptions } from './graph-D9LFnda9.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Job queue patterns (roadmap §4.2).
|
|
@@ -97,13 +97,30 @@ declare class JobQueueGraph<T> extends Graph {
|
|
|
97
97
|
}): () => void;
|
|
98
98
|
}
|
|
99
99
|
/**
|
|
100
|
-
* Work function for a job flow stage. Receives the full job envelope
|
|
101
|
-
*
|
|
102
|
-
* (
|
|
100
|
+
* Work function for a job flow stage. Receives the full job envelope and
|
|
101
|
+
* an optional per-claim options object carrying an `AbortSignal`; returns
|
|
102
|
+
* a `NodeInput<T>` — raw value (sync), Promise (async), or Node (composed
|
|
103
|
+
* pipeline). `fromAny` coerces any of these shapes.
|
|
103
104
|
*
|
|
104
105
|
* On error / rejection: the stage nacks the job (no requeue by default).
|
|
106
|
+
*
|
|
107
|
+
* **Per-claim signal (Tier 6.5 2.5b, 2026-04-29).** The pump mints an
|
|
108
|
+
* `AbortController` per claim and supplies its `signal` via `opts`. The
|
|
109
|
+
* signal aborts when (a) the result node settles (first DATA / first
|
|
110
|
+
* ERROR — auto-cleanup after the pump captures), OR (b) the pump itself
|
|
111
|
+
* tears down (e.g. parent Graph `destroy()`). User-supplied work fns that
|
|
112
|
+
* do long-running async (HTTP, LLM streams, evaluator subgraphs) can
|
|
113
|
+
* forward this signal into `fetch({ signal })`, `adapter.invoke({ signal
|
|
114
|
+
* })`, etc. for cooperative cancellation. Sync work fns ignore `opts` —
|
|
115
|
+
* the second arg is optional, no behavior change for legacy callers.
|
|
116
|
+
*
|
|
117
|
+
* Mirrors the `LLMInvokeOptions.signal` / `apply(item, { signal })` /
|
|
118
|
+
* tool-handler `(args, { signal })` precedents — same shape across the
|
|
119
|
+
* library's user-callback boundaries.
|
|
105
120
|
*/
|
|
106
|
-
type WorkFn<T> = (job: JobEnvelope<T
|
|
121
|
+
type WorkFn<T> = (job: JobEnvelope<T>, opts?: {
|
|
122
|
+
signal: AbortSignal;
|
|
123
|
+
}) => NodeInput<T>;
|
|
107
124
|
/**
|
|
108
125
|
* Stage definition for {@link JobFlowGraph}. Either a bare name string
|
|
109
126
|
* (no work hook, pure pass-through) or a full definition object.
|
|
@@ -125,6 +142,21 @@ type StageDef<T> = string | {
|
|
|
125
142
|
* turn falls back to `DEFAULT_MAX_PER_PUMP` (256).
|
|
126
143
|
*/
|
|
127
144
|
maxPerPump?: number;
|
|
145
|
+
/**
|
|
146
|
+
* Per-stage cap on TOTAL concurrent inflight claims (Tier 6.5 3.1,
|
|
147
|
+
* 2026-04-29). Distinct from {@link maxPerPump}: `maxPerPump` caps
|
|
148
|
+
* claims per pump tick, while `maxInflight` caps the number of
|
|
149
|
+
* unsettled in-flight claims at any moment across all ticks. Use
|
|
150
|
+
* for rigorous LLM cost ceilings (e.g. "no more than 4 concurrent
|
|
151
|
+
* adapter.invoke calls regardless of pending depth").
|
|
152
|
+
*
|
|
153
|
+
* When set, the stage mounts an internal `state(0)` counter as a
|
|
154
|
+
* pump dep so the pump re-fires on each settle — pending items
|
|
155
|
+
* resume claiming as soon as inflight drops below the cap.
|
|
156
|
+
*
|
|
157
|
+
* Unset (default): unbounded inflight, gated only by `maxPerPump`.
|
|
158
|
+
*/
|
|
159
|
+
maxInflight?: number;
|
|
128
160
|
};
|
|
129
161
|
type JobFlowOptions<T = unknown> = {
|
|
130
162
|
graph?: GraphOptions;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { T as TokenUsage, L as LLMAdapter, P as PricingFn, C as ChatMessage, a as LLMInvokeOptions, d as ToolDefinition, b as LLMResponse, S as StreamDelta, c as ToolCall, e as CapabilitiesRegistry, M as ModelCapabilities, f as ModelFeatures, g as ModelLimits, h as ModelPricing, i as PriceBreakdown, j as PricingRegistry, R as Rate, k as TieredRate, l as composePricing, m as computePrice, n as createCapabilitiesRegistry, o as createPricingRegistry, p as pricingFor, r as registryPricing, z as zeroPrice } from './types-
|
|
2
|
-
import { a as CascadeExhaustionReport, A as AdapterProvider, b as AdapterTier, d as AllTiersExhaustedError, C as CascadingLlmAdapterOptions, e as CreateAdapterOptions, O as OpenAICompatAdapterOptions, f as OpenAICompatPreset, g as OpenAISdkLike, h as cascadingLlmAdapter, c as createAdapter, o as openAICompatAdapter, t as tier } from './cascading-
|
|
3
|
-
import { N as Node, A as Actor } from './node-
|
|
4
|
-
import { a as ReactiveLogBundle } from './reactive-log-
|
|
5
|
-
import { b as CircuitBreakerOptions, C as CircuitBreaker, c as CircuitOpenError } from './index-
|
|
1
|
+
import { T as TokenUsage, L as LLMAdapter, P as PricingFn, C as ChatMessage, a as LLMInvokeOptions, d as ToolDefinition, b as LLMResponse, S as StreamDelta, c as ToolCall, e as CapabilitiesRegistry, M as ModelCapabilities, f as ModelFeatures, g as ModelLimits, h as ModelPricing, i as PriceBreakdown, j as PricingRegistry, R as Rate, k as TieredRate, l as composePricing, m as computePrice, n as createCapabilitiesRegistry, o as createPricingRegistry, p as pricingFor, r as registryPricing, z as zeroPrice } from './types-C0_yquda.cjs';
|
|
2
|
+
import { a as CascadeExhaustionReport, A as AdapterProvider, b as AdapterTier, d as AllTiersExhaustedError, C as CascadingLlmAdapterOptions, e as CreateAdapterOptions, O as OpenAICompatAdapterOptions, f as OpenAICompatPreset, g as OpenAISdkLike, h as cascadingLlmAdapter, c as createAdapter, o as openAICompatAdapter, t as tier } from './cascading-BglDkMdX.cjs';
|
|
3
|
+
import { N as Node, A as Actor } from './node-kK3CvTrR.cjs';
|
|
4
|
+
import { a as ReactiveLogBundle } from './reactive-log-DIGdYqQ6.cjs';
|
|
5
|
+
import { b as CircuitBreakerOptions, C as CircuitBreaker, c as CircuitOpenError } from './index-C1T3d7V-.cjs';
|
|
6
6
|
import { NodeInput } from './extra/sources.cjs';
|
|
7
|
-
import { W as WithReplayCacheOptions, F as FallbackAdapterOptions, a as FallbackFixture, b as FallbackMissError, c as FallbackMissPolicy, R as ReplayCacheKeyContext, d as ReplayCacheMissError, e as ReplayCacheMode, f as canonicalJson, g as fallbackAdapter, w as withReplayCache } from './fallback-
|
|
8
|
-
import { E as Extraction, D as DistillBundle, f as DEFAULT_DECAY_RATE } from './decay-
|
|
9
|
-
import { G as Graph, a as GraphOptions, i as GraphCheckpointRecord, h as GraphAttachStorageOptions } from './graph-
|
|
10
|
-
import { T as TopicGraph } from './index-
|
|
11
|
-
import { G as GateController, c as GateOptions } from './pipeline-graph-
|
|
12
|
-
import { V as VectorSearchResult, C as CollectionGraph, a as VectorIndexGraph, K as KnowledgeGraph } from './index-
|
|
7
|
+
import { W as WithReplayCacheOptions, F as FallbackAdapterOptions, a as FallbackFixture, b as FallbackMissError, c as FallbackMissPolicy, R as ReplayCacheKeyContext, d as ReplayCacheMissError, e as ReplayCacheMode, f as canonicalJson, g as fallbackAdapter, w as withReplayCache } from './fallback-74oxi34l.cjs';
|
|
8
|
+
import { E as Extraction, a as DistillOptions, D as DistillBundle, f as DEFAULT_DECAY_RATE } from './decay-CFlLvXUT.cjs';
|
|
9
|
+
import { G as Graph, a as GraphOptions, i as GraphCheckpointRecord, h as GraphAttachStorageOptions } from './graph-CWvEUQAq.cjs';
|
|
10
|
+
import { T as TopicGraph } from './index-C5ri2Axc.cjs';
|
|
11
|
+
import { G as GateController, c as GateOptions } from './pipeline-graph-CIKhynsF.cjs';
|
|
12
|
+
import { V as VectorSearchResult, C as CollectionGraph, a as VectorIndexGraph, K as KnowledgeGraph } from './index-B17QddL1.cjs';
|
|
13
13
|
import { StorageHandle } from './extra/storage-core.cjs';
|
|
14
14
|
import { SnapshotStorageTier } from './extra/storage-tiers.cjs';
|
|
15
|
-
import { c as GraphSpecCatalog } from './index-
|
|
15
|
+
import { c as GraphSpecCatalog } from './index-CS0LTlB8.cjs';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Observable adapter wrapper — the "inverted statistics" surface.
|
|
@@ -1902,24 +1902,49 @@ declare function memoryWithKG<TMem>(graph: Graph, store: DistillBundle<TMem>, na
|
|
|
1902
1902
|
kg: KnowledgeGraph<unknown, string>;
|
|
1903
1903
|
dispose: () => void;
|
|
1904
1904
|
};
|
|
1905
|
-
|
|
1905
|
+
/**
|
|
1906
|
+
* Full options for {@link memoryWithTiers} (Tier 4.1 B + 4.3 B refactor,
|
|
1907
|
+
* 2026-04-29). Combines tier-policy options with the distill-side options
|
|
1908
|
+
* needed to construct the underlying store — `memoryWithTiers` is now the
|
|
1909
|
+
* **construction site** for the distill bundle so it can wire
|
|
1910
|
+
* `reactiveMap.retention` into the store at construction (eliminating the
|
|
1911
|
+
* §7 feedback cycle the previous `tierClassifier` effect carried).
|
|
1912
|
+
*
|
|
1913
|
+
* The retention config built internally maps tier policy to the substrate:
|
|
1914
|
+
* - `archiveThreshold` → `retention.archiveThreshold`
|
|
1915
|
+
* - `maxActive` → `retention.maxSize`
|
|
1916
|
+
* - per-entry `decay(score(mem, ctx), age, decayRate)` → `retention.score`
|
|
1917
|
+
* (capturing `latestCtx` + `entryCreatedAtNs` via closure-mirror; permanent
|
|
1918
|
+
* entries score `Infinity` to bypass eviction).
|
|
1919
|
+
*/
|
|
1920
|
+
type MemoryWithTiersOptions<TMem> = MemoryTiersOptions<TMem> & Omit<DistillOptions<TMem>, "mapOptions" | "score" | "context"> & {
|
|
1906
1921
|
/** Score function — same signature as `agentMemory.score`. */
|
|
1907
1922
|
score: (mem: TMem, context: unknown) => number;
|
|
1908
1923
|
/** Optional reactive context node (passed to `score`). */
|
|
1909
1924
|
context?: NodeInput<unknown>;
|
|
1910
1925
|
};
|
|
1911
1926
|
/**
|
|
1912
|
-
* Attach 3-tier storage (active / archived / permanent) to a
|
|
1913
|
-
*
|
|
1914
|
-
*
|
|
1915
|
-
*
|
|
1916
|
-
*
|
|
1917
|
-
*
|
|
1918
|
-
*
|
|
1919
|
-
*
|
|
1920
|
-
*
|
|
1921
|
-
|
|
1922
|
-
|
|
1927
|
+
* Attach 3-tier storage (active / archived / permanent) to a fresh distill
|
|
1928
|
+
* store, wiring `reactiveMap.retention` at construction so archival happens
|
|
1929
|
+
* synchronously inside the substrate's mutation pipeline (no §7 feedback
|
|
1930
|
+
* cycle). Promotes `permanentKeys` and `entryCreatedAtNs` to reactive maps
|
|
1931
|
+
* mounted on the graph (Tier 4.3 B — Unit 7 Q3) so `describe()`/`explain()`
|
|
1932
|
+
* can walk to "why was X archived?".
|
|
1933
|
+
*
|
|
1934
|
+
* **API shape** (Tier 4.1 B, 2026-04-29 — breaking change vs. pre-refactor):
|
|
1935
|
+
* `memoryWithTiers` constructs the distill bundle internally rather than
|
|
1936
|
+
* accepting a pre-built one. Callers pass `(graph, source, extractFn,
|
|
1937
|
+
* opts)`. The bundle is exposed as `result.store` for downstream composers
|
|
1938
|
+
* (vectors / KG / retrieval).
|
|
1939
|
+
*
|
|
1940
|
+
* - `permanentFilter`-matching entries score `Infinity` in retention →
|
|
1941
|
+
* never archived. Independent permanent-promotion effect upserts them
|
|
1942
|
+
* into the `permanent` collection.
|
|
1943
|
+
* - Below-threshold entries → retention archives synchronously.
|
|
1944
|
+
* - Over-`maxActive` entries → retention's `maxSize` evicts lowest-scored.
|
|
1945
|
+
*/
|
|
1946
|
+
declare function memoryWithTiers<TRaw, TMem>(graph: Graph, source: NodeInput<TRaw>, extractFn: (raw: Node<TRaw>, existing: Node<ReadonlyMap<string, TMem>>) => NodeInput<Extraction<TMem>>, opts: MemoryWithTiersOptions<TMem>): {
|
|
1947
|
+
store: DistillBundle<TMem>;
|
|
1923
1948
|
tiers: MemoryTiersBundle<TMem>;
|
|
1924
1949
|
dispose: () => void;
|
|
1925
1950
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { b as NodeGuard, N as Node } from './node-
|
|
2
|
-
import { G as Graph } from './graph-
|
|
3
|
-
import { R as ReactiveLogOptions, a as ReactiveLogBundle } from './reactive-log-
|
|
1
|
+
import { b as NodeGuard, N as Node } from './node-kK3CvTrR.js';
|
|
2
|
+
import { G as Graph } from './graph-D9LFnda9.js';
|
|
3
|
+
import { R as ReactiveLogOptions, a as ReactiveLogBundle } from './reactive-log-BKALbfal.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Audited-mutation framework (Audit 2 — locked 2026-04-24; promoted to
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { N as Node } from './node-
|
|
2
|
-
import { G as Graph, a as GraphOptions } from './graph-
|
|
3
|
-
import { a as ReactiveLogBundle } from './reactive-log-
|
|
1
|
+
import { N as Node } from './node-kK3CvTrR.js';
|
|
2
|
+
import { G as Graph, a as GraphOptions } from './graph-D9LFnda9.js';
|
|
3
|
+
import { a as ReactiveLogBundle } from './reactive-log-BKALbfal.js';
|
|
4
4
|
import { AppendLogStorageTier } from './extra/storage-tiers.js';
|
|
5
5
|
|
|
6
6
|
type TopicOptions = {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { B as BaseAuditRecord } from './index-
|
|
2
|
-
import { a as ReactiveLogBundle } from './reactive-log-
|
|
1
|
+
import { B as BaseAuditRecord } from './index-Yq60JP3s.js';
|
|
2
|
+
import { a as ReactiveLogBundle } from './reactive-log-BKALbfal.js';
|
|
3
3
|
import { NodeInput } from './extra/sources.js';
|
|
4
|
-
import { AppendLogStorageTier } from './extra/storage-tiers.js';
|
|
5
|
-
import { C as CqrsEventMap, a as CqrsEvent, b as CqrsGraph } from './index-
|
|
4
|
+
import { AppendLogStorageTier, KvStorageTier } from './extra/storage-tiers.js';
|
|
5
|
+
import { C as CqrsEventMap, a as CqrsEvent, b as CqrsGraph } from './index-CeFiHtAg.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Process Manager pattern (Phase 7 — roadmap §4.6, Audit 3 — locked 2026-04-24).
|
|
@@ -16,9 +16,9 @@ import { C as CqrsEventMap, a as CqrsEvent, b as CqrsGraph } from './index-CQG3D
|
|
|
16
16
|
* - Per-instance state lives in a `Map<correlationId, TState>` closure (in-memory).
|
|
17
17
|
* The `_process_<name>_started` synthetic event is dispatched per `start()`
|
|
18
18
|
* for an event-sourced audit trail using `correlationId` as `aggregateId`.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* Cross-restart state recovery is opt-in via
|
|
20
|
+
* `opts.persistence.stateStorage` (kv-tier per-correlationId snapshot,
|
|
21
|
+
* Tier 6.5 3.5) plus an explicit `restore()` call after construction.
|
|
22
22
|
* - Watched-event subscriptions are imperative (coordinator role) — each
|
|
23
23
|
* watched CQRS event type is subscribed to via `entries.subscribe(...)`.
|
|
24
24
|
* These are NOT reactive node edges; the process manager is intentionally
|
|
@@ -127,6 +127,30 @@ interface ProcessInstance<TState> extends BaseAuditRecord {
|
|
|
127
127
|
* Recommended `keyOf` for storage tiers keyed by correlationId (Audit 2).
|
|
128
128
|
*/
|
|
129
129
|
declare const processInstanceKeyOf: <TState>(i: ProcessInstance<TState>) => string;
|
|
130
|
+
/**
|
|
131
|
+
* Per-correlationId state snapshot persisted via
|
|
132
|
+
* {@link ProcessManagerOpts.persistence.stateStorage} (Tier 6.5 3.5,
|
|
133
|
+
* 2026-04-29). Captures the running instance's current state plus
|
|
134
|
+
* lifecycle metadata so a fresh `processManager` can resume in-flight
|
|
135
|
+
* workflows after restart via {@link ProcessManagerResult.restore}.
|
|
136
|
+
*
|
|
137
|
+
* Terminal records (`status` ∈ `"terminated" | "errored" | "compensated"`)
|
|
138
|
+
* are deleted from the kv tier on transition — only running instances
|
|
139
|
+
* persist between restarts.
|
|
140
|
+
*/
|
|
141
|
+
interface ProcessStateSnapshot<TState> {
|
|
142
|
+
readonly correlationId: string;
|
|
143
|
+
readonly state: TState;
|
|
144
|
+
readonly status: "running" | "terminated" | "errored" | "compensated";
|
|
145
|
+
readonly startedAt: number;
|
|
146
|
+
readonly updatedAt: number;
|
|
147
|
+
readonly handlerVersion?: {
|
|
148
|
+
id: string;
|
|
149
|
+
version: string | number;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/** Recommended `keyOf` for `KvStorageTier<ProcessStateSnapshot<...>>`. */
|
|
153
|
+
declare const processStateKeyOf: <TState>(s: ProcessStateSnapshot<TState>) => string;
|
|
130
154
|
/**
|
|
131
155
|
* Options for {@link processManager}.
|
|
132
156
|
*/
|
|
@@ -184,6 +208,23 @@ interface ProcessManagerOpts<TState, EM extends CqrsEventMap> {
|
|
|
184
208
|
* Reuses `CqrsGraph.attachEventStorage` so events persist across restarts.
|
|
185
209
|
*/
|
|
186
210
|
eventStorage?: readonly AppendLogStorageTier<CqrsEvent>[];
|
|
211
|
+
/**
|
|
212
|
+
* Wire per-correlationId state snapshots to kv tiers (Tier 6.5 3.5,
|
|
213
|
+
* 2026-04-29). Each `start()` and step transition writes the running
|
|
214
|
+
* instance's state under its `correlationId`; terminal transitions
|
|
215
|
+
* (`terminated` / `errored` / `compensated`) `delete` the key. After
|
|
216
|
+
* restart, callers invoke {@link ProcessManagerResult.restore} to
|
|
217
|
+
* reload running instances from the first tier.
|
|
218
|
+
*
|
|
219
|
+
* Uses {@link KvStorageTier} (not snapshot tier) because per-instance
|
|
220
|
+
* state is N records keyed by correlationId, not a single global
|
|
221
|
+
* snapshot. {@link processStateKeyOf} is the recommended `keyOf`
|
|
222
|
+
* (already aligned with the kv tier's `save(key, value)` shape).
|
|
223
|
+
*
|
|
224
|
+
* Terminal records are NOT preserved — historical lifecycle is the
|
|
225
|
+
* audit log's job. State persistence covers crash-recovery only.
|
|
226
|
+
*/
|
|
227
|
+
stateStorage?: readonly KvStorageTier<ProcessStateSnapshot<TState>>[];
|
|
187
228
|
};
|
|
188
229
|
}
|
|
189
230
|
/**
|
|
@@ -228,6 +269,22 @@ interface ProcessManagerResult<TState> {
|
|
|
228
269
|
* Returns `undefined` if the instance does not exist or has terminated.
|
|
229
270
|
*/
|
|
230
271
|
getState(correlationId: string): TState | undefined;
|
|
272
|
+
/**
|
|
273
|
+
* Restore running instances from the first {@link
|
|
274
|
+
* ProcessManagerOpts.persistence.stateStorage} tier (Tier 6.5 3.5,
|
|
275
|
+
* 2026-04-29). Loads every record in the tier and re-hydrates
|
|
276
|
+
* `instanceStates` / `activeInstances` / `startedAt` for any record
|
|
277
|
+
* whose `status === "running"`. Terminal records, if any persisted
|
|
278
|
+
* before delete fired, are silently skipped.
|
|
279
|
+
*
|
|
280
|
+
* Idempotent — calling twice doesn't double-restore (existing entries
|
|
281
|
+
* are overwritten). Returns the count of running instances rehydrated.
|
|
282
|
+
*
|
|
283
|
+
* No-op when no `stateStorage` tier is configured OR the first tier
|
|
284
|
+
* lacks a `list?` method (returns 0). Async because kv tier `load` /
|
|
285
|
+
* `list` may be async.
|
|
286
|
+
*/
|
|
287
|
+
restore(): Promise<number>;
|
|
231
288
|
/**
|
|
232
289
|
* Release all watched-event subscriptions and stop processing new events.
|
|
233
290
|
*
|
|
@@ -288,12 +345,14 @@ type index_ProcessInstance<TState> = ProcessInstance<TState>;
|
|
|
288
345
|
type index_ProcessManagerOpts<TState, EM extends CqrsEventMap> = ProcessManagerOpts<TState, EM>;
|
|
289
346
|
type index_ProcessManagerResult<TState> = ProcessManagerResult<TState>;
|
|
290
347
|
type index_ProcessSchedule = ProcessSchedule;
|
|
348
|
+
type index_ProcessStateSnapshot<TState> = ProcessStateSnapshot<TState>;
|
|
291
349
|
type index_ProcessStep<TState, EM extends CqrsEventMap, K extends keyof EM & string> = ProcessStep<TState, EM, K>;
|
|
292
350
|
type index_ProcessStepResult<TState> = ProcessStepResult<TState>;
|
|
293
351
|
declare const index_processInstanceKeyOf: typeof processInstanceKeyOf;
|
|
294
352
|
declare const index_processManager: typeof processManager;
|
|
353
|
+
declare const index_processStateKeyOf: typeof processStateKeyOf;
|
|
295
354
|
declare namespace index {
|
|
296
|
-
export { type index_ProcessCompensate as ProcessCompensate, type index_ProcessInstance as ProcessInstance, type index_ProcessManagerOpts as ProcessManagerOpts, type index_ProcessManagerResult as ProcessManagerResult, type index_ProcessSchedule as ProcessSchedule, type index_ProcessStep as ProcessStep, type index_ProcessStepResult as ProcessStepResult, index_processInstanceKeyOf as processInstanceKeyOf, index_processManager as processManager };
|
|
355
|
+
export { type index_ProcessCompensate as ProcessCompensate, type index_ProcessInstance as ProcessInstance, type index_ProcessManagerOpts as ProcessManagerOpts, type index_ProcessManagerResult as ProcessManagerResult, type index_ProcessSchedule as ProcessSchedule, type index_ProcessStateSnapshot as ProcessStateSnapshot, type index_ProcessStep as ProcessStep, type index_ProcessStepResult as ProcessStepResult, index_processInstanceKeyOf as processInstanceKeyOf, index_processManager as processManager, index_processStateKeyOf as processStateKeyOf };
|
|
297
356
|
}
|
|
298
357
|
|
|
299
|
-
export { type ProcessCompensate as P, type ProcessInstance as a, type ProcessManagerOpts as b, type ProcessManagerResult as c, type ProcessSchedule as d, type
|
|
358
|
+
export { type ProcessCompensate as P, type ProcessInstance as a, type ProcessManagerOpts as b, type ProcessManagerResult as c, type ProcessSchedule as d, type ProcessStateSnapshot as e, type ProcessStep as f, type ProcessStepResult as g, processManager as h, index as i, processStateKeyOf as j, processInstanceKeyOf as p };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { N as Node, a as NodeOptions } from './node-
|
|
2
|
-
import { a as GraphOptions, G as Graph } from './graph-
|
|
1
|
+
import { N as Node, a as NodeOptions } from './node-kK3CvTrR.cjs';
|
|
2
|
+
import { a as GraphOptions, G as Graph } from './graph-CWvEUQAq.cjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Reduction primitives (roadmap §8.1).
|