@graphrefly/ts 0.0.1 → 0.0.3
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 +197 -117
- package/dist/actions-types-CH-XCU9O.d.cts +657 -0
- package/dist/actions-types-w2iPQTkv.d.ts +657 -0
- package/dist/adapters/index.cjs +5157 -2951
- package/dist/adapters/index.cjs.map +1 -1
- package/dist/adapters/index.d.cts +207 -70
- package/dist/adapters/index.d.ts +207 -70
- package/dist/adapters/index.js +3738 -1688
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/nestjs/microservices.cjs +841 -0
- package/dist/adapters/nestjs/microservices.cjs.map +1 -0
- package/dist/adapters/nestjs/microservices.d.cts +45 -0
- package/dist/adapters/nestjs/microservices.d.ts +45 -0
- package/dist/adapters/nestjs/microservices.js +206 -0
- package/dist/adapters/nestjs/microservices.js.map +1 -0
- package/dist/adapters/nestjs/native.cjs +1391 -0
- package/dist/adapters/nestjs/native.cjs.map +1 -0
- package/dist/adapters/nestjs/native.d.cts +111 -0
- package/dist/adapters/nestjs/native.d.ts +111 -0
- package/dist/adapters/nestjs/native.js +577 -0
- package/dist/adapters/nestjs/native.js.map +1 -0
- package/dist/adapters/nestjs/websockets.cjs +924 -0
- package/dist/adapters/nestjs/websockets.cjs.map +1 -0
- package/dist/adapters/nestjs/websockets.d.cts +47 -0
- package/dist/adapters/nestjs/websockets.d.ts +47 -0
- package/dist/adapters/nestjs/websockets.js +286 -0
- package/dist/adapters/nestjs/websockets.js.map +1 -0
- package/dist/adapters/nestjs.cjs +1085 -0
- package/dist/adapters/nestjs.cjs.map +1 -0
- package/dist/adapters/nestjs.d.cts +385 -0
- package/dist/adapters/nestjs.d.ts +385 -0
- package/dist/adapters/nestjs.js +112 -0
- package/dist/adapters/nestjs.js.map +1 -0
- package/dist/adapters/observe-storage.d.cts +3 -3
- package/dist/adapters/observe-storage.d.ts +3 -3
- package/dist/adapters/observe-storage.js +4 -4
- package/dist/adapters/react.cjs.map +1 -1
- package/dist/adapters/react.d.cts +2 -2
- package/dist/adapters/react.d.ts +2 -2
- package/dist/adapters/react.js +1 -1
- package/dist/adapters/solid.cjs.map +1 -1
- package/dist/adapters/solid.d.cts +2 -2
- package/dist/adapters/solid.d.ts +2 -2
- package/dist/adapters/solid.js +1 -1
- package/dist/adapters/svelte.cjs.map +1 -1
- package/dist/adapters/svelte.d.cts +2 -2
- package/dist/adapters/svelte.d.ts +2 -2
- package/dist/adapters/svelte.js +1 -1
- package/dist/adapters/vue.cjs.map +1 -1
- package/dist/adapters/vue.d.cts +2 -2
- package/dist/adapters/vue.d.ts +2 -2
- package/dist/adapters/vue.js +1 -1
- package/dist/{agent-runtime-BesGDZcB.d.ts → agent-runtime-types-core-CKwrBDyi.d.ts} +171 -320
- package/dist/{agent-runtime-DZTJ3C-p.d.cts → agent-runtime-types-core-bfl4m0vM.d.cts} +171 -320
- package/dist/agent-runtime-types-tool-BLPV3azj.d.cts +695 -0
- package/dist/agent-runtime-types-tool-hwqvVqNt.d.ts +695 -0
- package/dist/agentic-memory-retention-CLwI76JK.d.ts +14 -0
- package/dist/agentic-memory-retention-Cz8GR6ie.d.cts +14 -0
- package/dist/{agentic-memory-DfuVZ-lY.d.cts → agentic-memory-types-JDr7MPhh.d.cts} +13 -57
- package/dist/{agentic-memory-BmRCvh0d.d.ts → agentic-memory-types-khYJgzKL.d.ts} +13 -57
- package/dist/{capability-admission-B0BzqAm5.d.cts → capability-admission-B8RNFyaZ.d.cts} +3 -3
- package/dist/{capability-admission-g0mn9hpq.d.ts → capability-admission-Dkw1Xz3r.d.ts} +3 -3
- package/dist/chunk-2KUAG2GZ.js +9693 -0
- package/dist/chunk-2KUAG2GZ.js.map +1 -0
- package/dist/{chunk-CZNV3VXM.js → chunk-3J7UPZL5.js} +11 -11
- package/dist/{chunk-HKK2JD7Z.js → chunk-3LYI6ADX.js} +12 -125
- package/dist/chunk-3LYI6ADX.js.map +1 -0
- package/dist/{chunk-YXMZ2N6J.js → chunk-4M37FH2I.js} +1071 -1025
- package/dist/chunk-4M37FH2I.js.map +1 -0
- package/dist/{chunk-YDSIVHRR.js → chunk-4NWSNI4K.js} +1598 -1584
- package/dist/chunk-4NWSNI4K.js.map +1 -0
- package/dist/{chunk-Z2ANQ6JW.js → chunk-4Q77MMJY.js} +2 -2
- package/dist/{chunk-SS2A464I.js → chunk-54WPEODM.js} +3 -3
- package/dist/chunk-54WPEODM.js.map +1 -0
- package/dist/chunk-6E76H4OU.js +132 -0
- package/dist/chunk-6E76H4OU.js.map +1 -0
- package/dist/chunk-7GOTIIQ7.js +819 -0
- package/dist/chunk-7GOTIIQ7.js.map +1 -0
- package/dist/{chunk-V7CIJE4B.js → chunk-DKFWDTVY.js} +92 -9
- package/dist/chunk-DKFWDTVY.js.map +1 -0
- package/dist/{chunk-FBUU43PM.js → chunk-E4QCH32M.js} +448 -446
- package/dist/chunk-E4QCH32M.js.map +1 -0
- package/dist/{chunk-XKXWK2KP.js → chunk-GXU6WFEJ.js} +1157 -1021
- package/dist/chunk-GXU6WFEJ.js.map +1 -0
- package/dist/{chunk-K3FXTC3I.js → chunk-HJACH5PU.js} +3 -3
- package/dist/{chunk-GTPCOEOZ.js → chunk-IDMLXLLG.js} +3 -3
- package/dist/{chunk-DKP56CSW.js → chunk-JKAYLDQV.js} +2 -2
- package/dist/{chunk-4VLAQHZI.js → chunk-K7FB3JTD.js} +17 -1
- package/dist/chunk-K7FB3JTD.js.map +1 -0
- package/dist/{chunk-43BKLFZU.js → chunk-KFURM6FM.js} +10 -10
- package/dist/{chunk-H75VXTGT.js → chunk-L6LDXRWE.js} +3 -3
- package/dist/{chunk-H75VXTGT.js.map → chunk-L6LDXRWE.js.map} +1 -1
- package/dist/chunk-MCOFHMUU.js +4131 -0
- package/dist/chunk-MCOFHMUU.js.map +1 -0
- package/dist/chunk-MQEQMS7B.js +1009 -0
- package/dist/chunk-MQEQMS7B.js.map +1 -0
- package/dist/chunk-MTELVIYR.js +1421 -0
- package/dist/chunk-MTELVIYR.js.map +1 -0
- package/dist/{chunk-3JR3EDB2.js → chunk-NNDIFUKX.js} +121 -115
- package/dist/chunk-NNDIFUKX.js.map +1 -0
- package/dist/{chunk-2747WN4Y.js → chunk-PUSRRALM.js} +3 -3
- package/dist/{chunk-QFY4AFY4.js → chunk-PVC7WDKI.js} +58 -52
- package/dist/chunk-PVC7WDKI.js.map +1 -0
- package/dist/{chunk-VTHLCFN4.js → chunk-RAHNUYA5.js} +2 -2
- package/dist/chunk-TQPCAIQI.js +612 -0
- package/dist/chunk-TQPCAIQI.js.map +1 -0
- package/dist/{chunk-IXZBUWSP.js → chunk-UEMN5URK.js} +2 -2
- package/dist/chunk-WOS7RJYZ.js +1320 -0
- package/dist/chunk-WOS7RJYZ.js.map +1 -0
- package/dist/{chunk-6PHB5CJS.js → chunk-ZLFRB6FI.js} +2 -2
- package/dist/composition/index.cjs +1228 -1076
- package/dist/composition/index.cjs.map +1 -1
- package/dist/composition/index.d.cts +3 -3
- package/dist/composition/index.d.ts +3 -3
- package/dist/composition/index.js +4 -4
- package/dist/core/index.cjs +1198 -1046
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +23 -2
- package/dist/core/index.d.ts +23 -2
- package/dist/core/index.js +2 -2
- package/dist/cqrs/index.d.cts +3 -3
- package/dist/cqrs/index.d.ts +3 -3
- package/dist/cqrs/messaging.d.cts +4 -4
- package/dist/cqrs/messaging.d.ts +4 -4
- package/dist/cqrs/work-queue.d.cts +5 -5
- package/dist/cqrs/work-queue.d.ts +5 -5
- package/dist/data-structures/index.cjs +1226 -1074
- package/dist/data-structures/index.cjs.map +1 -1
- package/dist/data-structures/index.d.cts +8 -7
- package/dist/data-structures/index.d.ts +8 -7
- package/dist/data-structures/index.js +6 -5
- package/dist/{describe-DYMw_l1C.d.cts → describe-BumQ-3_0.d.cts} +1 -1
- package/dist/{describe-BpyJuWkw.d.ts → describe-cYr_Z5zm.d.ts} +1 -1
- package/dist/executors/tool-provider-adapters.cjs +3091 -0
- package/dist/executors/tool-provider-adapters.cjs.map +1 -0
- package/dist/executors/tool-provider-adapters.d.cts +174 -0
- package/dist/executors/tool-provider-adapters.d.ts +174 -0
- package/dist/executors/tool-provider-adapters.js +1336 -0
- package/dist/executors/tool-provider-adapters.js.map +1 -0
- package/dist/executors/tool-provider-runtime.cjs +5178 -0
- package/dist/executors/tool-provider-runtime.cjs.map +1 -0
- package/dist/executors/tool-provider-runtime.d.cts +17 -0
- package/dist/executors/tool-provider-runtime.d.ts +17 -0
- package/dist/executors/tool-provider-runtime.js +15 -0
- package/dist/executors/tool-provider-runtime.js.map +1 -0
- package/dist/executors/tool-provider.cjs +6392 -0
- package/dist/executors/tool-provider.cjs.map +1 -0
- package/dist/executors/tool-provider.d.cts +60 -0
- package/dist/executors/tool-provider.d.ts +60 -0
- package/dist/executors/tool-provider.js +89 -0
- package/dist/executors/tool-provider.js.map +1 -0
- package/dist/executors/work-queue.d.cts +6 -6
- package/dist/executors/work-queue.d.ts +6 -6
- package/dist/graph/index.cjs +1499 -1341
- package/dist/graph/index.cjs.map +1 -1
- package/dist/graph/index.d.cts +9 -8
- package/dist/graph/index.d.ts +9 -8
- package/dist/graph/index.js +23 -22
- package/dist/{graph-DCEWh4T2.d.cts → graph-C1C-wb0L.d.cts} +266 -137
- package/dist/{graph-D-1-SQeC.d.ts → graph-CS0b4V9B.d.ts} +266 -137
- package/dist/{index-72VZC0-E.d.cts → index-DLrNopda.d.cts} +151 -10
- package/dist/{index-Bmxeu0nK.d.ts → index-DzJni3_6.d.ts} +151 -10
- package/dist/index.cjs +3397 -3140
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -9
- package/dist/index.d.ts +12 -9
- package/dist/index.js +110 -109
- package/dist/inspection/boundary.d.cts +4 -4
- package/dist/inspection/boundary.d.ts +4 -4
- package/dist/measurements-BWAnochv.d.ts +294 -0
- package/dist/measurements-B_gJfD8h.d.cts +294 -0
- package/dist/messaging/index.cjs +57 -51
- package/dist/messaging/index.cjs.map +1 -1
- package/dist/messaging/index.d.cts +11 -276
- package/dist/messaging/index.d.ts +11 -276
- package/dist/messaging/index.js +1 -1
- package/dist/operators/index.cjs +1228 -1076
- package/dist/operators/index.cjs.map +1 -1
- package/dist/operators/index.d.cts +5 -5
- package/dist/operators/index.d.ts +5 -5
- package/dist/operators/index.js +5 -5
- package/dist/orchestration/index.cjs +8844 -6071
- package/dist/orchestration/index.cjs.map +1 -1
- package/dist/orchestration/index.d.cts +171 -224
- package/dist/orchestration/index.d.ts +171 -224
- package/dist/orchestration/index.js +42 -991
- package/dist/orchestration/index.js.map +1 -1
- package/dist/orchestration/messaging.d.cts +5 -8
- package/dist/orchestration/messaging.d.ts +5 -8
- package/dist/orchestration/work-queue.cjs +1243 -5
- package/dist/orchestration/work-queue.cjs.map +1 -1
- package/dist/orchestration/work-queue.d.cts +121 -10
- package/dist/orchestration/work-queue.d.ts +121 -10
- package/dist/orchestration/work-queue.js +1067 -4
- package/dist/orchestration/work-queue.js.map +1 -1
- package/dist/patterns/event-flow.cjs +6 -20
- package/dist/patterns/event-flow.cjs.map +1 -1
- package/dist/patterns/event-flow.d.cts +4 -4
- package/dist/patterns/event-flow.d.ts +4 -4
- package/dist/patterns/event-flow.js +2 -2
- package/dist/patterns/index.cjs +453 -465
- package/dist/patterns/index.cjs.map +1 -1
- package/dist/patterns/index.d.cts +6 -5
- package/dist/patterns/index.d.ts +6 -5
- package/dist/patterns/index.js +3 -3
- package/dist/process-types-BB7oRhX3.d.cts +200 -0
- package/dist/process-types-QNhyoYJ8.d.ts +200 -0
- package/dist/{reactive-collection-DNV0-gFi.d.cts → reactive-collection-BYlWvtnp.d.cts} +4 -34
- package/dist/{reactive-collection-BAmfrGjd.d.ts → reactive-collection-efOEdGFN.d.ts} +4 -34
- package/dist/{reactive-collection-storage-BNEldDyi.d.cts → reactive-collection-storage-BjoLsoiC.d.cts} +5 -5
- package/dist/{reactive-collection-storage-YZsAQsWK.d.ts → reactive-collection-storage-DwW6UuK_.d.ts} +5 -5
- package/dist/{reactive-map-DRD1LJ2H.d.cts → reactive-map-BHacbIqz.d.cts} +7 -2
- package/dist/{reactive-map-EsDiCmJk.d.ts → reactive-map-DN4Jyqnf.d.ts} +7 -2
- package/dist/render/index.d.cts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/scheduled-readiness-BmqXxnzX.d.ts +91 -0
- package/dist/scheduled-readiness-CYSw7KDE.d.cts +91 -0
- package/dist/semantic-memory-graph-B_LwbM-E.d.cts +30 -0
- package/dist/semantic-memory-graph-rsFNNhwn.d.ts +30 -0
- package/dist/{semantic-memory-graph-DKuNzuWw.d.cts → semantic-memory-graph-types-Y73bbwVI.d.cts} +2 -28
- package/dist/{semantic-memory-graph-uwbwJdhe.d.ts → semantic-memory-graph-types-safmPkuX.d.ts} +2 -28
- package/dist/solutions/index.cjs +6353 -6169
- package/dist/solutions/index.cjs.map +1 -1
- package/dist/solutions/index.d.cts +12 -10
- package/dist/solutions/index.d.ts +12 -10
- package/dist/solutions/index.js +5 -5
- package/dist/solutions/reactive-layout/browser/index.cjs +116 -108
- package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/browser/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/browser/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/browser/index.js +3 -3
- package/dist/solutions/reactive-layout/index.cjs +3578 -3350
- package/dist/solutions/reactive-layout/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/index.d.cts +32 -576
- package/dist/solutions/reactive-layout/index.d.ts +32 -576
- package/dist/solutions/reactive-layout/index.js +65 -5
- package/dist/solutions/reactive-layout/node-canvas/index.cjs +127 -117
- package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/node-canvas/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/node-canvas/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/node-canvas/index.js +3 -3
- package/dist/solutions/reactive-layout/react-native/index.cjs +127 -117
- package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/react-native/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/react-native/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/react-native/index.js +3 -3
- package/dist/solutions/reactive-layout/skia/index.cjs +127 -117
- package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -1
- package/dist/solutions/reactive-layout/skia/index.d.cts +4 -4
- package/dist/solutions/reactive-layout/skia/index.d.ts +4 -4
- package/dist/solutions/reactive-layout/skia/index.js +3 -3
- package/dist/solutions/work-item/actions.cjs +1609 -1428
- package/dist/solutions/work-item/actions.cjs.map +1 -1
- package/dist/solutions/work-item/actions.d.cts +23 -184
- package/dist/solutions/work-item/actions.d.ts +23 -184
- package/dist/solutions/work-item/actions.js +1558 -934
- package/dist/solutions/work-item/actions.js.map +1 -1
- package/dist/solutions/work-item/scheduling.cjs +9181 -1838
- package/dist/solutions/work-item/scheduling.cjs.map +1 -1
- package/dist/solutions/work-item/scheduling.d.cts +1763 -328
- package/dist/solutions/work-item/scheduling.d.ts +1763 -328
- package/dist/solutions/work-item/scheduling.js +117 -3
- package/dist/solutions/work-item/work-queue.d.cts +7 -7
- package/dist/solutions/work-item/work-queue.d.ts +7 -7
- package/dist/sources/browser.cjs +1318 -1083
- package/dist/sources/browser.cjs.map +1 -1
- package/dist/sources/browser.d.cts +22 -6
- package/dist/sources/browser.d.ts +22 -6
- package/dist/sources/browser.js +4 -4
- package/dist/sources/browser.js.map +1 -1
- package/dist/sources/index.cjs +1318 -1083
- package/dist/sources/index.cjs.map +1 -1
- package/dist/sources/index.d.cts +4 -4
- package/dist/sources/index.d.ts +4 -4
- package/dist/sources/index.js +4 -4
- package/dist/sources/node.d.cts +3 -3
- package/dist/sources/node.d.ts +3 -3
- package/dist/storage/browser.cjs +16 -0
- package/dist/storage/browser.cjs.map +1 -1
- package/dist/storage/browser.js +3 -3
- package/dist/storage/index.cjs +16 -0
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +5 -4
- package/dist/storage/index.d.ts +5 -4
- package/dist/storage/index.js +6 -6
- package/dist/storage/node.cjs +16 -0
- package/dist/storage/node.cjs.map +1 -1
- package/dist/storage/node.js +3 -3
- package/dist/{store-C-joM4gh.d.ts → store-6_CHF6Ge.d.ts} +1 -1
- package/dist/{store-CNJwmT-h.d.cts → store-BljX8RkQ.d.cts} +1 -1
- package/dist/types-BAw2QVVE.d.cts +274 -0
- package/dist/types-BUbbbh4f.d.cts +34 -0
- package/dist/types-CMnzoL54.d.cts +457 -0
- package/dist/{types-CcPIn7sy.d.cts → types-CTN3XoMl.d.cts} +57 -108
- package/dist/types-CV_ohy5T.d.cts +357 -0
- package/dist/{types-BsJvElYZ.d.ts → types-DChxk1vK.d.ts} +57 -108
- package/dist/types-DRu7SnLV.d.ts +274 -0
- package/dist/types-DeID_FRl.d.ts +34 -0
- package/dist/types-IhKH0hGW.d.ts +357 -0
- package/dist/types-ePlD2uyT.d.ts +457 -0
- package/dist/{work-item-runtime-qaVgsL0T.d.cts → work-item-runtime-types-BTxLskN5.d.cts} +3 -93
- package/dist/{work-item-runtime-C3M79vE9.d.ts → work-item-runtime-types-DAsZbb2y.d.ts} +3 -93
- package/dist/work-queue/index.cjs +957 -953
- package/dist/work-queue/index.cjs.map +1 -1
- package/dist/work-queue/index.d.cts +9 -357
- package/dist/work-queue/index.d.ts +9 -357
- package/dist/work-queue/index.js +957 -953
- package/dist/work-queue/index.js.map +1 -1
- package/package.json +611 -513
- package/dist/chunk-3JR3EDB2.js.map +0 -1
- package/dist/chunk-4VLAQHZI.js.map +0 -1
- package/dist/chunk-6XAIOL3X.js +0 -2407
- package/dist/chunk-6XAIOL3X.js.map +0 -1
- package/dist/chunk-FBUU43PM.js.map +0 -1
- package/dist/chunk-HKK2JD7Z.js.map +0 -1
- package/dist/chunk-PC3BTTBE.js +0 -3217
- package/dist/chunk-PC3BTTBE.js.map +0 -1
- package/dist/chunk-QFY4AFY4.js.map +0 -1
- package/dist/chunk-SS2A464I.js.map +0 -1
- package/dist/chunk-V7CIJE4B.js.map +0 -1
- package/dist/chunk-XKXWK2KP.js.map +0 -1
- package/dist/chunk-YDSIVHRR.js.map +0 -1
- package/dist/chunk-YXMZ2N6J.js.map +0 -1
- /package/dist/{chunk-CZNV3VXM.js.map → chunk-3J7UPZL5.js.map} +0 -0
- /package/dist/{chunk-Z2ANQ6JW.js.map → chunk-4Q77MMJY.js.map} +0 -0
- /package/dist/{chunk-K3FXTC3I.js.map → chunk-HJACH5PU.js.map} +0 -0
- /package/dist/{chunk-GTPCOEOZ.js.map → chunk-IDMLXLLG.js.map} +0 -0
- /package/dist/{chunk-DKP56CSW.js.map → chunk-JKAYLDQV.js.map} +0 -0
- /package/dist/{chunk-43BKLFZU.js.map → chunk-KFURM6FM.js.map} +0 -0
- /package/dist/{chunk-2747WN4Y.js.map → chunk-PUSRRALM.js.map} +0 -0
- /package/dist/{chunk-VTHLCFN4.js.map → chunk-RAHNUYA5.js.map} +0 -0
- /package/dist/{chunk-IXZBUWSP.js.map → chunk-UEMN5URK.js.map} +0 -0
- /package/dist/{chunk-6PHB5CJS.js.map → chunk-ZLFRB6FI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/bridge.ts","../../src/adapters/environment.ts","../../src/adapters/nestjs.ts"],"sourcesContent":["/**\n * Graph-visible wire bridge envelope helpers (D134).\n *\n * This first slice is transport-free: commands become outbound envelope facts,\n * remote receipts enter only through the inbound fact node, and retry/ack timeout\n * state is surfaced through graph-visible attempts/status/errors nodes.\n */\n\nimport { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport {\n\tnextRetryDelayMs,\n\ttype RetryPolicy,\n\tretryPolicy,\n\tshouldRetry,\n} from \"../graph/resilience.js\";\nimport type { Node } from \"../node/node.js\";\nimport { errorPayload, type Wave } from \"../protocol/messages.js\";\n\nexport type WireBridgeEnvelopeType =\n\t| \"start\"\n\t| \"data\"\n\t| \"ack\"\n\t| \"nack\"\n\t| \"status\"\n\t| \"error\"\n\t| \"close\";\n\nexport interface WireBridgeMetadata {\n\t/** Monotonic envelope sequence within the bridge session. */\n\treadonly seq: number;\n\t/** Monotonic accepted inbound cursor observed by the sending side. */\n\treadonly cursor: number;\n\t/** D151: correlation/idempotency metadata, not an authoritative duplicate lookup key. */\n\treadonly idempotencyKey: string;\n\treadonly attempt: number;\n\treadonly maxAttempts: number;\n\treadonly timestampMs?: number;\n\t/** D151 ack/nack correlation target; receipt duplicate recognition still uses seq/cursor. */\n\treadonly ackForSeq?: number;\n\treadonly requestId?: string;\n}\n\nexport type WireBridgePayload<TData = unknown> =\n\t| { readonly kind: \"data\"; readonly value: TData }\n\t| { readonly kind: \"error\"; readonly error: unknown }\n\t| { readonly kind: \"status\"; readonly status: unknown }\n\t| { readonly kind: \"close\"; readonly reason?: unknown };\n\nexport interface WireBridgeEnvelope<TData = unknown> {\n\treadonly sessionId: string;\n\treadonly type: WireBridgeEnvelopeType;\n\treadonly payload?: WireBridgePayload<TData>;\n\treadonly metadata: WireBridgeMetadata;\n}\n\nexport type WireBridgeCommand<TData = unknown> =\n\t| { readonly kind: \"start\"; readonly idempotencyKey?: string; readonly requestId?: string }\n\t| {\n\t\t\treadonly kind: \"send\";\n\t\t\treadonly payload: TData;\n\t\t\treadonly idempotencyKey?: string;\n\t\t\treadonly requestId?: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"ack\";\n\t\t\treadonly ackForSeq: number;\n\t\t\treadonly idempotencyKey?: string;\n\t\t\treadonly requestId?: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"nack\";\n\t\t\treadonly ackForSeq: number;\n\t\t\treadonly error: unknown;\n\t\t\treadonly idempotencyKey?: string;\n\t\t\treadonly requestId?: string;\n\t }\n\t| { readonly kind: \"close\"; readonly reason?: unknown; readonly idempotencyKey?: string };\n\nexport type WireBridgeEvent<TOutbound = unknown, TInbound = unknown> =\n\t| {\n\t\t\treadonly kind: \"outbound\";\n\t\t\treadonly envelope: WireBridgeEnvelope<TOutbound>;\n\t }\n\t| {\n\t\t\treadonly kind: \"inbound\";\n\t\t\treadonly envelope: WireBridgeEnvelope<TInbound>;\n\t }\n\t| {\n\t\t\treadonly kind: \"ack\";\n\t\t\treadonly ackForSeq: number;\n\t\t\treadonly envelope: WireBridgeEnvelope<TInbound>;\n\t\t\treadonly outbound: WireBridgeEnvelope<TOutbound>;\n\t }\n\t| {\n\t\t\treadonly kind: \"nack\";\n\t\t\treadonly ackForSeq: number;\n\t\t\treadonly envelope: WireBridgeEnvelope<TInbound>;\n\t\t\treadonly outbound: WireBridgeEnvelope<TOutbound>;\n\t\t\treadonly error: unknown;\n\t }\n\t| { readonly kind: \"timeout\"; readonly seq: number; readonly attempt: number }\n\t| {\n\t\t\treadonly kind: \"retry\";\n\t\t\treadonly seq: number;\n\t\t\treadonly attempt: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| {\n\t\t\treadonly kind: \"exhausted\";\n\t\t\treadonly seq: number;\n\t\t\treadonly attempt: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| { readonly kind: \"cursor\"; readonly cursor: number }\n\t| { readonly kind: \"duplicate\"; readonly seq: number; readonly cursor: number }\n\t| { readonly kind: \"out-of-order\"; readonly seq: number; readonly expected: number }\n\t| { readonly kind: \"session-mismatch\"; readonly expected: string; readonly actual: string }\n\t| { readonly kind: \"late-receipt\"; readonly receipt: \"ack\" | \"nack\"; readonly ackForSeq: number }\n\t| { readonly kind: \"invalid\"; readonly error: string };\n\nexport interface WireBridgeAck {\n\treadonly ackForSeq: number;\n\treadonly envelope: WireBridgeEnvelope;\n}\n\nexport interface WireBridgeNack {\n\treadonly ackForSeq: number;\n\treadonly envelope: WireBridgeEnvelope;\n\treadonly error: unknown;\n}\n\nexport interface WireBridgeAttempt {\n\treadonly seq: number;\n\treadonly attempt: number;\n\treadonly maxAttempts: number;\n}\n\nexport interface WireBridgeStatus {\n\treadonly sessionId: string;\n\treadonly state: \"idle\" | \"started\" | \"open\" | \"waiting\" | \"closed\" | \"errored\" | \"exhausted\";\n\treadonly cursor: number;\n\treadonly nextSeq: number;\n\treadonly pending: number;\n\treadonly attempts: number;\n\treadonly acked: number;\n\treadonly nacked: number;\n\treadonly errors: number;\n\treadonly lastSeq?: number;\n\treadonly lastDelayMs?: number;\n}\n\nexport interface WireBridgeOptions {\n\treadonly name?: string;\n\treadonly sessionId: string;\n\treadonly retry?: RetryPolicy;\n\t/** Finite D134 ack timeout. Defaults to 30s so pending ack tracking is bounded. */\n\treadonly ackTimeoutMs?: number;\n\treadonly now?: () => number;\n}\n\nexport interface WireBridgeBundle<TOutbound = unknown, TInbound = unknown> {\n\treadonly sessionId: string;\n\treadonly command: Node<WireBridgeCommand<TOutbound>>;\n\treadonly outbound: Node<WireBridgeEnvelope<TOutbound>>;\n\treadonly inbound: Node<WireBridgeEnvelope<TInbound>>;\n\treadonly events: Node<WireBridgeEvent<TOutbound, TInbound>>;\n\treadonly acks: Node<WireBridgeAck>;\n\treadonly nacks: Node<WireBridgeNack>;\n\treadonly status: Node<WireBridgeStatus>;\n\treadonly errors: Node<unknown>;\n\treadonly cursor: Node<number>;\n\treadonly attempts: Node<WireBridgeAttempt>;\n\tstart(): void;\n\tsend(payload: TOutbound, opts?: { idempotencyKey?: string; requestId?: string }): void;\n\tack(ackForSeq: number, opts?: { idempotencyKey?: string; requestId?: string }): void;\n\tnack(\n\t\tackForSeq: number,\n\t\terror: unknown,\n\t\topts?: { idempotencyKey?: string; requestId?: string },\n\t): void;\n\tclose(reason?: unknown, opts?: { idempotencyKey?: string }): void;\n}\n\nexport interface RemoteCallRequest<T = unknown> {\n\treadonly operation: string;\n\treadonly requestId: string;\n\treadonly payload: T;\n}\n\nexport type RemoteCallResponse<T = unknown> =\n\t| {\n\t\t\treadonly kind: \"result\";\n\t\t\treadonly operation: string;\n\t\t\treadonly requestId: string;\n\t\t\treadonly payload: T;\n\t }\n\t| {\n\t\t\treadonly kind: \"error\";\n\t\t\treadonly operation: string;\n\t\t\treadonly requestId: string;\n\t\t\treadonly error: string;\n\t }\n\t| {\n\t\t\treadonly kind: \"status\";\n\t\t\treadonly operation: string;\n\t\t\treadonly requestId: string;\n\t\t\treadonly status: string;\n\t };\n\nexport interface RemoteCallResult<T = unknown> {\n\treadonly operation: string;\n\treadonly requestId: string;\n\treadonly payload: T;\n}\n\nexport type RemoteCallStatusState =\n\t| \"idle\"\n\t| \"requested\"\n\t| \"responded\"\n\t| \"errored\"\n\t| \"timed-out\"\n\t| \"bridge-errored\";\n\nexport interface RemoteCallStatus {\n\treadonly state: RemoteCallStatusState;\n\treadonly operation?: string;\n\treadonly requestId?: string;\n\treadonly pending: number;\n\treadonly completed: number;\n\treadonly errors: number;\n\treadonly timeouts: number;\n}\n\nexport interface RemoteCallError {\n\treadonly operation?: string;\n\treadonly requestId?: string;\n\treadonly error: string;\n}\n\nexport interface RemoteCallTimeout {\n\treadonly operation?: string;\n\treadonly requestId: string;\n\treadonly error: string;\n}\n\nexport interface RemoteCallOptions {\n\treadonly name?: string;\n}\n\nexport interface RemoteCallBundle<TRequest = unknown, TResponse = unknown> {\n\treadonly responses: Node<RemoteCallResponse<TResponse>>;\n\treadonly results: Node<RemoteCallResult<TResponse>>;\n\treadonly status: Node<RemoteCallStatus>;\n\treadonly errors: Node<RemoteCallError>;\n\treadonly timeouts: Node<RemoteCallTimeout>;\n\tcall(\n\t\toperation: string,\n\t\trequestId: string,\n\t\tpayload: TRequest,\n\t\topts?: { readonly idempotencyKey?: string },\n\t): RemoteCallRequest<TRequest>;\n\ttimeout(requestId: string, operation: string | undefined, error: string): RemoteCallTimeout;\n}\n\nexport type RemoteResponderHandler<TRequest = unknown, TResponse = unknown> = (\n\trequest: RemoteCallRequest<TRequest>,\n) => TResponse;\n\nexport interface RemoteResponderHandlerDefinition<TRequest = unknown, TResponse = unknown> {\n\treadonly operation: string;\n\treadonly handle: RemoteResponderHandler<TRequest, TResponse>;\n}\n\nexport type RemoteResponderEvent<TRequest = unknown, TResponse = unknown> =\n\t| {\n\t\t\treadonly kind: \"request\";\n\t\t\treadonly request: RemoteCallRequest<TRequest>;\n\t\t\treadonly seq: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"response\";\n\t\t\treadonly requestId: string;\n\t\t\treadonly operation: string;\n\t\t\treadonly command: WireBridgeCommand<RemoteCallResponse<TResponse>>;\n\t }\n\t| {\n\t\t\treadonly kind: \"rejected\";\n\t\t\treadonly requestId?: string;\n\t\t\treadonly operation?: string;\n\t\t\treadonly error: string;\n\t\t\treadonly command?: WireBridgeCommand<RemoteCallResponse<TResponse>>;\n\t }\n\t| { readonly kind: \"invalid\"; readonly error: string };\n\nexport type RemoteResponderStatusState = \"idle\" | \"responded\" | \"rejected\" | \"errored\";\n\nexport interface RemoteResponderStatus {\n\treadonly state: RemoteResponderStatusState;\n\treadonly operation?: string;\n\treadonly requestId?: string;\n\treadonly handled: number;\n\treadonly rejected: number;\n\treadonly errors: number;\n}\n\nexport interface RemoteResponderOptions<TRequest = unknown, TResponse = unknown> {\n\treadonly name?: string;\n\treadonly handlers?: readonly RemoteResponderHandlerDefinition<TRequest, TResponse>[];\n\t/** Default false: non-owned operations are ignored so multiple responders may share one bridge. */\n\treadonly rejectUnknown?: boolean;\n}\n\nexport interface RemoteResponderBundle<TRequest = unknown, TResponse = unknown> {\n\treadonly events: Node<RemoteResponderEvent<TRequest, TResponse>>;\n\treadonly responseCommands: Node<WireBridgeCommand<RemoteCallResponse<TResponse>>>;\n\treadonly requests: Node<RemoteCallRequest<TRequest>>;\n\treadonly status: Node<RemoteResponderStatus>;\n\treadonly errors: Node<RemoteCallError>;\n\trelease(): void;\n}\n\ninterface PendingEnvelope<TData> {\n\tenvelope: WireBridgeEnvelope<TData>;\n\ttimer?: ReturnType<typeof setTimeout>;\n}\n\ninterface BridgeState<TData> {\n\tactive: boolean;\n\tcleanupInstalled: boolean;\n\tnextSeq: number;\n\tcursor: number;\n\tremoteCursor: number;\n\tterminalReported: boolean;\n\tpending: Map<number, PendingEnvelope<TData>>;\n}\n\ninterface AttachedCommandSources<TOutbound> {\n\tsources: Node<WireBridgeCommand<TOutbound>>[];\n}\n\ninterface WireBridgeInvalidIngress {\n\treadonly __wireBridgeInvalidIngress: true;\n\treadonly error: string;\n}\n\nconst envelopeTypes = new Set<WireBridgeEnvelopeType>([\n\t\"start\",\n\t\"data\",\n\t\"ack\",\n\t\"nack\",\n\t\"status\",\n\t\"error\",\n\t\"close\",\n]);\n\nconst defaultAckTimeoutMs = 30_000;\nconst bridgeCommandSources = new WeakMap<\n\tWireBridgeBundle<unknown, unknown>,\n\tAttachedCommandSources<unknown>\n>();\nconst bridgeInboundTargets = new WeakMap<\n\tWireBridgeBundle<unknown, unknown>,\n\tNode<WireBridgeEnvelope<unknown> | WireBridgeInvalidIngress>\n>();\n\n/** Stable D134 idempotency key helper scoped to one bridge session and sequence. */\nexport function wireBridgeIdempotencyKey(sessionId: string, seq: number): string {\n\treturn `${sessionId}:${seq}`;\n}\n\n/** Create a D134 wire bridge envelope with ordered metadata. */\nexport function wireBridgeEnvelope<TData = unknown>(input: {\n\treadonly sessionId: string;\n\treadonly type: WireBridgeEnvelopeType;\n\treadonly seq: number;\n\treadonly cursor?: number;\n\treadonly payload?: WireBridgePayload<TData>;\n\treadonly idempotencyKey?: string;\n\treadonly attempt?: number;\n\treadonly maxAttempts?: number;\n\treadonly timestampMs?: number;\n\treadonly ackForSeq?: number;\n\treadonly requestId?: string;\n}): WireBridgeEnvelope<TData> {\n\tif (typeof input.sessionId !== \"string\" || input.sessionId.length === 0) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: sessionId must be a non-empty string\");\n\t}\n\tif (!envelopeTypes.has(input.type)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: type is not recognized\");\n\t}\n\tif (!isSafePositiveInteger(input.seq)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: seq must be a positive integer\");\n\t}\n\tconst cursor = input.cursor ?? 0;\n\tif (!isSafeNonNegativeInteger(cursor)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: cursor must be a non-negative integer\");\n\t}\n\tconst attempt = input.attempt ?? 1;\n\tif (!isSafePositiveInteger(attempt)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: attempt must be a positive integer\");\n\t}\n\tconst maxAttempts = input.maxAttempts ?? attempt;\n\tif (!isSafePositiveInteger(maxAttempts) || maxAttempts < attempt) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: maxAttempts must be >= attempt\");\n\t}\n\tif (input.ackForSeq !== undefined && !isSafePositiveInteger(input.ackForSeq)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: ackForSeq must be a positive integer\");\n\t}\n\tif ((input.type === \"ack\" || input.type === \"nack\") && input.ackForSeq === undefined) {\n\t\tthrow new RangeError(`wireBridgeEnvelope: ${input.type} envelope requires ackForSeq`);\n\t}\n\tif (input.idempotencyKey !== undefined && input.idempotencyKey.length === 0) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: idempotencyKey must be a non-empty string\");\n\t}\n\tconst payloadError = validatePayloadForType(input.type, input.payload, \"wireBridgeEnvelope\");\n\tif (payloadError !== undefined) {\n\t\tthrow new RangeError(payloadError);\n\t}\n\treturn {\n\t\tsessionId: input.sessionId,\n\t\ttype: input.type,\n\t\tpayload: input.payload,\n\t\tmetadata: {\n\t\t\tseq: input.seq,\n\t\t\tcursor,\n\t\t\tidempotencyKey: input.idempotencyKey ?? wireBridgeIdempotencyKey(input.sessionId, input.seq),\n\t\t\tattempt,\n\t\t\tmaxAttempts,\n\t\t\ttimestampMs: input.timestampMs,\n\t\t\tackForSeq: input.ackForSeq,\n\t\t\trequestId: input.requestId,\n\t\t},\n\t};\n}\n\nexport function wireBridge<TOutbound = unknown, TInbound = unknown>(\n\tgraph: Graph,\n\topts: WireBridgeOptions,\n): WireBridgeBundle<TOutbound, TInbound> {\n\tconst name = opts.name ?? \"wireBridge\";\n\tconst policy = opts.retry ?? retryPolicy();\n\tconst command = graph.node<WireBridgeCommand<TOutbound>>([], null, {\n\t\tname: `${name}/command`,\n\t\tfactory: \"wireBridgeCommand\",\n\t});\n\tconst inboundCore = graph.node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>(\n\t\t[],\n\t\tnull,\n\t\t{\n\t\t\tname: `${name}/inbound`,\n\t\t\tfactory: \"wireBridgeInbound\",\n\t\t},\n\t);\n\tconst inbound = guardedInboundNode(inboundCore, opts.sessionId);\n\tconst events = wireBridgeEventsNode<TOutbound, TInbound>(\n\t\tgraph,\n\t\tcommand,\n\t\tinboundCore,\n\t\tname,\n\t\topts,\n\t\tpolicy,\n\t);\n\tconst outbound = projectOutbound(graph, events, name);\n\tconst acks = projectAcks(graph, events, name);\n\tconst nacks = projectNacks(graph, events, name);\n\tconst status = projectStatus(graph, events, name, opts.sessionId);\n\tconst errors = projectErrors(graph, events, name);\n\tconst cursor = projectCursor(graph, events, name);\n\tconst attempts = projectAttempts(graph, events, name);\n\tconst bundle: WireBridgeBundle<TOutbound, TInbound> = {\n\t\tsessionId: opts.sessionId,\n\t\tcommand,\n\t\toutbound,\n\t\tinbound,\n\t\tevents,\n\t\tacks,\n\t\tnacks,\n\t\tstatus,\n\t\terrors,\n\t\tcursor,\n\t\tattempts,\n\t\tstart: () => command.down([[\"DATA\", { kind: \"start\" }]]),\n\t\tsend: (payload, sendOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"send\",\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tidempotencyKey: sendOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId: sendOpts?.requestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tack: (ackForSeq, ackOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"ack\",\n\t\t\t\t\t\tackForSeq,\n\t\t\t\t\t\tidempotencyKey: ackOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId: ackOpts?.requestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tnack: (ackForSeq, error, nackOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"nack\",\n\t\t\t\t\t\tackForSeq,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tidempotencyKey: nackOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId: nackOpts?.requestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tclose: (reason, closeOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\"DATA\", { kind: \"close\", reason, idempotencyKey: closeOpts?.idempotencyKey }],\n\t\t\t]),\n\t};\n\tbridgeCommandSources.set(bundle as WireBridgeBundle<unknown, unknown>, { sources: [] });\n\tbridgeInboundTargets.set(bundle as WireBridgeBundle<unknown, unknown>, inboundCore);\n\treturn bundle;\n}\n\n/** D147 remote dispatcher call helper over explicit wireBridge request/response facts. */\nexport function remoteCall<TRequest = unknown, TResponse = unknown>(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>,\n\topts: RemoteCallOptions = {},\n): RemoteCallBundle<TRequest, TResponse> {\n\tconst name = opts.name ?? \"remoteCall\";\n\tconst timeouts = graph.node<RemoteCallTimeout>([], null, {\n\t\tname: `${name}/timeouts`,\n\t\tfactory: \"remoteCallTimeouts\",\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst responses = remoteCallResponsesNode(graph, bridge.events, timeouts, name);\n\tconst results = remoteCallResultsNode(graph, responses, name);\n\tconst status = remoteCallStatusNode(graph, bridge.events, responses, timeouts, name);\n\tconst errors = remoteCallErrorsNode(graph, responses, timeouts, bridge.events, name);\n\treturn {\n\t\tresponses,\n\t\tresults,\n\t\tstatus,\n\t\terrors,\n\t\ttimeouts,\n\t\tcall(operation, requestId, payload, callOpts) {\n\t\t\tconst request = remoteCallRequest(operation, requestId, payload);\n\t\t\tbridge.command.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"send\",\n\t\t\t\t\t\tpayload: request,\n\t\t\t\t\t\tidempotencyKey: callOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]);\n\t\t\treturn request;\n\t\t},\n\t\ttimeout(requestId, operation, error) {\n\t\t\tconst timeout = remoteCallTimeout(requestId, operation, error);\n\t\t\ttimeouts.down([[\"DATA\", timeout]]);\n\t\t\treturn timeout;\n\t\t},\n\t};\n}\n\nexport function remoteResponderHandler<TRequest = unknown, TResponse = unknown>(\n\toperation: string,\n\thandle: RemoteResponderHandler<TRequest, TResponse>,\n): RemoteResponderHandlerDefinition<TRequest, TResponse> {\n\tif (operation.length === 0) {\n\t\tthrow new RangeError(\"remoteResponderHandler: operation must be non-empty\");\n\t}\n\tif (typeof handle !== \"function\") {\n\t\tthrow new TypeError(\"remoteResponderHandler: handle must be a function\");\n\t}\n\treturn { operation, handle };\n}\n\n/** D147 remote responder over inbound wireBridge request facts and outbound command facts. */\nexport function remoteResponder<TRequest = unknown, TResponse = unknown>(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<RemoteCallResponse<TResponse>, RemoteCallRequest<TRequest>>,\n\topts: RemoteResponderOptions<TRequest, TResponse> = {},\n): RemoteResponderBundle<TRequest, TResponse> {\n\tconst name = opts.name ?? \"remoteResponder\";\n\tconst handlers = normalizeRemoteHandlers(opts.handlers ?? []);\n\tconst topology = graph.topologyGroup({ name: `${name}.remoteResponder` });\n\tconst events = topology.add(\n\t\tremoteResponderEventsNode(\n\t\t\tgraph,\n\t\t\twireBridgeInboundTarget(bridge),\n\t\t\tname,\n\t\t\tbridge.sessionId,\n\t\t\thandlers,\n\t\t\topts.rejectUnknown === true,\n\t\t),\n\t);\n\tconst responseCommands = topology.add(remoteResponderResponseCommandsNode(graph, events, name));\n\tconst requests = topology.add(remoteResponderRequestsNode(graph, events, name));\n\tconst status = topology.add(remoteResponderStatusNode(graph, events, name));\n\tconst errors = topology.add(remoteResponderErrorsNode(graph, events, name));\n\ttry {\n\t\tattachWireBridgeCommandSource(bridge, responseCommands);\n\t} catch (error) {\n\t\ttopology.release({ reason: `${name}.remoteResponder.failedAttach` });\n\t\tthrow error;\n\t}\n\tlet released = false;\n\treturn {\n\t\tevents,\n\t\tresponseCommands,\n\t\trequests,\n\t\tstatus,\n\t\terrors,\n\t\trelease() {\n\t\t\tif (released) return;\n\t\t\tdetachWireBridgeCommandSource(bridge, responseCommands);\n\t\t\ttry {\n\t\t\t\ttopology.release({ reason: `${name}.remoteResponder.release` });\n\t\t\t\treleased = true;\n\t\t\t} catch (error) {\n\t\t\t\tattachWireBridgeCommandSource(bridge, responseCommands);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction wireBridgeEventsNode<TOutbound, TInbound>(\n\tgraph: Graph,\n\tcommand: Node<WireBridgeCommand<TOutbound>>,\n\tinbound: Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>,\n\tname: string,\n\topts: WireBridgeOptions,\n\tpolicy: RetryPolicy,\n): Node<WireBridgeEvent<TOutbound, TInbound>> {\n\tconst now = opts.now ?? Date.now;\n\treturn graph.node<WireBridgeEvent<TOutbound, TInbound>>(\n\t\t[command, inbound],\n\t\t(ctx) => {\n\t\t\tconst state = initBridgeState<TOutbound>(ctx);\n\n\t\t\tconst emitOutbound = (\n\t\t\t\ttype: WireBridgeEnvelopeType,\n\t\t\t\tpayload: WireBridgePayload<TOutbound> | undefined,\n\t\t\t\tcommandOpts: { idempotencyKey?: string; requestId?: string; ackForSeq?: number } = {},\n\t\t\t\tbeforeEmit?: () => void,\n\t\t\t) => {\n\t\t\t\tif (!isSafePositiveInteger(state.nextSeq)) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"invalid\",\n\t\t\t\t\t\t\t\terror: `${opts.sessionId}: next outbound seq exceeded Number.MAX_SAFE_INTEGER`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst seq = state.nextSeq;\n\t\t\t\tlet envelope: WireBridgeEnvelope<TOutbound>;\n\t\t\t\ttry {\n\t\t\t\t\tenvelope = wireBridgeEnvelope<TOutbound>({\n\t\t\t\t\t\tsessionId: opts.sessionId,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tseq,\n\t\t\t\t\t\tcursor: state.cursor,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tidempotencyKey: commandOpts.idempotencyKey,\n\t\t\t\t\t\tattempt: 1,\n\t\t\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\t\t\ttimestampMs: now(),\n\t\t\t\t\t\tackForSeq: commandOpts.ackForSeq,\n\t\t\t\t\t\trequestId: commandOpts.requestId,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"invalid\",\n\t\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstate.nextSeq++;\n\t\t\t\tbeforeEmit?.();\n\t\t\t\tctx.down([[\"DATA\", { kind: \"outbound\", envelope }]]);\n\t\t\t\tif (shouldTrackAck(type)) armAckTimeout(ctx, state, envelope, opts, policy, now);\n\t\t\t};\n\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tprocessInbound(ctx, state, raw, opts.sessionId);\n\t\t\t}\n\t\t\tconst inboundTerminal = ctx.terminal[1];\n\t\t\tif (inboundTerminal !== false && inboundTerminal !== undefined && !state.terminalReported) {\n\t\t\t\tstate.terminalReported = true;\n\t\t\t\tconst error =\n\t\t\t\t\tinboundTerminal === true\n\t\t\t\t\t\t? `${opts.sessionId}: inbound protocol COMPLETE is local misuse; remote completion must arrive as a DATA envelope fact`\n\t\t\t\t\t\t: `${opts.sessionId}: inbound protocol ERROR ${String(\n\t\t\t\t\t\t\t\terrorPayload(inboundTerminal),\n\t\t\t\t\t\t\t)} is local misuse; remote errors must arrive as DATA envelope facts`;\n\t\t\t\tctx.down([[\"DATA\", { kind: \"invalid\", error }]]);\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst invalid = validateCommand(raw);\n\t\t\t\tif (invalid !== undefined) {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: invalid }]]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst commandValue = raw as WireBridgeCommand<TOutbound>;\n\t\t\t\tswitch (commandValue.kind) {\n\t\t\t\t\tcase \"start\":\n\t\t\t\t\t\temitOutbound(\"start\", undefined, commandValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"send\":\n\t\t\t\t\t\temitOutbound(\"data\", { kind: \"data\", value: commandValue.payload }, commandValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ack\":\n\t\t\t\t\t\temitOutbound(\"ack\", undefined, {\n\t\t\t\t\t\t\tidempotencyKey: commandValue.idempotencyKey,\n\t\t\t\t\t\t\trequestId: commandValue.requestId,\n\t\t\t\t\t\t\tackForSeq: commandValue.ackForSeq,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"nack\":\n\t\t\t\t\t\temitOutbound(\n\t\t\t\t\t\t\t\"nack\",\n\t\t\t\t\t\t\t{ kind: \"error\", error: errorPayload(commandValue.error) },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tidempotencyKey: commandValue.idempotencyKey,\n\t\t\t\t\t\t\t\trequestId: commandValue.requestId,\n\t\t\t\t\t\t\t\tackForSeq: commandValue.ackForSeq,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"close\":\n\t\t\t\t\t\temitOutbound(\n\t\t\t\t\t\t\t\"close\",\n\t\t\t\t\t\t\t{ kind: \"close\", reason: commandValue.reason },\n\t\t\t\t\t\t\tcommandValue,\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tfor (const pending of state.pending.values()) {\n\t\t\t\t\t\t\t\t\tif (pending.timer !== undefined) clearTimeout(pending.timer);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tstate.pending.clear();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/events`,\n\t\t\tfactory: \"wireBridgeEvents\",\n\t\t\tpartial: true,\n\t\t\terrorWhenDepsError: false,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\tterminalAsRealInput: true,\n\t\t},\n\t);\n}\n\nfunction initBridgeState<TPayload>(ctx: Ctx): BridgeState<TPayload> {\n\tlet state = ctx.state.get<BridgeState<TPayload>>();\n\tif (state === undefined) {\n\t\tstate = {\n\t\t\tactive: true,\n\t\t\tcleanupInstalled: false,\n\t\t\tnextSeq: 1,\n\t\t\tcursor: 0,\n\t\t\tremoteCursor: 0,\n\t\t\tterminalReported: false,\n\t\t\tpending: new Map(),\n\t\t};\n\t\tctx.state.set(state);\n\t}\n\tstate.active = true;\n\tif (!state.cleanupInstalled) {\n\t\tstate.cleanupInstalled = true;\n\t\tctx.onDeactivation(() => {\n\t\t\tstate.active = false;\n\t\t\tstate.cleanupInstalled = false;\n\t\t\tfor (const pending of state.pending.values()) {\n\t\t\t\tif (pending.timer !== undefined) clearTimeout(pending.timer);\n\t\t\t}\n\t\t\tstate.pending.clear();\n\t\t});\n\t}\n\treturn state;\n}\n\nfunction attachWireBridgeCommandSource<TOutbound, TInbound>(\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\tsource: Node<WireBridgeCommand<TOutbound>>,\n): void {\n\tconst attached = bridgeCommandSources.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (attached === undefined) {\n\t\tthrow new Error(\"remoteResponder: bridge command source registry missing\");\n\t}\n\tconst sources = attached.sources as Node<WireBridgeCommand<TOutbound>>[];\n\tconst previousSources = [...sources];\n\tif (!sources.includes(source)) sources.push(source);\n\ttry {\n\t\tbridge.command.replaceDeps([...sources], wireBridgeCommandSourceFn(sources.length));\n\t} catch (error) {\n\t\tsources.splice(0, sources.length, ...previousSources);\n\t\tbridge.command.replaceDeps(\n\t\t\t[...previousSources],\n\t\t\twireBridgeCommandSourceFn(previousSources.length),\n\t\t);\n\t\tthrow error;\n\t}\n}\n\nfunction detachWireBridgeCommandSource<TOutbound, TInbound>(\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\tsource: Node<WireBridgeCommand<TOutbound>>,\n): void {\n\tconst attached = bridgeCommandSources.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (attached === undefined) {\n\t\tthrow new Error(\"remoteResponder: bridge command source registry missing\");\n\t}\n\tconst sources = attached.sources as Node<WireBridgeCommand<TOutbound>>[];\n\tif (!sources.includes(source)) return;\n\tconst previousSources = [...sources];\n\tconst nextSources = sources.filter((candidate) => candidate !== source);\n\tsources.splice(0, sources.length, ...nextSources);\n\ttry {\n\t\tbridge.command.replaceDeps([...nextSources], wireBridgeCommandSourceFn(nextSources.length));\n\t} catch (error) {\n\t\tsources.splice(0, sources.length, ...previousSources);\n\t\tbridge.command.replaceDeps(\n\t\t\t[...previousSources],\n\t\t\twireBridgeCommandSourceFn(previousSources.length),\n\t\t);\n\t\tthrow error;\n\t}\n}\n\nfunction wireBridgeInboundTarget<TInbound>(\n\tbridge: WireBridgeBundle<unknown, TInbound>,\n): Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress> {\n\tconst target = bridgeInboundTargets.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (target === undefined) {\n\t\tthrow new Error(\"remoteResponder: bridge inbound target registry missing\");\n\t}\n\treturn target as Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>;\n}\n\nfunction wireBridgeCommandSourceFn<TOutbound>(sourceCount: number): (ctx: Ctx) => void {\n\treturn (ctx) => {\n\t\tfor (let i = 0; i < sourceCount; i += 1) {\n\t\t\tfor (const command of depBatch(ctx, i) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", command as WireBridgeCommand<TOutbound>]]);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction remoteCallRequest<TRequest>(\n\toperation: string,\n\trequestId: string,\n\tpayload: TRequest,\n): RemoteCallRequest<TRequest> {\n\tif (operation.length === 0) throw new RangeError(\"remoteCall: operation must be non-empty\");\n\tif (requestId.length === 0) throw new RangeError(\"remoteCall: requestId must be non-empty\");\n\treturn { operation, requestId, payload };\n}\n\nfunction remoteCallTimeout(\n\trequestId: string,\n\toperation: string | undefined,\n\terror: string,\n): RemoteCallTimeout {\n\tif (requestId.length === 0)\n\t\tthrow new RangeError(\"remoteCall: timeout requestId must be non-empty\");\n\tif (error.length === 0) throw new RangeError(\"remoteCall: timeout error must be non-empty\");\n\treturn { ...(operation === undefined ? {} : { operation }), requestId, error };\n}\n\ninterface RemotePendingRequest {\n\toperation: string;\n\trequestId: string;\n\tseq: number;\n}\n\ninterface RemotePendingState {\n\trequestIds: Set<string>;\n\tbySeq: Map<number, RemotePendingRequest>;\n}\n\nfunction remotePendingState(): RemotePendingState {\n\treturn { requestIds: new Set(), bySeq: new Map() };\n}\n\nfunction remotePendingContains(state: RemotePendingState, requestId: string): boolean {\n\treturn state.requestIds.has(requestId);\n}\n\nfunction remotePendingDuplicate(state: RemotePendingState, request: RemotePendingRequest): boolean {\n\tconst current = remotePendingTakeBySeqPreview(state, request.seq);\n\treturn current?.requestId !== request.requestId && state.requestIds.has(request.requestId);\n}\n\nfunction remotePendingTakeBySeqPreview(\n\tstate: RemotePendingState,\n\tseq: number,\n): RemotePendingRequest | undefined {\n\treturn state.bySeq.get(seq);\n}\n\nfunction remotePendingInsert(state: RemotePendingState, request: RemotePendingRequest): void {\n\tconst existingBySeq = state.bySeq.get(request.seq);\n\tif (existingBySeq !== undefined) {\n\t\tstate.requestIds.delete(existingBySeq.requestId);\n\t}\n\tfor (const [seq, pending] of state.bySeq) {\n\t\tif (pending.requestId === request.requestId && seq !== request.seq) {\n\t\t\tstate.bySeq.delete(seq);\n\t\t\tbreak;\n\t\t}\n\t}\n\tstate.requestIds.add(request.requestId);\n\tstate.bySeq.set(request.seq, request);\n}\n\nfunction remotePendingTakeByRequestId(\n\tstate: RemotePendingState,\n\trequestId: string,\n): RemotePendingRequest | undefined {\n\tif (!state.requestIds.delete(requestId)) return undefined;\n\tlet seq: number | undefined;\n\tlet found: RemotePendingRequest | undefined;\n\tfor (const [candidateSeq, request] of state.bySeq) {\n\t\tif (request.requestId === requestId) {\n\t\t\tseq = candidateSeq;\n\t\t\tfound = request;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (seq !== undefined) state.bySeq.delete(seq);\n\treturn found;\n}\n\nfunction remotePendingTakeBySeq(\n\tstate: RemotePendingState,\n\tseq: number,\n): RemotePendingRequest | undefined {\n\tconst request = state.bySeq.get(seq);\n\tif (request === undefined) return undefined;\n\tstate.bySeq.delete(seq);\n\tstate.requestIds.delete(request.requestId);\n\treturn request;\n}\n\nfunction remotePendingFromReceipt<T>(\n\tstate: RemotePendingState,\n\tenvelope: WireBridgeEnvelope<RemoteCallRequest<T>>,\n): RemotePendingRequest | undefined {\n\tconst bySeq = remotePendingTakeBySeq(state, envelope.metadata.seq);\n\tif (bySeq !== undefined) return bySeq;\n\tconst fallback = pendingRequestFromEnvelope(envelope);\n\tif (fallback === undefined || remotePendingContains(state, fallback.requestId)) {\n\t\treturn undefined;\n\t}\n\treturn fallback;\n}\n\nfunction pendingRequestFromEnvelope<T>(\n\tenvelope: WireBridgeEnvelope<RemoteCallRequest<T>>,\n): RemotePendingRequest | undefined {\n\tif (envelope.payload?.kind !== \"data\") return undefined;\n\tconst request = validateRemoteCallRequest(envelope.payload.value);\n\tif (request === undefined) return undefined;\n\treturn {\n\t\toperation: request.operation,\n\t\trequestId: request.requestId,\n\t\tseq: envelope.metadata.seq,\n\t};\n}\n\nfunction validateRemoteCallRequest<T>(value: unknown): RemoteCallRequest<T> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (typeof value.operation !== \"string\" || value.operation.length === 0) return undefined;\n\tif (typeof value.requestId !== \"string\" || value.requestId.length === 0) return undefined;\n\tif (!(\"payload\" in value)) return undefined;\n\treturn {\n\t\toperation: value.operation,\n\t\trequestId: value.requestId,\n\t\tpayload: value.payload as T,\n\t};\n}\n\nfunction validateRemoteCallResponse<T>(value: unknown): RemoteCallResponse<T> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (typeof value.operation !== \"string\" || value.operation.length === 0) return undefined;\n\tif (typeof value.requestId !== \"string\" || value.requestId.length === 0) return undefined;\n\tif (value.kind === \"result\" && \"payload\" in value) {\n\t\treturn {\n\t\t\tkind: \"result\",\n\t\t\toperation: value.operation,\n\t\t\trequestId: value.requestId,\n\t\t\tpayload: value.payload as T,\n\t\t};\n\t}\n\tif (value.kind === \"error\" && typeof value.error === \"string\" && value.error.length > 0) {\n\t\treturn {\n\t\t\tkind: \"error\",\n\t\t\toperation: value.operation,\n\t\t\trequestId: value.requestId,\n\t\t\terror: value.error,\n\t\t};\n\t}\n\tif (value.kind === \"status\" && typeof value.status === \"string\" && value.status.length > 0) {\n\t\treturn {\n\t\t\tkind: \"status\",\n\t\t\toperation: value.operation,\n\t\t\trequestId: value.requestId,\n\t\t\tstatus: value.status,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nfunction remoteMalformedResponseRequestId(value: unknown): string | undefined {\n\tif (!isRecord(value)) return undefined;\n\treturn typeof value.requestId === \"string\" && value.requestId.length > 0\n\t\t? value.requestId\n\t\t: undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isThenable(value: unknown): boolean {\n\treturn isRecord(value) && typeof value.then === \"function\";\n}\n\nfunction remoteCallResponseRequestId<T>(response: RemoteCallResponse<T>): string {\n\treturn response.requestId;\n}\n\nfunction remoteCallResponseIsTerminal<T>(response: RemoteCallResponse<T>): boolean {\n\treturn response.kind === \"result\" || response.kind === \"error\";\n}\n\nfunction remoteCallResponsesNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>>,\n\ttimeouts: Node<RemoteCallTimeout>,\n\tname: string,\n): Node<RemoteCallResponse<TResponse>> {\n\treturn graph.node<RemoteCallResponse<TResponse>>(\n\t\t[events, timeouts],\n\t\t(ctx) => {\n\t\t\ttype State = {\n\t\t\t\tpending: RemotePendingState;\n\t\t\t};\n\t\t\tconst state = ctx.state.get<State>() ?? {\n\t\t\t\tpending: remotePendingState(),\n\t\t\t};\n\t\t\tconst ready: RemoteCallResponse<TResponse>[] = [];\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst request = pendingRequestFromEnvelope(event.envelope);\n\t\t\t\t\tif (request === undefined) continue;\n\t\t\t\t\tif (remotePendingDuplicate(state.pending, request)) continue;\n\t\t\t\t\tremotePendingInsert(state.pending, request);\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.payload?.kind === \"data\") {\n\t\t\t\t\tconst response = validateRemoteCallResponse<TResponse>(event.envelope.payload.value);\n\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\tconst requestId = remoteMalformedResponseRequestId(event.envelope.payload.value);\n\t\t\t\t\t\tif (requestId !== undefined && remotePendingContains(state.pending, requestId)) {\n\t\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst requestId = remoteCallResponseRequestId(response);\n\t\t\t\t\tif (remotePendingContains(state.pending, requestId)) {\n\t\t\t\t\t\tif (remoteCallResponseIsTerminal(response)) {\n\t\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tready.push(response);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"nack\") {\n\t\t\t\t\tremotePendingFromReceipt(state.pending, event.outbound);\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tremotePendingTakeBySeq(state.pending, event.seq);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst timeout = raw as RemoteCallTimeout;\n\t\t\t\tremotePendingTakeByRequestId(state.pending, timeout.requestId);\n\t\t\t}\n\t\t\tctx.state.set(state);\n\t\t\tfor (const response of ready) ctx.down([[\"DATA\", response]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/responses`,\n\t\t\tfactory: \"remoteCallResponses\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallResultsNode<TResponse>(\n\tgraph: Graph,\n\tresponses: Node<RemoteCallResponse<TResponse>>,\n\tname: string,\n): Node<RemoteCallResult<TResponse>> {\n\treturn graph.node<RemoteCallResult<TResponse>>(\n\t\t[responses],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst response = raw as RemoteCallResponse<TResponse>;\n\t\t\t\tif (response.kind === \"result\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\t\tpayload: response.payload,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/results`, factory: \"remoteCallResults\", completeWhenDepsComplete: false },\n\t);\n}\n\nfunction remoteCallStatusNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>>,\n\tresponses: Node<RemoteCallResponse<TResponse>>,\n\ttimeouts: Node<RemoteCallTimeout>,\n\tname: string,\n): Node<RemoteCallStatus> {\n\treturn graph.node<RemoteCallStatus>(\n\t\t[events, responses, timeouts],\n\t\t(ctx) => {\n\t\t\ttype State = { status: RemoteCallStatus; pending: RemotePendingState };\n\t\t\tconst state =\n\t\t\t\tctx.state.get<State>() ??\n\t\t\t\t({\n\t\t\t\t\tstatus: { state: \"idle\", pending: 0, completed: 0, errors: 0, timeouts: 0 },\n\t\t\t\t\tpending: remotePendingState(),\n\t\t\t\t} satisfies State);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst request = pendingRequestFromEnvelope(event.envelope);\n\t\t\t\t\tif (request !== undefined) {\n\t\t\t\t\t\tif (remotePendingDuplicate(state.pending, request)) {\n\t\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremotePendingInsert(state.pending, request);\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"requested\",\n\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tevent.kind === \"invalid\" ||\n\t\t\t\t\tevent.kind === \"session-mismatch\" ||\n\t\t\t\t\tevent.kind === \"out-of-order\" ||\n\t\t\t\t\tevent.kind === \"late-receipt\"\n\t\t\t\t) {\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"bridge-errored\",\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"nack\") {\n\t\t\t\t\tconst request = remotePendingFromReceipt(state.pending, event.outbound);\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"bridge-errored\",\n\t\t\t\t\t\t...(request === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { operation: request.operation, requestId: request.requestId }),\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tconst request = remotePendingTakeBySeq(state.pending, event.seq);\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"bridge-errored\",\n\t\t\t\t\t\t...(request === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { operation: request.operation, requestId: request.requestId }),\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.payload?.kind === \"data\") {\n\t\t\t\t\tconst response = validateRemoteCallResponse<TResponse>(event.envelope.payload.value);\n\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\tconst requestId = remoteMalformedResponseRequestId(event.envelope.payload.value);\n\t\t\t\t\t\tif (requestId !== undefined) {\n\t\t\t\t\t\t\tconst request = remotePendingTakeByRequestId(state.pending, requestId);\n\t\t\t\t\t\t\tif (request !== undefined) {\n\t\t\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\t\trequestId,\n\t\t\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst response = raw as RemoteCallResponse<TResponse>;\n\t\t\t\tif (response.kind === \"result\") {\n\t\t\t\t\tremotePendingTakeByRequestId(state.pending, response.requestId);\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"responded\",\n\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\tcompleted: state.status.completed + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (response.kind === \"error\") {\n\t\t\t\t\tremotePendingTakeByRequestId(state.pending, response.requestId);\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 2) ?? []) {\n\t\t\t\tconst timeout = raw as RemoteCallTimeout;\n\t\t\t\tremotePendingTakeByRequestId(state.pending, timeout.requestId);\n\t\t\t\tstate.status = {\n\t\t\t\t\t...state.status,\n\t\t\t\t\tstate: \"timed-out\",\n\t\t\t\t\toperation: timeout.operation,\n\t\t\t\t\trequestId: timeout.requestId,\n\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\ttimeouts: state.status.timeouts + 1,\n\t\t\t\t};\n\t\t\t}\n\t\t\tstate.status = { ...state.status, pending: state.pending.requestIds.size };\n\t\t\tctx.state.set(state);\n\t\t\tctx.down([[\"DATA\", state.status]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"remoteCallStatus\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallErrorsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tresponses: Node<RemoteCallResponse<TResponse>>,\n\ttimeouts: Node<RemoteCallTimeout>,\n\tevents: Node<WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>>,\n\tname: string,\n): Node<RemoteCallError> {\n\treturn graph.node<RemoteCallError>(\n\t\t[responses, timeouts, events],\n\t\t(ctx) => {\n\t\t\tconst pending = ctx.state.get<RemotePendingState>() ?? remotePendingState();\n\t\t\tfor (const raw of depBatch(ctx, 2) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst request = pendingRequestFromEnvelope(event.envelope);\n\t\t\t\t\tif (request !== undefined) {\n\t\t\t\t\t\tif (remotePendingDuplicate(pending, request)) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\t\t\terror: `remoteCall: duplicate in-flight requestId '${request.requestId}'`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremotePendingInsert(pending, request);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst response = raw as RemoteCallResponse<TResponse>;\n\t\t\t\tif (response.kind === \"error\") {\n\t\t\t\t\tremotePendingTakeByRequestId(pending, response.requestId);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\t\terror: response.error,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (response.kind === \"result\") {\n\t\t\t\t\tremotePendingTakeByRequestId(pending, response.requestId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst timeout = raw as RemoteCallTimeout;\n\t\t\t\tremotePendingTakeByRequestId(pending, timeout.requestId);\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{ operation: timeout.operation, requestId: timeout.requestId, error: timeout.error },\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 2) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"inbound\" && event.envelope.payload?.kind === \"data\") {\n\t\t\t\t\tconst response = validateRemoteCallResponse<TResponse>(event.envelope.payload.value);\n\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\tconst requestId = remoteMalformedResponseRequestId(event.envelope.payload.value);\n\t\t\t\t\t\tconst request =\n\t\t\t\t\t\t\trequestId === undefined\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: remotePendingTakeByRequestId(pending, requestId);\n\t\t\t\t\t\tif (request === undefined) continue;\n\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\t\terror: \"remoteCall: response payload is malformed\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (event.kind === \"nack\") {\n\t\t\t\t\tconst request = remotePendingFromReceipt(pending, event.outbound);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: request?.operation,\n\t\t\t\t\t\t\t\trequestId: request?.requestId,\n\t\t\t\t\t\t\t\terror: String(event.error),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tconst request = remotePendingTakeBySeq(pending, event.seq);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: request?.operation,\n\t\t\t\t\t\t\t\trequestId: request?.requestId,\n\t\t\t\t\t\t\t\terror: String(event.error),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", { error: event.error }]]);\n\t\t\t\t} else if (\n\t\t\t\t\tevent.kind === \"session-mismatch\" ||\n\t\t\t\t\tevent.kind === \"out-of-order\" ||\n\t\t\t\t\tevent.kind === \"late-receipt\"\n\t\t\t\t) {\n\t\t\t\t\tctx.down([[\"DATA\", { error: remoteCallBridgeErrorMessage(event) }]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(pending);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/errors`,\n\t\t\tfactory: \"remoteCallErrors\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallBridgeErrorMessage<TRequest, TResponse>(\n\tevent: WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>,\n): string {\n\tif (event.kind === \"session-mismatch\") {\n\t\treturn `remoteCall: inbound session ${event.actual} did not match expected ${event.expected}`;\n\t}\n\tif (event.kind === \"out-of-order\") {\n\t\treturn `remoteCall: inbound seq ${event.seq} arrived before expected seq ${event.expected}`;\n\t}\n\tif (event.kind === \"late-receipt\") {\n\t\treturn `remoteCall: late ${event.receipt} for unknown or completed ackForSeq ${event.ackForSeq}`;\n\t}\n\treturn \"remoteCall: bridge error\";\n}\n\nfunction normalizeRemoteHandlers<TRequest, TResponse>(\n\thandlers: readonly RemoteResponderHandlerDefinition<TRequest, TResponse>[],\n): Map<string, RemoteResponderHandler<TRequest, TResponse>> {\n\tconst out = new Map<string, RemoteResponderHandler<TRequest, TResponse>>();\n\tfor (const handler of handlers) {\n\t\tif (handler.operation.length === 0) {\n\t\t\tthrow new RangeError(\"remoteResponder: operation must be non-empty\");\n\t\t}\n\t\tif (out.has(handler.operation)) {\n\t\t\tthrow new RangeError(`remoteResponder: duplicate operation '${handler.operation}'`);\n\t\t}\n\t\tout.set(handler.operation, handler.handle);\n\t}\n\treturn out;\n}\n\ninterface RemoteResponderCursor {\n\tcursor: number;\n\tremoteCursor: number;\n}\n\ntype RemoteResponderInbound<T> =\n\t| { readonly kind: \"request\"; readonly request: RemoteCallRequest<T>; readonly seq: number }\n\t| { readonly kind: \"consumed\" }\n\t| { readonly kind: \"invalid\"; readonly error: string };\n\nfunction reduceRemoteResponderInbound<T>(\n\tcursor: RemoteResponderCursor,\n\tenvelope: WireBridgeEnvelope<RemoteCallRequest<T>>,\n\texpectedSessionId: string,\n): RemoteResponderInbound<T> {\n\tconst envelopeError = validateInboundEnvelope(envelope);\n\tif (envelopeError !== undefined) {\n\t\treturn { kind: \"invalid\", error: envelopeError };\n\t}\n\tif (envelope.sessionId !== expectedSessionId) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `remoteResponder: inbound session ${envelope.sessionId} did not match expected ${expectedSessionId}`,\n\t\t};\n\t}\n\tconst seq = envelope.metadata.seq;\n\tconst expected = cursor.cursor + 1;\n\tif (seq <= cursor.cursor) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `remoteResponder: duplicate request seq ${seq} at cursor ${cursor.cursor}`,\n\t\t};\n\t}\n\tif (seq > expected) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `remoteResponder: out-of-order request seq ${seq}, expected ${expected}`,\n\t\t};\n\t}\n\tif (envelope.metadata.cursor < cursor.remoteCursor) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `${envelope.sessionId}: remoteResponder inbound cursor ${envelope.metadata.cursor} regressed below ${cursor.remoteCursor}`,\n\t\t};\n\t}\n\tcursor.cursor = seq;\n\tcursor.remoteCursor = envelope.metadata.cursor;\n\tif (envelope.type !== \"data\") return { kind: \"consumed\" };\n\tif (envelope.payload?.kind !== \"data\") {\n\t\treturn { kind: \"invalid\", error: \"remoteResponder: request envelope must carry request DATA\" };\n\t}\n\tconst request = validateRemoteCallRequest<T>(envelope.payload.value);\n\tif (request === undefined) {\n\t\treturn { kind: \"invalid\", error: \"remoteResponder: request payload is malformed\" };\n\t}\n\treturn { kind: \"request\", request, seq };\n}\n\nfunction remoteResponderEventsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tinbound: Node<WireBridgeEnvelope<RemoteCallRequest<TRequest>> | WireBridgeInvalidIngress>,\n\tname: string,\n\texpectedSessionId: string,\n\thandlers: Map<string, RemoteResponderHandler<TRequest, TResponse>>,\n\trejectUnknown: boolean,\n): Node<RemoteResponderEvent<TRequest, TResponse>> {\n\treturn graph.node<RemoteResponderEvent<TRequest, TResponse>>(\n\t\t[inbound],\n\t\t(ctx) => {\n\t\t\tconst cursor = ctx.state.get<RemoteResponderCursor>() ?? { cursor: 0, remoteCursor: 0 };\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst envelope = raw as WireBridgeEnvelope<RemoteCallRequest<TRequest>>;\n\t\t\t\tconst received = reduceRemoteResponderInbound(cursor, envelope, expectedSessionId);\n\t\t\t\tif (received.kind === \"consumed\") continue;\n\t\t\t\tif (received.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: received.error }]]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst { request, seq } = received;\n\t\t\t\tctx.down([[\"DATA\", { kind: \"request\", request, seq }]]);\n\t\t\t\tconst handler = handlers.get(request.operation);\n\t\t\t\tif (handler === undefined) {\n\t\t\t\t\tif (!rejectUnknown) continue;\n\t\t\t\t\tconst error = `remoteResponder: unknown operation '${request.operation}'`;\n\t\t\t\t\tconst response = remoteCallErrorResponse(request, error);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tcommand: { kind: \"send\", payload: response, requestId: request.requestId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst payload = handler(request);\n\t\t\t\t\tif (isThenable(payload)) {\n\t\t\t\t\t\tthrow new Error(\"remoteResponder: async handler results require a later adapter shape\");\n\t\t\t\t\t}\n\t\t\t\t\tconst response = {\n\t\t\t\t\t\tkind: \"result\",\n\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t} satisfies RemoteCallResponse<TResponse>;\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"response\",\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\tcommand: { kind: \"send\", payload: response, requestId: request.requestId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\trethrowGraphRuntimeInvariant(error);\n\t\t\t\t\tconst message = errorMessage(error);\n\t\t\t\t\tconst response = remoteCallErrorResponse(request, message);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t\t\tcommand: { kind: \"send\", payload: response, requestId: request.requestId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(cursor);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/events`,\n\t\t\tfactory: \"remoteResponderEvents\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallErrorResponse<TRequest, TResponse>(\n\trequest: RemoteCallRequest<TRequest>,\n\terror: string,\n): RemoteCallResponse<TResponse> {\n\treturn {\n\t\tkind: \"error\",\n\t\toperation: request.operation,\n\t\trequestId: request.requestId,\n\t\terror,\n\t};\n}\n\nfunction remoteResponderResponseCommandsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<WireBridgeCommand<RemoteCallResponse<TResponse>>> {\n\treturn graph.node<WireBridgeCommand<RemoteCallResponse<TResponse>>>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (\n\t\t\t\t\t(event.kind === \"response\" || event.kind === \"rejected\") &&\n\t\t\t\t\tevent.command !== undefined\n\t\t\t\t) {\n\t\t\t\t\tctx.down([[\"DATA\", event.command]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/responseCommands`,\n\t\t\tfactory: \"remoteResponderResponseCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteResponderRequestsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<RemoteCallRequest<TRequest>> {\n\treturn graph.node<RemoteCallRequest<TRequest>>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (event.kind === \"request\") ctx.down([[\"DATA\", event.request]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/requests`,\n\t\t\tfactory: \"remoteResponderRequests\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t},\n\t);\n}\n\nfunction remoteResponderStatusNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<RemoteResponderStatus> {\n\treturn graph.node<RemoteResponderStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet status =\n\t\t\t\tctx.state.get<RemoteResponderStatus>() ??\n\t\t\t\t({ state: \"idle\", handled: 0, rejected: 0, errors: 0 } satisfies RemoteResponderStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (event.kind === \"response\") {\n\t\t\t\t\tstatus = {\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tstate: \"responded\",\n\t\t\t\t\t\toperation: event.operation,\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\thandled: status.handled + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"rejected\") {\n\t\t\t\t\tstatus = {\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tstate: \"rejected\",\n\t\t\t\t\t\toperation: event.operation,\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\trejected: status.rejected + 1,\n\t\t\t\t\t\terrors: status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tstatus = { ...status, state: \"errored\", errors: status.errors + 1 };\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(status);\n\t\t\tctx.down([[\"DATA\", status]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"remoteResponderStatus\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteResponderErrorsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<RemoteCallError> {\n\treturn graph.node<RemoteCallError>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (event.kind === \"rejected\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{ operation: event.operation, requestId: event.requestId, error: event.error },\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", { error: event.error }]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"remoteResponderErrors\", completeWhenDepsComplete: false },\n\t);\n}\n\nfunction armAckTimeout<TPayload>(\n\tctx: Ctx,\n\tstate: BridgeState<TPayload>,\n\tenvelope: WireBridgeEnvelope<TPayload>,\n\topts: WireBridgeOptions,\n\tpolicy: RetryPolicy,\n\tnow: () => number,\n): void {\n\tconst timeoutMs = opts.ackTimeoutMs ?? defaultAckTimeoutMs;\n\tif (!Number.isFinite(timeoutMs) || timeoutMs < 0) {\n\t\tthrow new RangeError(\"wireBridge: ackTimeoutMs must be a non-negative finite number\");\n\t}\n\tconst pending: PendingEnvelope<TPayload> = { envelope };\n\tconst schedule = (current: WireBridgeEnvelope<TPayload>) => {\n\t\tpending.timer = setTimeout(() => {\n\t\t\tpending.timer = undefined;\n\t\t\tif (!state.active || !state.pending.has(current.metadata.seq)) return;\n\t\t\tctx.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"timeout\",\n\t\t\t\t\t\tseq: current.metadata.seq,\n\t\t\t\t\t\tattempt: current.metadata.attempt,\n\t\t\t\t\t} satisfies WireBridgeEvent<TPayload, unknown>,\n\t\t\t\t],\n\t\t\t]);\n\t\t\tif (!shouldRetry(policy, current.metadata.attempt)) {\n\t\t\t\tconst error = `${opts.sessionId}: ack timeout for seq ${current.metadata.seq}`;\n\t\t\t\tstate.pending.delete(current.metadata.seq);\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: \"exhausted\",\n\t\t\t\t\t\t\tseq: current.metadata.seq,\n\t\t\t\t\t\t\tattempt: current.metadata.attempt,\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t} satisfies WireBridgeEvent<TPayload, unknown>,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst attempt = current.metadata.attempt + 1;\n\t\t\tconst delayMs = nextRetryDelayMs(policy, attempt) ?? 0;\n\t\t\tctx.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"retry\",\n\t\t\t\t\t\tseq: current.metadata.seq,\n\t\t\t\t\t\tattempt,\n\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\terror: `${opts.sessionId}: ack timeout for seq ${current.metadata.seq}`,\n\t\t\t\t\t} satisfies WireBridgeEvent<TPayload, unknown>,\n\t\t\t\t],\n\t\t\t]);\n\t\t\tconst retry = wireBridgeEnvelope<TPayload>({\n\t\t\t\tsessionId: current.sessionId,\n\t\t\t\ttype: current.type,\n\t\t\t\tseq: current.metadata.seq,\n\t\t\t\tcursor: state.cursor,\n\t\t\t\tpayload: current.payload,\n\t\t\t\tidempotencyKey: current.metadata.idempotencyKey,\n\t\t\t\tattempt,\n\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\ttimestampMs: now(),\n\t\t\t\trequestId: current.metadata.requestId,\n\t\t\t});\n\t\t\tpending.timer = setTimeout(() => {\n\t\t\t\tpending.timer = undefined;\n\t\t\t\tif (!state.active || !state.pending.has(current.metadata.seq)) return;\n\t\t\t\tpending.envelope = retry;\n\t\t\t\tctx.down([[\"DATA\", { kind: \"outbound\", envelope: retry }]]);\n\t\t\t\tschedule(retry);\n\t\t\t}, delayMs);\n\t\t}, timeoutMs);\n\t};\n\tstate.pending.set(envelope.metadata.seq, pending);\n\tschedule(envelope);\n}\n\nfunction processInbound<TOutbound, TInbound>(\n\tctx: Ctx,\n\tstate: BridgeState<TOutbound>,\n\tinput: unknown,\n\tsessionId: string,\n): void {\n\tif (isInvalidIngress(input)) {\n\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: input.error }]]);\n\t\treturn;\n\t}\n\tconst invalid = validateInboundEnvelope(input);\n\tif (invalid !== undefined) {\n\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: invalid }]]);\n\t\treturn;\n\t}\n\tconst envelope = input as WireBridgeEnvelope<TInbound>;\n\tif (envelope.sessionId !== sessionId) {\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"session-mismatch\",\n\t\t\t\t\texpected: sessionId,\n\t\t\t\t\tactual: envelope.sessionId,\n\t\t\t\t} satisfies WireBridgeEvent<TOutbound, TInbound>,\n\t\t\t],\n\t\t]);\n\t\treturn;\n\t}\n\tconst seq = envelope.metadata.seq;\n\tconst expected = state.cursor + 1;\n\tif (seq <= state.cursor) {\n\t\tctx.down([[\"DATA\", { kind: \"duplicate\", seq, cursor: state.cursor }]]);\n\t\treturn;\n\t}\n\tif (seq > expected) {\n\t\tctx.down([[\"DATA\", { kind: \"out-of-order\", seq, expected }]]);\n\t\treturn;\n\t}\n\tif (envelope.metadata.cursor < state.remoteCursor) {\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"invalid\",\n\t\t\t\t\terror: `${sessionId}: inbound cursor ${envelope.metadata.cursor} regressed below ${state.remoteCursor}`,\n\t\t\t\t},\n\t\t\t],\n\t\t]);\n\t\treturn;\n\t}\n\tstate.remoteCursor = envelope.metadata.cursor;\n\tstate.cursor = seq;\n\tctx.down([[\"DATA\", { kind: \"cursor\", cursor: state.cursor }]]);\n\tctx.down([[\"DATA\", { kind: \"inbound\", envelope }]]);\n\tif (envelope.type === \"ack\" && envelope.metadata.ackForSeq !== undefined) {\n\t\tconst pending = state.pending.get(envelope.metadata.ackForSeq);\n\t\tif (pending === undefined) {\n\t\t\tctx.down([\n\t\t\t\t[\"DATA\", { kind: \"late-receipt\", receipt: \"ack\", ackForSeq: envelope.metadata.ackForSeq }],\n\t\t\t]);\n\t\t\treturn;\n\t\t}\n\t\tif (pending?.timer !== undefined) clearTimeout(pending.timer);\n\t\tstate.pending.delete(envelope.metadata.ackForSeq);\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"ack\",\n\t\t\t\t\tackForSeq: envelope.metadata.ackForSeq,\n\t\t\t\t\tenvelope,\n\t\t\t\t\toutbound: pending.envelope,\n\t\t\t\t} satisfies WireBridgeEvent<TOutbound, TInbound>,\n\t\t\t],\n\t\t]);\n\t} else if (envelope.type === \"nack\" && envelope.metadata.ackForSeq !== undefined) {\n\t\tconst pending = state.pending.get(envelope.metadata.ackForSeq);\n\t\tif (pending === undefined) {\n\t\t\tctx.down([\n\t\t\t\t[\"DATA\", { kind: \"late-receipt\", receipt: \"nack\", ackForSeq: envelope.metadata.ackForSeq }],\n\t\t\t]);\n\t\t\treturn;\n\t\t}\n\t\tif (pending?.timer !== undefined) clearTimeout(pending.timer);\n\t\tstate.pending.delete(envelope.metadata.ackForSeq);\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"nack\",\n\t\t\t\t\tackForSeq: envelope.metadata.ackForSeq,\n\t\t\t\t\tenvelope,\n\t\t\t\t\toutbound: pending.envelope,\n\t\t\t\t\terror: bridgePayloadError(envelope.payload, \"remote nack\"),\n\t\t\t\t} satisfies WireBridgeEvent<TOutbound, TInbound>,\n\t\t\t],\n\t\t]);\n\t}\n}\n\nfunction validateInboundEnvelope(envelope: unknown): string | undefined {\n\tif (typeof envelope !== \"object\" || envelope === null) {\n\t\treturn \"wireBridge: inbound envelope must be an object\";\n\t}\n\tconst candidate = envelope as Partial<WireBridgeEnvelope<unknown>>;\n\tif (typeof candidate.sessionId !== \"string\" || candidate.sessionId.length === 0) {\n\t\treturn \"wireBridge: inbound envelope sessionId must be a non-empty string\";\n\t}\n\tif (\n\t\ttypeof candidate.type !== \"string\" ||\n\t\t!envelopeTypes.has(candidate.type as WireBridgeEnvelopeType)\n\t) {\n\t\treturn \"wireBridge: inbound envelope type is not recognized\";\n\t}\n\tconst metadata = candidate.metadata as Partial<WireBridgeMetadata> | undefined;\n\tif (typeof metadata !== \"object\" || metadata === null) {\n\t\treturn \"wireBridge: inbound envelope metadata must be an object\";\n\t}\n\tif (!isSafePositiveInteger(metadata.seq)) {\n\t\treturn \"wireBridge: inbound envelope seq must be a positive integer\";\n\t}\n\tif (!isSafeNonNegativeInteger(metadata.cursor)) {\n\t\treturn \"wireBridge: inbound envelope cursor must be a non-negative integer\";\n\t}\n\tif (\n\t\ttypeof metadata.idempotencyKey !== \"string\" ||\n\t\t(metadata.idempotencyKey as string).length === 0\n\t) {\n\t\treturn \"wireBridge: inbound envelope idempotencyKey must be a non-empty string\";\n\t}\n\tif (!isSafePositiveInteger(metadata.attempt)) {\n\t\treturn \"wireBridge: inbound envelope attempt must be a positive integer\";\n\t}\n\tif (\n\t\t!isSafePositiveInteger(metadata.maxAttempts) ||\n\t\t(metadata.maxAttempts as number) < (metadata.attempt as number)\n\t) {\n\t\treturn \"wireBridge: inbound envelope maxAttempts must be >= attempt\";\n\t}\n\tif (metadata.ackForSeq !== undefined && !isSafePositiveInteger(metadata.ackForSeq)) {\n\t\treturn \"wireBridge: inbound envelope ackForSeq must be a positive integer\";\n\t}\n\tif ((candidate.type === \"ack\" || candidate.type === \"nack\") && metadata.ackForSeq === undefined) {\n\t\treturn `wireBridge: inbound ${candidate.type} envelope requires ackForSeq`;\n\t}\n\tconst payloadError = validatePayloadForType(\n\t\tcandidate.type as WireBridgeEnvelopeType,\n\t\tcandidate.payload,\n\t\t\"wireBridge: inbound envelope\",\n\t);\n\tif (payloadError !== undefined) return payloadError;\n\treturn undefined;\n}\n\nfunction validateCommand(value: unknown): string | undefined {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn \"wireBridge: command fact must be an object\";\n\t}\n\tconst kind = (value as { readonly kind?: unknown }).kind;\n\tif (\n\t\tkind !== \"start\" &&\n\t\tkind !== \"send\" &&\n\t\tkind !== \"ack\" &&\n\t\tkind !== \"nack\" &&\n\t\tkind !== \"close\"\n\t) {\n\t\treturn \"wireBridge: command kind is not recognized\";\n\t}\n\tif (\n\t\t(kind === \"ack\" || kind === \"nack\") &&\n\t\t!isSafePositiveInteger((value as { readonly ackForSeq?: unknown }).ackForSeq)\n\t) {\n\t\treturn `wireBridge: ${kind} command ackForSeq must be a positive integer`;\n\t}\n\treturn undefined;\n}\n\nfunction projectOutbound<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeEnvelope<TOutbound>> {\n\treturn graph.node<WireBridgeEnvelope<TOutbound>>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"outbound\") ctx.down([[\"DATA\", event.envelope]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/outbound`, factory: \"wireBridgeOutbound\" },\n\t);\n}\n\nfunction projectAcks<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeAck> {\n\treturn graph.node<WireBridgeAck>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"ack\") {\n\t\t\t\t\tctx.down([[\"DATA\", { ackForSeq: event.ackForSeq, envelope: event.envelope }]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/acks`, factory: \"wireBridgeAcks\" },\n\t);\n}\n\nfunction projectNacks<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeNack> {\n\treturn graph.node<WireBridgeNack>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"nack\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\"DATA\", { ackForSeq: event.ackForSeq, envelope: event.envelope, error: event.error }],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/nacks`, factory: \"wireBridgeNacks\" },\n\t);\n}\n\nfunction projectStatus<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n\tsessionId: string,\n): Node<WireBridgeStatus> {\n\treturn graph.node<WireBridgeStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet next =\n\t\t\t\tctx.state.get<WireBridgeStatus>() ??\n\t\t\t\t({\n\t\t\t\t\tsessionId,\n\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\tcursor: 0,\n\t\t\t\t\tnextSeq: 1,\n\t\t\t\t\tpending: 0,\n\t\t\t\t\tattempts: 0,\n\t\t\t\t\tacked: 0,\n\t\t\t\t\tnacked: 0,\n\t\t\t\t\terrors: 0,\n\t\t\t\t} satisfies WireBridgeStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst { seq, attempt } = event.envelope.metadata;\n\t\t\t\t\tconst trackAck = shouldTrackAck(event.envelope.type);\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate:\n\t\t\t\t\t\t\tevent.envelope.type === \"start\"\n\t\t\t\t\t\t\t\t? \"started\"\n\t\t\t\t\t\t\t\t: event.envelope.type === \"close\"\n\t\t\t\t\t\t\t\t\t? \"closed\"\n\t\t\t\t\t\t\t\t\t: \"open\",\n\t\t\t\t\t\tnextSeq: Math.max(next.nextSeq, seq + 1),\n\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\tevent.envelope.type === \"close\"\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: trackAck && attempt === 1\n\t\t\t\t\t\t\t\t\t? next.pending + 1\n\t\t\t\t\t\t\t\t\t: next.pending,\n\t\t\t\t\t\tattempts: trackAck ? next.attempts + 1 : next.attempts,\n\t\t\t\t\t\tlastSeq: seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"ack\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: event.outbound.type === \"close\" ? \"closed\" : \"open\",\n\t\t\t\t\t\tpending: Math.max(0, next.pending - 1),\n\t\t\t\t\t\tacked: next.acked + 1,\n\t\t\t\t\t\tlastSeq: event.envelope.metadata.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"nack\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\tpending: Math.max(0, next.pending - 1),\n\t\t\t\t\t\tnacked: next.nacked + 1,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastSeq: event.envelope.metadata.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"retry\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"waiting\",\n\t\t\t\t\t\tlastSeq: event.seq,\n\t\t\t\t\t\tlastDelayMs: event.delayMs,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"exhausted\",\n\t\t\t\t\t\tpending: Math.max(0, next.pending - 1),\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastSeq: event.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"cursor\") {\n\t\t\t\t\tnext = { ...next, cursor: event.cursor };\n\t\t\t\t} else if (event.kind === \"out-of-order\") {\n\t\t\t\t\tnext = { ...next, state: \"errored\", errors: next.errors + 1, lastSeq: event.seq };\n\t\t\t\t} else if (event.kind === \"session-mismatch\") {\n\t\t\t\t\tnext = { ...next, state: \"errored\", errors: next.errors + 1 };\n\t\t\t\t} else if (event.kind === \"late-receipt\" || event.kind === \"invalid\") {\n\t\t\t\t\tnext = { ...next, state: \"errored\", errors: next.errors + 1 };\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.type === \"error\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastSeq: event.envelope.metadata.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.type === \"close\") {\n\t\t\t\t\tnext = { ...next, state: \"closed\", lastSeq: event.envelope.metadata.seq };\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"wireBridgeStatus\" },\n\t);\n}\n\nfunction projectErrors<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<unknown> {\n\treturn graph.node<unknown>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"nack\") ctx.down([[\"DATA\", event.error]]);\n\t\t\t\telse if (event.kind === \"exhausted\") ctx.down([[\"DATA\", event.error]]);\n\t\t\t\telse if (event.kind === \"out-of-order\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t`${name}: inbound seq ${event.seq} arrived before expected seq ${event.expected}`,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.type === \"error\") {\n\t\t\t\t\tctx.down([[\"DATA\", bridgePayloadError(event.envelope.payload, \"remote error envelope\")]]);\n\t\t\t\t} else if (event.kind === \"session-mismatch\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t`${name}: inbound session ${event.actual} did not match expected ${event.expected}`,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"late-receipt\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t`${name}: late ${event.receipt} for unknown or completed ackForSeq ${event.ackForSeq}`,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", event.error]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"wireBridgeErrors\" },\n\t);\n}\n\nfunction projectCursor<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<number> {\n\treturn graph.node<number>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"cursor\") ctx.down([[\"DATA\", event.cursor]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/cursor`, factory: \"wireBridgeCursor\" },\n\t);\n}\n\nfunction projectAttempts<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeAttempt> {\n\treturn graph.node<WireBridgeAttempt>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"outbound\" && shouldTrackAck(event.envelope.type)) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tseq: event.envelope.metadata.seq,\n\t\t\t\t\t\t\t\tattempt: event.envelope.metadata.attempt,\n\t\t\t\t\t\t\t\tmaxAttempts: event.envelope.metadata.maxAttempts,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/attempts`, factory: \"wireBridgeAttempts\" },\n\t);\n}\n\nfunction guardedInboundNode<TInbound>(\n\tnode: Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>,\n\tsessionId: string,\n): Node<WireBridgeEnvelope<TInbound>> {\n\treturn new Proxy(node, {\n\t\tget(target, property) {\n\t\t\tif (property === \"down\") {\n\t\t\t\treturn (msgs: Wave) => target.down(guardInboundWave(msgs, sessionId));\n\t\t\t}\n\t\t\tconst value = Reflect.get(target, property, target);\n\t\t\treturn typeof value === \"function\" ? value.bind(target) : value;\n\t\t},\n\t}) as Node<WireBridgeEnvelope<TInbound>>;\n}\n\nfunction guardInboundWave(msgs: Wave, sessionId: string): Wave {\n\treturn msgs.map((msg) => {\n\t\tif (msg[0] === \"DATA\") return msg;\n\t\tif (msg[0] === \"ERROR\") {\n\t\t\treturn [\n\t\t\t\t\"DATA\",\n\t\t\t\tinvalidIngress(\n\t\t\t\t\t`${sessionId}: inbound protocol ERROR ${String(\n\t\t\t\t\t\terrorPayload(msg[1]),\n\t\t\t\t\t)} is local misuse; remote errors must arrive as DATA envelope facts`,\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\t\tif (msg[0] === \"COMPLETE\") {\n\t\t\treturn [\n\t\t\t\t\"DATA\",\n\t\t\t\tinvalidIngress(\n\t\t\t\t\t`${sessionId}: inbound protocol COMPLETE is local misuse; remote completion must arrive as a DATA envelope fact`,\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\t\treturn [\n\t\t\t\"DATA\",\n\t\t\tinvalidIngress(\n\t\t\t\t`${sessionId}: inbound port accepts DATA envelope facts only; ${msg[0]} is local protocol traffic`,\n\t\t\t),\n\t\t];\n\t});\n}\n\nfunction invalidIngress(error: string): WireBridgeInvalidIngress {\n\treturn { __wireBridgeInvalidIngress: true, error };\n}\n\nfunction isInvalidIngress(value: unknown): value is WireBridgeInvalidIngress {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(value as WireBridgeInvalidIngress).__wireBridgeInvalidIngress === true &&\n\t\ttypeof (value as WireBridgeInvalidIngress).error === \"string\"\n\t);\n}\n\nfunction shouldTrackAck(type: WireBridgeEnvelopeType): boolean {\n\treturn type === \"start\" || type === \"data\" || type === \"close\";\n}\n\nfunction isSafePositiveInteger(value: unknown): value is number {\n\treturn Number.isSafeInteger(value) && (value as number) > 0;\n}\n\nfunction isSafeNonNegativeInteger(value: unknown): value is number {\n\treturn Number.isSafeInteger(value) && (value as number) >= 0;\n}\n\nfunction validatePayloadForType(\n\ttype: WireBridgeEnvelopeType,\n\tpayload: unknown,\n\tprefix: string,\n): string | undefined {\n\tconst kind =\n\t\ttypeof payload === \"object\" && payload !== null\n\t\t\t? (payload as { readonly kind?: unknown }).kind\n\t\t\t: undefined;\n\tswitch (type) {\n\t\tcase \"data\":\n\t\t\treturn kind === \"data\" && (payload as { readonly value?: unknown }).value !== undefined\n\t\t\t\t? undefined\n\t\t\t\t: `${prefix}: data envelope requires data payload`;\n\t\tcase \"nack\":\n\t\tcase \"error\":\n\t\t\treturn kind === \"error\" && (payload as { readonly error?: unknown }).error !== undefined\n\t\t\t\t? undefined\n\t\t\t\t: `${prefix}: ${type} envelope requires error payload`;\n\t\tcase \"status\":\n\t\t\treturn kind === \"status\" && (payload as { readonly status?: unknown }).status !== undefined\n\t\t\t\t? undefined\n\t\t\t\t: `${prefix}: status envelope requires status payload`;\n\t\tcase \"close\":\n\t\t\treturn kind === \"close\" ? undefined : `${prefix}: close envelope requires close payload`;\n\t\tcase \"start\":\n\t\tcase \"ack\":\n\t\t\treturn payload === undefined\n\t\t\t\t? undefined\n\t\t\t\t: `${prefix}: ${type} envelope must not carry a payload`;\n\t}\n}\n\nfunction bridgePayloadError(payload: unknown, fallback: unknown): unknown {\n\tif (\n\t\ttypeof payload === \"object\" &&\n\t\tpayload !== null &&\n\t\t(payload as { readonly kind?: unknown }).kind === \"error\"\n\t) {\n\t\treturn (payload as { readonly error?: unknown }).error;\n\t}\n\treturn fallback;\n}\n\nfunction rethrowGraphRuntimeInvariant(error: unknown): void {\n\tconst message = errorMessage(error);\n\tif (\n\t\tmessage.includes(\"R-reentrancy\") ||\n\t\tmessage.includes(\"R-rewire\") ||\n\t\tmessage.includes(\"R-graph-domain\") ||\n\t\tmessage.includes(\"D37\") ||\n\t\tmessage.includes(\"D22\") ||\n\t\tmessage.includes(\"different graph\") ||\n\t\tmessage.includes(\"cross-graph\") ||\n\t\tmessage.includes(\"wire bridge\") ||\n\t\tmessage.includes(\"mid-fn topology mutation\") ||\n\t\tmessage.includes(\"reentrant dep mutation\") ||\n\t\tmessage.includes(\"feedback cycle\")\n\t) {\n\t\tthrow error;\n\t}\n}\n\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n","/**\n * Graph-visible outbound environment adapters (D130/D132).\n *\n * Async transport work is confined to graph-local EnvironmentDrivers. Each\n * helper returns declared nodes for events/status/attempts/errors instead of a\n * hidden sink side channel.\n */\n\nimport { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type {\n\tDriverCancel,\n\tHttpRequest,\n\tHttpResponse,\n\tProcessCommand,\n\tProcessResult,\n\tWebSocketRequest,\n\tWebSocketSend,\n\tWebSocketSendResult,\n\tWebSocketSessionHandle,\n} from \"../graph/environment.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport {\n\tnextRetryDelayMs,\n\ttype RetryPolicy,\n\tretryPolicy,\n\tshouldRetry,\n} from \"../graph/resilience.js\";\nimport type { Node } from \"../node/node.js\";\nimport { errorPayload } from \"../protocol/messages.js\";\n\nexport type OutboundEvent<TValue, TResult> =\n\t| { readonly kind: \"attempt\"; readonly value: TValue; readonly attempt: number }\n\t| {\n\t\t\treadonly kind: \"retry\";\n\t\t\treadonly value: TValue;\n\t\t\treadonly attempt: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| {\n\t\t\treadonly kind: \"sent\";\n\t\t\treadonly value: TValue;\n\t\t\treadonly attempt: number;\n\t\t\treadonly result: TResult;\n\t }\n\t| {\n\t\t\treadonly kind: \"failed\";\n\t\t\treadonly value: TValue;\n\t\t\treadonly attempt: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| {\n\t\t\treadonly kind: \"exhausted\";\n\t\t\treadonly value: TValue;\n\t\t\treadonly attempt: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| { readonly kind: \"upstream-complete\" }\n\t| { readonly kind: \"upstream-error\"; readonly error: unknown };\n\nexport interface OutboundStatus {\n\treadonly state:\n\t\t| \"idle\"\n\t\t| \"running\"\n\t\t| \"waiting\"\n\t\t| \"succeeded\"\n\t\t| \"failed\"\n\t\t| \"exhausted\"\n\t\t| \"completed\";\n\treadonly inFlight: number;\n\treadonly attempt: number;\n\treadonly sent: number;\n\treadonly failed: number;\n\treadonly lastDelayMs?: number;\n}\n\nexport interface OutboundBundle<TValue, TResult> {\n\treadonly events: Node<OutboundEvent<TValue, TResult>>;\n\treadonly status: Node<OutboundStatus>;\n\treadonly attempts: Node<number>;\n\treadonly errors: Node<unknown>;\n}\n\nexport interface OutboundAdapterOptions {\n\treadonly name?: string;\n\treadonly retry?: RetryPolicy;\n}\n\nexport type HttpRequestOf<T> = (value: T) => HttpRequest;\nexport type ProcessCommandOf<T> = (value: T) => ProcessCommand;\nexport type WebSocketSendOf<T> = (value: T) => WebSocketSend;\n\n/** D133 command facts for a graph-visible WebSocket SessionBundle. */\nexport type WebSocketSessionCommand =\n\t| { readonly kind: \"start\" }\n\t| { readonly kind: \"send\"; readonly message: WebSocketSend }\n\t| { readonly kind: \"close\"; readonly code?: number; readonly reason?: string };\n\n/** Inbound facts emitted by the live WebSocket session connection. */\nexport type WebSocketSessionInbound =\n\t| { readonly kind: \"text\"; readonly data: string }\n\t| { readonly kind: \"binary\"; readonly data: Uint8Array };\n\n/** Observable lifecycle facts for bounded D133 reconnect/session progress. */\nexport type WebSocketSessionLifecycle =\n\t| { readonly kind: \"starting\"; readonly attempt: number; readonly maxAttempts: number }\n\t| { readonly kind: \"open\"; readonly attempt: number }\n\t| { readonly kind: \"sent\"; readonly message: WebSocketSend }\n\t| { readonly kind: \"closing\"; readonly code?: number; readonly reason?: string }\n\t| { readonly kind: \"closed\"; readonly code?: number; readonly reason?: string }\n\t| {\n\t\t\treadonly kind: \"retrying\";\n\t\t\treadonly attempt: number;\n\t\t\treadonly nextAttempt: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| { readonly kind: \"exhausted\"; readonly attempt: number; readonly error: unknown };\n\n/** D175 graph-visible outbound disposition for a WebSocket SessionBundle send. */\nexport type WebSocketSessionOutbound =\n\t| { readonly kind: \"queued\"; readonly seq: number; readonly message: WebSocketSend }\n\t| { readonly kind: \"sending\"; readonly seq: number; readonly message: WebSocketSend }\n\t| { readonly kind: \"sent\"; readonly seq: number; readonly message: WebSocketSend }\n\t| {\n\t\t\treadonly kind: \"rejected\";\n\t\t\treadonly seq: number;\n\t\t\treadonly message: WebSocketSend;\n\t\t\treadonly error: unknown;\n\t }\n\t| {\n\t\t\treadonly kind: \"canceled\";\n\t\t\treadonly seq: number;\n\t\t\treadonly message: WebSocketSend;\n\t\t\treadonly reason: unknown;\n\t };\n\n/** Current graph-visible WebSocket session status projection. */\nexport interface WebSocketSessionStatus {\n\treadonly state:\n\t\t| \"idle\"\n\t\t| \"connecting\"\n\t\t| \"open\"\n\t\t| \"closing\"\n\t\t| \"closed\"\n\t\t| \"waiting\"\n\t\t| \"exhausted\"\n\t\t| \"errored\";\n\treadonly attempt: number;\n\treadonly maxAttempts: number;\n\treadonly sent: number;\n\treadonly received: number;\n\treadonly errors: number;\n\treadonly lastDelayMs?: number;\n}\n\n/** D133 SessionBundle: all session commands, inbound data, attempts, status, and errors are nodes. */\nexport interface WebSocketSessionBundle {\n\treadonly command: Node<WebSocketSessionCommand>;\n\treadonly inbound: Node<WebSocketSessionInbound>;\n\treadonly lifecycle: Node<WebSocketSessionLifecycle>;\n\treadonly outbound: Node<WebSocketSessionOutbound>;\n\treadonly status: Node<WebSocketSessionStatus>;\n\treadonly errors: Node<unknown>;\n\treadonly attempts: Node<number>;\n\tstart(): void;\n\tsend(message: WebSocketSend | string | Uint8Array): void;\n\tclose(code?: number, reason?: string): void;\n}\n\nexport type WebSocketSessionSendPolicy =\n\t| { readonly kind?: \"reject\" }\n\t| { readonly kind: \"buffer\"; readonly maxPending: number };\n\n/** Options for the D133 WebSocket SessionBundle; retry is bounded unless configured otherwise. */\nexport interface WebSocketSessionOptions {\n\treadonly name?: string;\n\treadonly retry?: RetryPolicy;\n\treadonly sendPolicy?: WebSocketSessionSendPolicy;\n}\n\ntype WebSocketSessionEvent =\n\t| { readonly kind: \"attempt\"; readonly attempt: number; readonly maxAttempts: number }\n\t| { readonly kind: \"open\"; readonly attempt: number }\n\t| { readonly kind: \"message\"; readonly message: WebSocketSessionInbound }\n\t| { readonly kind: \"sent\"; readonly message: WebSocketSend }\n\t| { readonly kind: \"closing\"; readonly code?: number; readonly reason?: string }\n\t| { readonly kind: \"closed\"; readonly code?: number; readonly reason?: string }\n\t| {\n\t\t\treadonly kind: \"retry\";\n\t\t\treadonly attempt: number;\n\t\t\treadonly nextAttempt: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| { readonly kind: \"outbound\"; readonly fact: WebSocketSessionOutbound }\n\t| { readonly kind: \"error\"; readonly error: unknown; readonly attempt?: number }\n\t| { readonly kind: \"exhausted\"; readonly attempt: number; readonly error: unknown };\n\ninterface SendState {\n\tseq: number;\n\tcancels: Map<number, DriverCancel>;\n\ttimers: Map<number, ReturnType<typeof setTimeout>>;\n\tactive: boolean;\n\tcleanupInstalled: boolean;\n}\n\nfunction assertSourceLocal<T>(source: Node<T>): Node<T> {\n\treturn source;\n}\n\nfunction initSendState(ctx: Ctx): SendState {\n\tlet state = ctx.state.get<SendState>();\n\tif (state === undefined) {\n\t\tstate = {\n\t\t\tseq: 0,\n\t\t\tcancels: new Map(),\n\t\t\ttimers: new Map(),\n\t\t\tactive: true,\n\t\t\tcleanupInstalled: false,\n\t\t};\n\t\tctx.state.set(state);\n\t}\n\tstate.active = true;\n\tif (!state.cleanupInstalled) {\n\t\tstate.cleanupInstalled = true;\n\t\tctx.onDeactivation(() => {\n\t\t\tstate.active = false;\n\t\t\tstate.cleanupInstalled = false;\n\t\t\tfor (const cancel of state.cancels.values()) runCancel(cancel);\n\t\t\tfor (const timer of state.timers.values()) clearTimeout(timer);\n\t\t\tstate.cancels.clear();\n\t\t\tstate.timers.clear();\n\t\t});\n\t}\n\treturn state;\n}\n\nfunction runCancel(cancel: DriverCancel): void {\n\ttry {\n\t\tcancel();\n\t} catch {\n\t\t// Driver cancellation is best-effort and must not hide graph-visible outcomes.\n\t}\n}\n\nfunction outboundNodes<TValue, TResult>(\n\tgraph: Graph,\n\tevents: Node<OutboundEvent<TValue, TResult>>,\n\tname: string,\n): OutboundBundle<TValue, TResult> {\n\tconst status = graph.node<OutboundStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tconst current =\n\t\t\t\tctx.state.get<OutboundStatus>() ??\n\t\t\t\t({ state: \"idle\", inFlight: 0, attempt: 0, sent: 0, failed: 0 } satisfies OutboundStatus);\n\t\t\tlet next = current;\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tnext = reduceStatus(next, event as OutboundEvent<TValue, TResult>);\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"outboundStatus\" },\n\t);\n\tconst attempts = graph.node<number>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as OutboundEvent<TValue, TResult>;\n\t\t\t\tif (\"attempt\" in typed) ctx.down([[\"DATA\", typed.attempt]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/attempts`, factory: \"outboundAttempts\" },\n\t);\n\tconst errors = graph.node<unknown>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as OutboundEvent<TValue, TResult>;\n\t\t\t\tif (\"error\" in typed) ctx.down([[\"DATA\", typed.error]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"outboundErrors\" },\n\t);\n\treturn { events, status, attempts, errors };\n}\n\nfunction reduceStatus<TValue, TResult>(\n\tcurrent: OutboundStatus,\n\tevent: OutboundEvent<TValue, TResult>,\n): OutboundStatus {\n\tswitch (event.kind) {\n\t\tcase \"attempt\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"running\",\n\t\t\t\tinFlight: current.inFlight + 1,\n\t\t\t\tattempt: event.attempt,\n\t\t\t};\n\t\tcase \"retry\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"waiting\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tlastDelayMs: event.delayMs,\n\t\t\t};\n\t\tcase \"sent\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"succeeded\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tsent: current.sent + 1,\n\t\t\t\tlastDelayMs: undefined,\n\t\t\t};\n\t\tcase \"failed\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"failed\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tfailed: current.failed + 1,\n\t\t\t};\n\t\tcase \"exhausted\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"exhausted\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tfailed: current.failed + 1,\n\t\t\t};\n\t\tcase \"upstream-complete\":\n\t\t\treturn { ...current, state: \"completed\" };\n\t\tcase \"upstream-error\":\n\t\t\treturn { ...current, state: \"failed\", failed: current.failed + 1 };\n\t}\n}\n\ninterface WebSocketSessionState {\n\tactive: boolean;\n\tconnected: boolean;\n\tcleanupInstalled: boolean;\n\tcurrentAttempt: number;\n\tcurrentSession: WebSocketSessionHandle | undefined;\n\tsendCancels: Map<number, DriverCancel>;\n\tliveSends: Map<number, PendingWebSocketOutbound>;\n\tpendingOutbound: PendingWebSocketOutbound[];\n\ttimers: Map<number, ReturnType<typeof setTimeout>>;\n\tseq: number;\n\toutboundSeq: number;\n}\n\ninterface PendingWebSocketOutbound {\n\treadonly seq: number;\n\treadonly message: WebSocketSend;\n}\n\nfunction initWebSocketSessionState(ctx: Ctx): WebSocketSessionState {\n\tlet state = ctx.state.get<WebSocketSessionState>();\n\tif (state === undefined) {\n\t\tstate = {\n\t\t\tactive: true,\n\t\t\tconnected: false,\n\t\t\tcleanupInstalled: false,\n\t\t\tcurrentAttempt: 0,\n\t\t\tcurrentSession: undefined,\n\t\t\tsendCancels: new Map(),\n\t\t\tliveSends: new Map(),\n\t\t\tpendingOutbound: [],\n\t\t\ttimers: new Map(),\n\t\t\tseq: 0,\n\t\t\toutboundSeq: 0,\n\t\t};\n\t\tctx.state.set(state);\n\t}\n\tstate.active = true;\n\tif (!state.cleanupInstalled) {\n\t\tstate.cleanupInstalled = true;\n\t\tctx.onDeactivation(() => {\n\t\t\tconst sendCancels = [...state.sendCancels.values()];\n\t\t\tconst timers = [...state.timers.values()];\n\t\t\tconst session = state.currentSession;\n\t\t\tstate.active = false;\n\t\t\tstate.cleanupInstalled = false;\n\t\t\tstate.connected = false;\n\t\t\tstate.currentAttempt = 0;\n\t\t\tstate.currentSession = undefined;\n\t\t\tstate.sendCancels.clear();\n\t\t\tstate.liveSends.clear();\n\t\t\tstate.pendingOutbound = [];\n\t\t\tstate.timers.clear();\n\t\t\tfor (const cancel of sendCancels) runCancel(cancel);\n\t\t\tfor (const timer of timers) clearTimeout(timer);\n\t\t\tsession?.cancel();\n\t\t});\n\t}\n\treturn state;\n}\n\nfunction closeWebSocketSessionState(\n\tstate: WebSocketSessionState,\n\tdriverAction: \"cancel\" | \"none\" = \"cancel\",\n): {\n\treadonly canceled: PendingWebSocketOutbound[];\n\treadonly session: WebSocketSessionHandle | undefined;\n} {\n\tconst session = state.currentSession;\n\tconst timers = [...state.timers.values()];\n\tconst sendCancels = [...state.sendCancels.values()];\n\tconst canceled = [...state.pendingOutbound, ...state.liveSends.values()];\n\tstate.connected = false;\n\tstate.currentAttempt = 0;\n\tstate.currentSession = undefined;\n\tstate.timers.clear();\n\tstate.sendCancels.clear();\n\tstate.pendingOutbound = [];\n\tstate.liveSends.clear();\n\tfor (const timer of timers) clearTimeout(timer);\n\tfor (const cancelSend of sendCancels) runCancel(cancelSend);\n\tif (driverAction === \"cancel\") session?.cancel();\n\treturn { canceled, session };\n}\n\nfunction cancelRetryTimers(state: WebSocketSessionState): void {\n\tfor (const timer of state.timers.values()) clearTimeout(timer);\n\tstate.timers.clear();\n}\n\nfunction cleanupWebSocketConnection(\n\tstate: WebSocketSessionState,\n\tdriverAction: \"cancel\" | \"none\" = \"cancel\",\n): PendingWebSocketOutbound[] {\n\tconst session = state.currentSession;\n\tconst sendCancels = [...state.sendCancels.values()];\n\tconst canceled = [...state.liveSends.values()];\n\tstate.connected = false;\n\tstate.currentAttempt = 0;\n\tstate.currentSession = undefined;\n\tstate.sendCancels.clear();\n\tstate.liveSends.clear();\n\tfor (const cancelSend of sendCancels) runCancel(cancelSend);\n\tif (driverAction === \"cancel\") session?.cancel();\n\treturn canceled;\n}\n\nfunction normalizeWebSocketSessionSendPolicy(\n\tpolicy: WebSocketSessionSendPolicy | undefined,\n): { readonly kind: \"reject\" } | { readonly kind: \"buffer\"; readonly maxPending: number } {\n\tif (policy?.kind !== \"buffer\") return { kind: \"reject\" };\n\tif (!Number.isFinite(policy.maxPending) || policy.maxPending < 1) {\n\t\tthrow new Error(\"webSocketSession: buffer sendPolicy requires finite maxPending >= 1\");\n\t}\n\treturn { kind: \"buffer\", maxPending: Math.floor(policy.maxPending) };\n}\n\nfunction webSocketSessionEventNode(\n\tgraph: Graph,\n\tcommand: Node<WebSocketSessionCommand>,\n\trequest: WebSocketRequest,\n\tname: string,\n\tpolicy: RetryPolicy,\n\tsendPolicy: ReturnType<typeof normalizeWebSocketSessionSendPolicy>,\n): Node<WebSocketSessionEvent> {\n\treturn graph.node<WebSocketSessionEvent>(\n\t\t[command],\n\t\t(ctx) => {\n\t\t\tconst state = initWebSocketSessionState(ctx);\n\n\t\t\tconst emitOutbound = (fact: WebSocketSessionOutbound) => {\n\t\t\t\tctx.down([[\"DATA\", { kind: \"outbound\", fact } satisfies WebSocketSessionEvent]]);\n\t\t\t};\n\n\t\t\tconst emitOutboundCanceled = (\n\t\t\t\titems: readonly PendingWebSocketOutbound[],\n\t\t\t\treason: unknown,\n\t\t\t) => {\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"canceled\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\treason,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst emitOutboundRejected = (items: readonly PendingWebSocketOutbound[], error: unknown) => {\n\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: payload,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst retryOrExhaust = (attempt: number, error: unknown) => {\n\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\tconst canceled = cleanupWebSocketConnection(state);\n\t\t\t\temitOutboundCanceled(canceled, `${name}: connection cleanup`);\n\t\t\t\tif (shouldRetry(policy, attempt)) {\n\t\t\t\t\tconst nextAttempt = attempt + 1;\n\t\t\t\t\tconst delayMs = nextRetryDelayMs(policy, nextAttempt) ?? 0;\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"retry\",\n\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\tnextAttempt,\n\t\t\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\t\t\terror: payload,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tconst timerId = state.seq++;\n\t\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\t\tstate.timers.delete(timerId);\n\t\t\t\t\t\tif (!state.active) return;\n\t\t\t\t\t\tstart(nextAttempt);\n\t\t\t\t\t}, delayMs);\n\t\t\t\t\tstate.timers.set(timerId, timer);\n\t\t\t\t} else {\n\t\t\t\t\temitOutboundRejected(state.pendingOutbound, payload);\n\t\t\t\t\tstate.pendingOutbound = [];\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{ kind: \"exhausted\", attempt, error: payload } satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst start = (attempt: number) => {\n\t\t\t\tif (\n\t\t\t\t\t!state.active ||\n\t\t\t\t\tstate.connected ||\n\t\t\t\t\tstate.currentAttempt !== 0 ||\n\t\t\t\t\tstate.timers.size > 0\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst driver = ctx.environment().webSocketDriver();\n\t\t\t\tstate.currentAttempt = attempt;\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: \"attempt\",\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t\tconst connectSession = driver?.connectSession;\n\t\t\t\tif (connectSession === undefined) {\n\t\t\t\t\tretryOrExhaust(attempt, `${name}: missing WebSocket session capability`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet session: WebSocketSessionHandle | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tsession = connectSession.call(driver, request, (event) => {\n\t\t\t\t\t\tif (!state.active || state.currentAttempt !== attempt) return;\n\t\t\t\t\t\tif (event.kind === \"event\") {\n\t\t\t\t\t\t\tconst ws = event.event;\n\t\t\t\t\t\t\tif (ws.kind === \"open\") {\n\t\t\t\t\t\t\t\tstate.connected = true;\n\t\t\t\t\t\t\t\tctx.down([[\"DATA\", { kind: \"open\", attempt } satisfies WebSocketSessionEvent]]);\n\t\t\t\t\t\t\t\tflushPending();\n\t\t\t\t\t\t\t} else if (ws.kind === \"text\" || ws.kind === \"binary\") {\n\t\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tkind: \"message\",\n\t\t\t\t\t\t\t\t\t\t\tmessage: ws satisfies WebSocketSessionInbound,\n\t\t\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t} else if (ws.kind === \"close\") {\n\t\t\t\t\t\t\t\tconst normalClose = ws.code === 1000;\n\t\t\t\t\t\t\t\tconst canceled = cleanupWebSocketConnection(state);\n\t\t\t\t\t\t\t\temitOutboundCanceled(canceled, `${name}: session closed`);\n\t\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tkind: \"closed\",\n\t\t\t\t\t\t\t\t\t\t\tcode: ws.code,\n\t\t\t\t\t\t\t\t\t\t\treason: ws.reason,\n\t\t\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tif (!normalClose) {\n\t\t\t\t\t\t\t\t\tretryOrExhaust(attempt, {\n\t\t\t\t\t\t\t\t\t\tkind: \"close\",\n\t\t\t\t\t\t\t\t\t\tcode: ws.code,\n\t\t\t\t\t\t\t\t\t\treason: ws.reason,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (event.kind === \"error\") {\n\t\t\t\t\t\t\tretryOrExhaust(attempt, event.error);\n\t\t\t\t\t\t} else if (event.kind === \"complete\") {\n\t\t\t\t\t\t\tretryOrExhaust(attempt, `${name}: connection completed`);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tretryOrExhaust(attempt, error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (session === undefined) {\n\t\t\t\t\tretryOrExhaust(attempt, `${name}: missing WebSocket session capability`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state.active && state.currentAttempt === attempt) {\n\t\t\t\t\tstate.currentSession = session;\n\t\t\t\t} else {\n\t\t\t\t\tsession.cancel();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction sendNow(item: PendingWebSocketOutbound): void {\n\t\t\t\tif (!state.connected) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t\t});\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst session = state.currentSession;\n\t\t\t\tif (session === undefined) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: `${name}: missing WebSocket session capability`,\n\t\t\t\t\t});\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\terror: `${name}: missing WebSocket session capability`,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst sendId = state.seq++;\n\t\t\t\tstate.liveSends.set(sendId, item);\n\t\t\t\temitOutbound({ kind: \"sending\", seq: item.seq, message: item.message });\n\t\t\t\tlet done = false;\n\t\t\t\tlet cancel: DriverCancel | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tcancel = session.send(item.message, (result) => {\n\t\t\t\t\t\tif (done || !state.active || !state.liveSends.has(sendId)) return;\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tstate.liveSends.delete(sendId);\n\t\t\t\t\t\tstate.sendCancels.delete(sendId);\n\t\t\t\t\t\tif (result.ok) {\n\t\t\t\t\t\t\temitOutbound({ kind: \"sent\", seq: item.seq, message: item.message });\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\"DATA\", { kind: \"sent\", message: item.message } satisfies WebSocketSessionEvent],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst payload = errorPayload(result.error);\n\t\t\t\t\t\t\temitOutbound({\n\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\t\t\terror: payload,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\t\t\terror: payload,\n\t\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tstate.liveSends.delete(sendId);\n\t\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: payload,\n\t\t\t\t\t});\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"error\", error: payload } satisfies WebSocketSessionEvent]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (cancel !== undefined && !done && state.active && state.liveSends.has(sendId)) {\n\t\t\t\t\tstate.sendCancels.set(sendId, cancel);\n\t\t\t\t} else if (cancel !== undefined && !state.active) runCancel(cancel);\n\t\t\t}\n\n\t\t\tfunction flushPending(): void {\n\t\t\t\tconst pending = state.pendingOutbound;\n\t\t\t\tstate.pendingOutbound = [];\n\t\t\t\tfor (let index = 0; index < pending.length; index++) {\n\t\t\t\t\tconst item = pending[index];\n\t\t\t\t\tif (!state.connected || state.currentSession === undefined) {\n\t\t\t\t\t\temitOutboundCanceled(pending.slice(index), `${name}: session closed`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsendNow(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst send = (message: WebSocketSend) => {\n\t\t\t\tconst item = { seq: state.outboundSeq++, message } satisfies PendingWebSocketOutbound;\n\t\t\t\tif (state.connected) {\n\t\t\t\t\tsendNow(item);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (sendPolicy.kind === \"buffer\") {\n\t\t\t\t\tif (state.pendingOutbound.length >= sendPolicy.maxPending) {\n\t\t\t\t\t\temitOutbound({\n\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\terror: `${name}: outbound buffer full`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\t\terror: `${name}: outbound buffer full`,\n\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tstate.pendingOutbound.push(item);\n\t\t\t\t\temitOutbound({ kind: \"queued\", seq: item.seq, message });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\temitOutbound({\n\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\tseq: item.seq,\n\t\t\t\t\tmessage,\n\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t});\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t};\n\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst commandValue = raw as WebSocketSessionCommand;\n\t\t\t\tif (commandValue.kind === \"start\") start(1);\n\t\t\t\telse if (commandValue.kind === \"send\") send(commandValue.message);\n\t\t\t\telse {\n\t\t\t\t\tcancelRetryTimers(state);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"closing\",\n\t\t\t\t\t\t\t\tcode: commandValue.code,\n\t\t\t\t\t\t\t\treason: commandValue.reason,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tconst { canceled, session } = closeWebSocketSessionState(state, \"none\");\n\t\t\t\t\temitOutboundCanceled(canceled, `${name}: session closed`);\n\t\t\t\t\tsession?.close(commandValue.code, commandValue.reason);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"closed\",\n\t\t\t\t\t\t\t\tcode: commandValue.code,\n\t\t\t\t\t\t\t\treason: commandValue.reason,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/events`, factory: \"webSocketSessionEvents\" },\n\t);\n}\n\nfunction webSocketSessionNodes(\n\tgraph: Graph,\n\tcommand: Node<WebSocketSessionCommand>,\n\tevents: Node<WebSocketSessionEvent>,\n\tname: string,\n\tpolicy: RetryPolicy,\n): WebSocketSessionBundle {\n\tconst inbound = graph.node<WebSocketSessionInbound>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"message\") ctx.down([[\"DATA\", event.message]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/inbound`, factory: \"webSocketSessionInbound\" },\n\t);\n\tconst lifecycle = graph.node<WebSocketSessionLifecycle>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"attempt\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"starting\",\n\t\t\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\t\t\tmaxAttempts: event.maxAttempts,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionLifecycle,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"open\") {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"open\", attempt: event.attempt }]]);\n\t\t\t\t} else if (event.kind === \"sent\") {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"sent\", message: event.message }]]);\n\t\t\t\t} else if (event.kind === \"closing\" || event.kind === \"closed\") {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t} else if (event.kind === \"retry\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"retrying\",\n\t\t\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\t\t\tnextAttempt: event.nextAttempt,\n\t\t\t\t\t\t\t\tdelayMs: event.delayMs,\n\t\t\t\t\t\t\t\terror: event.error,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionLifecycle,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/lifecycle`, factory: \"webSocketSessionLifecycle\" },\n\t);\n\tconst outbound = graph.node<WebSocketSessionOutbound>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"outbound\") ctx.down([[\"DATA\", event.fact]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/outbound`, factory: \"webSocketSessionOutbound\" },\n\t);\n\tconst status = graph.node<WebSocketSessionStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet next =\n\t\t\t\tctx.state.get<WebSocketSessionStatus>() ??\n\t\t\t\t({\n\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\tattempt: 0,\n\t\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\t\tsent: 0,\n\t\t\t\t\treceived: 0,\n\t\t\t\t\terrors: 0,\n\t\t\t\t} satisfies WebSocketSessionStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"attempt\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\tmaxAttempts: event.maxAttempts,\n\t\t\t\t\t\tlastDelayMs: undefined,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"open\") {\n\t\t\t\t\tnext = { ...next, state: \"open\", attempt: event.attempt, lastDelayMs: undefined };\n\t\t\t\t} else if (event.kind === \"message\") {\n\t\t\t\t\tnext = { ...next, received: next.received + 1 };\n\t\t\t\t} else if (event.kind === \"sent\") {\n\t\t\t\t\tnext = { ...next, sent: next.sent + 1 };\n\t\t\t\t} else if (event.kind === \"closing\") {\n\t\t\t\t\tnext = { ...next, state: \"closing\" };\n\t\t\t\t} else if (event.kind === \"closed\") {\n\t\t\t\t\tnext = { ...next, state: \"closed\" };\n\t\t\t\t} else if (event.kind === \"retry\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"waiting\",\n\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastDelayMs: event.delayMs,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"error\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\tattempt: event.attempt ?? next.attempt,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"exhausted\",\n\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"webSocketSessionStatus\" },\n\t);\n\tconst errors = graph.node<unknown>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (\"error\" in event) ctx.down([[\"DATA\", event.error]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"webSocketSessionErrors\" },\n\t);\n\tconst attempts = graph.node<number>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"attempt\") ctx.down([[\"DATA\", event.attempt]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/attempts`, factory: \"webSocketSessionAttempts\" },\n\t);\n\treturn {\n\t\tcommand,\n\t\tinbound,\n\t\tlifecycle,\n\t\toutbound,\n\t\tstatus,\n\t\terrors,\n\t\tattempts,\n\t\tstart: () => command.down([[\"DATA\", { kind: \"start\" }]]),\n\t\tsend: (message) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"send\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\ttypeof message === \"string\" || message instanceof Uint8Array\n\t\t\t\t\t\t\t\t? { data: message }\n\t\t\t\t\t\t\t\t: message,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tclose: (code, reason) => command.down([[\"DATA\", { kind: \"close\", code, reason }]]),\n\t};\n}\n\n/**\n * Create a graph-visible D133 WebSocket SessionBundle.\n *\n * The convenience start/send/close methods publish command facts only; hidden\n * session state is driven by the command node and graph-local EnvironmentDrivers.\n */\nexport function webSocketSession(\n\tgraph: Graph,\n\trequest: WebSocketRequest,\n\topts: WebSocketSessionOptions = {},\n): WebSocketSessionBundle {\n\tconst name = opts.name ?? \"webSocketSession\";\n\tconst policy = opts.retry ?? retryPolicy();\n\tconst sendPolicy = normalizeWebSocketSessionSendPolicy(opts.sendPolicy);\n\tconst command = graph.node<WebSocketSessionCommand>([], null, {\n\t\tname: `${name}/command`,\n\t\tfactory: \"webSocketSessionCommand\",\n\t});\n\tconst events = webSocketSessionEventNode(graph, command, request, name, policy, sendPolicy);\n\treturn webSocketSessionNodes(graph, command, events, name, policy);\n}\n\nfunction outboundNode<TValue, TResult>(\n\tgraph: Graph,\n\tsource: Node<TValue>,\n\tname: string,\n\tsend: (\n\t\tctx: Ctx,\n\t\tvalue: TValue,\n\t\tcallback: (result: { ok: true; value: TResult } | { ok: false; error: unknown }) => void,\n\t) => DriverCancel | undefined,\n\topts: OutboundAdapterOptions,\n): Node<OutboundEvent<TValue, TResult>> {\n\tconst policy = opts.retry ?? retryPolicy();\n\treturn graph.node<OutboundEvent<TValue, TResult>>(\n\t\t[assertSourceLocal(source)],\n\t\t(ctx) => {\n\t\t\tconst state = initSendState(ctx);\n\t\t\tconst start = (value: TValue, attempt: number) => {\n\t\t\t\tif (!state.active) return;\n\t\t\t\tconst id = state.seq++;\n\t\t\t\tctx.down([\n\t\t\t\t\t[\"DATA\", { kind: \"attempt\", value, attempt } satisfies OutboundEvent<TValue, TResult>],\n\t\t\t\t]);\n\t\t\t\tconst failTerminal = (error: unknown) => {\n\t\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{ kind: \"exhausted\", value, attempt, error: payload } satisfies OutboundEvent<\n\t\t\t\t\t\t\t\tTValue,\n\t\t\t\t\t\t\t\tTResult\n\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tctx.down([[\"ERROR\", payload]]);\n\t\t\t\t};\n\t\t\t\tlet cancel: DriverCancel | undefined;\n\t\t\t\tlet done = false;\n\t\t\t\ttry {\n\t\t\t\t\tcancel = send(ctx, value, (result) => {\n\t\t\t\t\t\tif (done || !state.active) return;\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tstate.cancels.delete(id);\n\t\t\t\t\t\tif (result.ok) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{ kind: \"sent\", value, attempt, result: result.value } satisfies OutboundEvent<\n\t\t\t\t\t\t\t\t\t\tTValue,\n\t\t\t\t\t\t\t\t\t\tTResult\n\t\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (shouldRetry(policy, attempt)) {\n\t\t\t\t\t\t\tconst nextAttempt = attempt + 1;\n\t\t\t\t\t\t\tconst delayMs = nextRetryDelayMs(policy, nextAttempt) ?? 0;\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkind: \"retry\",\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\t\t\t\t\terror: errorPayload(result.error),\n\t\t\t\t\t\t\t\t\t} satisfies OutboundEvent<TValue, TResult>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\t\t\t\tstate.timers.delete(id);\n\t\t\t\t\t\t\t\tif (!state.active) return;\n\t\t\t\t\t\t\t\tstart(value, nextAttempt);\n\t\t\t\t\t\t\t}, delayMs);\n\t\t\t\t\t\t\tstate.timers.set(id, timer);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkind: \"exhausted\",\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\t\terror: errorPayload(result.error),\n\t\t\t\t\t\t\t\t\t} satisfies OutboundEvent<TValue, TResult>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!done) {\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tstate.cancels.delete(id);\n\t\t\t\t\t\tfailTerminal(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (cancel === undefined) {\n\t\t\t\t\tif (!done) {\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tfailTerminal(`${name}: missing environment driver capability`);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!done && state.active) {\n\t\t\t\t\tstate.cancels.set(id, cancel);\n\t\t\t\t} else if (!state.active) {\n\t\t\t\t\trunCancel(cancel);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfor (const value of depBatch(ctx, 0) ?? []) start(value as TValue, 1);\n\t\t\tconst terminal = ctx.terminal[0];\n\t\t\tif (terminal === true) {\n\t\t\t\tctx.down([\n\t\t\t\t\t[\"DATA\", { kind: \"upstream-complete\" } satisfies OutboundEvent<TValue, TResult>],\n\t\t\t\t]);\n\t\t\t} else if (terminal !== false && terminal !== undefined) {\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{ kind: \"upstream-error\", error: terminal } satisfies OutboundEvent<TValue, TResult>,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t}\n\t\t},\n\t\t{ name, factory: name },\n\t);\n}\n\nexport function toHttp<T>(\n\tgraph: Graph,\n\tsource: Node<T>,\n\trequestOf: HttpRequestOf<T>,\n\topts: OutboundAdapterOptions = {},\n): OutboundBundle<T, HttpResponse> {\n\tconst name = opts.name ?? \"toHttp\";\n\tconst events = outboundNode<T, HttpResponse>(\n\t\tgraph,\n\t\tsource,\n\t\tname,\n\t\t(ctx, value, callback) => {\n\t\t\tconst request = requestOf(value);\n\t\t\treturn ctx.environment().httpDriver()?.request(request, callback);\n\t\t},\n\t\topts,\n\t);\n\treturn outboundNodes(graph, events, name);\n}\n\nexport function toProcess<T>(\n\tgraph: Graph,\n\tsource: Node<T>,\n\tcommandOf: ProcessCommandOf<T>,\n\topts: OutboundAdapterOptions = {},\n): OutboundBundle<T, ProcessResult> {\n\tconst name = opts.name ?? \"toProcess\";\n\tconst events = outboundNode<T, ProcessResult>(\n\t\tgraph,\n\t\tsource,\n\t\tname,\n\t\t(ctx, value, callback) => {\n\t\t\tconst command = commandOf(value);\n\t\t\treturn ctx.environment().processDriver()?.run(command, callback);\n\t\t},\n\t\topts,\n\t);\n\treturn outboundNodes(graph, events, name);\n}\n\nexport function toWebSocket<T>(\n\tgraph: Graph,\n\tsource: Node<T>,\n\trequest: WebSocketRequest,\n\tsendOf: WebSocketSendOf<T>,\n\topts: OutboundAdapterOptions = {},\n): OutboundBundle<T, WebSocketSendResult> {\n\tconst name = opts.name ?? \"toWebSocket\";\n\tconst events = outboundNode<T, WebSocketSendResult>(\n\t\tgraph,\n\t\tsource,\n\t\tname,\n\t\t(ctx, value, callback) => {\n\t\t\tconst driver = ctx.environment().webSocketDriver();\n\t\t\treturn driver?.send?.(request, sendOf(value), callback);\n\t\t},\n\t\topts,\n\t);\n\treturn outboundNodes(graph, events, name);\n}\n","/**\n * Dependency-free NestJS adapter tokens and method metadata.\n *\n * The old compat layer imported `@nestjs/common` for DI decorators. Clean-slate keeps the\n * retainable token/metadata vocabulary here and leaves actual `Inject(...)` composition to\n * user-land NestJS code, so @graphrefly/ts keeps zero framework dependencies (D125/B61).\n */\n\n/** Injection token for a root graph singleton. */\nexport const GRAPHREFLY_ROOT_GRAPH = Symbol.for(\"graphrefly:root-graph\");\n\n/** Injection token for adapter module options. */\nexport const GRAPHREFLY_MODULE_OPTIONS = Symbol.for(\"graphrefly:module-options\");\n\n/** Injection token for a request-scoped graph. */\nexport const GRAPHREFLY_REQUEST_GRAPH = Symbol.for(\"graphrefly:request-graph\");\n\nexport type DecoratorHostConstructor = abstract new (...args: unknown[]) => unknown;\nexport type DecoratorBoundMethod = (...args: unknown[]) => unknown;\n\nexport interface OnGraphEventMeta {\n\tnodeName: string;\n\tmethodKey: string | symbol;\n}\n\nexport interface GraphIntervalMeta {\n\tms: number;\n\tmethodKey: string | symbol;\n}\n\nexport interface GraphCronMeta {\n\texpr: string;\n\tmethodKey: string | symbol;\n}\n\nexport const EVENT_HANDLERS = new Map<DecoratorHostConstructor, OnGraphEventMeta[]>();\nexport const INTERVAL_HANDLERS = new Map<DecoratorHostConstructor, GraphIntervalMeta[]>();\nexport const CRON_HANDLERS = new Map<DecoratorHostConstructor, GraphCronMeta[]>();\n\nexport type GraphMethodDecorator = MethodDecorator &\n\t((value: DecoratorBoundMethod, context: ClassMethodDecoratorContext) => void);\n\n/** Get the injection token for a named feature graph. */\nexport function getGraphToken(name: string): symbol {\n\treturn Symbol.for(`graphrefly:graph:${name}`);\n}\n\n/** Get the injection token for a node at a qualified path. */\nexport function getNodeToken(path: string): symbol {\n\treturn Symbol.for(`graphrefly:node:${path}`);\n}\n\nfunction sameMeta<T>(a: T, b: T): boolean {\n\tconst left = a as Record<string | symbol, unknown>;\n\tconst right = b as Record<string | symbol, unknown>;\n\tconst keys = Reflect.ownKeys(left);\n\tif (keys.length !== Reflect.ownKeys(right).length) return false;\n\tfor (const key of keys) {\n\t\tif (!Object.is(left[key], right[key])) return false;\n\t}\n\treturn true;\n}\n\nfunction pushUniqueMeta<T>(\n\tregistry: Map<DecoratorHostConstructor, T[]>,\n\tctor: DecoratorHostConstructor,\n\titem: T,\n): void {\n\tconst existing = registry.get(ctor) ?? [];\n\tif (existing.some((current) => sameMeta(current, item))) return;\n\tregistry.set(ctor, [...existing, item]);\n}\n\nfunction registerMeta<T>(\n\tregistry: Map<DecoratorHostConstructor, T[]>,\n\tmeta: (methodKey: string | symbol) => T,\n): GraphMethodDecorator {\n\treturn ((targetOrValue: object, contextOrKey: ClassMethodDecoratorContext | string | symbol) => {\n\t\tif (typeof contextOrKey === \"object\" && contextOrKey !== null) {\n\t\t\tconst methodKey = contextOrKey.name;\n\t\t\tcontextOrKey.addInitializer(function (this: unknown) {\n\t\t\t\tconst ctor = (this as { constructor: DecoratorHostConstructor }).constructor;\n\t\t\t\tpushUniqueMeta(registry, ctor, meta(methodKey));\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst ctor = (targetOrValue as { constructor: DecoratorHostConstructor }).constructor;\n\t\tpushUniqueMeta(registry, ctor, meta(contextOrKey));\n\t}) as GraphMethodDecorator;\n}\n\n/** Register a method as a DATA-event handler for a graph observe path. */\nexport function OnGraphEvent(nodeName: string): GraphMethodDecorator {\n\treturn registerMeta(EVENT_HANDLERS, (methodKey) => ({ nodeName, methodKey }));\n}\n\n/** Register fixed-interval metadata for a user-land NestJS scheduler bridge. */\nexport function GraphInterval(ms: number): GraphMethodDecorator {\n\treturn registerMeta(INTERVAL_HANDLERS, (methodKey) => ({ ms, methodKey }));\n}\n\n/** Register cron metadata for a user-land NestJS scheduler bridge. */\nexport function GraphCron(expr: string): GraphMethodDecorator {\n\treturn registerMeta(CRON_HANDLERS, (methodKey) => ({ expr, methodKey }));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2VA,IAAM,gBAAgB,oBAAI,IAA4B;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAED,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB,oBAAI,QAG/B;AACF,IAAM,uBAAuB,oBAAI,QAG/B;AAGK,SAAS,yBAAyB,WAAmB,KAAqB;AAChF,SAAO,GAAG,SAAS,IAAI,GAAG;AAC3B;AAGO,SAAS,mBAAoC,OAYtB;AAC7B,MAAI,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,WAAW,GAAG;AACxE,UAAM,IAAI,WAAW,0DAA0D;AAAA,EAChF;AACA,MAAI,CAAC,cAAc,IAAI,MAAM,IAAI,GAAG;AACnC,UAAM,IAAI,WAAW,4CAA4C;AAAA,EAClE;AACA,MAAI,CAAC,sBAAsB,MAAM,GAAG,GAAG;AACtC,UAAM,IAAI,WAAW,oDAAoD;AAAA,EAC1E;AACA,QAAM,SAAS,MAAM,UAAU;AAC/B,MAAI,CAAC,yBAAyB,MAAM,GAAG;AACtC,UAAM,IAAI,WAAW,2DAA2D;AAAA,EACjF;AACA,QAAM,UAAU,MAAM,WAAW;AACjC,MAAI,CAAC,sBAAsB,OAAO,GAAG;AACpC,UAAM,IAAI,WAAW,wDAAwD;AAAA,EAC9E;AACA,QAAM,cAAc,MAAM,eAAe;AACzC,MAAI,CAAC,sBAAsB,WAAW,KAAK,cAAc,SAAS;AACjE,UAAM,IAAI,WAAW,oDAAoD;AAAA,EAC1E;AACA,MAAI,MAAM,cAAc,UAAa,CAAC,sBAAsB,MAAM,SAAS,GAAG;AAC7E,UAAM,IAAI,WAAW,0DAA0D;AAAA,EAChF;AACA,OAAK,MAAM,SAAS,SAAS,MAAM,SAAS,WAAW,MAAM,cAAc,QAAW;AACrF,UAAM,IAAI,WAAW,uBAAuB,MAAM,IAAI,8BAA8B;AAAA,EACrF;AACA,MAAI,MAAM,mBAAmB,UAAa,MAAM,eAAe,WAAW,GAAG;AAC5E,UAAM,IAAI,WAAW,+DAA+D;AAAA,EACrF;AACA,QAAM,eAAe,uBAAuB,MAAM,MAAM,MAAM,SAAS,oBAAoB;AAC3F,MAAI,iBAAiB,QAAW;AAC/B,UAAM,IAAI,WAAW,YAAY;AAAA,EAClC;AACA,SAAO;AAAA,IACN,WAAW,MAAM;AAAA,IACjB,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,MACT,KAAK,MAAM;AAAA,MACX;AAAA,MACA,gBAAgB,MAAM,kBAAkB,yBAAyB,MAAM,WAAW,MAAM,GAAG;AAAA,MAC3F;AAAA,MACA;AAAA,MACA,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,IAClB;AAAA,EACD;AACD;AAEO,SAAS,WACf,OACA,MACwC;AACxC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,SAAS,KAAK,SAAS,YAAY;AACzC,QAAM,UAAU,MAAM,KAAmC,CAAC,GAAG,MAAM;AAAA,IAClE,MAAM,GAAG,IAAI;AAAA,IACb,SAAS;AAAA,EACV,CAAC;AACD,QAAM,cAAc,MAAM;AAAA,IACzB,CAAC;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,IACV;AAAA,EACD;AACA,QAAM,UAAU,mBAAmB,aAAa,KAAK,SAAS;AAC9D,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACA,QAAM,WAAW,gBAAgB,OAAO,QAAQ,IAAI;AACpD,QAAM,OAAO,YAAY,OAAO,QAAQ,IAAI;AAC5C,QAAM,QAAQ,aAAa,OAAO,QAAQ,IAAI;AAC9C,QAAM,SAAS,cAAc,OAAO,QAAQ,MAAM,KAAK,SAAS;AAChE,QAAM,SAAS,cAAc,OAAO,QAAQ,IAAI;AAChD,QAAM,SAAS,cAAc,OAAO,QAAQ,IAAI;AAChD,QAAM,WAAW,gBAAgB,OAAO,QAAQ,IAAI;AACpD,QAAM,SAAgD;AAAA,IACrD,WAAW,KAAK;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC;AAAA,IACvD,MAAM,CAAC,SAAS,aACf,QAAQ,KAAK;AAAA,MACZ;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA,gBAAgB,UAAU;AAAA,UAC1B,WAAW,UAAU;AAAA,QACtB;AAAA,MACD;AAAA,IACD,CAAC;AAAA,IACF,KAAK,CAAC,WAAW,YAChB,QAAQ,KAAK;AAAA,MACZ;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA,gBAAgB,SAAS;AAAA,UACzB,WAAW,SAAS;AAAA,QACrB;AAAA,MACD;AAAA,IACD,CAAC;AAAA,IACF,MAAM,CAAC,WAAW,OAAO,aACxB,QAAQ,KAAK;AAAA,MACZ;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN;AAAA,UACA;AAAA,UACA,gBAAgB,UAAU;AAAA,UAC1B,WAAW,UAAU;AAAA,QACtB;AAAA,MACD;AAAA,IACD,CAAC;AAAA,IACF,OAAO,CAAC,QAAQ,cACf,QAAQ,KAAK;AAAA,MACZ,CAAC,QAAQ,EAAE,MAAM,SAAS,QAAQ,gBAAgB,WAAW,eAAe,CAAC;AAAA,IAC9E,CAAC;AAAA,EACH;AACA,uBAAqB,IAAI,QAA8C,EAAE,SAAS,CAAC,EAAE,CAAC;AACtF,uBAAqB,IAAI,QAA8C,WAAW;AAClF,SAAO;AACR;AAGO,SAAS,WACf,OACA,QACA,OAA0B,CAAC,GACa;AACxC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,WAAW,MAAM,KAAwB,CAAC,GAAG,MAAM;AAAA,IACxD,MAAM,GAAG,IAAI;AAAA,IACb,SAAS;AAAA,IACT,0BAA0B;AAAA,IAC1B,oBAAoB;AAAA,EACrB,CAAC;AACD,QAAM,YAAY,wBAAwB,OAAO,OAAO,QAAQ,UAAU,IAAI;AAC9E,QAAM,UAAU,sBAAsB,OAAO,WAAW,IAAI;AAC5D,QAAM,SAAS,qBAAqB,OAAO,OAAO,QAAQ,WAAW,UAAU,IAAI;AACnF,QAAM,SAAS,qBAAqB,OAAO,WAAW,UAAU,OAAO,QAAQ,IAAI;AACnF,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,WAAW,WAAW,SAAS,UAAU;AAC7C,YAAM,UAAU,kBAAkB,WAAW,WAAW,OAAO;AAC/D,aAAO,QAAQ,KAAK;AAAA,QACnB;AAAA,UACC;AAAA,UACA;AAAA,YACC,MAAM;AAAA,YACN,SAAS;AAAA,YACT,gBAAgB,UAAU;AAAA,YAC1B;AAAA,UACD;AAAA,QACD;AAAA,MACD,CAAC;AACD,aAAO;AAAA,IACR;AAAA,IACA,QAAQ,WAAW,WAAW,OAAO;AACpC,YAAM,UAAU,kBAAkB,WAAW,WAAW,KAAK;AAC7D,eAAS,KAAK,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;AACjC,aAAO;AAAA,IACR;AAAA,EACD;AACD;AAEO,SAAS,uBACf,WACA,QACwD;AACxD,MAAI,UAAU,WAAW,GAAG;AAC3B,UAAM,IAAI,WAAW,qDAAqD;AAAA,EAC3E;AACA,MAAI,OAAO,WAAW,YAAY;AACjC,UAAM,IAAI,UAAU,mDAAmD;AAAA,EACxE;AACA,SAAO,EAAE,WAAW,OAAO;AAC5B;AAGO,SAAS,gBACf,OACA,QACA,OAAoD,CAAC,GACR;AAC7C,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,WAAW,wBAAwB,KAAK,YAAY,CAAC,CAAC;AAC5D,QAAM,WAAW,MAAM,cAAc,EAAE,MAAM,GAAG,IAAI,mBAAmB,CAAC;AACxE,QAAM,SAAS,SAAS;AAAA,IACvB;AAAA,MACC;AAAA,MACA,wBAAwB,MAAM;AAAA,MAC9B;AAAA,MACA,OAAO;AAAA,MACP;AAAA,MACA,KAAK,kBAAkB;AAAA,IACxB;AAAA,EACD;AACA,QAAM,mBAAmB,SAAS,IAAI,oCAAoC,OAAO,QAAQ,IAAI,CAAC;AAC9F,QAAM,WAAW,SAAS,IAAI,4BAA4B,OAAO,QAAQ,IAAI,CAAC;AAC9E,QAAM,SAAS,SAAS,IAAI,0BAA0B,OAAO,QAAQ,IAAI,CAAC;AAC1E,QAAM,SAAS,SAAS,IAAI,0BAA0B,OAAO,QAAQ,IAAI,CAAC;AAC1E,MAAI;AACH,kCAA8B,QAAQ,gBAAgB;AAAA,EACvD,SAAS,OAAO;AACf,aAAS,QAAQ,EAAE,QAAQ,GAAG,IAAI,gCAAgC,CAAC;AACnE,UAAM;AAAA,EACP;AACA,MAAI,WAAW;AACf,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AACT,UAAI,SAAU;AACd,oCAA8B,QAAQ,gBAAgB;AACtD,UAAI;AACH,iBAAS,QAAQ,EAAE,QAAQ,GAAG,IAAI,2BAA2B,CAAC;AAC9D,mBAAW;AAAA,MACZ,SAAS,OAAO;AACf,sCAA8B,QAAQ,gBAAgB;AACtD,cAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,qBACR,OACA,SACA,SACA,MACA,MACA,QAC6C;AAC7C,QAAM,MAAM,KAAK,OAAO,KAAK;AAC7B,SAAO,MAAM;AAAA,IACZ,CAAC,SAAS,OAAO;AAAA,IACjB,CAAC,QAAQ;AACR,YAAM,QAAQ,gBAA2B,GAAG;AAE5C,YAAM,eAAe,CACpB,MACA,SACA,cAAmF,CAAC,GACpF,eACI;AACJ,YAAI,CAAC,sBAAsB,MAAM,OAAO,GAAG;AAC1C,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,OAAO,GAAG,KAAK,SAAS;AAAA,cACzB;AAAA,YACD;AAAA,UACD,CAAC;AACD;AAAA,QACD;AACA,cAAM,MAAM,MAAM;AAClB,YAAI;AACJ,YAAI;AACH,qBAAW,mBAA8B;AAAA,YACxC,WAAW,KAAK;AAAA,YAChB;AAAA,YACA;AAAA,YACA,QAAQ,MAAM;AAAA,YACd;AAAA,YACA,gBAAgB,YAAY;AAAA,YAC5B,SAAS;AAAA,YACT,aAAa,OAAO;AAAA,YACpB,aAAa,IAAI;AAAA,YACjB,WAAW,YAAY;AAAA,YACvB,WAAW,YAAY;AAAA,UACxB,CAAC;AAAA,QACF,SAAS,OAAO;AACf,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,cAC7D;AAAA,YACD;AAAA,UACD,CAAC;AACD;AAAA,QACD;AACA,cAAM;AACN,qBAAa;AACb,YAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,YAAY,SAAS,CAAC,CAAC,CAAC;AACnD,YAAI,eAAe,IAAI,EAAG,eAAc,KAAK,OAAO,UAAU,MAAM,QAAQ,GAAG;AAAA,MAChF;AAEA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,uBAAe,KAAK,OAAO,KAAK,KAAK,SAAS;AAAA,MAC/C;AACA,YAAM,kBAAkB,IAAI,SAAS,CAAC;AACtC,UAAI,oBAAoB,SAAS,oBAAoB,UAAa,CAAC,MAAM,kBAAkB;AAC1F,cAAM,mBAAmB;AACzB,cAAM,QACL,oBAAoB,OACjB,GAAG,KAAK,SAAS,uGACjB,GAAG,KAAK,SAAS,4BAA4B;AAAA,UAC7C,aAAa,eAAe;AAAA,QAC7B,CAAC;AACJ,YAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,MAAM,CAAC,CAAC,CAAC;AAAA,MAChD;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,UAAU,gBAAgB,GAAG;AACnC,YAAI,YAAY,QAAW;AAC1B,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,OAAO,QAAQ,CAAC,CAAC,CAAC;AACxD;AAAA,QACD;AACA,cAAM,eAAe;AACrB,gBAAQ,aAAa,MAAM;AAAA,UAC1B,KAAK;AACJ,yBAAa,SAAS,QAAW,YAAY;AAC7C;AAAA,UACD,KAAK;AACJ,yBAAa,QAAQ,EAAE,MAAM,QAAQ,OAAO,aAAa,QAAQ,GAAG,YAAY;AAChF;AAAA,UACD,KAAK;AACJ,yBAAa,OAAO,QAAW;AAAA,cAC9B,gBAAgB,aAAa;AAAA,cAC7B,WAAW,aAAa;AAAA,cACxB,WAAW,aAAa;AAAA,YACzB,CAAC;AACD;AAAA,UACD,KAAK;AACJ;AAAA,cACC;AAAA,cACA,EAAE,MAAM,SAAS,OAAO,aAAa,aAAa,KAAK,EAAE;AAAA,cACzD;AAAA,gBACC,gBAAgB,aAAa;AAAA,gBAC7B,WAAW,aAAa;AAAA,gBACxB,WAAW,aAAa;AAAA,cACzB;AAAA,YACD;AACA;AAAA,UACD,KAAK;AACJ;AAAA,cACC;AAAA,cACA,EAAE,MAAM,SAAS,QAAQ,aAAa,OAAO;AAAA,cAC7C;AAAA,cACA,MAAM;AACL,2BAAW,WAAW,MAAM,QAAQ,OAAO,GAAG;AAC7C,sBAAI,QAAQ,UAAU,OAAW,cAAa,QAAQ,KAAK;AAAA,gBAC5D;AACA,sBAAM,QAAQ,MAAM;AAAA,cACrB;AAAA,YACD;AACA;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,oBAAoB;AAAA,MACpB,0BAA0B;AAAA,MAC1B,qBAAqB;AAAA,IACtB;AAAA,EACD;AACD;AAEA,SAAS,gBAA0B,KAAiC;AACnE,MAAI,QAAQ,IAAI,MAAM,IAA2B;AACjD,MAAI,UAAU,QAAW;AACxB,YAAQ;AAAA,MACP,QAAQ;AAAA,MACR,kBAAkB;AAAA,MAClB,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,SAAS,oBAAI,IAAI;AAAA,IAClB;AACA,QAAI,MAAM,IAAI,KAAK;AAAA,EACpB;AACA,QAAM,SAAS;AACf,MAAI,CAAC,MAAM,kBAAkB;AAC5B,UAAM,mBAAmB;AACzB,QAAI,eAAe,MAAM;AACxB,YAAM,SAAS;AACf,YAAM,mBAAmB;AACzB,iBAAW,WAAW,MAAM,QAAQ,OAAO,GAAG;AAC7C,YAAI,QAAQ,UAAU,OAAW,cAAa,QAAQ,KAAK;AAAA,MAC5D;AACA,YAAM,QAAQ,MAAM;AAAA,IACrB,CAAC;AAAA,EACF;AACA,SAAO;AACR;AAEA,SAAS,8BACR,QACA,QACO;AACP,QAAM,WAAW,qBAAqB,IAAI,MAA4C;AACtF,MAAI,aAAa,QAAW;AAC3B,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC1E;AACA,QAAM,UAAU,SAAS;AACzB,QAAM,kBAAkB,CAAC,GAAG,OAAO;AACnC,MAAI,CAAC,QAAQ,SAAS,MAAM,EAAG,SAAQ,KAAK,MAAM;AAClD,MAAI;AACH,WAAO,QAAQ,YAAY,CAAC,GAAG,OAAO,GAAG,0BAA0B,QAAQ,MAAM,CAAC;AAAA,EACnF,SAAS,OAAO;AACf,YAAQ,OAAO,GAAG,QAAQ,QAAQ,GAAG,eAAe;AACpD,WAAO,QAAQ;AAAA,MACd,CAAC,GAAG,eAAe;AAAA,MACnB,0BAA0B,gBAAgB,MAAM;AAAA,IACjD;AACA,UAAM;AAAA,EACP;AACD;AAEA,SAAS,8BACR,QACA,QACO;AACP,QAAM,WAAW,qBAAqB,IAAI,MAA4C;AACtF,MAAI,aAAa,QAAW;AAC3B,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC1E;AACA,QAAM,UAAU,SAAS;AACzB,MAAI,CAAC,QAAQ,SAAS,MAAM,EAAG;AAC/B,QAAM,kBAAkB,CAAC,GAAG,OAAO;AACnC,QAAM,cAAc,QAAQ,OAAO,CAAC,cAAc,cAAc,MAAM;AACtE,UAAQ,OAAO,GAAG,QAAQ,QAAQ,GAAG,WAAW;AAChD,MAAI;AACH,WAAO,QAAQ,YAAY,CAAC,GAAG,WAAW,GAAG,0BAA0B,YAAY,MAAM,CAAC;AAAA,EAC3F,SAAS,OAAO;AACf,YAAQ,OAAO,GAAG,QAAQ,QAAQ,GAAG,eAAe;AACpD,WAAO,QAAQ;AAAA,MACd,CAAC,GAAG,eAAe;AAAA,MACnB,0BAA0B,gBAAgB,MAAM;AAAA,IACjD;AACA,UAAM;AAAA,EACP;AACD;AAEA,SAAS,wBACR,QACgE;AAChE,QAAM,SAAS,qBAAqB,IAAI,MAA4C;AACpF,MAAI,WAAW,QAAW;AACzB,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC1E;AACA,SAAO;AACR;AAEA,SAAS,0BAAqC,aAAyC;AACtF,SAAO,CAAC,QAAQ;AACf,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK,GAAG;AACxC,iBAAW,WAAW,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AAC7C,YAAI,KAAK,CAAC,CAAC,QAAQ,OAAuC,CAAC,CAAC;AAAA,MAC7D;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,kBACR,WACA,WACA,SAC8B;AAC9B,MAAI,UAAU,WAAW,EAAG,OAAM,IAAI,WAAW,yCAAyC;AAC1F,MAAI,UAAU,WAAW,EAAG,OAAM,IAAI,WAAW,yCAAyC;AAC1F,SAAO,EAAE,WAAW,WAAW,QAAQ;AACxC;AAEA,SAAS,kBACR,WACA,WACA,OACoB;AACpB,MAAI,UAAU,WAAW;AACxB,UAAM,IAAI,WAAW,iDAAiD;AACvE,MAAI,MAAM,WAAW,EAAG,OAAM,IAAI,WAAW,6CAA6C;AAC1F,SAAO,EAAE,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,UAAU,GAAI,WAAW,MAAM;AAC9E;AAaA,SAAS,qBAAyC;AACjD,SAAO,EAAE,YAAY,oBAAI,IAAI,GAAG,OAAO,oBAAI,IAAI,EAAE;AAClD;AAEA,SAAS,sBAAsB,OAA2B,WAA4B;AACrF,SAAO,MAAM,WAAW,IAAI,SAAS;AACtC;AAEA,SAAS,uBAAuB,OAA2B,SAAwC;AAClG,QAAM,UAAU,8BAA8B,OAAO,QAAQ,GAAG;AAChE,SAAO,SAAS,cAAc,QAAQ,aAAa,MAAM,WAAW,IAAI,QAAQ,SAAS;AAC1F;AAEA,SAAS,8BACR,OACA,KACmC;AACnC,SAAO,MAAM,MAAM,IAAI,GAAG;AAC3B;AAEA,SAAS,oBAAoB,OAA2B,SAAqC;AAC5F,QAAM,gBAAgB,MAAM,MAAM,IAAI,QAAQ,GAAG;AACjD,MAAI,kBAAkB,QAAW;AAChC,UAAM,WAAW,OAAO,cAAc,SAAS;AAAA,EAChD;AACA,aAAW,CAAC,KAAK,OAAO,KAAK,MAAM,OAAO;AACzC,QAAI,QAAQ,cAAc,QAAQ,aAAa,QAAQ,QAAQ,KAAK;AACnE,YAAM,MAAM,OAAO,GAAG;AACtB;AAAA,IACD;AAAA,EACD;AACA,QAAM,WAAW,IAAI,QAAQ,SAAS;AACtC,QAAM,MAAM,IAAI,QAAQ,KAAK,OAAO;AACrC;AAEA,SAAS,6BACR,OACA,WACmC;AACnC,MAAI,CAAC,MAAM,WAAW,OAAO,SAAS,EAAG,QAAO;AAChD,MAAI;AACJ,MAAI;AACJ,aAAW,CAAC,cAAc,OAAO,KAAK,MAAM,OAAO;AAClD,QAAI,QAAQ,cAAc,WAAW;AACpC,YAAM;AACN,cAAQ;AACR;AAAA,IACD;AAAA,EACD;AACA,MAAI,QAAQ,OAAW,OAAM,MAAM,OAAO,GAAG;AAC7C,SAAO;AACR;AAEA,SAAS,uBACR,OACA,KACmC;AACnC,QAAM,UAAU,MAAM,MAAM,IAAI,GAAG;AACnC,MAAI,YAAY,OAAW,QAAO;AAClC,QAAM,MAAM,OAAO,GAAG;AACtB,QAAM,WAAW,OAAO,QAAQ,SAAS;AACzC,SAAO;AACR;AAEA,SAAS,yBACR,OACA,UACmC;AACnC,QAAM,QAAQ,uBAAuB,OAAO,SAAS,SAAS,GAAG;AACjE,MAAI,UAAU,OAAW,QAAO;AAChC,QAAM,WAAW,2BAA2B,QAAQ;AACpD,MAAI,aAAa,UAAa,sBAAsB,OAAO,SAAS,SAAS,GAAG;AAC/E,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAEA,SAAS,2BACR,UACmC;AACnC,MAAI,SAAS,SAAS,SAAS,OAAQ,QAAO;AAC9C,QAAM,UAAU,0BAA0B,SAAS,QAAQ,KAAK;AAChE,MAAI,YAAY,OAAW,QAAO;AAClC,SAAO;AAAA,IACN,WAAW,QAAQ;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB,KAAK,SAAS,SAAS;AAAA,EACxB;AACD;AAEA,SAAS,0BAA6B,OAAkD;AACvF,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,MAAI,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,WAAW,EAAG,QAAO;AAChF,MAAI,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,WAAW,EAAG,QAAO;AAChF,MAAI,EAAE,aAAa,OAAQ,QAAO;AAClC,SAAO;AAAA,IACN,WAAW,MAAM;AAAA,IACjB,WAAW,MAAM;AAAA,IACjB,SAAS,MAAM;AAAA,EAChB;AACD;AAEA,SAAS,2BAA8B,OAAmD;AACzF,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,MAAI,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,WAAW,EAAG,QAAO;AAChF,MAAI,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,WAAW,EAAG,QAAO;AAChF,MAAI,MAAM,SAAS,YAAY,aAAa,OAAO;AAClD,WAAO;AAAA,MACN,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,IAChB;AAAA,EACD;AACA,MAAI,MAAM,SAAS,WAAW,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,SAAS,GAAG;AACxF,WAAO;AAAA,MACN,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,OAAO,MAAM;AAAA,IACd;AAAA,EACD;AACA,MAAI,MAAM,SAAS,YAAY,OAAO,MAAM,WAAW,YAAY,MAAM,OAAO,SAAS,GAAG;AAC3F,WAAO;AAAA,MACN,MAAM;AAAA,MACN,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,IACf;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,iCAAiC,OAAoC;AAC7E,MAAI,CAAC,SAAS,KAAK,EAAG,QAAO;AAC7B,SAAO,OAAO,MAAM,cAAc,YAAY,MAAM,UAAU,SAAS,IACpE,MAAM,YACN;AACJ;AAEA,SAAS,SAAS,OAAkD;AACnE,SAAO,OAAO,UAAU,YAAY,UAAU;AAC/C;AAEA,SAAS,WAAW,OAAyB;AAC5C,SAAO,SAAS,KAAK,KAAK,OAAO,MAAM,SAAS;AACjD;AAEA,SAAS,4BAA+B,UAAyC;AAChF,SAAO,SAAS;AACjB;AAEA,SAAS,6BAAgC,UAA0C;AAClF,SAAO,SAAS,SAAS,YAAY,SAAS,SAAS;AACxD;AAEA,SAAS,wBACR,OACA,QACA,UACA,MACsC;AACtC,SAAO,MAAM;AAAA,IACZ,CAAC,QAAQ,QAAQ;AAAA,IACjB,CAAC,QAAQ;AAIR,YAAM,QAAQ,IAAI,MAAM,IAAW,KAAK;AAAA,QACvC,SAAS,mBAAmB;AAAA,MAC7B;AACA,YAAM,QAAyC,CAAC;AAChD,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AAId,YAAI,MAAM,SAAS,YAAY;AAC9B,gBAAM,UAAU,2BAA2B,MAAM,QAAQ;AACzD,cAAI,YAAY,OAAW;AAC3B,cAAI,uBAAuB,MAAM,SAAS,OAAO,EAAG;AACpD,8BAAoB,MAAM,SAAS,OAAO;AAAA,QAC3C,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,SAAS,QAAQ;AAC/E,gBAAM,WAAW,2BAAsC,MAAM,SAAS,QAAQ,KAAK;AACnF,cAAI,aAAa,QAAW;AAC3B,kBAAMA,aAAY,iCAAiC,MAAM,SAAS,QAAQ,KAAK;AAC/E,gBAAIA,eAAc,UAAa,sBAAsB,MAAM,SAASA,UAAS,GAAG;AAC/E,2CAA6B,MAAM,SAASA,UAAS;AAAA,YACtD;AACA;AAAA,UACD;AACA,gBAAM,YAAY,4BAA4B,QAAQ;AACtD,cAAI,sBAAsB,MAAM,SAAS,SAAS,GAAG;AACpD,gBAAI,6BAA6B,QAAQ,GAAG;AAC3C,2CAA6B,MAAM,SAAS,SAAS;AAAA,YACtD;AACA,kBAAM,KAAK,QAAQ;AAAA,UACpB;AAAA,QACD,WAAW,MAAM,SAAS,QAAQ;AACjC,mCAAyB,MAAM,SAAS,MAAM,QAAQ;AAAA,QACvD,WAAW,MAAM,SAAS,aAAa;AACtC,iCAAuB,MAAM,SAAS,MAAM,GAAG;AAAA,QAChD;AAAA,MACD;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,UAAU;AAChB,qCAA6B,MAAM,SAAS,QAAQ,SAAS;AAAA,MAC9D;AACA,UAAI,MAAM,IAAI,KAAK;AACnB,iBAAW,YAAY,MAAO,KAAI,KAAK,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC;AAAA,IAC5D;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AAAA,EACD;AACD;AAEA,SAAS,sBACR,OACA,WACA,MACoC;AACpC,SAAO,MAAM;AAAA,IACZ,CAAC,SAAS;AAAA,IACV,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,WAAW;AACjB,YAAI,SAAS,SAAS,UAAU;AAC/B,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,WAAW,SAAS;AAAA,gBACpB,WAAW,SAAS;AAAA,gBACpB,SAAS,SAAS;AAAA,cACnB;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,YAAY,SAAS,qBAAqB,0BAA0B,MAAM;AAAA,EAC1F;AACD;AAEA,SAAS,qBACR,OACA,QACA,WACA,UACA,MACyB;AACzB,SAAO,MAAM;AAAA,IACZ,CAAC,QAAQ,WAAW,QAAQ;AAAA,IAC5B,CAAC,QAAQ;AAER,YAAM,QACL,IAAI,MAAM,IAAW,KACpB;AAAA,QACA,QAAQ,EAAE,OAAO,QAAQ,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,EAAE;AAAA,QAC1E,SAAS,mBAAmB;AAAA,MAC7B;AACD,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AAId,YAAI,MAAM,SAAS,YAAY;AAC9B,gBAAM,UAAU,2BAA2B,MAAM,QAAQ;AACzD,cAAI,YAAY,QAAW;AAC1B,gBAAI,uBAAuB,MAAM,SAAS,OAAO,GAAG;AACnD,oBAAM,SAAS;AAAA,gBACd,GAAG,MAAM;AAAA,gBACT,OAAO;AAAA,gBACP,WAAW,QAAQ;AAAA,gBACnB,WAAW,QAAQ;AAAA,gBACnB,QAAQ,MAAM,OAAO,SAAS;AAAA,cAC/B;AACA;AAAA,YACD;AACA,gCAAoB,MAAM,SAAS,OAAO;AAC1C,kBAAM,SAAS;AAAA,cACd,GAAG,MAAM;AAAA,cACT,OAAO;AAAA,cACP,WAAW,QAAQ;AAAA,cACnB,WAAW,QAAQ;AAAA,YACpB;AAAA,UACD;AAAA,QACD,WACC,MAAM,SAAS,aACf,MAAM,SAAS,sBACf,MAAM,SAAS,kBACf,MAAM,SAAS,gBACd;AACD,gBAAM,SAAS;AAAA,YACd,GAAG,MAAM;AAAA,YACT,OAAO;AAAA,YACP,QAAQ,MAAM,OAAO,SAAS;AAAA,UAC/B;AAAA,QACD,WAAW,MAAM,SAAS,QAAQ;AACjC,gBAAM,UAAU,yBAAyB,MAAM,SAAS,MAAM,QAAQ;AACtE,gBAAM,SAAS;AAAA,YACd,GAAG,MAAM;AAAA,YACT,OAAO;AAAA,YACP,GAAI,YAAY,SACb,CAAC,IACD,EAAE,WAAW,QAAQ,WAAW,WAAW,QAAQ,UAAU;AAAA,YAChE,QAAQ,MAAM,OAAO,SAAS;AAAA,UAC/B;AAAA,QACD,WAAW,MAAM,SAAS,aAAa;AACtC,gBAAM,UAAU,uBAAuB,MAAM,SAAS,MAAM,GAAG;AAC/D,gBAAM,SAAS;AAAA,YACd,GAAG,MAAM;AAAA,YACT,OAAO;AAAA,YACP,GAAI,YAAY,SACb,CAAC,IACD,EAAE,WAAW,QAAQ,WAAW,WAAW,QAAQ,UAAU;AAAA,YAChE,QAAQ,MAAM,OAAO,SAAS;AAAA,UAC/B;AAAA,QACD,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,SAAS,QAAQ;AAC/E,gBAAM,WAAW,2BAAsC,MAAM,SAAS,QAAQ,KAAK;AACnF,cAAI,aAAa,QAAW;AAC3B,kBAAM,YAAY,iCAAiC,MAAM,SAAS,QAAQ,KAAK;AAC/E,gBAAI,cAAc,QAAW;AAC5B,oBAAM,UAAU,6BAA6B,MAAM,SAAS,SAAS;AACrE,kBAAI,YAAY,QAAW;AAC1B,sBAAM,SAAS;AAAA,kBACd,GAAG,MAAM;AAAA,kBACT,OAAO;AAAA,kBACP,WAAW,QAAQ;AAAA,kBACnB;AAAA,kBACA,QAAQ,MAAM,OAAO,SAAS;AAAA,gBAC/B;AAAA,cACD;AAAA,YACD;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,WAAW;AACjB,YAAI,SAAS,SAAS,UAAU;AAC/B,uCAA6B,MAAM,SAAS,SAAS,SAAS;AAC9D,gBAAM,SAAS;AAAA,YACd,GAAG,MAAM;AAAA,YACT,OAAO;AAAA,YACP,WAAW,SAAS;AAAA,YACpB,WAAW,SAAS;AAAA,YACpB,WAAW,MAAM,OAAO,YAAY;AAAA,UACrC;AAAA,QACD,WAAW,SAAS,SAAS,SAAS;AACrC,uCAA6B,MAAM,SAAS,SAAS,SAAS;AAC9D,gBAAM,SAAS;AAAA,YACd,GAAG,MAAM;AAAA,YACT,OAAO;AAAA,YACP,WAAW,SAAS;AAAA,YACpB,WAAW,SAAS;AAAA,YACpB,QAAQ,MAAM,OAAO,SAAS;AAAA,UAC/B;AAAA,QACD,OAAO;AACN,gBAAM,SAAS;AAAA,YACd,GAAG,MAAM;AAAA,YACT,WAAW,SAAS;AAAA,YACpB,WAAW,SAAS;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,UAAU;AAChB,qCAA6B,MAAM,SAAS,QAAQ,SAAS;AAC7D,cAAM,SAAS;AAAA,UACd,GAAG,MAAM;AAAA,UACT,OAAO;AAAA,UACP,WAAW,QAAQ;AAAA,UACnB,WAAW,QAAQ;AAAA,UACnB,QAAQ,MAAM,OAAO,SAAS;AAAA,UAC9B,UAAU,MAAM,OAAO,WAAW;AAAA,QACnC;AAAA,MACD;AACA,YAAM,SAAS,EAAE,GAAG,MAAM,QAAQ,SAAS,MAAM,QAAQ,WAAW,KAAK;AACzE,UAAI,MAAM,IAAI,KAAK;AACnB,UAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,MAAM,CAAC,CAAC;AAAA,IAClC;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AAAA,EACD;AACD;AAEA,SAAS,qBACR,OACA,WACA,UACA,QACA,MACwB;AACxB,SAAO,MAAM;AAAA,IACZ,CAAC,WAAW,UAAU,MAAM;AAAA,IAC5B,CAAC,QAAQ;AACR,YAAM,UAAU,IAAI,MAAM,IAAwB,KAAK,mBAAmB;AAC1E,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AAId,YAAI,MAAM,SAAS,YAAY;AAC9B,gBAAM,UAAU,2BAA2B,MAAM,QAAQ;AACzD,cAAI,YAAY,QAAW;AAC1B,gBAAI,uBAAuB,SAAS,OAAO,GAAG;AAC7C,kBAAI,KAAK;AAAA,gBACR;AAAA,kBACC;AAAA,kBACA;AAAA,oBACC,WAAW,QAAQ;AAAA,oBACnB,WAAW,QAAQ;AAAA,oBACnB,OAAO,8CAA8C,QAAQ,SAAS;AAAA,kBACvE;AAAA,gBACD;AAAA,cACD,CAAC;AACD;AAAA,YACD;AACA,gCAAoB,SAAS,OAAO;AAAA,UACrC;AAAA,QACD;AAAA,MACD;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,WAAW;AACjB,YAAI,SAAS,SAAS,SAAS;AAC9B,uCAA6B,SAAS,SAAS,SAAS;AACxD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,WAAW,SAAS;AAAA,gBACpB,WAAW,SAAS;AAAA,gBACpB,OAAO,SAAS;AAAA,cACjB;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,WAAW,SAAS,SAAS,UAAU;AACtC,uCAA6B,SAAS,SAAS,SAAS;AAAA,QACzD;AAAA,MACD;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,UAAU;AAChB,qCAA6B,SAAS,QAAQ,SAAS;AACvD,YAAI,KAAK;AAAA,UACR;AAAA,YACC;AAAA,YACA,EAAE,WAAW,QAAQ,WAAW,WAAW,QAAQ,WAAW,OAAO,QAAQ,MAAM;AAAA,UACpF;AAAA,QACD,CAAC;AAAA,MACF;AACA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AAId,YAAI,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,SAAS,QAAQ;AACxE,gBAAM,WAAW,2BAAsC,MAAM,SAAS,QAAQ,KAAK;AACnF,cAAI,aAAa,QAAW;AAC3B,kBAAM,YAAY,iCAAiC,MAAM,SAAS,QAAQ,KAAK;AAC/E,kBAAM,UACL,cAAc,SACX,SACA,6BAA6B,SAAS,SAAS;AACnD,gBAAI,YAAY,OAAW;AAC3B,gBAAI,KAAK;AAAA,cACR;AAAA,gBACC;AAAA,gBACA;AAAA,kBACC,WAAW,QAAQ;AAAA,kBACnB,WAAW,QAAQ;AAAA,kBACnB,OAAO;AAAA,gBACR;AAAA,cACD;AAAA,YACD,CAAC;AAAA,UACF;AACA;AAAA,QACD;AACA,YAAI,MAAM,SAAS,QAAQ;AAC1B,gBAAM,UAAU,yBAAyB,SAAS,MAAM,QAAQ;AAChE,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,WAAW,SAAS;AAAA,gBACpB,WAAW,SAAS;AAAA,gBACpB,OAAO,OAAO,MAAM,KAAK;AAAA,cAC1B;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,aAAa;AACtC,gBAAM,UAAU,uBAAuB,SAAS,MAAM,GAAG;AACzD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,WAAW,SAAS;AAAA,gBACpB,WAAW,SAAS;AAAA,gBACpB,OAAO,OAAO,MAAM,KAAK;AAAA,cAC1B;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,WAAW;AACpC,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAAA,QAC5C,WACC,MAAM,SAAS,sBACf,MAAM,SAAS,kBACf,MAAM,SAAS,gBACd;AACD,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,OAAO,6BAA6B,KAAK,EAAE,CAAC,CAAC,CAAC;AAAA,QACpE;AAAA,MACD;AACA,UAAI,MAAM,IAAI,OAAO;AAAA,IACtB;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AAAA,EACD;AACD;AAEA,SAAS,6BACR,OACS;AACT,MAAI,MAAM,SAAS,oBAAoB;AACtC,WAAO,+BAA+B,MAAM,MAAM,2BAA2B,MAAM,QAAQ;AAAA,EAC5F;AACA,MAAI,MAAM,SAAS,gBAAgB;AAClC,WAAO,2BAA2B,MAAM,GAAG,gCAAgC,MAAM,QAAQ;AAAA,EAC1F;AACA,MAAI,MAAM,SAAS,gBAAgB;AAClC,WAAO,oBAAoB,MAAM,OAAO,uCAAuC,MAAM,SAAS;AAAA,EAC/F;AACA,SAAO;AACR;AAEA,SAAS,wBACR,UAC2D;AAC3D,QAAM,MAAM,oBAAI,IAAyD;AACzE,aAAW,WAAW,UAAU;AAC/B,QAAI,QAAQ,UAAU,WAAW,GAAG;AACnC,YAAM,IAAI,WAAW,8CAA8C;AAAA,IACpE;AACA,QAAI,IAAI,IAAI,QAAQ,SAAS,GAAG;AAC/B,YAAM,IAAI,WAAW,yCAAyC,QAAQ,SAAS,GAAG;AAAA,IACnF;AACA,QAAI,IAAI,QAAQ,WAAW,QAAQ,MAAM;AAAA,EAC1C;AACA,SAAO;AACR;AAYA,SAAS,6BACR,QACA,UACA,mBAC4B;AAC5B,QAAM,gBAAgB,wBAAwB,QAAQ;AACtD,MAAI,kBAAkB,QAAW;AAChC,WAAO,EAAE,MAAM,WAAW,OAAO,cAAc;AAAA,EAChD;AACA,MAAI,SAAS,cAAc,mBAAmB;AAC7C,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,oCAAoC,SAAS,SAAS,2BAA2B,iBAAiB;AAAA,IAC1G;AAAA,EACD;AACA,QAAM,MAAM,SAAS,SAAS;AAC9B,QAAM,WAAW,OAAO,SAAS;AACjC,MAAI,OAAO,OAAO,QAAQ;AACzB,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,0CAA0C,GAAG,cAAc,OAAO,MAAM;AAAA,IAChF;AAAA,EACD;AACA,MAAI,MAAM,UAAU;AACnB,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,6CAA6C,GAAG,cAAc,QAAQ;AAAA,IAC9E;AAAA,EACD;AACA,MAAI,SAAS,SAAS,SAAS,OAAO,cAAc;AACnD,WAAO;AAAA,MACN,MAAM;AAAA,MACN,OAAO,GAAG,SAAS,SAAS,oCAAoC,SAAS,SAAS,MAAM,oBAAoB,OAAO,YAAY;AAAA,IAChI;AAAA,EACD;AACA,SAAO,SAAS;AAChB,SAAO,eAAe,SAAS,SAAS;AACxC,MAAI,SAAS,SAAS,OAAQ,QAAO,EAAE,MAAM,WAAW;AACxD,MAAI,SAAS,SAAS,SAAS,QAAQ;AACtC,WAAO,EAAE,MAAM,WAAW,OAAO,4DAA4D;AAAA,EAC9F;AACA,QAAM,UAAU,0BAA6B,SAAS,QAAQ,KAAK;AACnE,MAAI,YAAY,QAAW;AAC1B,WAAO,EAAE,MAAM,WAAW,OAAO,gDAAgD;AAAA,EAClF;AACA,SAAO,EAAE,MAAM,WAAW,SAAS,IAAI;AACxC;AAEA,SAAS,0BACR,OACA,SACA,MACA,mBACA,UACA,eACkD;AAClD,SAAO,MAAM;AAAA,IACZ,CAAC,OAAO;AAAA,IACR,CAAC,QAAQ;AACR,YAAM,SAAS,IAAI,MAAM,IAA2B,KAAK,EAAE,QAAQ,GAAG,cAAc,EAAE;AACtF,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,WAAW;AACjB,cAAM,WAAW,6BAA6B,QAAQ,UAAU,iBAAiB;AACjF,YAAI,SAAS,SAAS,WAAY;AAClC,YAAI,SAAS,SAAS,WAAW;AAChC,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,OAAO,SAAS,MAAM,CAAC,CAAC,CAAC;AAC/D;AAAA,QACD;AACA,cAAM,EAAE,SAAS,IAAI,IAAI;AACzB,YAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,SAAS,IAAI,CAAC,CAAC,CAAC;AACtD,cAAM,UAAU,SAAS,IAAI,QAAQ,SAAS;AAC9C,YAAI,YAAY,QAAW;AAC1B,cAAI,CAAC,cAAe;AACpB,gBAAM,QAAQ,uCAAuC,QAAQ,SAAS;AACtE,gBAAM,WAAW,wBAAwB,SAAS,KAAK;AACvD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAW,QAAQ;AAAA,gBACnB,WAAW,QAAQ;AAAA,gBACnB;AAAA,gBACA,SAAS,EAAE,MAAM,QAAQ,SAAS,UAAU,WAAW,QAAQ,UAAU;AAAA,cAC1E;AAAA,YACD;AAAA,UACD,CAAC;AACD;AAAA,QACD;AACA,YAAI;AACH,gBAAM,UAAU,QAAQ,OAAO;AAC/B,cAAI,WAAW,OAAO,GAAG;AACxB,kBAAM,IAAI,MAAM,sEAAsE;AAAA,UACvF;AACA,gBAAM,WAAW;AAAA,YAChB,MAAM;AAAA,YACN,WAAW,QAAQ;AAAA,YACnB,WAAW,QAAQ;AAAA,YACnB;AAAA,UACD;AACA,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAW,QAAQ;AAAA,gBACnB,WAAW,QAAQ;AAAA,gBACnB,SAAS,EAAE,MAAM,QAAQ,SAAS,UAAU,WAAW,QAAQ,UAAU;AAAA,cAC1E;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,SAAS,OAAO;AACf,uCAA6B,KAAK;AAClC,gBAAM,UAAU,aAAa,KAAK;AAClC,gBAAM,WAAW,wBAAwB,SAAS,OAAO;AACzD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,WAAW,QAAQ;AAAA,gBACnB,WAAW,QAAQ;AAAA,gBACnB,OAAO;AAAA,gBACP,SAAS,EAAE,MAAM,QAAQ,SAAS,UAAU,WAAW,QAAQ,UAAU;AAAA,cAC1E;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AACA,UAAI,MAAM,IAAI,MAAM;AAAA,IACrB;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AAAA,EACD;AACD;AAEA,SAAS,wBACR,SACA,OACgC;AAChC,SAAO;AAAA,IACN,MAAM;AAAA,IACN,WAAW,QAAQ;AAAA,IACnB,WAAW,QAAQ;AAAA,IACnB;AAAA,EACD;AACD;AAEA,SAAS,oCACR,OACA,QACA,MACyD;AACzD,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,aACE,MAAM,SAAS,cAAc,MAAM,SAAS,eAC7C,MAAM,YAAY,QACjB;AACD,cAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC;AAAA,QACnC;AAAA,MACD;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AAAA,EACD;AACD;AAEA,SAAS,4BACR,OACA,QACA,MACoC;AACpC,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,UAAW,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC;AAAA,MACjE;AAAA,IACD;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,0BAA0B;AAAA,IAC3B;AAAA,EACD;AACD;AAEA,SAAS,0BACR,OACA,QACA,MAC8B;AAC9B,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,UAAI,SACH,IAAI,MAAM,IAA2B,KACpC,EAAE,OAAO,QAAQ,SAAS,GAAG,UAAU,GAAG,QAAQ,EAAE;AACtD,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,YAAY;AAC9B,mBAAS;AAAA,YACR,GAAG;AAAA,YACH,OAAO;AAAA,YACP,WAAW,MAAM;AAAA,YACjB,WAAW,MAAM;AAAA,YACjB,SAAS,OAAO,UAAU;AAAA,UAC3B;AAAA,QACD,WAAW,MAAM,SAAS,YAAY;AACrC,mBAAS;AAAA,YACR,GAAG;AAAA,YACH,OAAO;AAAA,YACP,WAAW,MAAM;AAAA,YACjB,WAAW,MAAM;AAAA,YACjB,UAAU,OAAO,WAAW;AAAA,YAC5B,QAAQ,OAAO,SAAS;AAAA,UACzB;AAAA,QACD,WAAW,MAAM,SAAS,WAAW;AACpC,mBAAS,EAAE,GAAG,QAAQ,OAAO,WAAW,QAAQ,OAAO,SAAS,EAAE;AAAA,QACnE;AAAA,MACD;AACA,UAAI,MAAM,IAAI,MAAM;AACpB,UAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC;AAAA,IAC5B;AAAA,IACA;AAAA,MACC,MAAM,GAAG,IAAI;AAAA,MACb,SAAS;AAAA,MACT,SAAS;AAAA,MACT,0BAA0B;AAAA,MAC1B,oBAAoB;AAAA,IACrB;AAAA,EACD;AACD;AAEA,SAAS,0BACR,OACA,QACA,MACwB;AACxB,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,YAAY;AAC9B,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA,EAAE,WAAW,MAAM,WAAW,WAAW,MAAM,WAAW,OAAO,MAAM,MAAM;AAAA,YAC9E;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,WAAW;AACpC,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAAA,QAC5C;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,yBAAyB,0BAA0B,MAAM;AAAA,EAC7F;AACD;AAEA,SAAS,cACR,KACA,OACA,UACA,MACA,QACA,KACO;AACP,QAAM,YAAY,KAAK,gBAAgB;AACvC,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,YAAY,GAAG;AACjD,UAAM,IAAI,WAAW,+DAA+D;AAAA,EACrF;AACA,QAAM,UAAqC,EAAE,SAAS;AACtD,QAAM,WAAW,CAAC,YAA0C;AAC3D,YAAQ,QAAQ,WAAW,MAAM;AAChC,cAAQ,QAAQ;AAChB,UAAI,CAAC,MAAM,UAAU,CAAC,MAAM,QAAQ,IAAI,QAAQ,SAAS,GAAG,EAAG;AAC/D,UAAI,KAAK;AAAA,QACR;AAAA,UACC;AAAA,UACA;AAAA,YACC,MAAM;AAAA,YACN,KAAK,QAAQ,SAAS;AAAA,YACtB,SAAS,QAAQ,SAAS;AAAA,UAC3B;AAAA,QACD;AAAA,MACD,CAAC;AACD,UAAI,CAAC,YAAY,QAAQ,QAAQ,SAAS,OAAO,GAAG;AACnD,cAAM,QAAQ,GAAG,KAAK,SAAS,yBAAyB,QAAQ,SAAS,GAAG;AAC5E,cAAM,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACzC,YAAI,KAAK;AAAA,UACR;AAAA,YACC;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,KAAK,QAAQ,SAAS;AAAA,cACtB,SAAS,QAAQ,SAAS;AAAA,cAC1B;AAAA,YACD;AAAA,UACD;AAAA,QACD,CAAC;AACD;AAAA,MACD;AACA,YAAM,UAAU,QAAQ,SAAS,UAAU;AAC3C,YAAM,UAAU,iBAAiB,QAAQ,OAAO,KAAK;AACrD,UAAI,KAAK;AAAA,QACR;AAAA,UACC;AAAA,UACA;AAAA,YACC,MAAM;AAAA,YACN,KAAK,QAAQ,SAAS;AAAA,YACtB;AAAA,YACA;AAAA,YACA,OAAO,GAAG,KAAK,SAAS,yBAAyB,QAAQ,SAAS,GAAG;AAAA,UACtE;AAAA,QACD;AAAA,MACD,CAAC;AACD,YAAM,QAAQ,mBAA6B;AAAA,QAC1C,WAAW,QAAQ;AAAA,QACnB,MAAM,QAAQ;AAAA,QACd,KAAK,QAAQ,SAAS;AAAA,QACtB,QAAQ,MAAM;AAAA,QACd,SAAS,QAAQ;AAAA,QACjB,gBAAgB,QAAQ,SAAS;AAAA,QACjC;AAAA,QACA,aAAa,OAAO;AAAA,QACpB,aAAa,IAAI;AAAA,QACjB,WAAW,QAAQ,SAAS;AAAA,MAC7B,CAAC;AACD,cAAQ,QAAQ,WAAW,MAAM;AAChC,gBAAQ,QAAQ;AAChB,YAAI,CAAC,MAAM,UAAU,CAAC,MAAM,QAAQ,IAAI,QAAQ,SAAS,GAAG,EAAG;AAC/D,gBAAQ,WAAW;AACnB,YAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,YAAY,UAAU,MAAM,CAAC,CAAC,CAAC;AAC1D,iBAAS,KAAK;AAAA,MACf,GAAG,OAAO;AAAA,IACX,GAAG,SAAS;AAAA,EACb;AACA,QAAM,QAAQ,IAAI,SAAS,SAAS,KAAK,OAAO;AAChD,WAAS,QAAQ;AAClB;AAEA,SAAS,eACR,KACA,OACA,OACA,WACO;AACP,MAAI,iBAAiB,KAAK,GAAG;AAC5B,QAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC;AAC5D;AAAA,EACD;AACA,QAAM,UAAU,wBAAwB,KAAK;AAC7C,MAAI,YAAY,QAAW;AAC1B,QAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,OAAO,QAAQ,CAAC,CAAC,CAAC;AACxD;AAAA,EACD;AACA,QAAM,WAAW;AACjB,MAAI,SAAS,cAAc,WAAW;AACrC,QAAI,KAAK;AAAA,MACR;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ,SAAS;AAAA,QAClB;AAAA,MACD;AAAA,IACD,CAAC;AACD;AAAA,EACD;AACA,QAAM,MAAM,SAAS,SAAS;AAC9B,QAAM,WAAW,MAAM,SAAS;AAChC,MAAI,OAAO,MAAM,QAAQ;AACxB,QAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,aAAa,KAAK,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC;AACrE;AAAA,EACD;AACA,MAAI,MAAM,UAAU;AACnB,QAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC;AAC5D;AAAA,EACD;AACA,MAAI,SAAS,SAAS,SAAS,MAAM,cAAc;AAClD,QAAI,KAAK;AAAA,MACR;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO,GAAG,SAAS,oBAAoB,SAAS,SAAS,MAAM,oBAAoB,MAAM,YAAY;AAAA,QACtG;AAAA,MACD;AAAA,IACD,CAAC;AACD;AAAA,EACD;AACA,QAAM,eAAe,SAAS,SAAS;AACvC,QAAM,SAAS;AACf,MAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,UAAU,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC;AAC7D,MAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,WAAW,SAAS,CAAC,CAAC,CAAC;AAClD,MAAI,SAAS,SAAS,SAAS,SAAS,SAAS,cAAc,QAAW;AACzE,UAAM,UAAU,MAAM,QAAQ,IAAI,SAAS,SAAS,SAAS;AAC7D,QAAI,YAAY,QAAW;AAC1B,UAAI,KAAK;AAAA,QACR,CAAC,QAAQ,EAAE,MAAM,gBAAgB,SAAS,OAAO,WAAW,SAAS,SAAS,UAAU,CAAC;AAAA,MAC1F,CAAC;AACD;AAAA,IACD;AACA,QAAI,SAAS,UAAU,OAAW,cAAa,QAAQ,KAAK;AAC5D,UAAM,QAAQ,OAAO,SAAS,SAAS,SAAS;AAChD,QAAI,KAAK;AAAA,MACR;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,WAAW,SAAS,SAAS;AAAA,UAC7B;AAAA,UACA,UAAU,QAAQ;AAAA,QACnB;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF,WAAW,SAAS,SAAS,UAAU,SAAS,SAAS,cAAc,QAAW;AACjF,UAAM,UAAU,MAAM,QAAQ,IAAI,SAAS,SAAS,SAAS;AAC7D,QAAI,YAAY,QAAW;AAC1B,UAAI,KAAK;AAAA,QACR,CAAC,QAAQ,EAAE,MAAM,gBAAgB,SAAS,QAAQ,WAAW,SAAS,SAAS,UAAU,CAAC;AAAA,MAC3F,CAAC;AACD;AAAA,IACD;AACA,QAAI,SAAS,UAAU,OAAW,cAAa,QAAQ,KAAK;AAC5D,UAAM,QAAQ,OAAO,SAAS,SAAS,SAAS;AAChD,QAAI,KAAK;AAAA,MACR;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,WAAW,SAAS,SAAS;AAAA,UAC7B;AAAA,UACA,UAAU,QAAQ;AAAA,UAClB,OAAO,mBAAmB,SAAS,SAAS,aAAa;AAAA,QAC1D;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEA,SAAS,wBAAwB,UAAuC;AACvE,MAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACtD,WAAO;AAAA,EACR;AACA,QAAM,YAAY;AAClB,MAAI,OAAO,UAAU,cAAc,YAAY,UAAU,UAAU,WAAW,GAAG;AAChF,WAAO;AAAA,EACR;AACA,MACC,OAAO,UAAU,SAAS,YAC1B,CAAC,cAAc,IAAI,UAAU,IAA8B,GAC1D;AACD,WAAO;AAAA,EACR;AACA,QAAM,WAAW,UAAU;AAC3B,MAAI,OAAO,aAAa,YAAY,aAAa,MAAM;AACtD,WAAO;AAAA,EACR;AACA,MAAI,CAAC,sBAAsB,SAAS,GAAG,GAAG;AACzC,WAAO;AAAA,EACR;AACA,MAAI,CAAC,yBAAyB,SAAS,MAAM,GAAG;AAC/C,WAAO;AAAA,EACR;AACA,MACC,OAAO,SAAS,mBAAmB,YAClC,SAAS,eAA0B,WAAW,GAC9C;AACD,WAAO;AAAA,EACR;AACA,MAAI,CAAC,sBAAsB,SAAS,OAAO,GAAG;AAC7C,WAAO;AAAA,EACR;AACA,MACC,CAAC,sBAAsB,SAAS,WAAW,KAC1C,SAAS,cAA0B,SAAS,SAC5C;AACD,WAAO;AAAA,EACR;AACA,MAAI,SAAS,cAAc,UAAa,CAAC,sBAAsB,SAAS,SAAS,GAAG;AACnF,WAAO;AAAA,EACR;AACA,OAAK,UAAU,SAAS,SAAS,UAAU,SAAS,WAAW,SAAS,cAAc,QAAW;AAChG,WAAO,uBAAuB,UAAU,IAAI;AAAA,EAC7C;AACA,QAAM,eAAe;AAAA,IACpB,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,EACD;AACA,MAAI,iBAAiB,OAAW,QAAO;AACvC,SAAO;AACR;AAEA,SAAS,gBAAgB,OAAoC;AAC5D,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAChD,WAAO;AAAA,EACR;AACA,QAAM,OAAQ,MAAsC;AACpD,MACC,SAAS,WACT,SAAS,UACT,SAAS,SACT,SAAS,UACT,SAAS,SACR;AACD,WAAO;AAAA,EACR;AACA,OACE,SAAS,SAAS,SAAS,WAC5B,CAAC,sBAAuB,MAA2C,SAAS,GAC3E;AACD,WAAO,eAAe,IAAI;AAAA,EAC3B;AACA,SAAO;AACR;AAEA,SAAS,gBACR,OACA,QACA,MACsC;AACtC,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,WAAY,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,QAAQ,CAAC,CAAC;AAAA,MACnE;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,qBAAqB;AAAA,EAC3D;AACD;AAEA,SAAS,YACR,OACA,QACA,MACsB;AACtB,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,OAAO;AACzB,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,MAAM,WAAW,UAAU,MAAM,SAAS,CAAC,CAAC,CAAC;AAAA,QAC9E;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,SAAS,SAAS,iBAAiB;AAAA,EACnD;AACD;AAEA,SAAS,aACR,OACA,QACA,MACuB;AACvB,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,QAAQ;AAC1B,cAAI,KAAK;AAAA,YACR,CAAC,QAAQ,EAAE,WAAW,MAAM,WAAW,UAAU,MAAM,UAAU,OAAO,MAAM,MAAM,CAAC;AAAA,UACtF,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,UAAU,SAAS,kBAAkB;AAAA,EACrD;AACD;AAEA,SAAS,cACR,OACA,QACA,MACA,WACyB;AACzB,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,UAAI,OACH,IAAI,MAAM,IAAsB,KAC/B;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ;AAAA,MACT;AACD,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,YAAY;AAC9B,gBAAM,EAAE,KAAK,QAAQ,IAAI,MAAM,SAAS;AACxC,gBAAM,WAAW,eAAe,MAAM,SAAS,IAAI;AACnD,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OACC,MAAM,SAAS,SAAS,UACrB,YACA,MAAM,SAAS,SAAS,UACvB,WACA;AAAA,YACL,SAAS,KAAK,IAAI,KAAK,SAAS,MAAM,CAAC;AAAA,YACvC,SACC,MAAM,SAAS,SAAS,UACrB,IACA,YAAY,YAAY,IACvB,KAAK,UAAU,IACf,KAAK;AAAA,YACV,UAAU,WAAW,KAAK,WAAW,IAAI,KAAK;AAAA,YAC9C,SAAS;AAAA,UACV;AAAA,QACD,WAAW,MAAM,SAAS,OAAO;AAChC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO,MAAM,SAAS,SAAS,UAAU,WAAW;AAAA,YACpD,SAAS,KAAK,IAAI,GAAG,KAAK,UAAU,CAAC;AAAA,YACrC,OAAO,KAAK,QAAQ;AAAA,YACpB,SAAS,MAAM,SAAS,SAAS;AAAA,UAClC;AAAA,QACD,WAAW,MAAM,SAAS,QAAQ;AACjC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,KAAK,IAAI,GAAG,KAAK,UAAU,CAAC;AAAA,YACrC,QAAQ,KAAK,SAAS;AAAA,YACtB,QAAQ,KAAK,SAAS;AAAA,YACtB,SAAS,MAAM,SAAS,SAAS;AAAA,UAClC;AAAA,QACD,WAAW,MAAM,SAAS,SAAS;AAClC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,aAAa,MAAM;AAAA,UACpB;AAAA,QACD,WAAW,MAAM,SAAS,aAAa;AACtC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,KAAK,IAAI,GAAG,KAAK,UAAU,CAAC;AAAA,YACrC,QAAQ,KAAK,SAAS;AAAA,YACtB,SAAS,MAAM;AAAA,UAChB;AAAA,QACD,WAAW,MAAM,SAAS,UAAU;AACnC,iBAAO,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO;AAAA,QACxC,WAAW,MAAM,SAAS,gBAAgB;AACzC,iBAAO,EAAE,GAAG,MAAM,OAAO,WAAW,QAAQ,KAAK,SAAS,GAAG,SAAS,MAAM,IAAI;AAAA,QACjF,WAAW,MAAM,SAAS,oBAAoB;AAC7C,iBAAO,EAAE,GAAG,MAAM,OAAO,WAAW,QAAQ,KAAK,SAAS,EAAE;AAAA,QAC7D,WAAW,MAAM,SAAS,kBAAkB,MAAM,SAAS,WAAW;AACrE,iBAAO,EAAE,GAAG,MAAM,OAAO,WAAW,QAAQ,KAAK,SAAS,EAAE;AAAA,QAC7D,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,SAAS;AACvE,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,QAAQ,KAAK,SAAS;AAAA,YACtB,SAAS,MAAM,SAAS,SAAS;AAAA,UAClC;AAAA,QACD,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,SAAS;AACvE,iBAAO,EAAE,GAAG,MAAM,OAAO,UAAU,SAAS,MAAM,SAAS,SAAS,IAAI;AAAA,QACzE;AAAA,MACD;AACA,UAAI,MAAM,IAAI,IAAI;AAClB,UAAI,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1B;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,mBAAmB;AAAA,EACvD;AACD;AAEA,SAAS,cACR,OACA,QACA,MACgB;AAChB,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,OAAQ,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,iBAClD,MAAM,SAAS,YAAa,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,iBAC5D,MAAM,SAAS,gBAAgB;AACvC,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA,GAAG,IAAI,iBAAiB,MAAM,GAAG,gCAAgC,MAAM,QAAQ;AAAA,YAChF;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,SAAS,SAAS;AACvE,cAAI,KAAK,CAAC,CAAC,QAAQ,mBAAmB,MAAM,SAAS,SAAS,uBAAuB,CAAC,CAAC,CAAC;AAAA,QACzF,WAAW,MAAM,SAAS,oBAAoB;AAC7C,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA,GAAG,IAAI,qBAAqB,MAAM,MAAM,2BAA2B,MAAM,QAAQ;AAAA,YAClF;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,gBAAgB;AACzC,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA,GAAG,IAAI,UAAU,MAAM,OAAO,uCAAuC,MAAM,SAAS;AAAA,YACrF;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,WAAW;AACpC,cAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,QACjC;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,mBAAmB;AAAA,EACvD;AACD;AAEA,SAAS,cACR,OACA,QACA,MACe;AACf,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,SAAU,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,MAAM,CAAC,CAAC;AAAA,MAC/D;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,mBAAmB;AAAA,EACvD;AACD;AAEA,SAAS,gBACR,OACA,QACA,MAC0B;AAC1B,SAAO,MAAM;AAAA,IACZ,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,cAAc,eAAe,MAAM,SAAS,IAAI,GAAG;AACrE,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,KAAK,MAAM,SAAS,SAAS;AAAA,gBAC7B,SAAS,MAAM,SAAS,SAAS;AAAA,gBACjC,aAAa,MAAM,SAAS,SAAS;AAAA,cACtC;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,qBAAqB;AAAA,EAC3D;AACD;AAEA,SAAS,mBACR,MACA,WACqC;AACrC,SAAO,IAAI,MAAM,MAAM;AAAA,IACtB,IAAI,QAAQ,UAAU;AACrB,UAAI,aAAa,QAAQ;AACxB,eAAO,CAAC,SAAe,OAAO,KAAK,iBAAiB,MAAM,SAAS,CAAC;AAAA,MACrE;AACA,YAAM,QAAQ,QAAQ,IAAI,QAAQ,UAAU,MAAM;AAClD,aAAO,OAAO,UAAU,aAAa,MAAM,KAAK,MAAM,IAAI;AAAA,IAC3D;AAAA,EACD,CAAC;AACF;AAEA,SAAS,iBAAiB,MAAY,WAAyB;AAC9D,SAAO,KAAK,IAAI,CAAC,QAAQ;AACxB,QAAI,IAAI,CAAC,MAAM,OAAQ,QAAO;AAC9B,QAAI,IAAI,CAAC,MAAM,SAAS;AACvB,aAAO;AAAA,QACN;AAAA,QACA;AAAA,UACC,GAAG,SAAS,4BAA4B;AAAA,YACvC,aAAa,IAAI,CAAC,CAAC;AAAA,UACpB,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AACA,QAAI,IAAI,CAAC,MAAM,YAAY;AAC1B,aAAO;AAAA,QACN;AAAA,QACA;AAAA,UACC,GAAG,SAAS;AAAA,QACb;AAAA,MACD;AAAA,IACD;AACA,WAAO;AAAA,MACN;AAAA,MACA;AAAA,QACC,GAAG,SAAS,oDAAoD,IAAI,CAAC,CAAC;AAAA,MACvE;AAAA,IACD;AAAA,EACD,CAAC;AACF;AAEA,SAAS,eAAe,OAAyC;AAChE,SAAO,EAAE,4BAA4B,MAAM,MAAM;AAClD;AAEA,SAAS,iBAAiB,OAAmD;AAC5E,SACC,OAAO,UAAU,YACjB,UAAU,QACT,MAAmC,+BAA+B,QACnE,OAAQ,MAAmC,UAAU;AAEvD;AAEA,SAAS,eAAe,MAAuC;AAC9D,SAAO,SAAS,WAAW,SAAS,UAAU,SAAS;AACxD;AAEA,SAAS,sBAAsB,OAAiC;AAC/D,SAAO,OAAO,cAAc,KAAK,KAAM,QAAmB;AAC3D;AAEA,SAAS,yBAAyB,OAAiC;AAClE,SAAO,OAAO,cAAc,KAAK,KAAM,SAAoB;AAC5D;AAEA,SAAS,uBACR,MACA,SACA,QACqB;AACrB,QAAM,OACL,OAAO,YAAY,YAAY,YAAY,OACvC,QAAwC,OACzC;AACJ,UAAQ,MAAM;AAAA,IACb,KAAK;AACJ,aAAO,SAAS,UAAW,QAAyC,UAAU,SAC3E,SACA,GAAG,MAAM;AAAA,IACb,KAAK;AAAA,IACL,KAAK;AACJ,aAAO,SAAS,WAAY,QAAyC,UAAU,SAC5E,SACA,GAAG,MAAM,KAAK,IAAI;AAAA,IACtB,KAAK;AACJ,aAAO,SAAS,YAAa,QAA0C,WAAW,SAC/E,SACA,GAAG,MAAM;AAAA,IACb,KAAK;AACJ,aAAO,SAAS,UAAU,SAAY,GAAG,MAAM;AAAA,IAChD,KAAK;AAAA,IACL,KAAK;AACJ,aAAO,YAAY,SAChB,SACA,GAAG,MAAM,KAAK,IAAI;AAAA,EACvB;AACD;AAEA,SAAS,mBAAmB,SAAkB,UAA4B;AACzE,MACC,OAAO,YAAY,YACnB,YAAY,QACX,QAAwC,SAAS,SACjD;AACD,WAAQ,QAAyC;AAAA,EAClD;AACA,SAAO;AACR;AAEA,SAAS,6BAA6B,OAAsB;AAC3D,QAAM,UAAU,aAAa,KAAK;AAClC,MACC,QAAQ,SAAS,cAAc,KAC/B,QAAQ,SAAS,UAAU,KAC3B,QAAQ,SAAS,gBAAgB,KACjC,QAAQ,SAAS,KAAK,KACtB,QAAQ,SAAS,KAAK,KACtB,QAAQ,SAAS,iBAAiB,KAClC,QAAQ,SAAS,aAAa,KAC9B,QAAQ,SAAS,aAAa,KAC9B,QAAQ,SAAS,0BAA0B,KAC3C,QAAQ,SAAS,wBAAwB,KACzC,QAAQ,SAAS,gBAAgB,GAChC;AACD,UAAM;AAAA,EACP;AACD;AAEA,SAAS,aAAa,OAAwB;AAC7C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC7D;;;ACjpEA,SAAS,kBAAqB,QAA0B;AACvD,SAAO;AACR;AAEA,SAAS,cAAc,KAAqB;AAC3C,MAAI,QAAQ,IAAI,MAAM,IAAe;AACrC,MAAI,UAAU,QAAW;AACxB,YAAQ;AAAA,MACP,KAAK;AAAA,MACL,SAAS,oBAAI,IAAI;AAAA,MACjB,QAAQ,oBAAI,IAAI;AAAA,MAChB,QAAQ;AAAA,MACR,kBAAkB;AAAA,IACnB;AACA,QAAI,MAAM,IAAI,KAAK;AAAA,EACpB;AACA,QAAM,SAAS;AACf,MAAI,CAAC,MAAM,kBAAkB;AAC5B,UAAM,mBAAmB;AACzB,QAAI,eAAe,MAAM;AACxB,YAAM,SAAS;AACf,YAAM,mBAAmB;AACzB,iBAAW,UAAU,MAAM,QAAQ,OAAO,EAAG,WAAU,MAAM;AAC7D,iBAAW,SAAS,MAAM,OAAO,OAAO,EAAG,cAAa,KAAK;AAC7D,YAAM,QAAQ,MAAM;AACpB,YAAM,OAAO,MAAM;AAAA,IACpB,CAAC;AAAA,EACF;AACA,SAAO;AACR;AAEA,SAAS,UAAU,QAA4B;AAC9C,MAAI;AACH,WAAO;AAAA,EACR,QAAQ;AAAA,EAER;AACD;AAEA,SAAS,cACR,OACA,QACA,MACkC;AAClC,QAAM,SAAS,MAAM;AAAA,IACpB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,YAAM,UACL,IAAI,MAAM,IAAoB,KAC7B,EAAE,OAAO,QAAQ,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,EAAE;AAC/D,UAAI,OAAO;AACX,iBAAW,SAAS,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AAC3C,eAAO,aAAa,MAAM,KAAuC;AAAA,MAClE;AACA,UAAI,MAAM,IAAI,IAAI;AAClB,UAAI,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1B;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,iBAAiB;AAAA,EACrD;AACA,QAAM,WAAW,MAAM;AAAA,IACtB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,SAAS,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AAC3C,cAAM,QAAQ;AACd,YAAI,aAAa,MAAO,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC;AAAA,MAC3D;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,mBAAmB;AAAA,EACzD;AACA,QAAM,SAAS,MAAM;AAAA,IACpB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,SAAS,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AAC3C,cAAM,QAAQ;AACd,YAAI,WAAW,MAAO,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,MACvD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,iBAAiB;AAAA,EACrD;AACA,SAAO,EAAE,QAAQ,QAAQ,UAAU,OAAO;AAC3C;AAEA,SAAS,aACR,SACA,OACiB;AACjB,UAAQ,MAAM,MAAM;AAAA,IACnB,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU,QAAQ,WAAW;AAAA,QAC7B,SAAS,MAAM;AAAA,MAChB;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU,KAAK,IAAI,GAAG,QAAQ,WAAW,CAAC;AAAA,QAC1C,SAAS,MAAM;AAAA,QACf,aAAa,MAAM;AAAA,MACpB;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU,KAAK,IAAI,GAAG,QAAQ,WAAW,CAAC;AAAA,QAC1C,SAAS,MAAM;AAAA,QACf,MAAM,QAAQ,OAAO;AAAA,QACrB,aAAa;AAAA,MACd;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU,KAAK,IAAI,GAAG,QAAQ,WAAW,CAAC;AAAA,QAC1C,SAAS,MAAM;AAAA,QACf,QAAQ,QAAQ,SAAS;AAAA,MAC1B;AAAA,IACD,KAAK;AACJ,aAAO;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,UAAU,KAAK,IAAI,GAAG,QAAQ,WAAW,CAAC;AAAA,QAC1C,SAAS,MAAM;AAAA,QACf,QAAQ,QAAQ,SAAS;AAAA,MAC1B;AAAA,IACD,KAAK;AACJ,aAAO,EAAE,GAAG,SAAS,OAAO,YAAY;AAAA,IACzC,KAAK;AACJ,aAAO,EAAE,GAAG,SAAS,OAAO,UAAU,QAAQ,QAAQ,SAAS,EAAE;AAAA,EACnE;AACD;AAqBA,SAAS,0BAA0B,KAAiC;AACnE,MAAI,QAAQ,IAAI,MAAM,IAA2B;AACjD,MAAI,UAAU,QAAW;AACxB,YAAQ;AAAA,MACP,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,kBAAkB;AAAA,MAClB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,aAAa,oBAAI,IAAI;AAAA,MACrB,WAAW,oBAAI,IAAI;AAAA,MACnB,iBAAiB,CAAC;AAAA,MAClB,QAAQ,oBAAI,IAAI;AAAA,MAChB,KAAK;AAAA,MACL,aAAa;AAAA,IACd;AACA,QAAI,MAAM,IAAI,KAAK;AAAA,EACpB;AACA,QAAM,SAAS;AACf,MAAI,CAAC,MAAM,kBAAkB;AAC5B,UAAM,mBAAmB;AACzB,QAAI,eAAe,MAAM;AACxB,YAAM,cAAc,CAAC,GAAG,MAAM,YAAY,OAAO,CAAC;AAClD,YAAM,SAAS,CAAC,GAAG,MAAM,OAAO,OAAO,CAAC;AACxC,YAAM,UAAU,MAAM;AACtB,YAAM,SAAS;AACf,YAAM,mBAAmB;AACzB,YAAM,YAAY;AAClB,YAAM,iBAAiB;AACvB,YAAM,iBAAiB;AACvB,YAAM,YAAY,MAAM;AACxB,YAAM,UAAU,MAAM;AACtB,YAAM,kBAAkB,CAAC;AACzB,YAAM,OAAO,MAAM;AACnB,iBAAW,UAAU,YAAa,WAAU,MAAM;AAClD,iBAAW,SAAS,OAAQ,cAAa,KAAK;AAC9C,eAAS,OAAO;AAAA,IACjB,CAAC;AAAA,EACF;AACA,SAAO;AACR;AAEA,SAAS,2BACR,OACA,eAAkC,UAIjC;AACD,QAAM,UAAU,MAAM;AACtB,QAAM,SAAS,CAAC,GAAG,MAAM,OAAO,OAAO,CAAC;AACxC,QAAM,cAAc,CAAC,GAAG,MAAM,YAAY,OAAO,CAAC;AAClD,QAAM,WAAW,CAAC,GAAG,MAAM,iBAAiB,GAAG,MAAM,UAAU,OAAO,CAAC;AACvE,QAAM,YAAY;AAClB,QAAM,iBAAiB;AACvB,QAAM,iBAAiB;AACvB,QAAM,OAAO,MAAM;AACnB,QAAM,YAAY,MAAM;AACxB,QAAM,kBAAkB,CAAC;AACzB,QAAM,UAAU,MAAM;AACtB,aAAW,SAAS,OAAQ,cAAa,KAAK;AAC9C,aAAW,cAAc,YAAa,WAAU,UAAU;AAC1D,MAAI,iBAAiB,SAAU,UAAS,OAAO;AAC/C,SAAO,EAAE,UAAU,QAAQ;AAC5B;AAEA,SAAS,kBAAkB,OAAoC;AAC9D,aAAW,SAAS,MAAM,OAAO,OAAO,EAAG,cAAa,KAAK;AAC7D,QAAM,OAAO,MAAM;AACpB;AAEA,SAAS,2BACR,OACA,eAAkC,UACL;AAC7B,QAAM,UAAU,MAAM;AACtB,QAAM,cAAc,CAAC,GAAG,MAAM,YAAY,OAAO,CAAC;AAClD,QAAM,WAAW,CAAC,GAAG,MAAM,UAAU,OAAO,CAAC;AAC7C,QAAM,YAAY;AAClB,QAAM,iBAAiB;AACvB,QAAM,iBAAiB;AACvB,QAAM,YAAY,MAAM;AACxB,QAAM,UAAU,MAAM;AACtB,aAAW,cAAc,YAAa,WAAU,UAAU;AAC1D,MAAI,iBAAiB,SAAU,UAAS,OAAO;AAC/C,SAAO;AACR;AAEA,SAAS,oCACR,QACyF;AACzF,MAAI,QAAQ,SAAS,SAAU,QAAO,EAAE,MAAM,SAAS;AACvD,MAAI,CAAC,OAAO,SAAS,OAAO,UAAU,KAAK,OAAO,aAAa,GAAG;AACjE,UAAM,IAAI,MAAM,qEAAqE;AAAA,EACtF;AACA,SAAO,EAAE,MAAM,UAAU,YAAY,KAAK,MAAM,OAAO,UAAU,EAAE;AACpE;AAEA,SAAS,0BACR,OACA,SACA,SACA,MACA,QACA,YAC8B;AAC9B,SAAO,MAAM;AAAA,IACZ,CAAC,OAAO;AAAA,IACR,CAAC,QAAQ;AACR,YAAM,QAAQ,0BAA0B,GAAG;AAE3C,YAAM,eAAe,CAAC,SAAmC;AACxD,YAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,YAAY,KAAK,CAAiC,CAAC,CAAC;AAAA,MAChF;AAEA,YAAM,uBAAuB,CAC5B,OACA,WACI;AACJ,mBAAW,QAAQ,OAAO;AACzB,uBAAa;AAAA,YACZ,MAAM;AAAA,YACN,KAAK,KAAK;AAAA,YACV,SAAS,KAAK;AAAA,YACd;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AAEA,YAAM,uBAAuB,CAAC,OAA4C,UAAmB;AAC5F,cAAM,UAAU,aAAa,KAAK;AAClC,mBAAW,QAAQ,OAAO;AACzB,uBAAa;AAAA,YACZ,MAAM;AAAA,YACN,KAAK,KAAK;AAAA,YACV,SAAS,KAAK;AAAA,YACd,OAAO;AAAA,UACR,CAAC;AAAA,QACF;AAAA,MACD;AAEA,YAAM,iBAAiB,CAAC,SAAiB,UAAmB;AAC3D,cAAM,UAAU,aAAa,KAAK;AAClC,cAAM,WAAW,2BAA2B,KAAK;AACjD,6BAAqB,UAAU,GAAG,IAAI,sBAAsB;AAC5D,YAAI,YAAY,QAAQ,OAAO,GAAG;AACjC,gBAAM,cAAc,UAAU;AAC9B,gBAAM,UAAU,iBAAiB,QAAQ,WAAW,KAAK;AACzD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,OAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD,CAAC;AACD,gBAAM,UAAU,MAAM;AACtB,gBAAM,QAAQ,WAAW,MAAM;AAC9B,kBAAM,OAAO,OAAO,OAAO;AAC3B,gBAAI,CAAC,MAAM,OAAQ;AACnB,kBAAM,WAAW;AAAA,UAClB,GAAG,OAAO;AACV,gBAAM,OAAO,IAAI,SAAS,KAAK;AAAA,QAChC,OAAO;AACN,+BAAqB,MAAM,iBAAiB,OAAO;AACnD,gBAAM,kBAAkB,CAAC;AACzB,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA,EAAE,MAAM,aAAa,SAAS,OAAO,QAAQ;AAAA,YAC9C;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AAEA,YAAM,QAAQ,CAAC,YAAoB;AAClC,YACC,CAAC,MAAM,UACP,MAAM,aACN,MAAM,mBAAmB,KACzB,MAAM,OAAO,OAAO,GACnB;AACD;AAAA,QACD;AACA,cAAM,SAAS,IAAI,YAAY,EAAE,gBAAgB;AACjD,cAAM,iBAAiB;AACvB,YAAI,KAAK;AAAA,UACR;AAAA,YACC;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN;AAAA,cACA,aAAa,OAAO;AAAA,YACrB;AAAA,UACD;AAAA,QACD,CAAC;AACD,cAAM,iBAAiB,QAAQ;AAC/B,YAAI,mBAAmB,QAAW;AACjC,yBAAe,SAAS,GAAG,IAAI,wCAAwC;AACvE;AAAA,QACD;AACA,YAAI;AACJ,YAAI;AACH,oBAAU,eAAe,KAAK,QAAQ,SAAS,CAAC,UAAU;AACzD,gBAAI,CAAC,MAAM,UAAU,MAAM,mBAAmB,QAAS;AACvD,gBAAI,MAAM,SAAS,SAAS;AAC3B,oBAAM,KAAK,MAAM;AACjB,kBAAI,GAAG,SAAS,QAAQ;AACvB,sBAAM,YAAY;AAClB,oBAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,QAAQ,QAAQ,CAAiC,CAAC,CAAC;AAC9E,6BAAa;AAAA,cACd,WAAW,GAAG,SAAS,UAAU,GAAG,SAAS,UAAU;AACtD,oBAAI,KAAK;AAAA,kBACR;AAAA,oBACC;AAAA,oBACA;AAAA,sBACC,MAAM;AAAA,sBACN,SAAS;AAAA,oBACV;AAAA,kBACD;AAAA,gBACD,CAAC;AAAA,cACF,WAAW,GAAG,SAAS,SAAS;AAC/B,sBAAM,cAAc,GAAG,SAAS;AAChC,sBAAM,WAAW,2BAA2B,KAAK;AACjD,qCAAqB,UAAU,GAAG,IAAI,kBAAkB;AACxD,oBAAI,KAAK;AAAA,kBACR;AAAA,oBACC;AAAA,oBACA;AAAA,sBACC,MAAM;AAAA,sBACN,MAAM,GAAG;AAAA,sBACT,QAAQ,GAAG;AAAA,oBACZ;AAAA,kBACD;AAAA,gBACD,CAAC;AACD,oBAAI,CAAC,aAAa;AACjB,iCAAe,SAAS;AAAA,oBACvB,MAAM;AAAA,oBACN,MAAM,GAAG;AAAA,oBACT,QAAQ,GAAG;AAAA,kBACZ,CAAC;AAAA,gBACF;AAAA,cACD;AAAA,YACD,WAAW,MAAM,SAAS,SAAS;AAClC,6BAAe,SAAS,MAAM,KAAK;AAAA,YACpC,WAAW,MAAM,SAAS,YAAY;AACrC,6BAAe,SAAS,GAAG,IAAI,wBAAwB;AAAA,YACxD;AAAA,UACD,CAAC;AAAA,QACF,SAAS,OAAO;AACf,yBAAe,SAAS,KAAK;AAC7B;AAAA,QACD;AACA,YAAI,YAAY,QAAW;AAC1B,yBAAe,SAAS,GAAG,IAAI,wCAAwC;AACvE;AAAA,QACD;AACA,YAAI,MAAM,UAAU,MAAM,mBAAmB,SAAS;AACrD,gBAAM,iBAAiB;AAAA,QACxB,OAAO;AACN,kBAAQ,OAAO;AAAA,QAChB;AAAA,MACD;AAEA,eAAS,QAAQ,MAAsC;AACtD,YAAI,CAAC,MAAM,WAAW;AACrB,uBAAa;AAAA,YACZ,MAAM;AAAA,YACN,KAAK,KAAK;AAAA,YACV,SAAS,KAAK;AAAA,YACd,OAAO,GAAG,IAAI;AAAA,UACf,CAAC;AACD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,OAAO,GAAG,IAAI;AAAA,cACf;AAAA,YACD;AAAA,UACD,CAAC;AACD;AAAA,QACD;AACA,cAAM,UAAU,MAAM;AACtB,YAAI,YAAY,QAAW;AAC1B,uBAAa;AAAA,YACZ,MAAM;AAAA,YACN,KAAK,KAAK;AAAA,YACV,SAAS,KAAK;AAAA,YACd,OAAO,GAAG,IAAI;AAAA,UACf,CAAC;AACD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,OAAO,GAAG,IAAI;AAAA,cACf;AAAA,YACD;AAAA,UACD,CAAC;AACD;AAAA,QACD;AACA,cAAM,SAAS,MAAM;AACrB,cAAM,UAAU,IAAI,QAAQ,IAAI;AAChC,qBAAa,EAAE,MAAM,WAAW,KAAK,KAAK,KAAK,SAAS,KAAK,QAAQ,CAAC;AACtE,YAAI,OAAO;AACX,YAAI;AACJ,YAAI;AACH,mBAAS,QAAQ,KAAK,KAAK,SAAS,CAAC,WAAW;AAC/C,gBAAI,QAAQ,CAAC,MAAM,UAAU,CAAC,MAAM,UAAU,IAAI,MAAM,EAAG;AAC3D,mBAAO;AACP,kBAAM,UAAU,OAAO,MAAM;AAC7B,kBAAM,YAAY,OAAO,MAAM;AAC/B,gBAAI,OAAO,IAAI;AACd,2BAAa,EAAE,MAAM,QAAQ,KAAK,KAAK,KAAK,SAAS,KAAK,QAAQ,CAAC;AACnE,kBAAI,KAAK;AAAA,gBACR,CAAC,QAAQ,EAAE,MAAM,QAAQ,SAAS,KAAK,QAAQ,CAAiC;AAAA,cACjF,CAAC;AAAA,YACF,OAAO;AACN,oBAAM,UAAU,aAAa,OAAO,KAAK;AACzC,2BAAa;AAAA,gBACZ,MAAM;AAAA,gBACN,KAAK,KAAK;AAAA,gBACV,SAAS,KAAK;AAAA,gBACd,OAAO;AAAA,cACR,CAAC;AACD,kBAAI,KAAK;AAAA,gBACR;AAAA,kBACC;AAAA,kBACA;AAAA,oBACC,MAAM;AAAA,oBACN,OAAO;AAAA,kBACR;AAAA,gBACD;AAAA,cACD,CAAC;AAAA,YACF;AAAA,UACD,CAAC;AAAA,QACF,SAAS,OAAO;AACf,gBAAM,UAAU,OAAO,MAAM;AAC7B,gBAAM,UAAU,aAAa,KAAK;AAClC,uBAAa;AAAA,YACZ,MAAM;AAAA,YACN,KAAK,KAAK;AAAA,YACV,SAAS,KAAK;AAAA,YACd,OAAO;AAAA,UACR,CAAC;AACD,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ,CAAiC,CAAC,CAAC;AACtF;AAAA,QACD;AACA,YAAI,WAAW,UAAa,CAAC,QAAQ,MAAM,UAAU,MAAM,UAAU,IAAI,MAAM,GAAG;AACjF,gBAAM,YAAY,IAAI,QAAQ,MAAM;AAAA,QACrC,WAAW,WAAW,UAAa,CAAC,MAAM,OAAQ,WAAU,MAAM;AAAA,MACnE;AAEA,eAAS,eAAqB;AAC7B,cAAM,UAAU,MAAM;AACtB,cAAM,kBAAkB,CAAC;AACzB,iBAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACpD,gBAAM,OAAO,QAAQ,KAAK;AAC1B,cAAI,CAAC,MAAM,aAAa,MAAM,mBAAmB,QAAW;AAC3D,iCAAqB,QAAQ,MAAM,KAAK,GAAG,GAAG,IAAI,kBAAkB;AACpE;AAAA,UACD;AACA,kBAAQ,IAAI;AAAA,QACb;AAAA,MACD;AAEA,YAAM,OAAO,CAAC,YAA2B;AACxC,cAAM,OAAO,EAAE,KAAK,MAAM,eAAe,QAAQ;AACjD,YAAI,MAAM,WAAW;AACpB,kBAAQ,IAAI;AACZ;AAAA,QACD;AACA,YAAI,WAAW,SAAS,UAAU;AACjC,cAAI,MAAM,gBAAgB,UAAU,WAAW,YAAY;AAC1D,yBAAa;AAAA,cACZ,MAAM;AAAA,cACN,KAAK,KAAK;AAAA,cACV;AAAA,cACA,OAAO,GAAG,IAAI;AAAA,YACf,CAAC;AACD,gBAAI,KAAK;AAAA,cACR;AAAA,gBACC;AAAA,gBACA;AAAA,kBACC,MAAM;AAAA,kBACN,OAAO,GAAG,IAAI;AAAA,gBACf;AAAA,cACD;AAAA,YACD,CAAC;AACD;AAAA,UACD;AACA,gBAAM,gBAAgB,KAAK,IAAI;AAC/B,uBAAa,EAAE,MAAM,UAAU,KAAK,KAAK,KAAK,QAAQ,CAAC;AACvD;AAAA,QACD;AACA,qBAAa;AAAA,UACZ,MAAM;AAAA,UACN,KAAK,KAAK;AAAA,UACV;AAAA,UACA,OAAO,GAAG,IAAI;AAAA,QACf,CAAC;AACD,YAAI,KAAK;AAAA,UACR;AAAA,YACC;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,OAAO,GAAG,IAAI;AAAA,YACf;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAEA,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,eAAe;AACrB,YAAI,aAAa,SAAS,QAAS,OAAM,CAAC;AAAA,iBACjC,aAAa,SAAS,OAAQ,MAAK,aAAa,OAAO;AAAA,aAC3D;AACJ,4BAAkB,KAAK;AACvB,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,MAAM,aAAa;AAAA,gBACnB,QAAQ,aAAa;AAAA,cACtB;AAAA,YACD;AAAA,UACD,CAAC;AACD,gBAAM,EAAE,UAAU,QAAQ,IAAI,2BAA2B,OAAO,MAAM;AACtE,+BAAqB,UAAU,GAAG,IAAI,kBAAkB;AACxD,mBAAS,MAAM,aAAa,MAAM,aAAa,MAAM;AACrD,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,MAAM,aAAa;AAAA,gBACnB,QAAQ,aAAa;AAAA,cACtB;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,yBAAyB;AAAA,EAC7D;AACD;AAEA,SAAS,sBACR,OACA,SACA,QACA,MACA,QACyB;AACzB,QAAM,UAAU,MAAM;AAAA,IACrB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,UAAW,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC;AAAA,MACjE;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,YAAY,SAAS,0BAA0B;AAAA,EAC/D;AACA,QAAM,YAAY,MAAM;AAAA,IACvB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,WAAW;AAC7B,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,SAAS,MAAM;AAAA,gBACf,aAAa,MAAM;AAAA,cACpB;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,QAAQ;AACjC,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC,CAAC,CAAC;AAAA,QAC9D,WAAW,MAAM,SAAS,QAAQ;AACjC,cAAI,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,QAAQ,SAAS,MAAM,QAAQ,CAAC,CAAC,CAAC;AAAA,QAC9D,WAAW,MAAM,SAAS,aAAa,MAAM,SAAS,UAAU;AAC/D,cAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;AAAA,QAC3B,WAAW,MAAM,SAAS,SAAS;AAClC,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA;AAAA,gBACC,MAAM;AAAA,gBACN,SAAS,MAAM;AAAA,gBACf,aAAa,MAAM;AAAA,gBACnB,SAAS,MAAM;AAAA,gBACf,OAAO,MAAM;AAAA,cACd;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,WAAW,MAAM,SAAS,aAAa;AACtC,cAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC;AAAA,QAC3B;AAAA,MACD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,cAAc,SAAS,4BAA4B;AAAA,EACnE;AACA,QAAM,WAAW,MAAM;AAAA,IACtB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,WAAY,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,IAAI,CAAC,CAAC;AAAA,MAC/D;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,2BAA2B;AAAA,EACjE;AACA,QAAM,SAAS,MAAM;AAAA,IACpB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,UAAI,OACH,IAAI,MAAM,IAA4B,KACrC;AAAA,QACA,OAAO;AAAA,QACP,SAAS;AAAA,QACT,aAAa,OAAO;AAAA,QACpB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACT;AACD,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,WAAW;AAC7B,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,aAAa,MAAM;AAAA,YACnB,aAAa;AAAA,UACd;AAAA,QACD,WAAW,MAAM,SAAS,QAAQ;AACjC,iBAAO,EAAE,GAAG,MAAM,OAAO,QAAQ,SAAS,MAAM,SAAS,aAAa,OAAU;AAAA,QACjF,WAAW,MAAM,SAAS,WAAW;AACpC,iBAAO,EAAE,GAAG,MAAM,UAAU,KAAK,WAAW,EAAE;AAAA,QAC/C,WAAW,MAAM,SAAS,QAAQ;AACjC,iBAAO,EAAE,GAAG,MAAM,MAAM,KAAK,OAAO,EAAE;AAAA,QACvC,WAAW,MAAM,SAAS,WAAW;AACpC,iBAAO,EAAE,GAAG,MAAM,OAAO,UAAU;AAAA,QACpC,WAAW,MAAM,SAAS,UAAU;AACnC,iBAAO,EAAE,GAAG,MAAM,OAAO,SAAS;AAAA,QACnC,WAAW,MAAM,SAAS,SAAS;AAClC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,QAAQ,KAAK,SAAS;AAAA,YACtB,aAAa,MAAM;AAAA,UACpB;AAAA,QACD,WAAW,MAAM,SAAS,SAAS;AAClC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,MAAM,WAAW,KAAK;AAAA,YAC/B,QAAQ,KAAK,SAAS;AAAA,UACvB;AAAA,QACD,WAAW,MAAM,SAAS,aAAa;AACtC,iBAAO;AAAA,YACN,GAAG;AAAA,YACH,OAAO;AAAA,YACP,SAAS,MAAM;AAAA,YACf,QAAQ,KAAK,SAAS;AAAA,UACvB;AAAA,QACD;AAAA,MACD;AACA,UAAI,MAAM,IAAI,IAAI;AAClB,UAAI,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1B;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,yBAAyB;AAAA,EAC7D;AACA,QAAM,SAAS,MAAM;AAAA,IACpB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,WAAW,MAAO,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,KAAK,CAAC,CAAC;AAAA,MACvD;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,WAAW,SAAS,yBAAyB;AAAA,EAC7D;AACA,QAAM,WAAW,MAAM;AAAA,IACtB,CAAC,MAAM;AAAA,IACP,CAAC,QAAQ;AACR,iBAAW,OAAO,SAAS,KAAK,CAAC,KAAK,CAAC,GAAG;AACzC,cAAM,QAAQ;AACd,YAAI,MAAM,SAAS,UAAW,KAAI,KAAK,CAAC,CAAC,QAAQ,MAAM,OAAO,CAAC,CAAC;AAAA,MACjE;AAAA,IACD;AAAA,IACA,EAAE,MAAM,GAAG,IAAI,aAAa,SAAS,2BAA2B;AAAA,EACjE;AACA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC;AAAA,IACvD,MAAM,CAAC,YACN,QAAQ,KAAK;AAAA,MACZ;AAAA,QACC;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,SACC,OAAO,YAAY,YAAY,mBAAmB,aAC/C,EAAE,MAAM,QAAQ,IAChB;AAAA,QACL;AAAA,MACD;AAAA,IACD,CAAC;AAAA,IACF,OAAO,CAAC,MAAM,WAAW,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,OAAO,CAAC,CAAC,CAAC;AAAA,EAClF;AACD;AAQO,SAAS,iBACf,OACA,SACA,OAAgC,CAAC,GACR;AACzB,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,SAAS,KAAK,SAAS,YAAY;AACzC,QAAM,aAAa,oCAAoC,KAAK,UAAU;AACtE,QAAM,UAAU,MAAM,KAA8B,CAAC,GAAG,MAAM;AAAA,IAC7D,MAAM,GAAG,IAAI;AAAA,IACb,SAAS;AAAA,EACV,CAAC;AACD,QAAM,SAAS,0BAA0B,OAAO,SAAS,SAAS,MAAM,QAAQ,UAAU;AAC1F,SAAO,sBAAsB,OAAO,SAAS,QAAQ,MAAM,MAAM;AAClE;AAEA,SAAS,aACR,OACA,QACA,MACA,MAKA,MACuC;AACvC,QAAM,SAAS,KAAK,SAAS,YAAY;AACzC,SAAO,MAAM;AAAA,IACZ,CAAC,kBAAkB,MAAM,CAAC;AAAA,IAC1B,CAAC,QAAQ;AACR,YAAM,QAAQ,cAAc,GAAG;AAC/B,YAAM,QAAQ,CAAC,OAAe,YAAoB;AACjD,YAAI,CAAC,MAAM,OAAQ;AACnB,cAAM,KAAK,MAAM;AACjB,YAAI,KAAK;AAAA,UACR,CAAC,QAAQ,EAAE,MAAM,WAAW,OAAO,QAAQ,CAA0C;AAAA,QACtF,CAAC;AACD,cAAM,eAAe,CAAC,UAAmB;AACxC,gBAAM,UAAU,aAAa,KAAK;AAClC,cAAI,KAAK;AAAA,YACR;AAAA,cACC;AAAA,cACA,EAAE,MAAM,aAAa,OAAO,SAAS,OAAO,QAAQ;AAAA,YAIrD;AAAA,UACD,CAAC;AACD,cAAI,KAAK,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC;AAAA,QAC9B;AACA,YAAI;AACJ,YAAI,OAAO;AACX,YAAI;AACH,mBAAS,KAAK,KAAK,OAAO,CAAC,WAAW;AACrC,gBAAI,QAAQ,CAAC,MAAM,OAAQ;AAC3B,mBAAO;AACP,kBAAM,QAAQ,OAAO,EAAE;AACvB,gBAAI,OAAO,IAAI;AACd,kBAAI,KAAK;AAAA,gBACR;AAAA,kBACC;AAAA,kBACA,EAAE,MAAM,QAAQ,OAAO,SAAS,QAAQ,OAAO,MAAM;AAAA,gBAItD;AAAA,cACD,CAAC;AACD;AAAA,YACD;AACA,gBAAI,YAAY,QAAQ,OAAO,GAAG;AACjC,oBAAM,cAAc,UAAU;AAC9B,oBAAM,UAAU,iBAAiB,QAAQ,WAAW,KAAK;AACzD,kBAAI,KAAK;AAAA,gBACR;AAAA,kBACC;AAAA,kBACA;AAAA,oBACC,MAAM;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,OAAO,aAAa,OAAO,KAAK;AAAA,kBACjC;AAAA,gBACD;AAAA,cACD,CAAC;AACD,oBAAM,QAAQ,WAAW,MAAM;AAC9B,sBAAM,OAAO,OAAO,EAAE;AACtB,oBAAI,CAAC,MAAM,OAAQ;AACnB,sBAAM,OAAO,WAAW;AAAA,cACzB,GAAG,OAAO;AACV,oBAAM,OAAO,IAAI,IAAI,KAAK;AAAA,YAC3B,OAAO;AACN,kBAAI,KAAK;AAAA,gBACR;AAAA,kBACC;AAAA,kBACA;AAAA,oBACC,MAAM;AAAA,oBACN;AAAA,oBACA;AAAA,oBACA,OAAO,aAAa,OAAO,KAAK;AAAA,kBACjC;AAAA,gBACD;AAAA,cACD,CAAC;AAAA,YACF;AAAA,UACD,CAAC;AAAA,QACF,SAAS,OAAO;AACf,cAAI,CAAC,MAAM;AACV,mBAAO;AACP,kBAAM,QAAQ,OAAO,EAAE;AACvB,yBAAa,KAAK;AAAA,UACnB;AACA;AAAA,QACD;AACA,YAAI,WAAW,QAAW;AACzB,cAAI,CAAC,MAAM;AACV,mBAAO;AACP,yBAAa,GAAG,IAAI,yCAAyC;AAAA,UAC9D;AACA;AAAA,QACD;AACA,YAAI,CAAC,QAAQ,MAAM,QAAQ;AAC1B,gBAAM,QAAQ,IAAI,IAAI,MAAM;AAAA,QAC7B,WAAW,CAAC,MAAM,QAAQ;AACzB,oBAAU,MAAM;AAAA,QACjB;AAAA,MACD;AACA,iBAAW,SAAS,SAAS,KAAK,CAAC,KAAK,CAAC,EAAG,OAAM,OAAiB,CAAC;AACpE,YAAM,WAAW,IAAI,SAAS,CAAC;AAC/B,UAAI,aAAa,MAAM;AACtB,YAAI,KAAK;AAAA,UACR,CAAC,QAAQ,EAAE,MAAM,oBAAoB,CAA0C;AAAA,QAChF,CAAC;AAAA,MACF,WAAW,aAAa,SAAS,aAAa,QAAW;AACxD,YAAI,KAAK;AAAA,UACR;AAAA,YACC;AAAA,YACA,EAAE,MAAM,kBAAkB,OAAO,SAAS;AAAA,UAC3C;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAAA,IACA,EAAE,MAAM,SAAS,KAAK;AAAA,EACvB;AACD;AAEO,SAAS,OACf,OACA,QACA,WACA,OAA+B,CAAC,GACE;AAClC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,KAAK,OAAO,aAAa;AACzB,YAAM,UAAU,UAAU,KAAK;AAC/B,aAAO,IAAI,YAAY,EAAE,WAAW,GAAG,QAAQ,SAAS,QAAQ;AAAA,IACjE;AAAA,IACA;AAAA,EACD;AACA,SAAO,cAAc,OAAO,QAAQ,IAAI;AACzC;AAEO,SAAS,UACf,OACA,QACA,WACA,OAA+B,CAAC,GACG;AACnC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,KAAK,OAAO,aAAa;AACzB,YAAM,UAAU,UAAU,KAAK;AAC/B,aAAO,IAAI,YAAY,EAAE,cAAc,GAAG,IAAI,SAAS,QAAQ;AAAA,IAChE;AAAA,IACA;AAAA,EACD;AACA,SAAO,cAAc,OAAO,QAAQ,IAAI;AACzC;AAEO,SAAS,YACf,OACA,QACA,SACA,QACA,OAA+B,CAAC,GACS;AACzC,QAAM,OAAO,KAAK,QAAQ;AAC1B,QAAM,SAAS;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,CAAC,KAAK,OAAO,aAAa;AACzB,YAAM,SAAS,IAAI,YAAY,EAAE,gBAAgB;AACjD,aAAO,QAAQ,OAAO,SAAS,OAAO,KAAK,GAAG,QAAQ;AAAA,IACvD;AAAA,IACA;AAAA,EACD;AACA,SAAO,cAAc,OAAO,QAAQ,IAAI;AACzC;;;ACvqCO,IAAM,wBAAwB,uBAAO,IAAI,uBAAuB;AAGhE,IAAM,4BAA4B,uBAAO,IAAI,2BAA2B;AAGxE,IAAM,2BAA2B,uBAAO,IAAI,0BAA0B;AAoBtE,IAAM,iBAAiB,oBAAI,IAAkD;AAC7E,IAAM,oBAAoB,oBAAI,IAAmD;AACjF,IAAM,gBAAgB,oBAAI,IAA+C;AAMzE,SAAS,cAAc,MAAsB;AACnD,SAAO,uBAAO,IAAI,oBAAoB,IAAI,EAAE;AAC7C;AAGO,SAAS,aAAa,MAAsB;AAClD,SAAO,uBAAO,IAAI,mBAAmB,IAAI,EAAE;AAC5C;AAEA,SAAS,SAAY,GAAM,GAAe;AACzC,QAAM,OAAO;AACb,QAAM,QAAQ;AACd,QAAM,OAAO,QAAQ,QAAQ,IAAI;AACjC,MAAI,KAAK,WAAW,QAAQ,QAAQ,KAAK,EAAE,OAAQ,QAAO;AAC1D,aAAW,OAAO,MAAM;AACvB,QAAI,CAAC,OAAO,GAAG,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC,EAAG,QAAO;AAAA,EAC/C;AACA,SAAO;AACR;AAEA,SAAS,eACR,UACA,MACA,MACO;AACP,QAAM,WAAW,SAAS,IAAI,IAAI,KAAK,CAAC;AACxC,MAAI,SAAS,KAAK,CAAC,YAAY,SAAS,SAAS,IAAI,CAAC,EAAG;AACzD,WAAS,IAAI,MAAM,CAAC,GAAG,UAAU,IAAI,CAAC;AACvC;AAEA,SAAS,aACR,UACA,MACuB;AACvB,UAAQ,CAAC,eAAuB,iBAAgE;AAC/F,QAAI,OAAO,iBAAiB,YAAY,iBAAiB,MAAM;AAC9D,YAAM,YAAY,aAAa;AAC/B,mBAAa,eAAe,WAAyB;AACpD,cAAMC,QAAQ,KAAmD;AACjE,uBAAe,UAAUA,OAAM,KAAK,SAAS,CAAC;AAAA,MAC/C,CAAC;AACD;AAAA,IACD;AAEA,UAAM,OAAQ,cAA4D;AAC1E,mBAAe,UAAU,MAAM,KAAK,YAAY,CAAC;AAAA,EAClD;AACD;AAGO,SAAS,aAAa,UAAwC;AACpE,SAAO,aAAa,gBAAgB,CAAC,eAAe,EAAE,UAAU,UAAU,EAAE;AAC7E;AAGO,SAAS,cAAc,IAAkC;AAC/D,SAAO,aAAa,mBAAmB,CAAC,eAAe,EAAE,IAAI,UAAU,EAAE;AAC1E;AAGO,SAAS,UAAU,MAAoC;AAC7D,SAAO,aAAa,eAAe,CAAC,eAAe,EAAE,MAAM,UAAU,EAAE;AACxE;","names":["requestId","ctor"]}
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/bridge-protobuf.ts","../../src/adapters/bridge-validation.ts","../../src/adapters/bridge-remote-call.ts","../../src/adapters/bridge-projections.ts","../../src/adapters/bridge-remote-responder.ts","../../src/adapters/bridge.ts","../../src/adapters/bridge-wire-edge-group.ts","../../src/adapters/environment-outbound.ts","../../src/adapters/environment-websocket-session.ts"],"sourcesContent":["// D497 canonical protobuf profile for the D134/D496 wire bridge envelope subset.\n\nexport type CanonicalProtobufErrorCategory =\n\t| \"unknown_field\"\n\t| \"duplicate_singular\"\n\t| \"noncanonical_bytes\"\n\t| \"invalid_oneof\"\n\t| \"missing_required\"\n\t| \"invalid_wire_edge\"\n\t| \"default_emission\"\n\t| \"malformed\";\n\nexport class CanonicalProtobufError extends Error {\n\treadonly category: CanonicalProtobufErrorCategory;\n\n\tconstructor(category: CanonicalProtobufErrorCategory, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"CanonicalProtobufError\";\n\t\tthis.category = category;\n\t}\n}\n\nexport interface CanonicalWireBridgeMetadata {\n\treadonly seq: bigint;\n\treadonly cursor: bigint;\n\treadonly idempotencyKey: string;\n\treadonly attempt: number;\n\treadonly maxAttempts: number;\n\treadonly timestampMs?: bigint;\n\treadonly ackForSeq?: bigint;\n\treadonly requestId?: string;\n}\n\nexport type CanonicalWireBridgeDataBody =\n\t| { readonly kind: \"value\"; readonly value: Uint8Array }\n\t| { readonly kind: \"wire_edge\"; readonly frame: CanonicalWireEdgeFrame };\n\nexport interface CanonicalWireEdgeFrame {\n\treadonly kind: \"dirty\" | \"data\";\n\treadonly edgeId: string;\n\treadonly causeId: string;\n\treadonly value?: Uint8Array;\n}\n\nexport type CanonicalWireBridgePayload =\n\t| { readonly kind: \"start\" }\n\t| { readonly kind: \"data\"; readonly body: CanonicalWireBridgeDataBody }\n\t| { readonly kind: \"ack\" }\n\t| { readonly kind: \"nack\"; readonly error?: Uint8Array }\n\t| { readonly kind: \"status\"; readonly status: Uint8Array }\n\t| { readonly kind: \"error\"; readonly error: Uint8Array }\n\t| { readonly kind: \"close\"; readonly reason?: Uint8Array };\n\nexport interface CanonicalWireBridgeEnvelope {\n\treadonly sessionId: string;\n\treadonly metadata: CanonicalWireBridgeMetadata;\n\treadonly payload: CanonicalWireBridgePayload;\n}\n\ninterface Field {\n\treadonly no: number;\n\treadonly wireType: number;\n\treadonly value: bigint | Uint8Array;\n}\n\nconst maxUint64 = (1n << 64n) - 1n;\nconst textDecoder = new TextDecoder(\"utf-8\", { fatal: true });\nconst textEncoder = new TextEncoder();\n\nexport function decodeCanonicalWireBridgeEnvelope(bytes: Uint8Array): CanonicalWireBridgeEnvelope {\n\tconst input = Uint8Array.from(bytes);\n\tconst envelope = parseWireBridgeEnvelope(input);\n\tvalidateWireBridgeEnvelope(envelope);\n\tconst canonical = encodeCanonicalWireBridgeEnvelope(envelope);\n\tif (!bytesEqual(input, canonical)) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"noncanonical_bytes\",\n\t\t\t\"WireBridgeEnvelope bytes are not canonical deterministic protobuf\",\n\t\t);\n\t}\n\treturn envelope;\n}\n\nexport function decodeCanonicalWireEdgeFrame(bytes: Uint8Array): CanonicalWireEdgeFrame {\n\tconst input = Uint8Array.from(bytes);\n\tconst frame = parseWireEdgeFrame(input);\n\tvalidateWireEdgeFrame(frame);\n\tconst canonical = encodeWireEdgeFrame(frame);\n\tif (!bytesEqual(input, canonical)) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"noncanonical_bytes\",\n\t\t\t\"WireEdgeFrame bytes are not canonical deterministic protobuf\",\n\t\t);\n\t}\n\treturn frame;\n}\n\nexport function encodeCanonicalWireEdgeFrame(frame: CanonicalWireEdgeFrame): Uint8Array {\n\tvalidateWireEdgeFrame(frame);\n\treturn encodeWireEdgeFrame(frame);\n}\n\nexport function encodeCanonicalWireBridgeEnvelope(\n\tenvelope: CanonicalWireBridgeEnvelope,\n): Uint8Array {\n\tvalidateWireBridgeEnvelope(envelope);\n\tconst out = new ByteWriter();\n\tout.stringField(1, envelope.sessionId);\n\tout.messageField(2, encodeMetadata(envelope.metadata));\n\tswitch (envelope.payload.kind) {\n\t\tcase \"start\":\n\t\t\tout.messageField(3, new Uint8Array());\n\t\t\tbreak;\n\t\tcase \"data\":\n\t\t\tout.messageField(4, encodeDataPayload(envelope.payload.body));\n\t\t\tbreak;\n\t\tcase \"ack\":\n\t\t\tout.messageField(5, new Uint8Array());\n\t\t\tbreak;\n\t\tcase \"nack\":\n\t\t\tout.messageField(6, encodeOptionalBytesMessage(1, envelope.payload.error));\n\t\t\tbreak;\n\t\tcase \"status\":\n\t\t\tout.messageField(7, encodeRequiredBytesMessage(1, envelope.payload.status));\n\t\t\tbreak;\n\t\tcase \"error\":\n\t\t\tout.messageField(8, encodeRequiredBytesMessage(1, envelope.payload.error));\n\t\t\tbreak;\n\t\tcase \"close\":\n\t\t\tout.messageField(9, encodeOptionalBytesMessage(1, envelope.payload.reason));\n\t\t\tbreak;\n\t}\n\treturn out.finish();\n}\n\nfunction parseWireBridgeEnvelope(bytes: Uint8Array): CanonicalWireBridgeEnvelope {\n\tconst fields = readFields(\n\t\tbytes,\n\t\tnew Map([\n\t\t\t[1, 2],\n\t\t\t[2, 2],\n\t\t\t[3, 2],\n\t\t\t[4, 2],\n\t\t\t[5, 2],\n\t\t\t[6, 2],\n\t\t\t[7, 2],\n\t\t\t[8, 2],\n\t\t\t[9, 2],\n\t\t]),\n\t\t\"WireBridgeEnvelope\",\n\t);\n\tconst session = bytesField(fields, 1);\n\tconst metadataBytes = bytesField(fields, 2);\n\tconst payloadFields = fields.filter((field) => field.no >= 3 && field.no <= 9);\n\tif (session === undefined || metadataBytes === undefined || payloadFields.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireBridgeEnvelope missing required fields\",\n\t\t);\n\t}\n\tif (payloadFields.length !== 1) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"invalid_oneof\",\n\t\t\t\"WireBridgeEnvelope payload oneof has multiple cases\",\n\t\t);\n\t}\n\tconst payloadField = payloadFields[0];\n\tif (!(payloadField.value instanceof Uint8Array)) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", \"WireBridgeEnvelope payload is malformed\");\n\t}\n\treturn {\n\t\tsessionId: utf8String(session, \"session_id\"),\n\t\tmetadata: parseMetadata(metadataBytes),\n\t\tpayload: parseEnvelopePayload(payloadField.no, payloadField.value),\n\t};\n}\n\nfunction parseEnvelopePayload(fieldNo: number, bytes: Uint8Array): CanonicalWireBridgePayload {\n\tswitch (fieldNo) {\n\t\tcase 3:\n\t\t\trequireEmptyMessage(bytes, \"start\");\n\t\t\treturn { kind: \"start\" };\n\t\tcase 4:\n\t\t\treturn { kind: \"data\", body: parseDataPayload(bytes) };\n\t\tcase 5:\n\t\t\trequireEmptyMessage(bytes, \"ack\");\n\t\t\treturn { kind: \"ack\" };\n\t\tcase 6:\n\t\t\treturn { kind: \"nack\", error: parseOptionalBytesPayload(bytes, \"nack\") };\n\t\tcase 7:\n\t\t\treturn { kind: \"status\", status: parseRequiredBytesPayload(bytes, \"status\") };\n\t\tcase 8:\n\t\t\treturn { kind: \"error\", error: parseRequiredBytesPayload(bytes, \"error\") };\n\t\tcase 9:\n\t\t\treturn { kind: \"close\", reason: parseOptionalBytesPayload(bytes, \"close\") };\n\t\tdefault:\n\t\t\tthrow new CanonicalProtobufError(\"unknown_field\", \"unknown envelope payload field\");\n\t}\n}\n\nfunction parseMetadata(bytes: Uint8Array): CanonicalWireBridgeMetadata {\n\tconst fields = readFields(\n\t\tbytes,\n\t\tnew Map([\n\t\t\t[1, 0],\n\t\t\t[2, 0],\n\t\t\t[3, 2],\n\t\t\t[4, 0],\n\t\t\t[5, 0],\n\t\t\t[6, 0],\n\t\t\t[7, 0],\n\t\t\t[8, 2],\n\t\t]),\n\t\t\"WireBridgeMetadata\",\n\t);\n\tconst seq = uintField(fields, 1);\n\tconst cursor = uintField(fields, 2);\n\tconst key = bytesField(fields, 3);\n\tconst attempt = uintField(fields, 4);\n\tconst maxAttempts = uintField(fields, 5);\n\tif (\n\t\tseq === undefined ||\n\t\tcursor === undefined ||\n\t\tkey === undefined ||\n\t\tattempt === undefined ||\n\t\tmaxAttempts === undefined\n\t) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireBridgeMetadata missing required fields\",\n\t\t);\n\t}\n\tconst timestampMs = uintField(fields, 6);\n\tconst ackForSeq = uintField(fields, 7);\n\tconst requestId = bytesField(fields, 8);\n\tif (timestampMs === 0n || ackForSeq === 0n || requestId?.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"default_emission\",\n\t\t\t\"optional metadata default value was emitted\",\n\t\t);\n\t}\n\treturn {\n\t\tseq,\n\t\tcursor,\n\t\tidempotencyKey: utf8String(key, \"idempotency_key\"),\n\t\tattempt: uint32(attempt, \"attempt\"),\n\t\tmaxAttempts: uint32(maxAttempts, \"max_attempts\"),\n\t\ttimestampMs,\n\t\tackForSeq,\n\t\trequestId: requestId === undefined ? undefined : utf8String(requestId, \"request_id\"),\n\t};\n}\n\nfunction parseDataPayload(bytes: Uint8Array): CanonicalWireBridgeDataBody {\n\tconst fields = readFields(\n\t\tbytes,\n\t\tnew Map([\n\t\t\t[1, 2],\n\t\t\t[2, 2],\n\t\t]),\n\t\t\"WireBridgeDataPayload\",\n\t);\n\tconst value = bytesField(fields, 1);\n\tconst wireEdge = bytesField(fields, 2);\n\tif (value !== undefined && wireEdge !== undefined) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"invalid_oneof\",\n\t\t\t\"WireBridgeDataPayload body has multiple cases\",\n\t\t);\n\t}\n\tif (value !== undefined) return { kind: \"value\", value };\n\tif (wireEdge !== undefined) return { kind: \"wire_edge\", frame: parseWireEdgeFrame(wireEdge) };\n\tthrow new CanonicalProtobufError(\"missing_required\", \"WireBridgeDataPayload missing body\");\n}\n\nfunction parseWireEdgeFrame(bytes: Uint8Array): CanonicalWireEdgeFrame {\n\tconst fields = readFields(\n\t\tbytes,\n\t\tnew Map([\n\t\t\t[1, 0],\n\t\t\t[2, 2],\n\t\t\t[3, 2],\n\t\t\t[4, 2],\n\t\t]),\n\t\t\"WireEdgeFrame\",\n\t);\n\tconst kind = uintField(fields, 1);\n\tconst edge = bytesField(fields, 2);\n\tconst cause = bytesField(fields, 3);\n\tconst value = bytesField(fields, 4);\n\tif (kind === undefined || edge === undefined || cause === undefined) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", \"WireEdgeFrame missing required fields\");\n\t}\n\tif (edge.length === 0 || cause.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireEdgeFrame edge_id/cause_id must be non-empty\",\n\t\t);\n\t}\n\tif (kind === 1n) {\n\t\tif (value !== undefined) {\n\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\"invalid_wire_edge\",\n\t\t\t\t\"DIRTY WireEdgeFrame must not carry value\",\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tkind: \"dirty\",\n\t\t\tedgeId: utf8String(edge, \"edge_id\"),\n\t\t\tcauseId: utf8String(cause, \"cause_id\"),\n\t\t};\n\t}\n\tif (kind === 2n) {\n\t\tif (value === undefined) {\n\t\t\tthrow new CanonicalProtobufError(\"invalid_wire_edge\", \"DATA WireEdgeFrame requires value\");\n\t\t}\n\t\treturn {\n\t\t\tkind: \"data\",\n\t\t\tedgeId: utf8String(edge, \"edge_id\"),\n\t\t\tcauseId: utf8String(cause, \"cause_id\"),\n\t\t\tvalue,\n\t\t};\n\t}\n\tthrow new CanonicalProtobufError(\"invalid_wire_edge\", \"WireEdgeFrame kind is invalid\");\n}\n\nfunction validateWireBridgeEnvelope(envelope: CanonicalWireBridgeEnvelope): void {\n\tif (!isRecord(envelope)) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", \"WireBridgeEnvelope DTO must be an object\");\n\t}\n\tif (typeof envelope.sessionId !== \"string\" || envelope.sessionId.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireBridgeEnvelope session_id must be non-empty\",\n\t\t);\n\t}\n\tconst metadata = envelope.metadata;\n\tif (!isRecord(metadata)) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", \"WireBridgeMetadata DTO must be an object\");\n\t}\n\tassertUint64(metadata.seq, \"seq\");\n\tassertUint64(metadata.cursor, \"cursor\");\n\tassertUint32Number(metadata.attempt, \"attempt\");\n\tassertUint32Number(metadata.maxAttempts, \"max_attempts\");\n\tif (metadata.timestampMs !== undefined) assertUint64(metadata.timestampMs, \"timestamp_ms\");\n\tif (metadata.ackForSeq !== undefined) assertUint64(metadata.ackForSeq, \"ack_for_seq\");\n\tif (metadata.seq === 0n || metadata.attempt === 0 || metadata.maxAttempts < metadata.attempt) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireBridgeMetadata positive fields are invalid\",\n\t\t);\n\t}\n\tif (typeof metadata.idempotencyKey !== \"string\" || metadata.idempotencyKey.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireBridgeMetadata idempotency_key is required\",\n\t\t);\n\t}\n\tif (metadata.requestId !== undefined && typeof metadata.requestId !== \"string\") {\n\t\tthrow new CanonicalProtobufError(\"malformed\", \"WireBridgeMetadata request_id must be a string\");\n\t}\n\tif (!isRecord(envelope.payload)) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", \"WireBridgeEnvelope payload is required\");\n\t}\n\tvalidatePayloadDto(envelope.payload);\n\tif (\n\t\t(envelope.payload.kind === \"ack\" || envelope.payload.kind === \"nack\") &&\n\t\tmetadata.ackForSeq === undefined\n\t) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", \"ACK/NACK requires metadata.ack_for_seq\");\n\t}\n\tif (metadata.timestampMs === 0n || metadata.ackForSeq === 0n || metadata.requestId === \"\") {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"default_emission\",\n\t\t\t\"optional metadata default value was emitted\",\n\t\t);\n\t}\n}\n\nfunction validatePayloadDto(payload: CanonicalWireBridgePayload): void {\n\tswitch (payload.kind) {\n\t\tcase \"start\":\n\t\tcase \"ack\":\n\t\t\treturn;\n\t\tcase \"data\":\n\t\t\tif (!isRecord(payload.body)) {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"missing_required\",\n\t\t\t\t\t\"WireBridgeDataPayload body is required\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (payload.body.kind === \"value\") {\n\t\t\t\tassertUint8Array(payload.body.value, \"WireBridgeDataPayload value\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (payload.body.kind === \"wire_edge\") {\n\t\t\t\tvalidateWireEdgeFrame(payload.body.frame);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\"invalid_oneof\",\n\t\t\t\t\"WireBridgeDataPayload body kind is invalid\",\n\t\t\t);\n\t\tcase \"nack\":\n\t\t\tif (payload.error !== undefined)\n\t\t\t\tassertNonEmptyOptionalBytes(payload.error, \"WireBridgeNackPayload error\");\n\t\t\treturn;\n\t\tcase \"status\":\n\t\t\tassertNonEmptyRequiredBytes(payload.status, \"WireBridgeStatusPayload status\");\n\t\t\treturn;\n\t\tcase \"error\":\n\t\t\tassertNonEmptyRequiredBytes(payload.error, \"WireBridgeErrorPayload error\");\n\t\t\treturn;\n\t\tcase \"close\":\n\t\t\tif (payload.reason !== undefined)\n\t\t\t\tassertNonEmptyOptionalBytes(payload.reason, \"WireBridgeClosePayload reason\");\n\t\t\treturn;\n\t\tdefault:\n\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\"invalid_oneof\",\n\t\t\t\t\"WireBridgeEnvelope payload kind is invalid\",\n\t\t\t);\n\t}\n}\n\nfunction validateWireEdgeFrame(frame: CanonicalWireEdgeFrame): void {\n\tif (!isRecord(frame)) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", \"WireEdgeFrame DTO must be an object\");\n\t}\n\tif (typeof frame.edgeId !== \"string\" || typeof frame.causeId !== \"string\") {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireEdgeFrame edge_id/cause_id are required\",\n\t\t);\n\t}\n\tif (frame.edgeId.length === 0 || frame.causeId.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"missing_required\",\n\t\t\t\"WireEdgeFrame edge_id/cause_id must be non-empty\",\n\t\t);\n\t}\n\tswitch (frame.kind) {\n\t\tcase \"dirty\":\n\t\t\tif (frame.value !== undefined) {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"invalid_wire_edge\",\n\t\t\t\t\t\"DIRTY WireEdgeFrame must not carry value\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn;\n\t\tcase \"data\":\n\t\t\tif (frame.value === undefined) {\n\t\t\t\tthrow new CanonicalProtobufError(\"invalid_wire_edge\", \"DATA WireEdgeFrame requires value\");\n\t\t\t}\n\t\t\tassertUint8Array(frame.value, \"WireEdgeFrame value\");\n\t\t\treturn;\n\t\tdefault:\n\t\t\tthrow new CanonicalProtobufError(\"invalid_wire_edge\", \"WireEdgeFrame kind is invalid\");\n\t}\n}\n\nfunction encodeMetadata(metadata: CanonicalWireBridgeMetadata): Uint8Array {\n\tconst out = new ByteWriter();\n\tout.varintField(1, metadata.seq);\n\tout.varintField(2, metadata.cursor);\n\tout.stringField(3, metadata.idempotencyKey);\n\tout.varintField(4, BigInt(metadata.attempt));\n\tout.varintField(5, BigInt(metadata.maxAttempts));\n\tif (metadata.timestampMs !== undefined) out.varintField(6, metadata.timestampMs);\n\tif (metadata.ackForSeq !== undefined) out.varintField(7, metadata.ackForSeq);\n\tif (metadata.requestId !== undefined) out.stringField(8, metadata.requestId);\n\treturn out.finish();\n}\n\nfunction encodeDataPayload(body: CanonicalWireBridgeDataBody): Uint8Array {\n\tconst out = new ByteWriter();\n\tif (body.kind === \"value\") {\n\t\tout.bytesField(1, body.value);\n\t} else {\n\t\tout.messageField(2, encodeWireEdgeFrame(body.frame));\n\t}\n\treturn out.finish();\n}\n\nfunction encodeWireEdgeFrame(frame: CanonicalWireEdgeFrame): Uint8Array {\n\tconst out = new ByteWriter();\n\tout.varintField(1, frame.kind === \"dirty\" ? 1n : 2n);\n\tout.stringField(2, frame.edgeId);\n\tout.stringField(3, frame.causeId);\n\tif (frame.value !== undefined) out.bytesField(4, frame.value);\n\treturn out.finish();\n}\n\nfunction encodeRequiredBytesMessage(fieldNo: number, value: Uint8Array): Uint8Array {\n\tconst out = new ByteWriter();\n\tout.bytesField(fieldNo, value);\n\treturn out.finish();\n}\n\nfunction encodeOptionalBytesMessage(fieldNo: number, value: Uint8Array | undefined): Uint8Array {\n\tconst out = new ByteWriter();\n\tif (value !== undefined) {\n\t\tassertNonEmptyOptionalBytes(value, \"optional bytes payload\");\n\t\tout.bytesField(fieldNo, value);\n\t}\n\treturn out.finish();\n}\n\nfunction parseRequiredBytesPayload(bytes: Uint8Array, name: string): Uint8Array {\n\tconst fields = readFields(bytes, new Map([[1, 2]]), `WireBridge${name}Payload`);\n\tconst value = bytesField(fields, 1);\n\tif (value === undefined) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", `${name} payload missing required bytes`);\n\t}\n\tif (value.length === 0) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", `${name} payload bytes must be non-empty`);\n\t}\n\treturn value;\n}\n\nfunction parseOptionalBytesPayload(bytes: Uint8Array, name: string): Uint8Array | undefined {\n\tconst fields = readFields(bytes, new Map([[1, 2]]), `WireBridge${name}Payload`);\n\tconst value = bytesField(fields, 1);\n\tif (value?.length === 0) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"default_emission\",\n\t\t\t`${name} optional bytes default value was emitted`,\n\t\t);\n\t}\n\treturn value;\n}\n\nfunction requireEmptyMessage(bytes: Uint8Array, name: string): void {\n\tif (bytes.length !== 0) {\n\t\tthrow new CanonicalProtobufError(\"unknown_field\", `${name} payload must be empty`);\n\t}\n}\n\nfunction readFields(bytes: Uint8Array, allowed: Map<number, number>, messageName: string): Field[] {\n\tconst reader = new ByteReader(bytes);\n\tconst fields: Field[] = [];\n\tconst seen = new Set<number>();\n\twhile (!reader.done()) {\n\t\tconst key = reader.varint();\n\t\tconst fieldNo = Number(key >> 3n);\n\t\tconst wireType = Number(key & 7n);\n\t\tconst expectedWireType = allowed.get(fieldNo);\n\t\tif (fieldNo <= 0 || expectedWireType === undefined) {\n\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\"unknown_field\",\n\t\t\t\t`${messageName} contains unknown field ${fieldNo}`,\n\t\t\t);\n\t\t}\n\t\tif (wireType !== expectedWireType) {\n\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\"malformed\",\n\t\t\t\t`${messageName} field ${fieldNo} has wrong wire type`,\n\t\t\t);\n\t\t}\n\t\tif (seen.has(fieldNo)) {\n\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\"duplicate_singular\",\n\t\t\t\t`${messageName} field ${fieldNo} is duplicated`,\n\t\t\t);\n\t\t}\n\t\tseen.add(fieldNo);\n\t\tif (wireType === 0) {\n\t\t\tfields.push({ no: fieldNo, wireType, value: reader.varint() });\n\t\t} else if (wireType === 2) {\n\t\t\tfields.push({ no: fieldNo, wireType, value: reader.readBytes() });\n\t\t} else {\n\t\t\tthrow new CanonicalProtobufError(\"malformed\", `${messageName} unsupported wire type`);\n\t\t}\n\t}\n\treturn fields;\n}\n\nfunction uintField(fields: readonly Field[], no: number): bigint | undefined {\n\tconst field = fields.find((candidate) => candidate.no === no);\n\treturn typeof field?.value === \"bigint\" ? field.value : undefined;\n}\n\nfunction bytesField(fields: readonly Field[], no: number): Uint8Array | undefined {\n\tconst field = fields.find((candidate) => candidate.no === no);\n\treturn field?.value instanceof Uint8Array ? field.value : undefined;\n}\n\nfunction utf8String(bytes: Uint8Array, field: string): string {\n\tlet text: string;\n\ttry {\n\t\ttext = textDecoder.decode(bytes);\n\t} catch (error) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"malformed\",\n\t\t\t`${field} is not valid utf-8: ${error instanceof Error ? error.message : String(error)}`,\n\t\t);\n\t}\n\tif (text.length === 0) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", `${field} must be non-empty`);\n\t}\n\treturn text;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction assertUint64(value: unknown, field: string): asserts value is bigint {\n\tif (typeof value !== \"bigint\" || value < 0n || value > maxUint64) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", `${field} must be a uint64 bigint`);\n\t}\n}\n\nfunction assertUint32Number(value: unknown, field: string): asserts value is number {\n\tif (!Number.isInteger(value) || (value as number) < 0 || (value as number) > 0xffff_ffff) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", `${field} must be a uint32 number`);\n\t}\n}\n\nfunction assertUint8Array(value: unknown, field: string): asserts value is Uint8Array {\n\tif (!(value instanceof Uint8Array)) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", `${field} must be Uint8Array bytes`);\n\t}\n}\n\nfunction assertNonEmptyOptionalBytes(value: unknown, field: string): asserts value is Uint8Array {\n\tassertUint8Array(value, field);\n\tif (value.length === 0) {\n\t\tthrow new CanonicalProtobufError(\"default_emission\", `${field} default value must be omitted`);\n\t}\n}\n\nfunction assertNonEmptyRequiredBytes(value: unknown, field: string): asserts value is Uint8Array {\n\tassertUint8Array(value, field);\n\tif (value.length === 0) {\n\t\tthrow new CanonicalProtobufError(\"missing_required\", `${field} must be non-empty`);\n\t}\n}\n\nfunction uint32(value: bigint, field: string): number {\n\tif (value > 0xffff_ffffn) {\n\t\tthrow new CanonicalProtobufError(\"malformed\", `${field} exceeds uint32`);\n\t}\n\treturn Number(value);\n}\n\nfunction bytesEqual(left: Uint8Array, right: Uint8Array): boolean {\n\tif (left.length !== right.length) return false;\n\tfor (let i = 0; i < left.length; i++) {\n\t\tif (left[i] !== right[i]) return false;\n\t}\n\treturn true;\n}\n\nclass ByteReader {\n\tprivate offset = 0;\n\n\tconstructor(private readonly buf: Uint8Array) {}\n\n\tdone(): boolean {\n\t\treturn this.offset === this.buf.length;\n\t}\n\n\tvarint(): bigint {\n\t\tlet shift = 0n;\n\t\tlet result = 0n;\n\t\tfor (let i = 0; i < 10; i++) {\n\t\t\tif (this.offset >= this.buf.length) {\n\t\t\t\tthrow new CanonicalProtobufError(\"malformed\", \"truncated varint\");\n\t\t\t}\n\t\t\tconst byte = this.buf[this.offset++];\n\t\t\tif (i === 9 && (byte & 0xfe) !== 0) {\n\t\t\t\tthrow new CanonicalProtobufError(\"malformed\", \"varint exceeds 64 bits\");\n\t\t\t}\n\t\t\tresult |= BigInt(byte & 0x7f) << shift;\n\t\t\tif ((byte & 0x80) === 0) return result;\n\t\t\tshift += 7n;\n\t\t}\n\t\tthrow new CanonicalProtobufError(\"malformed\", \"varint exceeds 64 bits\");\n\t}\n\n\treadBytes(): Uint8Array {\n\t\tconst len = this.varint();\n\t\tif (len > BigInt(this.buf.length - this.offset)) {\n\t\t\tthrow new CanonicalProtobufError(\"malformed\", \"length-delimited field is truncated\");\n\t\t}\n\t\tconst start = this.offset;\n\t\tthis.offset += Number(len);\n\t\treturn this.buf.slice(start, this.offset);\n\t}\n}\n\nclass ByteWriter {\n\tprivate readonly chunks: number[] = [];\n\n\tvarintField(fieldNo: number, value: bigint): void {\n\t\tthis.tag(fieldNo, 0);\n\t\tthis.varint(value);\n\t}\n\n\tbytesField(fieldNo: number, value: Uint8Array): void {\n\t\tthis.tag(fieldNo, 2);\n\t\tthis.varint(BigInt(value.length));\n\t\tthis.bytes(value);\n\t}\n\n\tstringField(fieldNo: number, value: string): void {\n\t\tthis.bytesField(fieldNo, textEncoder.encode(value));\n\t}\n\n\tmessageField(fieldNo: number, value: Uint8Array): void {\n\t\tthis.bytesField(fieldNo, value);\n\t}\n\n\tfinish(): Uint8Array {\n\t\treturn new Uint8Array(this.chunks);\n\t}\n\n\tprivate tag(fieldNo: number, wireType: number): void {\n\t\tthis.varint(BigInt((fieldNo << 3) | wireType));\n\t}\n\n\tprivate varint(value: bigint): void {\n\t\tif (value < 0n || value > maxUint64) {\n\t\t\tthrow new CanonicalProtobufError(\"malformed\", \"varint value must fit uint64\");\n\t\t}\n\t\tlet next = value;\n\t\tdo {\n\t\t\tlet byte = Number(next & 0x7fn);\n\t\t\tnext >>= 7n;\n\t\t\tif (next !== 0n) byte |= 0x80;\n\t\t\tthis.chunks.push(byte);\n\t\t} while (next !== 0n);\n\t}\n\n\tprivate bytes(value: Uint8Array): void {\n\t\tfor (const byte of value) this.chunks.push(byte);\n\t}\n}\n","/**\n * Graph-visible wire bridge envelope helpers (D134).\n *\n * This first slice is transport-free: commands become outbound envelope facts,\n * remote receipts enter only through the inbound fact node, and retry/ack timeout\n * state is surfaced through graph-visible attempts/status/errors nodes.\n */\n\nimport { assertStrictJsonValue } from \"../json/codec.js\";\nimport type { CanonicalWireBridgeDataBody, CanonicalWireEdgeFrame } from \"./bridge-protobuf.js\";\nimport type {\n\tRemoteCallRequest,\n\tRemoteCallResponse,\n\tWireBridgeEnvelope,\n\tWireBridgeEnvelopeType,\n\tWireBridgeMetadata,\n} from \"./bridge-types.js\";\n\nexport const envelopeTypes = new Set<WireBridgeEnvelopeType>([\n\t\"start\",\n\t\"data\",\n\t\"ack\",\n\t\"nack\",\n\t\"status\",\n\t\"error\",\n\t\"close\",\n]);\n\nexport function validateRemoteCallRequest<T>(value: unknown): RemoteCallRequest<T> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (typeof value.operation !== \"string\" || value.operation.length === 0) return undefined;\n\tif (typeof value.requestId !== \"string\" || value.requestId.length === 0) return undefined;\n\tif (!(\"payload\" in value)) return undefined;\n\treturn {\n\t\toperation: value.operation,\n\t\trequestId: value.requestId,\n\t\tpayload: value.payload as T,\n\t};\n}\n\nexport function validateRemoteCallResponse<T>(value: unknown): RemoteCallResponse<T> | undefined {\n\tif (!isRecord(value)) return undefined;\n\tif (typeof value.operation !== \"string\" || value.operation.length === 0) return undefined;\n\tif (typeof value.requestId !== \"string\" || value.requestId.length === 0) return undefined;\n\tif (value.kind === \"result\" && \"payload\" in value) {\n\t\treturn {\n\t\t\tkind: \"result\",\n\t\t\toperation: value.operation,\n\t\t\trequestId: value.requestId,\n\t\t\tpayload: value.payload as T,\n\t\t};\n\t}\n\tif (value.kind === \"error\" && typeof value.error === \"string\" && value.error.length > 0) {\n\t\treturn {\n\t\t\tkind: \"error\",\n\t\t\toperation: value.operation,\n\t\t\trequestId: value.requestId,\n\t\t\terror: value.error,\n\t\t};\n\t}\n\tif (value.kind === \"status\" && typeof value.status === \"string\" && value.status.length > 0) {\n\t\treturn {\n\t\t\tkind: \"status\",\n\t\t\toperation: value.operation,\n\t\t\trequestId: value.requestId,\n\t\t\tstatus: value.status,\n\t\t};\n\t}\n\treturn undefined;\n}\n\nexport function remoteMalformedResponseRequestId(value: unknown): string | undefined {\n\tif (!isRecord(value)) return undefined;\n\treturn typeof value.requestId === \"string\" && value.requestId.length > 0\n\t\t? value.requestId\n\t\t: undefined;\n}\n\nexport function remoteMalformedResponseOperation(value: unknown): string | undefined {\n\tif (!isRecord(value)) return undefined;\n\treturn typeof value.operation === \"string\" && value.operation.length > 0\n\t\t? value.operation\n\t\t: undefined;\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nexport function isThenable(value: unknown): boolean {\n\treturn isRecord(value) && typeof value.then === \"function\";\n}\n\nexport function validateInboundEnvelope(envelope: unknown): string | undefined {\n\tif (typeof envelope !== \"object\" || envelope === null) {\n\t\treturn \"wireBridge: inbound envelope must be an object\";\n\t}\n\tconst candidate = envelope as Partial<WireBridgeEnvelope<unknown>>;\n\tif (typeof candidate.sessionId !== \"string\" || candidate.sessionId.length === 0) {\n\t\treturn \"wireBridge: inbound envelope sessionId must be a non-empty string\";\n\t}\n\tif (\n\t\ttypeof candidate.type !== \"string\" ||\n\t\t!envelopeTypes.has(candidate.type as WireBridgeEnvelopeType)\n\t) {\n\t\treturn \"wireBridge: inbound envelope type is not recognized\";\n\t}\n\tconst metadata = candidate.metadata as Partial<WireBridgeMetadata> | undefined;\n\tif (typeof metadata !== \"object\" || metadata === null) {\n\t\treturn \"wireBridge: inbound envelope metadata must be an object\";\n\t}\n\tif (!isSafePositiveInteger(metadata.seq)) {\n\t\treturn \"wireBridge: inbound envelope seq must be a positive integer\";\n\t}\n\tif (!isSafeNonNegativeInteger(metadata.cursor)) {\n\t\treturn \"wireBridge: inbound envelope cursor must be a non-negative integer\";\n\t}\n\tif (\n\t\ttypeof metadata.idempotencyKey !== \"string\" ||\n\t\t(metadata.idempotencyKey as string).length === 0\n\t) {\n\t\treturn \"wireBridge: inbound envelope idempotencyKey must be a non-empty string\";\n\t}\n\tif (!isSafePositiveInteger(metadata.attempt)) {\n\t\treturn \"wireBridge: inbound envelope attempt must be a positive integer\";\n\t}\n\tif (\n\t\t!isSafePositiveInteger(metadata.maxAttempts) ||\n\t\t(metadata.maxAttempts as number) < (metadata.attempt as number)\n\t) {\n\t\treturn \"wireBridge: inbound envelope maxAttempts must be >= attempt\";\n\t}\n\tif (metadata.ackForSeq !== undefined && !isSafePositiveInteger(metadata.ackForSeq)) {\n\t\treturn \"wireBridge: inbound envelope ackForSeq must be a positive integer\";\n\t}\n\tif ((candidate.type === \"ack\" || candidate.type === \"nack\") && metadata.ackForSeq === undefined) {\n\t\treturn `wireBridge: inbound ${candidate.type} envelope requires ackForSeq`;\n\t}\n\tconst payloadError = validatePayloadForType(\n\t\tcandidate.type as WireBridgeEnvelopeType,\n\t\tcandidate.payload,\n\t\t\"wireBridge: inbound envelope\",\n\t);\n\tif (payloadError !== undefined) return payloadError;\n\treturn undefined;\n}\n\nexport function validateCommand(value: unknown): string | undefined {\n\tif (typeof value !== \"object\" || value === null) {\n\t\treturn \"wireBridge: command fact must be an object\";\n\t}\n\tconst kind = (value as { readonly kind?: unknown }).kind;\n\tif (\n\t\tkind !== \"start\" &&\n\t\tkind !== \"send\" &&\n\t\tkind !== \"ack\" &&\n\t\tkind !== \"nack\" &&\n\t\tkind !== \"ack-timeout\" &&\n\t\tkind !== \"close\"\n\t) {\n\t\treturn \"wireBridge: command kind is not recognized\";\n\t}\n\tif (\n\t\t(kind === \"ack\" || kind === \"nack\") &&\n\t\t!isSafePositiveInteger((value as { readonly ackForSeq?: unknown }).ackForSeq)\n\t) {\n\t\treturn `wireBridge: ${kind} command ackForSeq must be a positive integer`;\n\t}\n\tif (kind === \"ack-timeout\") {\n\t\tconst timeout = value as {\n\t\t\treadonly seq?: unknown;\n\t\t\treadonly attempt?: unknown;\n\t\t\treadonly observedAtMs?: unknown;\n\t\t};\n\t\tif (!isSafePositiveInteger(timeout.seq)) {\n\t\t\treturn \"wireBridge: ack-timeout command seq must be a positive integer\";\n\t\t}\n\t\tif (!isSafePositiveInteger(timeout.attempt)) {\n\t\t\treturn \"wireBridge: ack-timeout command attempt must be a positive integer\";\n\t\t}\n\t\tconst observedAtMs = timeout.observedAtMs;\n\t\tif (\n\t\t\tobservedAtMs !== undefined &&\n\t\t\t(typeof observedAtMs !== \"number\" || !Number.isFinite(observedAtMs) || observedAtMs < 0)\n\t\t) {\n\t\t\treturn \"wireBridge: ack-timeout command observedAtMs must be a non-negative finite number\";\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function shouldTrackAck(type: WireBridgeEnvelopeType): boolean {\n\treturn type === \"start\" || type === \"data\" || type === \"close\";\n}\n\nexport function isSafePositiveInteger(value: unknown): value is number {\n\treturn Number.isSafeInteger(value) && (value as number) > 0;\n}\n\nexport function isSafeNonNegativeInteger(value: unknown): value is number {\n\treturn Number.isSafeInteger(value) && (value as number) >= 0;\n}\n\nexport function validatePayloadForType(\n\ttype: WireBridgeEnvelopeType,\n\tpayload: unknown,\n\tprefix: string,\n): string | undefined {\n\tconst record =\n\t\ttypeof payload === \"object\" && payload !== null\n\t\t\t? (payload as Record<string, unknown>)\n\t\t\t: undefined;\n\tconst kind = record === undefined ? undefined : ownData(record, \"kind\");\n\tswitch (type) {\n\t\tcase \"data\":\n\t\t\tif (kind !== \"data\" || record === undefined || !hasOwnData(record, \"value\")) {\n\t\t\t\treturn `${prefix}: data envelope requires data payload`;\n\t\t\t}\n\t\t\treturn wireAdmissiblePayloadError(ownData(record, \"value\"), `${prefix}: data payload`);\n\t\tcase \"nack\":\n\t\tcase \"error\":\n\t\t\tif (kind !== \"error\" || record === undefined || !hasOwnData(record, \"error\")) {\n\t\t\t\treturn `${prefix}: ${type} envelope requires error payload`;\n\t\t\t}\n\t\t\treturn wireAdmissiblePayloadError(ownData(record, \"error\"), `${prefix}: ${type} payload`);\n\t\tcase \"status\":\n\t\t\tif (kind !== \"status\" || record === undefined || !hasOwnData(record, \"status\")) {\n\t\t\t\treturn `${prefix}: status envelope requires status payload`;\n\t\t\t}\n\t\t\treturn wireAdmissiblePayloadError(ownData(record, \"status\"), `${prefix}: status payload`);\n\t\tcase \"close\":\n\t\t\tif (kind !== \"close\") return `${prefix}: close envelope requires close payload`;\n\t\t\tif (record === undefined || !(\"reason\" in record)) return undefined;\n\t\t\tif (!hasOwnData(record, \"reason\")) {\n\t\t\t\treturn `${prefix}: close reason must be a data property`;\n\t\t\t}\n\t\t\treturn wireAdmissiblePayloadError(ownData(record, \"reason\"), `${prefix}: close reason`);\n\t\tcase \"start\":\n\t\tcase \"ack\":\n\t\t\treturn payload === undefined\n\t\t\t\t? undefined\n\t\t\t\t: `${prefix}: ${type} envelope must not carry a payload`;\n\t}\n}\n\nexport function normalizeWireAdmissiblePayload(value: unknown, label: string): unknown {\n\tif (value instanceof Uint8Array) return Uint8Array.from(value);\n\tif (isCanonicalWireBridgeDataBody(value)) return cloneCanonicalWireBridgeDataBody(value);\n\tif (isCanonicalWireEdgeFrame(value)) return cloneCanonicalWireEdgeFrame(value);\n\tif (isCanonicalWireBridgeDataBodyLike(value) || isCanonicalWireEdgeFrameLike(value)) {\n\t\tthrow new TypeError(`${label}: invalid canonical wire DTO`);\n\t}\n\ttry {\n\t\treturn assertStrictJsonValue(value, label);\n\t} catch (error) {\n\t\tthrow new TypeError(\n\t\t\t`${label}: wire-admissible payload must be copied bytes, canonical WireEdgeFrame material, or strict JSON-like material`,\n\t\t\t{ cause: error },\n\t\t);\n\t}\n}\n\nexport function wireAdmissiblePayloadError(value: unknown, label: string): string | undefined {\n\ttry {\n\t\tnormalizeWireAdmissiblePayload(value, label);\n\t\treturn undefined;\n\t} catch (error) {\n\t\treturn errorMessage(error);\n\t}\n}\n\nexport function normalizeWireBridgePayload<T>(\n\tpayload:\n\t\t| { readonly kind: \"data\"; readonly value: T }\n\t\t| { readonly kind: \"error\"; readonly error: unknown }\n\t\t| { readonly kind: \"status\"; readonly status: unknown }\n\t\t| { readonly kind: \"close\"; readonly reason?: unknown }\n\t\t| undefined,\n\tprefix: string,\n): typeof payload {\n\tif (payload === undefined) return undefined;\n\tif (payload.kind === \"data\") {\n\t\treturn {\n\t\t\t...payload,\n\t\t\tvalue: normalizeWireAdmissiblePayload(payload.value, `${prefix}: data payload`) as T,\n\t\t};\n\t}\n\tif (payload.kind === \"error\") {\n\t\treturn {\n\t\t\t...payload,\n\t\t\terror: normalizeWireAdmissiblePayload(payload.error, `${prefix}: error payload`),\n\t\t};\n\t}\n\tif (payload.kind === \"status\") {\n\t\treturn {\n\t\t\t...payload,\n\t\t\tstatus: normalizeWireAdmissiblePayload(payload.status, `${prefix}: status payload`),\n\t\t};\n\t}\n\tif (\"reason\" in payload) {\n\t\tif (payload.reason === undefined) return { kind: \"close\" };\n\t\treturn {\n\t\t\t...payload,\n\t\t\treason: normalizeWireAdmissiblePayload(payload.reason, `${prefix}: close reason`),\n\t\t};\n\t}\n\treturn payload;\n}\n\nfunction isCanonicalWireBridgeDataBody(value: unknown): value is CanonicalWireBridgeDataBody {\n\tif (!isPlainDataRecord(value)) return false;\n\tconst kind = ownData(value, \"kind\");\n\tif (kind === \"value\") {\n\t\treturn hasOnlyKeys(value, [\"kind\", \"value\"]) && ownData(value, \"value\") instanceof Uint8Array;\n\t}\n\tif (kind === \"wire_edge\") {\n\t\treturn (\n\t\t\thasOnlyKeys(value, [\"frame\", \"kind\"]) && isCanonicalWireEdgeFrame(ownData(value, \"frame\"))\n\t\t);\n\t}\n\treturn false;\n}\n\nfunction isCanonicalWireBridgeDataBodyLike(value: unknown): boolean {\n\tif (!isPlainDataRecord(value)) return false;\n\tconst kind = ownData(value, \"kind\");\n\tif (kind === \"wire_edge\") return \"frame\" in value;\n\tif (kind !== \"value\") return false;\n\treturn \"value\" in value && ownData(value, \"value\") instanceof Uint8Array;\n}\n\nfunction isCanonicalWireEdgeFrame(value: unknown): value is CanonicalWireEdgeFrame {\n\tif (!isPlainDataRecord(value)) return false;\n\tconst kind = ownData(value, \"kind\");\n\tconst edgeId = ownData(value, \"edgeId\");\n\tconst causeId = ownData(value, \"causeId\");\n\tif (typeof edgeId !== \"string\" || edgeId.length === 0) return false;\n\tif (typeof causeId !== \"string\" || causeId.length === 0) return false;\n\tif (kind === \"dirty\") return hasOnlyKeys(value, [\"causeId\", \"edgeId\", \"kind\"]);\n\tif (kind === \"data\") {\n\t\treturn (\n\t\t\thasOnlyKeys(value, [\"causeId\", \"edgeId\", \"kind\", \"value\"]) &&\n\t\t\townData(value, \"value\") instanceof Uint8Array\n\t\t);\n\t}\n\treturn false;\n}\n\nfunction isCanonicalWireEdgeFrameLike(value: unknown): boolean {\n\tif (!isPlainDataRecord(value)) return false;\n\tconst kind = ownData(value, \"kind\");\n\tif (kind !== \"dirty\" && kind !== \"data\") return false;\n\treturn \"edgeId\" in value || \"causeId\" in value || \"value\" in value;\n}\n\nfunction isPlainDataRecord(value: unknown): value is Record<string, unknown> {\n\tif (!isRecord(value)) return false;\n\tconst proto = Object.getPrototypeOf(value);\n\tif (proto !== Object.prototype && proto !== null) return false;\n\tif (Object.getOwnPropertySymbols(value).length > 0) return false;\n\tfor (const key of Object.getOwnPropertyNames(value)) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\t\tif (descriptor === undefined || !(\"value\" in descriptor) || !descriptor.enumerable) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction ownData(value: Record<string, unknown>, key: string): unknown {\n\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\treturn descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined;\n}\n\nfunction hasOwnData(value: Record<string, unknown>, key: string): boolean {\n\tconst descriptor = Object.getOwnPropertyDescriptor(value, key);\n\treturn descriptor !== undefined && \"value\" in descriptor;\n}\n\nfunction hasOnlyKeys(value: Record<string, unknown>, keys: readonly string[]): boolean {\n\tconst allowed = new Set(keys);\n\tconst actual = Object.getOwnPropertyNames(value);\n\treturn actual.length === keys.length && actual.every((key) => allowed.has(key));\n}\n\nfunction cloneCanonicalWireBridgeDataBody(\n\tvalue: CanonicalWireBridgeDataBody,\n): CanonicalWireBridgeDataBody {\n\tif (value.kind === \"value\") return { kind: \"value\", value: Uint8Array.from(value.value) };\n\treturn { kind: \"wire_edge\", frame: cloneCanonicalWireEdgeFrame(value.frame) };\n}\n\nfunction cloneCanonicalWireEdgeFrame(value: CanonicalWireEdgeFrame): CanonicalWireEdgeFrame {\n\treturn {\n\t\tkind: value.kind,\n\t\tedgeId: value.edgeId,\n\t\tcauseId: value.causeId,\n\t\t...(value.value === undefined ? {} : { value: Uint8Array.from(value.value) }),\n\t};\n}\n\nexport function bridgePayloadError(payload: unknown, fallback: unknown): unknown {\n\tif (\n\t\ttypeof payload === \"object\" &&\n\t\tpayload !== null &&\n\t\t(payload as { readonly kind?: unknown }).kind === \"error\"\n\t) {\n\t\treturn (payload as { readonly error?: unknown }).error;\n\t}\n\treturn fallback;\n}\n\nexport function rethrowGraphRuntimeInvariant(error: unknown): void {\n\tconst message = errorMessage(error);\n\tif (\n\t\tmessage.includes(\"R-reentrancy\") ||\n\t\tmessage.includes(\"R-rewire\") ||\n\t\tmessage.includes(\"R-graph-domain\") ||\n\t\tmessage.includes(\"D37\") ||\n\t\tmessage.includes(\"D22\") ||\n\t\tmessage.includes(\"different graph\") ||\n\t\tmessage.includes(\"cross-graph\") ||\n\t\tmessage.includes(\"wire bridge\") ||\n\t\tmessage.includes(\"mid-fn topology mutation\") ||\n\t\tmessage.includes(\"reentrant dep mutation\") ||\n\t\tmessage.includes(\"feedback cycle\")\n\t) {\n\t\tthrow error;\n\t}\n}\n\nexport function errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n","/**\n * Graph-visible wire bridge envelope helpers (D134).\n *\n * This first slice is transport-free: commands become outbound envelope facts,\n * remote receipts enter only through the inbound fact node, and retry/ack timeout\n * state is surfaced through graph-visible attempts/status/errors nodes.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport type {\n\tRemoteCallBundle,\n\tRemoteCallError,\n\tRemoteCallOptions,\n\tRemoteCallRequest,\n\tRemoteCallResponse,\n\tRemoteCallResult,\n\tRemoteCallStatus,\n\tRemoteCallTimeout,\n\tWireBridgeBundle,\n\tWireBridgeEnvelope,\n\tWireBridgeEvent,\n} from \"./bridge-types.js\";\nimport {\n\tremoteMalformedResponseOperation,\n\tremoteMalformedResponseRequestId,\n\tvalidateRemoteCallRequest,\n\tvalidateRemoteCallResponse,\n} from \"./bridge-validation.js\";\n\n/** D147 remote dispatcher call helper over explicit wireBridge request/response facts. */\nexport function remoteCall<TRequest = unknown, TResponse = unknown>(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>,\n\topts: RemoteCallOptions = {},\n): RemoteCallBundle<TRequest, TResponse> {\n\tconst name = opts.name ?? \"remoteCall\";\n\tconst timeouts = graph.node<RemoteCallTimeout>([], null, {\n\t\tname: `${name}/timeouts`,\n\t\tfactory: \"remoteCallTimeouts\",\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst responses = remoteCallResponsesNode(graph, bridge.events, timeouts, name);\n\tconst results = remoteCallResultsNode(graph, responses, name);\n\tconst status = remoteCallStatusNode(graph, bridge.events, timeouts, name);\n\tconst errors = remoteCallErrorsNode(graph, timeouts, bridge.events, name);\n\treturn {\n\t\tresponses,\n\t\tresults,\n\t\tstatus,\n\t\terrors,\n\t\ttimeouts,\n\t\tcall(operation, requestId, payload, callOpts) {\n\t\t\tconst request = remoteCallRequest(operation, requestId, payload);\n\t\t\tbridge.command.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"send\",\n\t\t\t\t\t\tpayload: request,\n\t\t\t\t\t\tidempotencyKey: callOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]);\n\t\t\treturn request;\n\t\t},\n\t\ttimeout(requestId, operation, error) {\n\t\t\tconst timeout = remoteCallTimeout(requestId, operation, error);\n\t\t\ttimeouts.down([[\"DATA\", timeout]]);\n\t\t\treturn timeout;\n\t\t},\n\t};\n}\n\nfunction remoteCallRequest<TRequest>(\n\toperation: string,\n\trequestId: string,\n\tpayload: TRequest,\n): RemoteCallRequest<TRequest> {\n\tif (operation.length === 0) throw new RangeError(\"remoteCall: operation must be non-empty\");\n\tif (requestId.length === 0) throw new RangeError(\"remoteCall: requestId must be non-empty\");\n\treturn { operation, requestId, payload };\n}\n\nfunction remoteCallTimeout(\n\trequestId: string,\n\toperation: string | undefined,\n\terror: string,\n): RemoteCallTimeout {\n\tif (requestId.length === 0)\n\t\tthrow new RangeError(\"remoteCall: timeout requestId must be non-empty\");\n\tif (error.length === 0) throw new RangeError(\"remoteCall: timeout error must be non-empty\");\n\treturn { ...(operation === undefined ? {} : { operation }), requestId, error };\n}\n\ninterface RemotePendingRequest {\n\toperation: string;\n\trequestId: string;\n\tseq: number;\n}\n\ninterface RemotePendingState {\n\trequestIds: Set<string>;\n\tbySeq: Map<number, RemotePendingRequest>;\n}\n\nfunction remotePendingState(): RemotePendingState {\n\treturn { requestIds: new Set(), bySeq: new Map() };\n}\n\nfunction remotePendingContains(state: RemotePendingState, requestId: string): boolean {\n\treturn state.requestIds.has(requestId);\n}\n\nfunction remotePendingDuplicate(state: RemotePendingState, request: RemotePendingRequest): boolean {\n\tconst current = remotePendingTakeBySeqPreview(state, request.seq);\n\treturn current?.requestId !== request.requestId && state.requestIds.has(request.requestId);\n}\n\nfunction remotePendingTakeBySeqPreview(\n\tstate: RemotePendingState,\n\tseq: number,\n): RemotePendingRequest | undefined {\n\treturn state.bySeq.get(seq);\n}\n\nfunction remotePendingPeekByRequestId(\n\tstate: RemotePendingState,\n\trequestId: string,\n): RemotePendingRequest | undefined {\n\tfor (const request of state.bySeq.values()) {\n\t\tif (request.requestId === requestId) return request;\n\t}\n\treturn undefined;\n}\n\nfunction remotePendingInsert(state: RemotePendingState, request: RemotePendingRequest): void {\n\tconst existingBySeq = state.bySeq.get(request.seq);\n\tif (existingBySeq !== undefined) {\n\t\tstate.requestIds.delete(existingBySeq.requestId);\n\t}\n\tfor (const [seq, pending] of state.bySeq) {\n\t\tif (pending.requestId === request.requestId && seq !== request.seq) {\n\t\t\tstate.bySeq.delete(seq);\n\t\t\tbreak;\n\t\t}\n\t}\n\tstate.requestIds.add(request.requestId);\n\tstate.bySeq.set(request.seq, request);\n}\n\nfunction remotePendingTakeByRequestId(\n\tstate: RemotePendingState,\n\trequestId: string,\n): RemotePendingRequest | undefined {\n\tif (!state.requestIds.delete(requestId)) return undefined;\n\tlet seq: number | undefined;\n\tlet found: RemotePendingRequest | undefined;\n\tfor (const [candidateSeq, request] of state.bySeq) {\n\t\tif (request.requestId === requestId) {\n\t\t\tseq = candidateSeq;\n\t\t\tfound = request;\n\t\t\tbreak;\n\t\t}\n\t}\n\tif (seq !== undefined) state.bySeq.delete(seq);\n\treturn found;\n}\n\nfunction remotePendingTakeBySeq(\n\tstate: RemotePendingState,\n\tseq: number,\n): RemotePendingRequest | undefined {\n\tconst request = state.bySeq.get(seq);\n\tif (request === undefined) return undefined;\n\tstate.bySeq.delete(seq);\n\tstate.requestIds.delete(request.requestId);\n\treturn request;\n}\n\nfunction remotePendingFromReceipt<T>(\n\tstate: RemotePendingState,\n\tenvelope: WireBridgeEnvelope<RemoteCallRequest<T>>,\n): RemotePendingRequest | undefined {\n\tconst bySeq = remotePendingTakeBySeq(state, envelope.metadata.seq);\n\tif (bySeq !== undefined) return bySeq;\n\tconst fallback = pendingRequestFromEnvelope(envelope);\n\tif (fallback === undefined || remotePendingContains(state, fallback.requestId)) {\n\t\treturn undefined;\n\t}\n\treturn fallback;\n}\n\nfunction pendingRequestFromEnvelope<T>(\n\tenvelope: WireBridgeEnvelope<RemoteCallRequest<T>>,\n): RemotePendingRequest | undefined {\n\tif (envelope.payload?.kind !== \"data\") return undefined;\n\tconst request = validateRemoteCallRequest(envelope.payload.value);\n\tif (request === undefined) return undefined;\n\treturn {\n\t\toperation: request.operation,\n\t\trequestId: request.requestId,\n\t\tseq: envelope.metadata.seq,\n\t};\n}\n\nfunction remoteCallResponseRequestId<T>(response: RemoteCallResponse<T>): string {\n\treturn response.requestId;\n}\n\nfunction remoteCallResponseIsTerminal<T>(response: RemoteCallResponse<T>): boolean {\n\treturn response.kind === \"result\" || response.kind === \"error\";\n}\n\nfunction remoteCallResponseOperation<T>(response: RemoteCallResponse<T>): string {\n\treturn response.operation;\n}\n\nfunction remoteCallResponseMatchesPending<T>(\n\tresponse: RemoteCallResponse<T>,\n\trequest: RemotePendingRequest,\n): boolean {\n\treturn remoteCallResponseOperation(response) === request.operation;\n}\n\nfunction remoteCallResponsesNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>>,\n\ttimeouts: Node<RemoteCallTimeout>,\n\tname: string,\n): Node<RemoteCallResponse<TResponse>> {\n\treturn graph.node<RemoteCallResponse<TResponse>>(\n\t\t[events, timeouts],\n\t\t(ctx) => {\n\t\t\ttype State = {\n\t\t\t\tpending: RemotePendingState;\n\t\t\t};\n\t\t\tconst state = ctx.state.get<State>() ?? {\n\t\t\t\tpending: remotePendingState(),\n\t\t\t};\n\t\t\tconst ready: RemoteCallResponse<TResponse>[] = [];\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst request = pendingRequestFromEnvelope(event.envelope);\n\t\t\t\t\tif (request === undefined) continue;\n\t\t\t\t\tif (remotePendingDuplicate(state.pending, request)) continue;\n\t\t\t\t\tremotePendingInsert(state.pending, request);\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.payload?.kind === \"data\") {\n\t\t\t\t\tconst response = validateRemoteCallResponse<TResponse>(event.envelope.payload.value);\n\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\tconst requestId = remoteMalformedResponseRequestId(event.envelope.payload.value);\n\t\t\t\t\t\tconst operation = remoteMalformedResponseOperation(event.envelope.payload.value);\n\t\t\t\t\t\tconst request =\n\t\t\t\t\t\t\trequestId === undefined\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: remotePendingPeekByRequestId(state.pending, requestId);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\trequest !== undefined &&\n\t\t\t\t\t\t\toperation !== undefined &&\n\t\t\t\t\t\t\toperation === request.operation\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, request.requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst requestId = remoteCallResponseRequestId(response);\n\t\t\t\t\tconst request = remotePendingPeekByRequestId(state.pending, requestId);\n\t\t\t\t\tif (request !== undefined && remoteCallResponseMatchesPending(response, request)) {\n\t\t\t\t\t\tif (remoteCallResponseIsTerminal(response)) {\n\t\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tready.push(response);\n\t\t\t\t\t}\n\t\t\t\t} else if (event.kind === \"nack\") {\n\t\t\t\t\tremotePendingFromReceipt(state.pending, event.outbound);\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tremotePendingTakeBySeq(state.pending, event.seq);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst timeout = raw as RemoteCallTimeout;\n\t\t\t\tremotePendingTakeByRequestId(state.pending, timeout.requestId);\n\t\t\t}\n\t\t\tctx.state.set(state);\n\t\t\tfor (const response of ready) ctx.down([[\"DATA\", response]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/responses`,\n\t\t\tfactory: \"remoteCallResponses\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallResultsNode<TResponse>(\n\tgraph: Graph,\n\tresponses: Node<RemoteCallResponse<TResponse>>,\n\tname: string,\n): Node<RemoteCallResult<TResponse>> {\n\treturn graph.node<RemoteCallResult<TResponse>>(\n\t\t[responses],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst response = raw as RemoteCallResponse<TResponse>;\n\t\t\t\tif (response.kind === \"result\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\t\tpayload: response.payload,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/results`, factory: \"remoteCallResults\", completeWhenDepsComplete: false },\n\t);\n}\n\nfunction remoteCallStatusNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>>,\n\ttimeouts: Node<RemoteCallTimeout>,\n\tname: string,\n): Node<RemoteCallStatus> {\n\treturn graph.node<RemoteCallStatus>(\n\t\t[events, timeouts],\n\t\t(ctx) => {\n\t\t\ttype State = { status: RemoteCallStatus; pending: RemotePendingState };\n\t\t\tconst state =\n\t\t\t\tctx.state.get<State>() ??\n\t\t\t\t({\n\t\t\t\t\tstatus: { state: \"idle\", pending: 0, completed: 0, errors: 0, timeouts: 0 },\n\t\t\t\t\tpending: remotePendingState(),\n\t\t\t\t} satisfies State);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst request = pendingRequestFromEnvelope(event.envelope);\n\t\t\t\t\tif (request !== undefined) {\n\t\t\t\t\t\tif (remotePendingDuplicate(state.pending, request)) {\n\t\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremotePendingInsert(state.pending, request);\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"requested\",\n\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\tevent.kind === \"invalid\" ||\n\t\t\t\t\tevent.kind === \"session-mismatch\" ||\n\t\t\t\t\tevent.kind === \"out-of-order\" ||\n\t\t\t\t\tevent.kind === \"late-receipt\"\n\t\t\t\t) {\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"bridge-errored\",\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"nack\") {\n\t\t\t\t\tconst request = remotePendingFromReceipt(state.pending, event.outbound);\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"bridge-errored\",\n\t\t\t\t\t\t...(request === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { operation: request.operation, requestId: request.requestId }),\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tconst request = remotePendingTakeBySeq(state.pending, event.seq);\n\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\tstate: \"bridge-errored\",\n\t\t\t\t\t\t...(request === undefined\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { operation: request.operation, requestId: request.requestId }),\n\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.payload?.kind === \"data\") {\n\t\t\t\t\tconst response = validateRemoteCallResponse<TResponse>(event.envelope.payload.value);\n\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\tconst requestId = remoteMalformedResponseRequestId(event.envelope.payload.value);\n\t\t\t\t\t\tconst operation = remoteMalformedResponseOperation(event.envelope.payload.value);\n\t\t\t\t\t\tconst request =\n\t\t\t\t\t\t\trequestId === undefined || operation === undefined\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: remotePendingPeekByRequestId(state.pending, requestId);\n\t\t\t\t\t\tconst matchedRequest =\n\t\t\t\t\t\t\trequest !== undefined && request.operation === operation ? request : undefined;\n\t\t\t\t\t\tif (matchedRequest === undefined) continue;\n\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, matchedRequest.requestId);\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\toperation: matchedRequest.operation,\n\t\t\t\t\t\t\trequestId: matchedRequest.requestId,\n\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst request = remotePendingPeekByRequestId(state.pending, response.requestId);\n\t\t\t\t\tif (request === undefined) {\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!remoteCallResponseMatchesPending(response, request)) {\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (response.kind === \"result\") {\n\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, request.requestId);\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"responded\",\n\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\tcompleted: state.status.completed + 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (response.kind === \"error\") {\n\t\t\t\t\t\tremotePendingTakeByRequestId(state.pending, request.requestId);\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate.status = {\n\t\t\t\t\t\t\t...state.status,\n\t\t\t\t\t\t\tstate: \"requested\",\n\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst timeout = raw as RemoteCallTimeout;\n\t\t\t\tremotePendingTakeByRequestId(state.pending, timeout.requestId);\n\t\t\t\tstate.status = {\n\t\t\t\t\t...state.status,\n\t\t\t\t\tstate: \"timed-out\",\n\t\t\t\t\toperation: timeout.operation,\n\t\t\t\t\trequestId: timeout.requestId,\n\t\t\t\t\terrors: state.status.errors + 1,\n\t\t\t\t\ttimeouts: state.status.timeouts + 1,\n\t\t\t\t};\n\t\t\t}\n\t\t\tstate.status = { ...state.status, pending: state.pending.requestIds.size };\n\t\t\tctx.state.set(state);\n\t\t\tctx.down([[\"DATA\", state.status]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"remoteCallStatus\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallErrorsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\ttimeouts: Node<RemoteCallTimeout>,\n\tevents: Node<WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>>,\n\tname: string,\n): Node<RemoteCallError> {\n\treturn graph.node<RemoteCallError>(\n\t\t[timeouts, events],\n\t\t(ctx) => {\n\t\t\tconst pending = ctx.state.get<RemotePendingState>() ?? remotePendingState();\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst timeout = raw as RemoteCallTimeout;\n\t\t\t\tremotePendingTakeByRequestId(pending, timeout.requestId);\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{ operation: timeout.operation, requestId: timeout.requestId, error: timeout.error },\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<\n\t\t\t\t\tRemoteCallRequest<TRequest>,\n\t\t\t\t\tRemoteCallResponse<TResponse>\n\t\t\t\t>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst request = pendingRequestFromEnvelope(event.envelope);\n\t\t\t\t\tif (request !== undefined) {\n\t\t\t\t\t\tif (remotePendingDuplicate(pending, request)) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\t\t\terror: `remoteCall: duplicate in-flight requestId '${request.requestId}'`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tremotePendingInsert(pending, request);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (event.kind === \"inbound\" && event.envelope.payload?.kind === \"data\") {\n\t\t\t\t\tconst response = validateRemoteCallResponse<TResponse>(event.envelope.payload.value);\n\t\t\t\t\tif (response === undefined) {\n\t\t\t\t\t\tconst requestId = remoteMalformedResponseRequestId(event.envelope.payload.value);\n\t\t\t\t\t\tconst operation = remoteMalformedResponseOperation(event.envelope.payload.value);\n\t\t\t\t\t\tconst request =\n\t\t\t\t\t\t\trequestId === undefined || operation === undefined\n\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t: remotePendingPeekByRequestId(pending, requestId);\n\t\t\t\t\t\tif (request === undefined || request.operation !== operation) continue;\n\t\t\t\t\t\tremotePendingTakeByRequestId(pending, request.requestId);\n\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...(operation === undefined ? {} : { operation }),\n\t\t\t\t\t\t\t\t\t...(requestId === undefined ? {} : { requestId }),\n\t\t\t\t\t\t\t\t\terror: \"remoteCall: response payload is malformed\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst request = remotePendingPeekByRequestId(pending, response.requestId);\n\t\t\t\t\t\tif (request === undefined) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\t\t\t\terror: \"remoteCall: orphan response for unknown or completed request\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else if (!remoteCallResponseMatchesPending(response, request)) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\t\t\terror: `remoteCall: response operation '${response.operation}' did not match pending operation '${request.operation}'`,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else if (response.kind === \"error\") {\n\t\t\t\t\t\t\tremotePendingTakeByRequestId(pending, request.requestId);\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\toperation: response.operation,\n\t\t\t\t\t\t\t\t\t\trequestId: response.requestId,\n\t\t\t\t\t\t\t\t\t\terror: response.error,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else if (response.kind === \"result\") {\n\t\t\t\t\t\t\tremotePendingTakeByRequestId(pending, request.requestId);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (event.kind === \"nack\") {\n\t\t\t\t\tconst request = remotePendingFromReceipt(pending, event.outbound);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: request?.operation,\n\t\t\t\t\t\t\t\trequestId: request?.requestId,\n\t\t\t\t\t\t\t\terror: String(event.error),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tconst request = remotePendingTakeBySeq(pending, event.seq);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\toperation: request?.operation,\n\t\t\t\t\t\t\t\trequestId: request?.requestId,\n\t\t\t\t\t\t\t\terror: String(event.error),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", { error: event.error }]]);\n\t\t\t\t} else if (\n\t\t\t\t\tevent.kind === \"session-mismatch\" ||\n\t\t\t\t\tevent.kind === \"out-of-order\" ||\n\t\t\t\t\tevent.kind === \"late-receipt\"\n\t\t\t\t) {\n\t\t\t\t\tctx.down([[\"DATA\", { error: remoteCallBridgeErrorMessage(event) }]]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(pending);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/errors`,\n\t\t\tfactory: \"remoteCallErrors\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallBridgeErrorMessage<TRequest, TResponse>(\n\tevent: WireBridgeEvent<RemoteCallRequest<TRequest>, RemoteCallResponse<TResponse>>,\n): string {\n\tif (event.kind === \"session-mismatch\") {\n\t\treturn `remoteCall: inbound session ${event.actual} did not match expected ${event.expected}`;\n\t}\n\tif (event.kind === \"out-of-order\") {\n\t\treturn `remoteCall: inbound seq ${event.seq} arrived before expected seq ${event.expected}`;\n\t}\n\tif (event.kind === \"late-receipt\") {\n\t\treturn `remoteCall: late ${event.receipt} for unknown or completed ackForSeq ${event.ackForSeq}`;\n\t}\n\treturn \"remoteCall: bridge error\";\n}\n","/**\n * Graph-visible wire bridge envelope helpers (D134).\n *\n * This first slice is transport-free: commands become outbound envelope facts,\n * remote receipts enter only through the inbound fact node, and retry/ack timeout\n * state is surfaced through graph-visible attempts/status/errors nodes.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport { errorPayload, type Wave } from \"../protocol/messages.js\";\nimport type {\n\tWireBridgeAck,\n\tWireBridgeAttempt,\n\tWireBridgeEnvelope,\n\tWireBridgeEvent,\n\tWireBridgeInvalidIngress,\n\tWireBridgeNack,\n\tWireBridgeStatus,\n} from \"./bridge-types.js\";\nimport { bridgePayloadError, shouldTrackAck } from \"./bridge-validation.js\";\n\nexport function projectOutbound<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeEnvelope<TOutbound>> {\n\treturn graph.node<WireBridgeEnvelope<TOutbound>>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"outbound\") ctx.down([[\"DATA\", event.envelope]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/outbound`, factory: \"wireBridgeOutbound\" },\n\t);\n}\n\nexport function projectAcks<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeAck> {\n\treturn graph.node<WireBridgeAck>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"ack\") {\n\t\t\t\t\tctx.down([[\"DATA\", { ackForSeq: event.ackForSeq, envelope: event.envelope }]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/acks`, factory: \"wireBridgeAcks\" },\n\t);\n}\n\nexport function projectNacks<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeNack> {\n\treturn graph.node<WireBridgeNack>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"nack\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\"DATA\", { ackForSeq: event.ackForSeq, envelope: event.envelope, error: event.error }],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/nacks`, factory: \"wireBridgeNacks\" },\n\t);\n}\n\nexport function projectStatus<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n\tsessionId: string,\n): Node<WireBridgeStatus> {\n\treturn graph.node<WireBridgeStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet next =\n\t\t\t\tctx.state.get<WireBridgeStatus>() ??\n\t\t\t\t({\n\t\t\t\t\tsessionId,\n\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\tcursor: 0,\n\t\t\t\t\tnextSeq: 1,\n\t\t\t\t\tpending: 0,\n\t\t\t\t\tattempts: 0,\n\t\t\t\t\tacked: 0,\n\t\t\t\t\tnacked: 0,\n\t\t\t\t\terrors: 0,\n\t\t\t\t} satisfies WireBridgeStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"outbound\") {\n\t\t\t\t\tconst { seq, attempt } = event.envelope.metadata;\n\t\t\t\t\tconst trackAck = shouldTrackAck(event.envelope.type);\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate:\n\t\t\t\t\t\t\tevent.envelope.type === \"start\"\n\t\t\t\t\t\t\t\t? \"started\"\n\t\t\t\t\t\t\t\t: event.envelope.type === \"close\"\n\t\t\t\t\t\t\t\t\t? \"closed\"\n\t\t\t\t\t\t\t\t\t: \"open\",\n\t\t\t\t\t\tnextSeq: Math.max(next.nextSeq, seq + 1),\n\t\t\t\t\t\tpending:\n\t\t\t\t\t\t\tevent.envelope.type === \"close\"\n\t\t\t\t\t\t\t\t? 1\n\t\t\t\t\t\t\t\t: trackAck && attempt === 1\n\t\t\t\t\t\t\t\t\t? next.pending + 1\n\t\t\t\t\t\t\t\t\t: next.pending,\n\t\t\t\t\t\tattempts: trackAck ? next.attempts + 1 : next.attempts,\n\t\t\t\t\t\tlastSeq: seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"ack\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: event.outbound.type === \"close\" ? \"closed\" : \"open\",\n\t\t\t\t\t\tpending: Math.max(0, next.pending - 1),\n\t\t\t\t\t\tacked: next.acked + 1,\n\t\t\t\t\t\tlastSeq: event.envelope.metadata.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"nack\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\tpending: Math.max(0, next.pending - 1),\n\t\t\t\t\t\tnacked: next.nacked + 1,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastSeq: event.envelope.metadata.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"retry\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"waiting\",\n\t\t\t\t\t\tlastSeq: event.seq,\n\t\t\t\t\t\tlastDelayMs: event.delayMs,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"exhausted\",\n\t\t\t\t\t\tpending: Math.max(0, next.pending - 1),\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastSeq: event.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"cursor\") {\n\t\t\t\t\tnext = { ...next, cursor: event.cursor };\n\t\t\t\t} else if (event.kind === \"out-of-order\") {\n\t\t\t\t\tnext = { ...next, state: \"errored\", errors: next.errors + 1, lastSeq: event.seq };\n\t\t\t\t} else if (event.kind === \"session-mismatch\") {\n\t\t\t\t\tnext = { ...next, state: \"errored\", errors: next.errors + 1 };\n\t\t\t\t} else if (event.kind === \"late-receipt\" || event.kind === \"invalid\") {\n\t\t\t\t\tnext = { ...next, state: \"errored\", errors: next.errors + 1 };\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.type === \"error\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastSeq: event.envelope.metadata.seq,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.type === \"close\") {\n\t\t\t\t\tnext = { ...next, state: \"closed\", lastSeq: event.envelope.metadata.seq };\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"wireBridgeStatus\" },\n\t);\n}\n\nexport function projectErrors<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<unknown> {\n\treturn graph.node<unknown>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"nack\") ctx.down([[\"DATA\", event.error]]);\n\t\t\t\telse if (event.kind === \"exhausted\") ctx.down([[\"DATA\", event.error]]);\n\t\t\t\telse if (event.kind === \"out-of-order\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t`${name}: inbound seq ${event.seq} arrived before expected seq ${event.expected}`,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"inbound\" && event.envelope.type === \"error\") {\n\t\t\t\t\tctx.down([[\"DATA\", bridgePayloadError(event.envelope.payload, \"remote error envelope\")]]);\n\t\t\t\t} else if (event.kind === \"session-mismatch\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t`${name}: inbound session ${event.actual} did not match expected ${event.expected}`,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"late-receipt\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t`${name}: late ${event.receipt} for unknown or completed ackForSeq ${event.ackForSeq}`,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", event.error]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"wireBridgeErrors\" },\n\t);\n}\n\nexport function projectCursor<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<number> {\n\treturn graph.node<number>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"cursor\") ctx.down([[\"DATA\", event.cursor]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/cursor`, factory: \"wireBridgeCursor\" },\n\t);\n}\n\nexport function projectAttempts<TOutbound, TInbound>(\n\tgraph: Graph,\n\tevents: Node<WireBridgeEvent<TOutbound, TInbound>>,\n\tname: string,\n): Node<WireBridgeAttempt> {\n\treturn graph.node<WireBridgeAttempt>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeEvent<TOutbound, TInbound>;\n\t\t\t\tif (event.kind === \"outbound\" && shouldTrackAck(event.envelope.type)) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tseq: event.envelope.metadata.seq,\n\t\t\t\t\t\t\t\tattempt: event.envelope.metadata.attempt,\n\t\t\t\t\t\t\t\tmaxAttempts: event.envelope.metadata.maxAttempts,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/attempts`, factory: \"wireBridgeAttempts\" },\n\t);\n}\n\nexport function guardedInboundNode<TInbound>(\n\tnode: Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>,\n\tsessionId: string,\n): Node<WireBridgeEnvelope<TInbound>> {\n\treturn new Proxy(node, {\n\t\tget(target, property) {\n\t\t\tif (property === \"down\") {\n\t\t\t\treturn (msgs: Wave) => target.down(guardInboundWave(msgs, sessionId));\n\t\t\t}\n\t\t\tconst value = Reflect.get(target, property, target);\n\t\t\treturn typeof value === \"function\" ? value.bind(target) : value;\n\t\t},\n\t}) as Node<WireBridgeEnvelope<TInbound>>;\n}\n\nexport function guardInboundWave(msgs: Wave, sessionId: string): Wave {\n\treturn msgs.map((msg) => {\n\t\tif (msg[0] === \"DATA\") return msg;\n\t\tif (msg[0] === \"ERROR\") {\n\t\t\treturn [\n\t\t\t\t\"DATA\",\n\t\t\t\tinvalidIngress(\n\t\t\t\t\t`${sessionId}: inbound protocol ERROR ${String(\n\t\t\t\t\t\terrorPayload(msg[1]),\n\t\t\t\t\t)} is local misuse; remote errors must arrive as DATA envelope facts`,\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\t\tif (msg[0] === \"COMPLETE\") {\n\t\t\treturn [\n\t\t\t\t\"DATA\",\n\t\t\t\tinvalidIngress(\n\t\t\t\t\t`${sessionId}: inbound protocol COMPLETE is local misuse; remote completion must arrive as a DATA envelope fact`,\n\t\t\t\t),\n\t\t\t];\n\t\t}\n\t\treturn [\n\t\t\t\"DATA\",\n\t\t\tinvalidIngress(\n\t\t\t\t`${sessionId}: inbound port accepts DATA envelope facts only; ${msg[0]} is local protocol traffic`,\n\t\t\t),\n\t\t];\n\t});\n}\n\nexport function invalidIngress(error: string): WireBridgeInvalidIngress {\n\treturn { __wireBridgeInvalidIngress: true, error };\n}\n\nexport function isInvalidIngress(value: unknown): value is WireBridgeInvalidIngress {\n\treturn (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(value as WireBridgeInvalidIngress).__wireBridgeInvalidIngress === true &&\n\t\ttypeof (value as WireBridgeInvalidIngress).error === \"string\"\n\t);\n}\n","/**\n * Graph-visible wire bridge envelope helpers (D134).\n *\n * This first slice is transport-free: commands become outbound envelope facts,\n * remote receipts enter only through the inbound fact node, and retry/ack timeout\n * state is surfaced through graph-visible attempts/status/errors nodes.\n */\n\nimport { depBatch } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport type {\n\tRemoteCallError,\n\tRemoteCallRequest,\n\tRemoteCallResponse,\n\tRemoteResponderEvent,\n\tRemoteResponderHandler,\n\tRemoteResponderHandlerDefinition,\n\tRemoteResponderStatus,\n\tWireBridgeCommand,\n\tWireBridgeEnvelope,\n\tWireBridgeInvalidIngress,\n} from \"./bridge-types.js\";\nimport {\n\terrorMessage,\n\tisThenable,\n\trethrowGraphRuntimeInvariant,\n\tvalidateInboundEnvelope,\n\tvalidateRemoteCallRequest,\n} from \"./bridge-validation.js\";\n\nexport function normalizeRemoteHandlers<TRequest, TResponse>(\n\thandlers: readonly RemoteResponderHandlerDefinition<TRequest, TResponse>[],\n): Map<string, RemoteResponderHandler<TRequest, TResponse>> {\n\tconst out = new Map<string, RemoteResponderHandler<TRequest, TResponse>>();\n\tfor (const handler of handlers) {\n\t\tif (handler.operation.length === 0) {\n\t\t\tthrow new RangeError(\"remoteResponder: operation must be non-empty\");\n\t\t}\n\t\tif (out.has(handler.operation)) {\n\t\t\tthrow new RangeError(`remoteResponder: duplicate operation '${handler.operation}'`);\n\t\t}\n\t\tout.set(handler.operation, handler.handle);\n\t}\n\treturn out;\n}\n\ninterface RemoteResponderCursor {\n\tcursor: number;\n\tremoteCursor: number;\n}\n\ntype RemoteResponderInbound<T> =\n\t| { readonly kind: \"request\"; readonly request: RemoteCallRequest<T>; readonly seq: number }\n\t| { readonly kind: \"consumed\" }\n\t| { readonly kind: \"invalid\"; readonly error: string };\n\nfunction reduceRemoteResponderInbound<T>(\n\tcursor: RemoteResponderCursor,\n\tenvelope: WireBridgeEnvelope<RemoteCallRequest<T>>,\n\texpectedSessionId: string,\n): RemoteResponderInbound<T> {\n\tconst envelopeError = validateInboundEnvelope(envelope);\n\tif (envelopeError !== undefined) {\n\t\treturn { kind: \"invalid\", error: envelopeError };\n\t}\n\tif (envelope.sessionId !== expectedSessionId) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `remoteResponder: inbound session ${envelope.sessionId} did not match expected ${expectedSessionId}`,\n\t\t};\n\t}\n\tconst seq = envelope.metadata.seq;\n\tconst expected = cursor.cursor + 1;\n\tif (seq <= cursor.cursor) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `remoteResponder: duplicate request seq ${seq} at cursor ${cursor.cursor}`,\n\t\t};\n\t}\n\tif (seq > expected) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `remoteResponder: out-of-order request seq ${seq}, expected ${expected}`,\n\t\t};\n\t}\n\tif (envelope.metadata.cursor < cursor.remoteCursor) {\n\t\treturn {\n\t\t\tkind: \"invalid\",\n\t\t\terror: `${envelope.sessionId}: remoteResponder inbound cursor ${envelope.metadata.cursor} regressed below ${cursor.remoteCursor}`,\n\t\t};\n\t}\n\tcursor.cursor = seq;\n\tcursor.remoteCursor = envelope.metadata.cursor;\n\tif (envelope.type !== \"data\") return { kind: \"consumed\" };\n\tif (envelope.payload?.kind !== \"data\") {\n\t\treturn { kind: \"invalid\", error: \"remoteResponder: request envelope must carry request DATA\" };\n\t}\n\tconst request = validateRemoteCallRequest<T>(envelope.payload.value);\n\tif (request === undefined) {\n\t\treturn { kind: \"invalid\", error: \"remoteResponder: request payload is malformed\" };\n\t}\n\treturn { kind: \"request\", request, seq };\n}\n\nexport function remoteResponderEventsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tinbound: Node<WireBridgeEnvelope<RemoteCallRequest<TRequest>> | WireBridgeInvalidIngress>,\n\tname: string,\n\texpectedSessionId: string,\n\thandlers: Map<string, RemoteResponderHandler<TRequest, TResponse>>,\n\trejectUnknown: boolean,\n): Node<RemoteResponderEvent<TRequest, TResponse>> {\n\treturn graph.node<RemoteResponderEvent<TRequest, TResponse>>(\n\t\t[inbound],\n\t\t(ctx) => {\n\t\t\tconst cursor = ctx.state.get<RemoteResponderCursor>() ?? { cursor: 0, remoteCursor: 0 };\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst envelope = raw as WireBridgeEnvelope<RemoteCallRequest<TRequest>>;\n\t\t\t\tconst received = reduceRemoteResponderInbound(cursor, envelope, expectedSessionId);\n\t\t\t\tif (received.kind === \"consumed\") continue;\n\t\t\t\tif (received.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: received.error }]]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst { request, seq } = received;\n\t\t\t\tctx.down([[\"DATA\", { kind: \"request\", request, seq }]]);\n\t\t\t\tconst handler = handlers.get(request.operation);\n\t\t\t\tif (handler === undefined) {\n\t\t\t\t\tif (!rejectUnknown) continue;\n\t\t\t\t\tconst error = `remoteResponder: unknown operation '${request.operation}'`;\n\t\t\t\t\tconst response = remoteCallErrorResponse(request, error);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\tcommand: { kind: \"send\", payload: response, requestId: request.requestId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst payload = handler(request);\n\t\t\t\t\tif (isThenable(payload)) {\n\t\t\t\t\t\tthrow new Error(\"remoteResponder: async handler results require a later adapter shape\");\n\t\t\t\t\t}\n\t\t\t\t\tconst response = {\n\t\t\t\t\t\tkind: \"result\",\n\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t} satisfies RemoteCallResponse<TResponse>;\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"response\",\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\tcommand: { kind: \"send\", payload: response, requestId: request.requestId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\trethrowGraphRuntimeInvariant(error);\n\t\t\t\t\tconst message = errorMessage(error);\n\t\t\t\t\tconst response = remoteCallErrorResponse(request, message);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\trequestId: request.requestId,\n\t\t\t\t\t\t\t\toperation: request.operation,\n\t\t\t\t\t\t\t\terror: message,\n\t\t\t\t\t\t\t\tcommand: { kind: \"send\", payload: response, requestId: request.requestId },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(cursor);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/events`,\n\t\t\tfactory: \"remoteResponderEvents\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction remoteCallErrorResponse<TRequest, TResponse>(\n\trequest: RemoteCallRequest<TRequest>,\n\terror: string,\n): RemoteCallResponse<TResponse> {\n\treturn {\n\t\tkind: \"error\",\n\t\toperation: request.operation,\n\t\trequestId: request.requestId,\n\t\terror,\n\t};\n}\n\nexport function remoteResponderResponseCommandsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<WireBridgeCommand<RemoteCallResponse<TResponse>>> {\n\treturn graph.node<WireBridgeCommand<RemoteCallResponse<TResponse>>>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (\n\t\t\t\t\t(event.kind === \"response\" || event.kind === \"rejected\") &&\n\t\t\t\t\tevent.command !== undefined\n\t\t\t\t) {\n\t\t\t\t\tctx.down([[\"DATA\", event.command]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/responseCommands`,\n\t\t\tfactory: \"remoteResponderResponseCommands\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nexport function remoteResponderRequestsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<RemoteCallRequest<TRequest>> {\n\treturn graph.node<RemoteCallRequest<TRequest>>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (event.kind === \"request\") ctx.down([[\"DATA\", event.request]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/requests`,\n\t\t\tfactory: \"remoteResponderRequests\",\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t},\n\t);\n}\n\nexport function remoteResponderStatusNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<RemoteResponderStatus> {\n\treturn graph.node<RemoteResponderStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet status =\n\t\t\t\tctx.state.get<RemoteResponderStatus>() ??\n\t\t\t\t({ state: \"idle\", handled: 0, rejected: 0, errors: 0 } satisfies RemoteResponderStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (event.kind === \"response\") {\n\t\t\t\t\tstatus = {\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tstate: \"responded\",\n\t\t\t\t\t\toperation: event.operation,\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\thandled: status.handled + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"rejected\") {\n\t\t\t\t\tstatus = {\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tstate: \"rejected\",\n\t\t\t\t\t\toperation: event.operation,\n\t\t\t\t\t\trequestId: event.requestId,\n\t\t\t\t\t\trejected: status.rejected + 1,\n\t\t\t\t\t\terrors: status.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tstatus = { ...status, state: \"errored\", errors: status.errors + 1 };\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(status);\n\t\t\tctx.down([[\"DATA\", status]]);\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"remoteResponderStatus\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nexport function remoteResponderErrorsNode<TRequest, TResponse>(\n\tgraph: Graph,\n\tevents: Node<RemoteResponderEvent<TRequest, TResponse>>,\n\tname: string,\n): Node<RemoteCallError> {\n\treturn graph.node<RemoteCallError>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as RemoteResponderEvent<TRequest, TResponse>;\n\t\t\t\tif (event.kind === \"rejected\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{ operation: event.operation, requestId: event.requestId, error: event.error },\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"invalid\") {\n\t\t\t\t\tctx.down([[\"DATA\", { error: event.error }]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"remoteResponderErrors\", completeWhenDepsComplete: false },\n\t);\n}\n","/**\n * Graph-visible wire bridge envelope helpers (D134).\n *\n * This first slice is transport-free: commands become outbound envelope facts,\n * remote receipts enter only through the inbound fact node, and retry/ack timeout\n * state is surfaced through graph-visible attempts/status/errors nodes.\n */\n\nimport { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport {\n\tnextRetryDelayMs,\n\ttype RetryPolicy,\n\tretryPolicy,\n\tshouldRetry,\n} from \"../graph/resilience.js\";\nimport type { Node } from \"../node/node.js\";\nimport { errorPayload } from \"../protocol/messages.js\";\nimport type {\n\tCanonicalWireBridgeDataBody,\n\tCanonicalWireBridgeEnvelope,\n\tCanonicalWireBridgeMetadata,\n\tCanonicalWireBridgePayload,\n\tCanonicalWireEdgeFrame,\n} from \"./bridge-protobuf.js\";\nimport {\n\tCanonicalProtobufError,\n\tdecodeCanonicalWireBridgeEnvelope,\n\tencodeCanonicalWireBridgeEnvelope,\n} from \"./bridge-protobuf.js\";\nimport type {\n\tAttachedCommandSources,\n\tBridgeState,\n\tRemoteCallRequest,\n\tRemoteCallResponse,\n\tRemoteResponderBundle,\n\tRemoteResponderHandler,\n\tRemoteResponderHandlerDefinition,\n\tRemoteResponderOptions,\n\tWireBridgeAckDriverBundle,\n\tWireBridgeAckDriverIssue,\n\tWireBridgeAckDriverOptions,\n\tWireBridgeAckDriverStatus,\n\tWireBridgeBundle,\n\tWireBridgeCommand,\n\tWireBridgeEnvelope,\n\tWireBridgeEnvelopeType,\n\tWireBridgeEvent,\n\tWireBridgeInvalidIngress,\n\tWireBridgeMetadata,\n\tWireBridgeOptions,\n\tWireBridgePayload,\n\tWireBridgeProtobufBundle,\n\tWireBridgeProtobufData,\n\tWireBridgeProtobufIssue,\n\tWireBridgeProtobufOptions,\n\tWireBridgeProtobufStatus,\n} from \"./bridge-types.js\";\n\nexport type {\n\tCanonicalProtobufErrorCategory,\n\tCanonicalWireBridgeDataBody,\n\tCanonicalWireBridgeEnvelope,\n\tCanonicalWireBridgeMetadata,\n\tCanonicalWireBridgePayload,\n\tCanonicalWireEdgeFrame,\n} from \"./bridge-protobuf.js\";\nexport {\n\tCanonicalProtobufError,\n\tdecodeCanonicalWireBridgeEnvelope,\n\tdecodeCanonicalWireEdgeFrame,\n\tencodeCanonicalWireBridgeEnvelope,\n\tencodeCanonicalWireEdgeFrame,\n} from \"./bridge-protobuf.js\";\nexport { remoteCall } from \"./bridge-remote-call.js\";\nexport type {\n\tRemoteCallBundle,\n\tRemoteCallError,\n\tRemoteCallOptions,\n\tRemoteCallRequest,\n\tRemoteCallResponse,\n\tRemoteCallResult,\n\tRemoteCallStatus,\n\tRemoteCallStatusState,\n\tRemoteCallTimeout,\n\tRemoteResponderBundle,\n\tRemoteResponderEvent,\n\tRemoteResponderHandler,\n\tRemoteResponderHandlerDefinition,\n\tRemoteResponderOptions,\n\tRemoteResponderStatus,\n\tRemoteResponderStatusState,\n\tWireBridgeAck,\n\tWireBridgeAckDriverBundle,\n\tWireBridgeAckDriverIssue,\n\tWireBridgeAckDriverOptions,\n\tWireBridgeAckDriverStatus,\n\tWireBridgeAttempt,\n\tWireBridgeBundle,\n\tWireBridgeCommand,\n\tWireBridgeEnvelope,\n\tWireBridgeEnvelopeType,\n\tWireBridgeEvent,\n\tWireBridgeMetadata,\n\tWireBridgeNack,\n\tWireBridgeOptions,\n\tWireBridgePayload,\n\tWireBridgeProtobufBundle,\n\tWireBridgeProtobufData,\n\tWireBridgeProtobufIssue,\n\tWireBridgeProtobufOptions,\n\tWireBridgeProtobufStatus,\n\tWireBridgeStatus,\n} from \"./bridge-types.js\";\n\nimport {\n\tguardedInboundNode,\n\tinvalidIngress,\n\tisInvalidIngress,\n\tprojectAcks,\n\tprojectAttempts,\n\tprojectCursor,\n\tprojectErrors,\n\tprojectNacks,\n\tprojectOutbound,\n\tprojectStatus,\n} from \"./bridge-projections.js\";\nimport {\n\tnormalizeRemoteHandlers,\n\tremoteResponderErrorsNode,\n\tremoteResponderEventsNode,\n\tremoteResponderRequestsNode,\n\tremoteResponderResponseCommandsNode,\n\tremoteResponderStatusNode,\n} from \"./bridge-remote-responder.js\";\nimport {\n\tbridgePayloadError,\n\tenvelopeTypes,\n\tisSafeNonNegativeInteger,\n\tisSafePositiveInteger,\n\tnormalizeWireBridgePayload,\n\tshouldTrackAck,\n\tvalidateCommand,\n\tvalidateInboundEnvelope,\n\tvalidatePayloadForType,\n} from \"./bridge-validation.js\";\n\nconst bridgeCommandSources = new WeakMap<\n\tWireBridgeBundle<unknown, unknown>,\n\tAttachedCommandSources<unknown>\n>();\nconst bridgeInboundTargets = new WeakMap<\n\tWireBridgeBundle<unknown, unknown>,\n\tNode<WireBridgeEnvelope<unknown> | WireBridgeInvalidIngress>\n>();\nconst bridgeInboundSources = new WeakMap<\n\tWireBridgeBundle<unknown, unknown>,\n\t{ sources: Node<WireBridgeEnvelope<unknown> | WireBridgeInvalidIngress>[] }\n>();\n\n/** Stable D134 idempotency key helper scoped to one bridge session and sequence. */\nexport function wireBridgeIdempotencyKey(sessionId: string, seq: number): string {\n\treturn `${sessionId}:${seq}`;\n}\n\n/** Create a D134 wire bridge envelope with ordered metadata. */\nexport function wireBridgeEnvelope<TData = unknown>(input: {\n\treadonly sessionId: string;\n\treadonly type: WireBridgeEnvelopeType;\n\treadonly seq: number;\n\treadonly cursor?: number;\n\treadonly payload?: WireBridgePayload<TData>;\n\treadonly idempotencyKey?: string;\n\treadonly attempt?: number;\n\treadonly maxAttempts?: number;\n\treadonly timestampMs?: number;\n\treadonly ackForSeq?: number;\n\treadonly requestId?: string;\n}): WireBridgeEnvelope<TData> {\n\tif (typeof input.sessionId !== \"string\" || input.sessionId.length === 0) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: sessionId must be a non-empty string\");\n\t}\n\tif (!envelopeTypes.has(input.type)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: type is not recognized\");\n\t}\n\tif (!isSafePositiveInteger(input.seq)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: seq must be a positive integer\");\n\t}\n\tconst cursor = input.cursor ?? 0;\n\tif (!isSafeNonNegativeInteger(cursor)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: cursor must be a non-negative integer\");\n\t}\n\tconst attempt = input.attempt ?? 1;\n\tif (!isSafePositiveInteger(attempt)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: attempt must be a positive integer\");\n\t}\n\tconst maxAttempts = input.maxAttempts ?? attempt;\n\tif (!isSafePositiveInteger(maxAttempts) || maxAttempts < attempt) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: maxAttempts must be >= attempt\");\n\t}\n\tif (input.ackForSeq !== undefined && !isSafePositiveInteger(input.ackForSeq)) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: ackForSeq must be a positive integer\");\n\t}\n\tif ((input.type === \"ack\" || input.type === \"nack\") && input.ackForSeq === undefined) {\n\t\tthrow new RangeError(`wireBridgeEnvelope: ${input.type} envelope requires ackForSeq`);\n\t}\n\tif (input.idempotencyKey !== undefined && input.idempotencyKey.length === 0) {\n\t\tthrow new RangeError(\"wireBridgeEnvelope: idempotencyKey must be a non-empty string\");\n\t}\n\tconst payloadError = validatePayloadForType(input.type, input.payload, \"wireBridgeEnvelope\");\n\tif (payloadError !== undefined) {\n\t\tthrow new RangeError(payloadError);\n\t}\n\tconst payload = normalizeWireBridgePayload(\n\t\tinput.payload,\n\t\t`wireBridgeEnvelope ${input.type} envelope`,\n\t) as WireBridgePayload<TData> | undefined;\n\treturn {\n\t\tsessionId: input.sessionId,\n\t\ttype: input.type,\n\t\tpayload,\n\t\tmetadata: {\n\t\t\tseq: input.seq,\n\t\t\tcursor,\n\t\t\tidempotencyKey: input.idempotencyKey ?? wireBridgeIdempotencyKey(input.sessionId, input.seq),\n\t\t\tattempt,\n\t\t\tmaxAttempts,\n\t\t\ttimestampMs: input.timestampMs,\n\t\t\tackForSeq: input.ackForSeq,\n\t\t\trequestId: input.requestId,\n\t\t},\n\t};\n}\n\nexport function wireBridge<TOutbound = unknown, TInbound = unknown>(\n\tgraph: Graph,\n\topts: WireBridgeOptions,\n): WireBridgeBundle<TOutbound, TInbound> {\n\tconst name = opts.name ?? \"wireBridge\";\n\tconst policy = opts.retry ?? retryPolicy();\n\tconst command = graph.node<WireBridgeCommand<TOutbound>>([], null, {\n\t\tname: `${name}/command`,\n\t\tfactory: \"wireBridgeCommand\",\n\t});\n\tconst inboundCore = graph.node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>(\n\t\t[],\n\t\tnull,\n\t\t{\n\t\t\tname: `${name}/inbound`,\n\t\t\tfactory: \"wireBridgeInbound\",\n\t\t},\n\t);\n\tconst inbound = guardedInboundNode(inboundCore, opts.sessionId);\n\tconst events = wireBridgeEventsNode<TOutbound, TInbound>(\n\t\tgraph,\n\t\tcommand,\n\t\tinboundCore,\n\t\tname,\n\t\topts,\n\t\tpolicy,\n\t);\n\tconst outbound = projectOutbound(graph, events, name);\n\tconst acks = projectAcks(graph, events, name);\n\tconst nacks = projectNacks(graph, events, name);\n\tconst status = projectStatus(graph, events, name, opts.sessionId);\n\tconst errors = projectErrors(graph, events, name);\n\tconst cursor = projectCursor(graph, events, name);\n\tconst attempts = projectAttempts(graph, events, name);\n\tconst bundle: WireBridgeBundle<TOutbound, TInbound> = {\n\t\tsessionId: opts.sessionId,\n\t\tcommand,\n\t\toutbound,\n\t\tinbound,\n\t\tevents,\n\t\tacks,\n\t\tnacks,\n\t\tstatus,\n\t\terrors,\n\t\tcursor,\n\t\tattempts,\n\t\tstart: () => command.down([[\"DATA\", { kind: \"start\" }]]),\n\t\tsend: (payload, sendOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"send\",\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\tidempotencyKey: sendOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId: sendOpts?.requestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tack: (ackForSeq, ackOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"ack\",\n\t\t\t\t\t\tackForSeq,\n\t\t\t\t\t\tidempotencyKey: ackOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId: ackOpts?.requestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tnack: (ackForSeq, error, nackOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"nack\",\n\t\t\t\t\t\tackForSeq,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tidempotencyKey: nackOpts?.idempotencyKey,\n\t\t\t\t\t\trequestId: nackOpts?.requestId,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tclose: (reason, closeOpts) =>\n\t\t\tcommand.down([\n\t\t\t\t[\"DATA\", { kind: \"close\", reason, idempotencyKey: closeOpts?.idempotencyKey }],\n\t\t\t]),\n\t};\n\tbridgeCommandSources.set(bundle as WireBridgeBundle<unknown, unknown>, { sources: [] });\n\tbridgeInboundTargets.set(bundle as WireBridgeBundle<unknown, unknown>, inboundCore);\n\tbridgeInboundSources.set(bundle as WireBridgeBundle<unknown, unknown>, { sources: [] });\n\treturn bundle;\n}\n\ntype WireBridgeAckTimeoutCommand = Extract<\n\tWireBridgeCommand<never>,\n\t{ readonly kind: \"ack-timeout\" }\n>;\n\ntype WireBridgeAckDriverEvent =\n\t| {\n\t\t\treadonly kind: \"command\";\n\t\t\treadonly command: WireBridgeAckTimeoutCommand;\n\t\t\treadonly pending: number;\n\t\t\treadonly nowMs: number;\n\t }\n\t| {\n\t\t\treadonly kind: \"issue\";\n\t\t\treadonly issue: WireBridgeAckDriverIssue;\n\t\t\treadonly pending: number;\n\t\t\treadonly nowMs?: number;\n\t }\n\t| { readonly kind: \"state\"; readonly pending: number; readonly nowMs?: number };\n\ninterface AckDriverPendingAttempt {\n\treadonly seq: number;\n\tattempt: number;\n\tobservedAtMs?: number;\n\ttimedOutAttempt?: number;\n\ttimedOutAtMs?: number;\n\tretryDueAtMs?: number;\n\tretryReleasedAttempt?: number;\n}\n\ninterface AckDriverState {\n\tnowMs?: number;\n\tpending: Map<number, AckDriverPendingAttempt>;\n}\n\n/** D502 explicit graph-visible ack-timeout command driver for a wireBridge. */\nexport function wireBridgeAckDriver<TOutbound = unknown, TInbound = unknown>(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\topts: WireBridgeAckDriverOptions,\n): WireBridgeAckDriverBundle {\n\tconst name = opts.name ?? `${bridge.sessionId}/wireBridgeAckDriver`;\n\tif (!Number.isFinite(opts.timeoutMs) || opts.timeoutMs < 0) {\n\t\tthrow new RangeError(\"wireBridgeAckDriver: timeoutMs must be a non-negative finite number\");\n\t}\n\tconst topology = graph.topologyGroup({ name: `${name}.wireBridgeAckDriver` });\n\tconst active = { current: true };\n\tconst events = topology.add(wireBridgeAckDriverEventsNode(graph, bridge, opts, name, active));\n\tconst commands = topology.add(\n\t\tgraph.node<WireBridgeCommand<never>>([events], wireBridgeAckDriverCommandsFn(), {\n\t\t\tname: `${name}/commands`,\n\t\t\tfactory: \"wireBridgeAckDriverCommands\",\n\t\t}),\n\t);\n\tconst issues = topology.add(wireBridgeAckDriverIssuesNode(graph, events, name));\n\tconst status = topology.add(wireBridgeAckDriverStatusNode(graph, events, name));\n\tlet released = false;\n\treturn {\n\t\tcommands,\n\t\tstatus,\n\t\tissues,\n\t\trelease() {\n\t\t\tif (released) return;\n\t\t\tactive.current = false;\n\t\t\ttry {\n\t\t\t\ttopology.release({ reason: `${name}.wireBridgeAckDriver.release` });\n\t\t\t\treleased = true;\n\t\t\t} catch (error) {\n\t\t\t\tactive.current = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction wireBridgeAckDriverEventsNode<TOutbound, TInbound>(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\topts: WireBridgeAckDriverOptions,\n\tname: string,\n\tactive: { current: boolean },\n): Node<WireBridgeAckDriverEvent> {\n\treturn graph.node<WireBridgeAckDriverEvent>(\n\t\t[opts.clock, bridge.attempts, bridge.acks, bridge.nacks, bridge.status],\n\t\t(ctx) => {\n\t\t\tlet state = ctx.state.get<AckDriverState>();\n\t\t\tif (state === undefined) {\n\t\t\t\tstate = { pending: new Map() };\n\t\t\t\tctx.state.set(state);\n\t\t\t}\n\t\t\tlet touched = false;\n\t\t\tfor (const rawClock of depBatch(ctx, 0) ?? []) {\n\t\t\t\tif (!Number.isFinite(rawClock) || (rawClock as number) < 0) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"issue\",\n\t\t\t\t\t\t\t\tissue: {\n\t\t\t\t\t\t\t\t\tcode: \"wire-bridge-ack-driver-clock-invalid\",\n\t\t\t\t\t\t\t\t\tmessage: \"wireBridgeAckDriver: clock facts must be non-negative finite numbers\",\n\t\t\t\t\t\t\t\t\tnowMs: rawClock as number,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tpending: state.pending.size,\n\t\t\t\t\t\t\t\tnowMs: state.nowMs,\n\t\t\t\t\t\t\t} satisfies WireBridgeAckDriverEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\ttouched = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst nowMs = rawClock as number;\n\t\t\t\tif (state.nowMs !== undefined && nowMs < state.nowMs) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"issue\",\n\t\t\t\t\t\t\t\tissue: {\n\t\t\t\t\t\t\t\t\tcode: \"wire-bridge-ack-driver-clock-regressed\",\n\t\t\t\t\t\t\t\t\tmessage: \"wireBridgeAckDriver: clock facts must be monotonic\",\n\t\t\t\t\t\t\t\t\tnowMs,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tpending: state.pending.size,\n\t\t\t\t\t\t\t\tnowMs: state.nowMs,\n\t\t\t\t\t\t\t} satisfies WireBridgeAckDriverEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\ttouched = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstate.nowMs = nowMs;\n\t\t\t\ttouched = true;\n\t\t\t}\n\t\t\tfor (const rawAttempt of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst attempt = rawAttempt as { readonly seq: number; readonly attempt: number };\n\t\t\t\tstate.pending.set(attempt.seq, {\n\t\t\t\t\tseq: attempt.seq,\n\t\t\t\t\tattempt: attempt.attempt,\n\t\t\t\t\tobservedAtMs: state.nowMs,\n\t\t\t\t});\n\t\t\t\ttouched = true;\n\t\t\t}\n\t\t\tfor (const rawAck of depBatch(ctx, 2) ?? []) {\n\t\t\t\tstate.pending.delete((rawAck as { readonly ackForSeq: number }).ackForSeq);\n\t\t\t\ttouched = true;\n\t\t\t}\n\t\t\tfor (const rawNack of depBatch(ctx, 3) ?? []) {\n\t\t\t\tstate.pending.delete((rawNack as { readonly ackForSeq: number }).ackForSeq);\n\t\t\t\ttouched = true;\n\t\t\t}\n\t\t\tfor (const rawStatus of depBatch(ctx, 4) ?? []) {\n\t\t\t\tconst status = rawStatus as {\n\t\t\t\t\treadonly state?: string;\n\t\t\t\t\treadonly pending?: number;\n\t\t\t\t\treadonly lastSeq?: number;\n\t\t\t\t\treadonly lastDelayMs?: number;\n\t\t\t\t};\n\t\t\t\tif (status.pending === 0) state.pending.clear();\n\t\t\t\telse if (status.state === \"exhausted\" && status.lastSeq !== undefined) {\n\t\t\t\t\tstate.pending.delete(status.lastSeq);\n\t\t\t\t} else if (\n\t\t\t\t\tstatus.state === \"waiting\" &&\n\t\t\t\t\tstatus.lastSeq !== undefined &&\n\t\t\t\t\tstatus.lastDelayMs !== undefined\n\t\t\t\t) {\n\t\t\t\t\tconst pending = state.pending.get(status.lastSeq);\n\t\t\t\t\tif (\n\t\t\t\t\t\tpending?.timedOutAtMs !== undefined &&\n\t\t\t\t\t\tpending.retryReleasedAttempt !== pending.attempt\n\t\t\t\t\t) {\n\t\t\t\t\t\tpending.retryDueAtMs = pending.timedOutAtMs + status.lastDelayMs;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttouched = true;\n\t\t\t}\n\t\t\tconst nowMs = state.nowMs;\n\t\t\tlet emittedCommand = false;\n\t\t\tif (active.current && nowMs !== undefined) {\n\t\t\t\tfor (const pending of state.pending.values()) {\n\t\t\t\t\tif (pending.observedAtMs === undefined) {\n\t\t\t\t\t\tpending.observedAtMs = nowMs;\n\t\t\t\t\t\ttouched = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tpending.observedAtMs !== undefined &&\n\t\t\t\t\t\tnowMs - pending.observedAtMs >= opts.timeoutMs &&\n\t\t\t\t\t\tpending.timedOutAttempt !== pending.attempt\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst command: WireBridgeAckTimeoutCommand = {\n\t\t\t\t\t\t\tkind: \"ack-timeout\",\n\t\t\t\t\t\t\tseq: pending.seq,\n\t\t\t\t\t\t\tattempt: pending.attempt,\n\t\t\t\t\t\t\tobservedAtMs: nowMs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpending.timedOutAttempt = pending.attempt;\n\t\t\t\t\t\tpending.timedOutAtMs = nowMs;\n\t\t\t\t\t\tctx.down([[\"DATA\", { kind: \"command\", command, pending: state.pending.size, nowMs }]]);\n\t\t\t\t\t\temittedCommand = true;\n\t\t\t\t\t\ttouched = true;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tpending.retryDueAtMs !== undefined &&\n\t\t\t\t\t\tnowMs >= pending.retryDueAtMs &&\n\t\t\t\t\t\tpending.retryReleasedAttempt !== pending.attempt\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst command: WireBridgeAckTimeoutCommand = {\n\t\t\t\t\t\t\tkind: \"ack-timeout\",\n\t\t\t\t\t\t\tseq: pending.seq,\n\t\t\t\t\t\t\tattempt: pending.attempt,\n\t\t\t\t\t\t\tobservedAtMs: nowMs,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tpending.retryReleasedAttempt = pending.attempt;\n\t\t\t\t\t\tctx.down([[\"DATA\", { kind: \"command\", command, pending: state.pending.size, nowMs }]]);\n\t\t\t\t\t\temittedCommand = true;\n\t\t\t\t\t\ttouched = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (touched && !emittedCommand) {\n\t\t\t\tctx.down([[\"DATA\", { kind: \"state\", pending: state.pending.size, nowMs }]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/events`,\n\t\t\tfactory: \"wireBridgeAckDriverEvents\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n}\n\nfunction wireBridgeAckDriverCommandsFn(): (ctx: Ctx) => void {\n\treturn (ctx) => {\n\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\tconst event = raw as WireBridgeAckDriverEvent;\n\t\t\tif (event.kind === \"command\") ctx.down([[\"DATA\", event.command]]);\n\t\t}\n\t};\n}\n\nfunction wireBridgeAckDriverIssuesNode(\n\tgraph: Graph,\n\tevents: Node<WireBridgeAckDriverEvent>,\n\tname: string,\n): Node<WireBridgeAckDriverIssue> {\n\treturn graph.node<WireBridgeAckDriverIssue>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeAckDriverEvent;\n\t\t\t\tif (event.kind === \"issue\") ctx.down([[\"DATA\", event.issue]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/issues`, factory: \"wireBridgeAckDriverIssues\" },\n\t);\n}\n\nfunction wireBridgeAckDriverStatusNode(\n\tgraph: Graph,\n\tevents: Node<WireBridgeAckDriverEvent>,\n\tname: string,\n): Node<WireBridgeAckDriverStatus> {\n\treturn graph.node<WireBridgeAckDriverStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet next =\n\t\t\t\tctx.state.get<WireBridgeAckDriverStatus>() ??\n\t\t\t\t({\n\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\tpending: 0,\n\t\t\t\t\tcommands: 0,\n\t\t\t\t\tissues: 0,\n\t\t\t\t} satisfies WireBridgeAckDriverStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeAckDriverEvent;\n\t\t\t\tif (event.kind === \"command\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"timed-out\",\n\t\t\t\t\t\tpending: event.pending,\n\t\t\t\t\t\tcommands: next.commands + 1,\n\t\t\t\t\t\tnowMs: event.nowMs,\n\t\t\t\t\t\tlastCommand: event.command,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"issue\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"issues\",\n\t\t\t\t\t\tpending: event.pending,\n\t\t\t\t\t\tissues: next.issues + 1,\n\t\t\t\t\t\tnowMs: event.nowMs,\n\t\t\t\t\t\tlastIssue: event.issue,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: event.pending > 0 ? \"active\" : \"idle\",\n\t\t\t\t\t\tpending: event.pending,\n\t\t\t\t\t\tnowMs: event.nowMs,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"wireBridgeAckDriverStatus\" },\n\t);\n}\n\ntype WireBridgeProtobufInboundResult =\n\t| { readonly kind: \"decoded\"; readonly envelope: WireBridgeEnvelope<WireBridgeProtobufData> }\n\t| {\n\t\t\treadonly kind: \"issue\";\n\t\t\treadonly issue: WireBridgeProtobufIssue;\n\t\t\treadonly invalid: WireBridgeInvalidIngress;\n\t };\n\ntype WireBridgeProtobufOutboundResult =\n\t| { readonly kind: \"encoded\"; readonly bytes: Uint8Array }\n\t| { readonly kind: \"issue\"; readonly issue: WireBridgeProtobufIssue };\n\ntype WireBridgeProtobufEvent =\n\t| {\n\t\t\treadonly kind: \"inbound\";\n\t\t\treadonly result: WireBridgeProtobufInboundResult;\n\t }\n\t| {\n\t\t\treadonly kind: \"outbound\";\n\t\t\treadonly result: WireBridgeProtobufOutboundResult;\n\t };\n\ntype WireBridgeProtobufInboundEvent = Extract<\n\tWireBridgeProtobufEvent,\n\t{ readonly kind: \"inbound\" }\n>;\ntype WireBridgeProtobufOutboundEvent = Extract<\n\tWireBridgeProtobufEvent,\n\t{ readonly kind: \"outbound\" }\n>;\n\n/**\n * D498 focused canonical protobuf byte adapter over an existing semantic wireBridge bundle.\n *\n * This helper owns no transport/session/retry policy and does not add wireBridge core options.\n * Malformed bytes become graph-visible issue/invalid facts, never local protocol terminals.\n */\nexport function wireBridgeProtobuf(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<WireBridgeProtobufData, WireBridgeProtobufData>,\n\topts: WireBridgeProtobufOptions = {},\n): WireBridgeProtobufBundle {\n\tconst name = opts.name ?? \"wireBridgeProtobuf\";\n\tconst topology = graph.topologyGroup({ name: `${name}.wireBridgeProtobuf` });\n\tconst inboundBytes = topology.node<Uint8Array>([], null, {\n\t\tname: `${name}/inboundBytes`,\n\t\tfactory: \"wireBridgeProtobufInboundBytes\",\n\t});\n\tconst inboundResults = topology.node<WireBridgeProtobufInboundResult>(\n\t\t[inboundBytes],\n\t\t(ctx) => {\n\t\t\tfor (const bytes of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst result = wireBridgeProtobufInboundResult(bytes as Uint8Array, bridge.sessionId);\n\t\t\t\tctx.down([[\"DATA\", result]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/inboundResults`,\n\t\t\tfactory: \"wireBridgeProtobufInboundResults\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst outboundResults = topology.node<WireBridgeProtobufOutboundResult>(\n\t\t[bridge.outbound],\n\t\t(ctx) => {\n\t\t\tfor (const envelope of depBatch(ctx, 0) ?? []) {\n\t\t\t\tlet result: WireBridgeProtobufOutboundResult;\n\t\t\t\ttry {\n\t\t\t\t\tconst canonical = canonicalEnvelopeFromSemantic(\n\t\t\t\t\t\tenvelope as WireBridgeEnvelope<WireBridgeProtobufData>,\n\t\t\t\t\t);\n\t\t\t\t\tresult = { kind: \"encoded\", bytes: encodeCanonicalWireBridgeEnvelope(canonical) };\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst issue = protobufIssue(\"outbound\", \"encode\", error);\n\t\t\t\t\tresult = { kind: \"issue\", issue };\n\t\t\t\t}\n\t\t\t\tctx.down([[\"DATA\", result]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/outboundResults`,\n\t\t\tfactory: \"wireBridgeProtobufOutboundResults\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst inboundEvents = topology.node<WireBridgeProtobufInboundEvent>(\n\t\t[inboundResults],\n\t\t(ctx) => {\n\t\t\tfor (const result of depBatch(ctx, 0) ?? []) {\n\t\t\t\tctx.down([\n\t\t\t\t\t[\"DATA\", { kind: \"inbound\", result: result as WireBridgeProtobufInboundResult }],\n\t\t\t\t]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/inboundEvents`,\n\t\t\tfactory: \"wireBridgeProtobufInboundEvents\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst outboundEvents = topology.node<WireBridgeProtobufOutboundEvent>(\n\t\t[outboundResults],\n\t\t(ctx) => {\n\t\t\tfor (const result of depBatch(ctx, 0) ?? []) {\n\t\t\t\tctx.down([\n\t\t\t\t\t[\"DATA\", { kind: \"outbound\", result: result as WireBridgeProtobufOutboundResult }],\n\t\t\t\t]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/outboundEvents`,\n\t\t\tfactory: \"wireBridgeProtobufOutboundEvents\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst inboundDecoded = topology.node<\n\t\tWireBridgeEnvelope<WireBridgeProtobufData> | WireBridgeInvalidIngress\n\t>(\n\t\t[inboundEvents],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeProtobufInboundEvent;\n\t\t\t\tconst result = event.result;\n\t\t\t\tctx.down([[\"DATA\", result.kind === \"decoded\" ? result.envelope : result.invalid]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/inboundDecoded`,\n\t\t\tfactory: \"wireBridgeProtobufInboundDecoded\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst outboundBytes = topology.node<Uint8Array>(\n\t\t[outboundEvents],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeProtobufOutboundEvent;\n\t\t\t\tif (event.result.kind === \"encoded\") {\n\t\t\t\t\tctx.down([[\"DATA\", event.result.bytes]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/outboundBytes`,\n\t\t\tfactory: \"wireBridgeProtobufOutboundBytes\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst issues = topology.node<WireBridgeProtobufIssue>(\n\t\t[inboundEvents, outboundEvents],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeProtobufInboundEvent;\n\t\t\t\tconst result = event.result;\n\t\t\t\tif (result.kind === \"issue\") ctx.down([[\"DATA\", result.issue]]);\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeProtobufOutboundEvent;\n\t\t\t\tconst result = event.result;\n\t\t\t\tif (result.kind === \"issue\") ctx.down([[\"DATA\", result.issue]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/issues`,\n\t\t\tfactory: \"wireBridgeProtobufIssues\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst status = topology.node<WireBridgeProtobufStatus>(\n\t\t[inboundEvents, outboundEvents],\n\t\t(ctx) => {\n\t\t\tlet status =\n\t\t\t\tctx.state.get<WireBridgeProtobufStatus>() ??\n\t\t\t\t({ decoded: 0, encoded: 0, issues: 0, state: \"idle\" } satisfies WireBridgeProtobufStatus);\n\t\t\tconst emitStatus = (next: WireBridgeProtobufStatus) => {\n\t\t\t\tstatus = next;\n\t\t\t\tctx.state.set(status);\n\t\t\t\tctx.down([[\"DATA\", status]]);\n\t\t\t};\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeProtobufInboundEvent;\n\t\t\t\tconst result = event.result;\n\t\t\t\tif (result.kind === \"decoded\") {\n\t\t\t\t\temitStatus({\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tdecoded: status.decoded + 1,\n\t\t\t\t\t\tstate: status.issues > 0 ? \"issues\" : \"active\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\temitStatus({\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tissues: status.issues + 1,\n\t\t\t\t\t\tstate: \"issues\",\n\t\t\t\t\t\tlastIssue: result.issue,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst event = raw as WireBridgeProtobufOutboundEvent;\n\t\t\t\tconst result = event.result;\n\t\t\t\tif (result.kind === \"encoded\") {\n\t\t\t\t\temitStatus({\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tencoded: status.encoded + 1,\n\t\t\t\t\t\tstate: status.issues > 0 ? \"issues\" : \"active\",\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\temitStatus({\n\t\t\t\t\t\t...status,\n\t\t\t\t\t\tissues: status.issues + 1,\n\t\t\t\t\t\tstate: \"issues\",\n\t\t\t\t\t\tlastIssue: result.issue,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/status`,\n\t\t\tfactory: \"wireBridgeProtobufStatus\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\ttry {\n\t\tattachWireBridgeInboundSource(bridge, inboundDecoded);\n\t} catch (error) {\n\t\ttopology.release({ reason: `${name}.wireBridgeProtobuf.failedAttach` });\n\t\tthrow error;\n\t}\n\tlet released = false;\n\treturn {\n\t\tinboundBytes,\n\t\toutboundBytes,\n\t\tissues,\n\t\tstatus,\n\t\trelease() {\n\t\t\tif (released) return;\n\t\t\tdetachWireBridgeInboundSource(bridge, inboundDecoded);\n\t\t\ttry {\n\t\t\t\ttopology.release({ reason: `${name}.wireBridgeProtobuf.release` });\n\t\t\t\treleased = true;\n\t\t\t} catch (error) {\n\t\t\t\tattachWireBridgeInboundSource(bridge, inboundDecoded);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function remoteResponderHandler<TRequest = unknown, TResponse = unknown>(\n\toperation: string,\n\thandle: RemoteResponderHandler<TRequest, TResponse>,\n): RemoteResponderHandlerDefinition<TRequest, TResponse> {\n\tif (operation.length === 0) {\n\t\tthrow new RangeError(\"remoteResponderHandler: operation must be non-empty\");\n\t}\n\tif (typeof handle !== \"function\") {\n\t\tthrow new TypeError(\"remoteResponderHandler: handle must be a function\");\n\t}\n\treturn { operation, handle };\n}\n\n/** D147 remote responder over inbound wireBridge request facts and outbound command facts. */\nexport function remoteResponder<TRequest = unknown, TResponse = unknown>(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<RemoteCallResponse<TResponse>, RemoteCallRequest<TRequest>>,\n\topts: RemoteResponderOptions<TRequest, TResponse> = {},\n): RemoteResponderBundle<TRequest, TResponse> {\n\tconst name = opts.name ?? \"remoteResponder\";\n\tconst handlers = normalizeRemoteHandlers(opts.handlers ?? []);\n\tconst topology = graph.topologyGroup({ name: `${name}.remoteResponder` });\n\tconst events = topology.add(\n\t\tremoteResponderEventsNode(\n\t\t\tgraph,\n\t\t\twireBridgeInboundTarget(bridge),\n\t\t\tname,\n\t\t\tbridge.sessionId,\n\t\t\thandlers,\n\t\t\topts.rejectUnknown === true,\n\t\t),\n\t);\n\tconst responseCommands = topology.add(remoteResponderResponseCommandsNode(graph, events, name));\n\tconst requests = topology.add(remoteResponderRequestsNode(graph, events, name));\n\tconst status = topology.add(remoteResponderStatusNode(graph, events, name));\n\tconst errors = topology.add(remoteResponderErrorsNode(graph, events, name));\n\ttry {\n\t\tattachWireBridgeCommandSource(bridge, responseCommands);\n\t} catch (error) {\n\t\ttopology.release({ reason: `${name}.remoteResponder.failedAttach` });\n\t\tthrow error;\n\t}\n\tlet released = false;\n\treturn {\n\t\tevents,\n\t\tresponseCommands,\n\t\trequests,\n\t\tstatus,\n\t\terrors,\n\t\trelease() {\n\t\t\tif (released) return;\n\t\t\tdetachWireBridgeCommandSource(bridge, responseCommands);\n\t\t\ttry {\n\t\t\t\ttopology.release({ reason: `${name}.remoteResponder.release` });\n\t\t\t\treleased = true;\n\t\t\t} catch (error) {\n\t\t\t\tattachWireBridgeCommandSource(bridge, responseCommands);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction wireBridgeEventsNode<TOutbound, TInbound>(\n\tgraph: Graph,\n\tcommand: Node<WireBridgeCommand<TOutbound>>,\n\tinbound: Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>,\n\tname: string,\n\topts: WireBridgeOptions,\n\tpolicy: RetryPolicy,\n): Node<WireBridgeEvent<TOutbound, TInbound>> {\n\tconst now = opts.now ?? Date.now;\n\treturn graph.node<WireBridgeEvent<TOutbound, TInbound>>(\n\t\t[command, inbound],\n\t\t(ctx) => {\n\t\t\tconst state = initBridgeState<TOutbound>(ctx);\n\n\t\t\tconst emitOutbound = (\n\t\t\t\ttype: WireBridgeEnvelopeType,\n\t\t\t\tpayload: WireBridgePayload<TOutbound> | undefined,\n\t\t\t\tcommandOpts: { idempotencyKey?: string; requestId?: string; ackForSeq?: number } = {},\n\t\t\t\tbeforeEmit?: () => void,\n\t\t\t) => {\n\t\t\t\tif (!isSafePositiveInteger(state.nextSeq)) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"invalid\",\n\t\t\t\t\t\t\t\terror: `${opts.sessionId}: next outbound seq exceeded Number.MAX_SAFE_INTEGER`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst seq = state.nextSeq;\n\t\t\t\tlet envelope: WireBridgeEnvelope<TOutbound>;\n\t\t\t\ttry {\n\t\t\t\t\tconst normalizedPayload = normalizeWireBridgePayload(\n\t\t\t\t\t\tpayload,\n\t\t\t\t\t\t`wireBridge: outbound ${type} envelope`,\n\t\t\t\t\t) as WireBridgePayload<TOutbound> | undefined;\n\t\t\t\t\tenvelope = wireBridgeEnvelope<TOutbound>({\n\t\t\t\t\t\tsessionId: opts.sessionId,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tseq,\n\t\t\t\t\t\tcursor: state.cursor,\n\t\t\t\t\t\tpayload: normalizedPayload,\n\t\t\t\t\t\tidempotencyKey: commandOpts.idempotencyKey,\n\t\t\t\t\t\tattempt: 1,\n\t\t\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\t\t\ttimestampMs: now(),\n\t\t\t\t\t\tackForSeq: commandOpts.ackForSeq,\n\t\t\t\t\t\trequestId: commandOpts.requestId,\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"invalid\",\n\t\t\t\t\t\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstate.nextSeq++;\n\t\t\t\tbeforeEmit?.();\n\t\t\t\tctx.down([[\"DATA\", { kind: \"outbound\", envelope }]]);\n\t\t\t\tif (shouldTrackAck(type)) state.pending.set(envelope.metadata.seq, { envelope });\n\t\t\t};\n\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tprocessInbound(ctx, state, raw, opts.sessionId);\n\t\t\t}\n\t\t\tconst inboundTerminal = ctx.terminal[1];\n\t\t\tif (inboundTerminal !== false && inboundTerminal !== undefined && !state.terminalReported) {\n\t\t\t\tstate.terminalReported = true;\n\t\t\t\tconst error =\n\t\t\t\t\tinboundTerminal === true\n\t\t\t\t\t\t? `${opts.sessionId}: inbound protocol COMPLETE is local misuse; remote completion must arrive as a DATA envelope fact`\n\t\t\t\t\t\t: `${opts.sessionId}: inbound protocol ERROR ${String(\n\t\t\t\t\t\t\t\terrorPayload(inboundTerminal),\n\t\t\t\t\t\t\t)} is local misuse; remote errors must arrive as DATA envelope facts`;\n\t\t\t\tctx.down([[\"DATA\", { kind: \"invalid\", error }]]);\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst invalid = validateCommand(raw);\n\t\t\t\tif (invalid !== undefined) {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: invalid }]]);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst commandValue = raw as WireBridgeCommand<TOutbound>;\n\t\t\t\tswitch (commandValue.kind) {\n\t\t\t\t\tcase \"start\":\n\t\t\t\t\t\temitOutbound(\"start\", undefined, commandValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"send\":\n\t\t\t\t\t\temitOutbound(\"data\", { kind: \"data\", value: commandValue.payload }, commandValue);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ack\":\n\t\t\t\t\t\temitOutbound(\"ack\", undefined, {\n\t\t\t\t\t\t\tidempotencyKey: commandValue.idempotencyKey,\n\t\t\t\t\t\t\trequestId: commandValue.requestId,\n\t\t\t\t\t\t\tackForSeq: commandValue.ackForSeq,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"nack\":\n\t\t\t\t\t\temitOutbound(\n\t\t\t\t\t\t\t\"nack\",\n\t\t\t\t\t\t\t{ kind: \"error\", error: errorPayload(commandValue.error) },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tidempotencyKey: commandValue.idempotencyKey,\n\t\t\t\t\t\t\t\trequestId: commandValue.requestId,\n\t\t\t\t\t\t\t\tackForSeq: commandValue.ackForSeq,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"ack-timeout\":\n\t\t\t\t\t\tprocessAckTimeoutCommand(ctx, state, commandValue, opts, policy, now);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"close\":\n\t\t\t\t\t\temitOutbound(\n\t\t\t\t\t\t\t\"close\",\n\t\t\t\t\t\t\tcommandValue.reason === undefined\n\t\t\t\t\t\t\t\t? { kind: \"close\" }\n\t\t\t\t\t\t\t\t: { kind: \"close\", reason: commandValue.reason },\n\t\t\t\t\t\t\tcommandValue,\n\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\tstate.pending.clear();\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/events`,\n\t\t\tfactory: \"wireBridgeEvents\",\n\t\t\tpartial: true,\n\t\t\terrorWhenDepsError: false,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\tterminalAsRealInput: true,\n\t\t},\n\t);\n}\n\nfunction initBridgeState<TPayload>(ctx: Ctx): BridgeState<TPayload> {\n\tlet state = ctx.state.get<BridgeState<TPayload>>();\n\tif (state === undefined) {\n\t\tstate = {\n\t\t\tcleanupInstalled: false,\n\t\t\tnextSeq: 1,\n\t\t\tcursor: 0,\n\t\t\tremoteCursor: 0,\n\t\t\tterminalReported: false,\n\t\t\tpending: new Map(),\n\t\t};\n\t\tctx.state.set(state);\n\t}\n\tif (!state.cleanupInstalled) {\n\t\tstate.cleanupInstalled = true;\n\t\tctx.onDeactivation(() => {\n\t\t\tstate.cleanupInstalled = false;\n\t\t\tstate.pending.clear();\n\t\t});\n\t}\n\treturn state;\n}\n\nfunction attachWireBridgeCommandSource<TOutbound, TInbound>(\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\tsource: Node<WireBridgeCommand<TOutbound>>,\n): void {\n\tconst attached = bridgeCommandSources.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (attached === undefined) {\n\t\tthrow new Error(\"remoteResponder: bridge command source registry missing\");\n\t}\n\tconst sources = attached.sources as Node<WireBridgeCommand<TOutbound>>[];\n\tconst previousSources = [...sources];\n\tif (!sources.includes(source)) sources.push(source);\n\ttry {\n\t\tbridge.command.replaceDeps([...sources], wireBridgeCommandSourceFn(sources.length));\n\t} catch (error) {\n\t\tsources.splice(0, sources.length, ...previousSources);\n\t\tbridge.command.replaceDeps(\n\t\t\t[...previousSources],\n\t\t\twireBridgeCommandSourceFn(previousSources.length),\n\t\t);\n\t\tthrow error;\n\t}\n}\n\nfunction detachWireBridgeCommandSource<TOutbound, TInbound>(\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\tsource: Node<WireBridgeCommand<TOutbound>>,\n): void {\n\tconst attached = bridgeCommandSources.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (attached === undefined) {\n\t\tthrow new Error(\"remoteResponder: bridge command source registry missing\");\n\t}\n\tconst sources = attached.sources as Node<WireBridgeCommand<TOutbound>>[];\n\tif (!sources.includes(source)) return;\n\tconst previousSources = [...sources];\n\tconst nextSources = sources.filter((candidate) => candidate !== source);\n\tsources.splice(0, sources.length, ...nextSources);\n\ttry {\n\t\tbridge.command.replaceDeps([...nextSources], wireBridgeCommandSourceFn(nextSources.length));\n\t} catch (error) {\n\t\tsources.splice(0, sources.length, ...previousSources);\n\t\tbridge.command.replaceDeps(\n\t\t\t[...previousSources],\n\t\t\twireBridgeCommandSourceFn(previousSources.length),\n\t\t);\n\t\tthrow error;\n\t}\n}\n\nfunction attachWireBridgeInboundSource<TOutbound, TInbound>(\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\tsource: Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>,\n): void {\n\tconst attached = bridgeInboundSources.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (attached === undefined) {\n\t\tthrow new Error(\"wireBridgeProtobuf: bridge inbound source registry missing\");\n\t}\n\tconst sources = attached.sources as Node<\n\t\tWireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress\n\t>[];\n\tconst previousSources = [...sources];\n\tif (!sources.includes(source)) sources.push(source);\n\ttry {\n\t\twireBridgeInboundTarget(bridge).replaceDeps(\n\t\t\t[...sources],\n\t\t\twireBridgeInboundSourceFn(sources.length),\n\t\t);\n\t} catch (error) {\n\t\tsources.splice(0, sources.length, ...previousSources);\n\t\twireBridgeInboundTarget(bridge).replaceDeps(\n\t\t\t[...previousSources],\n\t\t\twireBridgeInboundSourceFn(previousSources.length),\n\t\t);\n\t\tthrow error;\n\t}\n}\n\nfunction detachWireBridgeInboundSource<TOutbound, TInbound>(\n\tbridge: WireBridgeBundle<TOutbound, TInbound>,\n\tsource: Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>,\n): void {\n\tconst attached = bridgeInboundSources.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (attached === undefined) {\n\t\tthrow new Error(\"wireBridgeProtobuf: bridge inbound source registry missing\");\n\t}\n\tconst sources = attached.sources as Node<\n\t\tWireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress\n\t>[];\n\tif (!sources.includes(source)) return;\n\tconst previousSources = [...sources];\n\tconst nextSources = sources.filter((candidate) => candidate !== source);\n\tsources.splice(0, sources.length, ...nextSources);\n\ttry {\n\t\twireBridgeInboundTarget(bridge).replaceDeps(\n\t\t\t[...nextSources],\n\t\t\twireBridgeInboundSourceFn(nextSources.length),\n\t\t);\n\t} catch (error) {\n\t\tsources.splice(0, sources.length, ...previousSources);\n\t\twireBridgeInboundTarget(bridge).replaceDeps(\n\t\t\t[...previousSources],\n\t\t\twireBridgeInboundSourceFn(previousSources.length),\n\t\t);\n\t\tthrow error;\n\t}\n}\n\nfunction wireBridgeInboundTarget<TInbound>(\n\tbridge: WireBridgeBundle<unknown, TInbound>,\n): Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress> {\n\tconst target = bridgeInboundTargets.get(bridge as WireBridgeBundle<unknown, unknown>);\n\tif (target === undefined) {\n\t\tthrow new Error(\"remoteResponder: bridge inbound target registry missing\");\n\t}\n\treturn target as Node<WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress>;\n}\n\nfunction wireBridgeCommandSourceFn<TOutbound>(sourceCount: number): (ctx: Ctx) => void {\n\treturn (ctx) => {\n\t\tfor (let i = 0; i < sourceCount; i += 1) {\n\t\t\tfor (const command of depBatch(ctx, i) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", command as WireBridgeCommand<TOutbound>]]);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction wireBridgeInboundSourceFn<TInbound>(sourceCount: number): (ctx: Ctx) => void {\n\treturn (ctx) => {\n\t\tfor (let i = 0; i < sourceCount; i += 1) {\n\t\t\tfor (const envelope of depBatch(ctx, i) ?? []) {\n\t\t\t\tctx.down([[\"DATA\", envelope as WireBridgeEnvelope<TInbound> | WireBridgeInvalidIngress]]);\n\t\t\t}\n\t\t}\n\t};\n}\n\nfunction wireBridgeProtobufInboundResult(\n\tbytes: Uint8Array,\n\tsessionId: string,\n): WireBridgeProtobufInboundResult {\n\ttry {\n\t\tconst envelope = semanticEnvelopeFromCanonical(decodeCanonicalWireBridgeEnvelope(bytes));\n\t\treturn { kind: \"decoded\", envelope };\n\t} catch (error) {\n\t\tconst issue = protobufIssue(\"inbound\", \"decode\", error);\n\t\treturn {\n\t\t\tkind: \"issue\",\n\t\t\tissue,\n\t\t\tinvalid: invalidIngress(`${sessionId}: ${issue.message}`),\n\t\t};\n\t}\n}\n\nfunction semanticEnvelopeFromCanonical(\n\tenvelope: CanonicalWireBridgeEnvelope,\n): WireBridgeEnvelope<WireBridgeProtobufData> {\n\tconst metadata = semanticMetadataFromCanonical(envelope.metadata);\n\tswitch (envelope.payload.kind) {\n\t\tcase \"start\":\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"start\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t\tcase \"ack\":\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"ack\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\tackForSeq: metadata.ackForSeq,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t\tcase \"data\":\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"data\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tpayload: { kind: \"data\", value: envelope.payload.body },\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t\tcase \"nack\":\n\t\t\tif (envelope.payload.error === undefined) {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"missing_required\",\n\t\t\t\t\t\"semantic wireBridge nack requires error bytes\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"nack\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tpayload: { kind: \"error\", error: envelope.payload.error },\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\tackForSeq: metadata.ackForSeq,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t\tcase \"status\":\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"status\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tpayload: { kind: \"status\", status: envelope.payload.status },\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t\tcase \"error\":\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"error\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tpayload: { kind: \"error\", error: envelope.payload.error },\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t\tcase \"close\":\n\t\t\treturn wireBridgeEnvelope({\n\t\t\t\tsessionId: envelope.sessionId,\n\t\t\t\ttype: \"close\",\n\t\t\t\tseq: metadata.seq,\n\t\t\t\tcursor: metadata.cursor,\n\t\t\t\tpayload:\n\t\t\t\t\tenvelope.payload.reason === undefined\n\t\t\t\t\t\t? { kind: \"close\" }\n\t\t\t\t\t\t: { kind: \"close\", reason: envelope.payload.reason },\n\t\t\t\tidempotencyKey: metadata.idempotencyKey,\n\t\t\t\tattempt: metadata.attempt,\n\t\t\t\tmaxAttempts: metadata.maxAttempts,\n\t\t\t\ttimestampMs: metadata.timestampMs,\n\t\t\t\trequestId: metadata.requestId,\n\t\t\t});\n\t}\n}\n\nfunction canonicalEnvelopeFromSemantic(\n\tenvelope: WireBridgeEnvelope<WireBridgeProtobufData>,\n): CanonicalWireBridgeEnvelope {\n\treturn {\n\t\tsessionId: envelope.sessionId,\n\t\tmetadata: {\n\t\t\tseq: BigInt(envelope.metadata.seq),\n\t\t\tcursor: BigInt(envelope.metadata.cursor),\n\t\t\tidempotencyKey: envelope.metadata.idempotencyKey,\n\t\t\tattempt: envelope.metadata.attempt,\n\t\t\tmaxAttempts: envelope.metadata.maxAttempts,\n\t\t\ttimestampMs:\n\t\t\t\tenvelope.metadata.timestampMs === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: BigInt(envelope.metadata.timestampMs),\n\t\t\tackForSeq:\n\t\t\t\tenvelope.metadata.ackForSeq === undefined ? undefined : BigInt(envelope.metadata.ackForSeq),\n\t\t\trequestId: envelope.metadata.requestId,\n\t\t},\n\t\tpayload: canonicalPayloadFromSemantic(envelope),\n\t};\n}\n\nfunction canonicalPayloadFromSemantic(\n\tenvelope: WireBridgeEnvelope<WireBridgeProtobufData>,\n): CanonicalWireBridgePayload {\n\tconst payload = envelope.payload;\n\tswitch (envelope.type) {\n\t\tcase \"start\":\n\t\t\treturn { kind: \"start\" };\n\t\tcase \"ack\":\n\t\t\treturn { kind: \"ack\" };\n\t\tcase \"data\":\n\t\t\tif (payload?.kind !== \"data\") {\n\t\t\t\tthrow new CanonicalProtobufError(\"missing_required\", \"data envelope requires data payload\");\n\t\t\t}\n\t\t\treturn { kind: \"data\", body: canonicalDataBody(payload.value) };\n\t\tcase \"nack\":\n\t\t\tif (payload?.kind !== \"error\") {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"missing_required\",\n\t\t\t\t\t\"nack envelope requires error payload\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { kind: \"nack\", error: requiredBytes(payload.error, \"nack error\") };\n\t\tcase \"status\":\n\t\t\tif (payload?.kind !== \"status\") {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"missing_required\",\n\t\t\t\t\t\"status envelope requires status payload\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { kind: \"status\", status: requiredBytes(payload.status, \"status\") };\n\t\tcase \"error\":\n\t\t\tif (payload?.kind !== \"error\") {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"missing_required\",\n\t\t\t\t\t\"error envelope requires error payload\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { kind: \"error\", error: requiredBytes(payload.error, \"error\") };\n\t\tcase \"close\":\n\t\t\tif (payload?.kind !== \"close\") {\n\t\t\t\tthrow new CanonicalProtobufError(\n\t\t\t\t\t\"missing_required\",\n\t\t\t\t\t\"close envelope requires close payload\",\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn { kind: \"close\", reason: optionalBytes(payload.reason, \"close reason\") };\n\t}\n}\n\nfunction canonicalDataBody(value: unknown): CanonicalWireBridgeDataBody {\n\tif (value instanceof Uint8Array) return { kind: \"value\", value };\n\tif (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(value as { readonly kind?: unknown }).kind === \"value\"\n\t) {\n\t\tconst bytes = (value as { readonly value?: unknown }).value;\n\t\tif (bytes instanceof Uint8Array) return { kind: \"value\", value: bytes };\n\t}\n\tif (\n\t\ttypeof value === \"object\" &&\n\t\tvalue !== null &&\n\t\t(value as { readonly kind?: unknown }).kind === \"wire_edge\"\n\t) {\n\t\tconst frame = (value as { readonly frame?: unknown }).frame;\n\t\treturn { kind: \"wire_edge\", frame: frame as CanonicalWireEdgeFrame };\n\t}\n\tthrow new CanonicalProtobufError(\n\t\t\"malformed\",\n\t\t\"wireBridgeProtobuf data payload must be Uint8Array or CanonicalWireBridgeDataBody\",\n\t);\n}\n\nfunction semanticMetadataFromCanonical(metadata: CanonicalWireBridgeMetadata): WireBridgeMetadata {\n\treturn {\n\t\tseq: safeSemanticNumber(metadata.seq, \"seq\"),\n\t\tcursor: safeSemanticNumber(metadata.cursor, \"cursor\"),\n\t\tidempotencyKey: metadata.idempotencyKey,\n\t\tattempt: metadata.attempt,\n\t\tmaxAttempts: metadata.maxAttempts,\n\t\ttimestampMs:\n\t\t\tmetadata.timestampMs === undefined\n\t\t\t\t? undefined\n\t\t\t\t: safeSemanticNumber(metadata.timestampMs, \"timestamp_ms\"),\n\t\tackForSeq:\n\t\t\tmetadata.ackForSeq === undefined\n\t\t\t\t? undefined\n\t\t\t\t: safeSemanticNumber(metadata.ackForSeq, \"ack_for_seq\"),\n\t\trequestId: metadata.requestId,\n\t};\n}\n\nfunction safeSemanticNumber(value: bigint, field: string): number {\n\tif (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\tthrow new CanonicalProtobufError(\n\t\t\t\"malformed\",\n\t\t\t`${field} exceeds semantic wireBridge Number.MAX_SAFE_INTEGER range`,\n\t\t);\n\t}\n\treturn Number(value);\n}\n\nfunction requiredBytes(value: unknown, field: string): Uint8Array {\n\tif (value instanceof Uint8Array) return value;\n\tthrow new CanonicalProtobufError(\"malformed\", `wireBridgeProtobuf ${field} must be Uint8Array`);\n}\n\nfunction optionalBytes(value: unknown, field: string): Uint8Array | undefined {\n\tif (value === undefined) return undefined;\n\tif (value instanceof Uint8Array) return value;\n\tthrow new CanonicalProtobufError(\"malformed\", `wireBridgeProtobuf ${field} must be Uint8Array`);\n}\n\nfunction protobufIssue(\n\tdirection: WireBridgeProtobufIssue[\"direction\"],\n\toperation: WireBridgeProtobufIssue[\"operation\"],\n\terror: unknown,\n): WireBridgeProtobufIssue {\n\treturn {\n\t\tdirection,\n\t\toperation,\n\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\tcategory: error instanceof CanonicalProtobufError ? error.category : undefined,\n\t};\n}\n\nfunction processAckTimeoutCommand<TPayload>(\n\tctx: Ctx,\n\tstate: BridgeState<TPayload>,\n\tcommand: Extract<WireBridgeCommand<TPayload>, { readonly kind: \"ack-timeout\" }>,\n\topts: WireBridgeOptions,\n\tpolicy: RetryPolicy,\n\tnow: () => number,\n): void {\n\tconst pending = state.pending.get(command.seq);\n\tif (pending === undefined || pending.envelope.metadata.attempt !== command.attempt) return;\n\tconst current = pending.envelope;\n\tconst emitRetryOutbound = () => {\n\t\tconst attempt = current.metadata.attempt + 1;\n\t\tconst retry = wireBridgeEnvelope<TPayload>({\n\t\t\tsessionId: current.sessionId,\n\t\t\ttype: current.type,\n\t\t\tseq: current.metadata.seq,\n\t\t\tcursor: state.cursor,\n\t\t\tpayload: current.payload,\n\t\t\tidempotencyKey: current.metadata.idempotencyKey,\n\t\t\tattempt,\n\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\ttimestampMs: now(),\n\t\t\trequestId: current.metadata.requestId,\n\t\t});\n\t\tpending.envelope = retry;\n\t\tpending.timeoutReportedAttempt = undefined;\n\t\tpending.retryDueAtMs = undefined;\n\t\tctx.down([[\"DATA\", { kind: \"outbound\", envelope: retry }]]);\n\t};\n\tif (pending.timeoutReportedAttempt === current.metadata.attempt) {\n\t\tif (\n\t\t\tpending.retryDueAtMs !== undefined &&\n\t\t\tcommand.observedAtMs !== undefined &&\n\t\t\tcommand.observedAtMs < pending.retryDueAtMs\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\temitRetryOutbound();\n\t\treturn;\n\t}\n\tctx.down([\n\t\t[\n\t\t\t\"DATA\",\n\t\t\t{\n\t\t\t\tkind: \"timeout\",\n\t\t\t\tseq: current.metadata.seq,\n\t\t\t\tattempt: current.metadata.attempt,\n\t\t\t} satisfies WireBridgeEvent<TPayload, unknown>,\n\t\t],\n\t]);\n\tif (!shouldRetry(policy, current.metadata.attempt)) {\n\t\tconst error = `${opts.sessionId}: ack timeout for seq ${current.metadata.seq}`;\n\t\tstate.pending.delete(current.metadata.seq);\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"exhausted\",\n\t\t\t\t\tseq: current.metadata.seq,\n\t\t\t\t\tattempt: current.metadata.attempt,\n\t\t\t\t\terror,\n\t\t\t\t} satisfies WireBridgeEvent<TPayload, unknown>,\n\t\t\t],\n\t\t]);\n\t\treturn;\n\t}\n\tconst attempt = current.metadata.attempt + 1;\n\tconst delayMs = nextRetryDelayMs(policy, attempt) ?? 0;\n\tconst error = `${opts.sessionId}: ack timeout for seq ${current.metadata.seq}`;\n\tpending.timeoutReportedAttempt = current.metadata.attempt;\n\tif (delayMs > 0 && command.observedAtMs !== undefined) {\n\t\tpending.retryDueAtMs = command.observedAtMs + delayMs;\n\t}\n\tctx.down([\n\t\t[\n\t\t\t\"DATA\",\n\t\t\t{\n\t\t\t\tkind: \"retry\",\n\t\t\t\tseq: current.metadata.seq,\n\t\t\t\tattempt,\n\t\t\t\tdelayMs,\n\t\t\t\terror,\n\t\t\t} satisfies WireBridgeEvent<TPayload, unknown>,\n\t\t],\n\t]);\n\tif (pending.retryDueAtMs !== undefined) return;\n\temitRetryOutbound();\n}\n\nfunction processInbound<TOutbound, TInbound>(\n\tctx: Ctx,\n\tstate: BridgeState<TOutbound>,\n\tinput: unknown,\n\tsessionId: string,\n): void {\n\tif (isInvalidIngress(input)) {\n\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: input.error }]]);\n\t\treturn;\n\t}\n\tconst invalid = validateInboundEnvelope(input);\n\tif (invalid !== undefined) {\n\t\tctx.down([[\"DATA\", { kind: \"invalid\", error: invalid }]]);\n\t\treturn;\n\t}\n\tconst envelope = input as WireBridgeEnvelope<TInbound>;\n\tif (envelope.sessionId !== sessionId) {\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"session-mismatch\",\n\t\t\t\t\texpected: sessionId,\n\t\t\t\t\tactual: envelope.sessionId,\n\t\t\t\t} satisfies WireBridgeEvent<TOutbound, TInbound>,\n\t\t\t],\n\t\t]);\n\t\treturn;\n\t}\n\tconst seq = envelope.metadata.seq;\n\tconst expected = state.cursor + 1;\n\tif (seq <= state.cursor) {\n\t\tctx.down([[\"DATA\", { kind: \"duplicate\", seq, cursor: state.cursor }]]);\n\t\treturn;\n\t}\n\tif (seq > expected) {\n\t\tctx.down([[\"DATA\", { kind: \"out-of-order\", seq, expected }]]);\n\t\treturn;\n\t}\n\tif (envelope.metadata.cursor < state.remoteCursor) {\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"invalid\",\n\t\t\t\t\terror: `${sessionId}: inbound cursor ${envelope.metadata.cursor} regressed below ${state.remoteCursor}`,\n\t\t\t\t},\n\t\t\t],\n\t\t]);\n\t\treturn;\n\t}\n\tstate.remoteCursor = envelope.metadata.cursor;\n\tstate.cursor = seq;\n\tctx.down([[\"DATA\", { kind: \"cursor\", cursor: state.cursor }]]);\n\tctx.down([[\"DATA\", { kind: \"inbound\", envelope }]]);\n\tif (envelope.type === \"ack\" && envelope.metadata.ackForSeq !== undefined) {\n\t\tconst pending = state.pending.get(envelope.metadata.ackForSeq);\n\t\tif (pending === undefined) {\n\t\t\tctx.down([\n\t\t\t\t[\"DATA\", { kind: \"late-receipt\", receipt: \"ack\", ackForSeq: envelope.metadata.ackForSeq }],\n\t\t\t]);\n\t\t\treturn;\n\t\t}\n\t\tstate.pending.delete(envelope.metadata.ackForSeq);\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"ack\",\n\t\t\t\t\tackForSeq: envelope.metadata.ackForSeq,\n\t\t\t\t\tenvelope,\n\t\t\t\t\toutbound: pending.envelope,\n\t\t\t\t} satisfies WireBridgeEvent<TOutbound, TInbound>,\n\t\t\t],\n\t\t]);\n\t} else if (envelope.type === \"nack\" && envelope.metadata.ackForSeq !== undefined) {\n\t\tconst pending = state.pending.get(envelope.metadata.ackForSeq);\n\t\tif (pending === undefined) {\n\t\t\tctx.down([\n\t\t\t\t[\"DATA\", { kind: \"late-receipt\", receipt: \"nack\", ackForSeq: envelope.metadata.ackForSeq }],\n\t\t\t]);\n\t\t\treturn;\n\t\t}\n\t\tstate.pending.delete(envelope.metadata.ackForSeq);\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"nack\",\n\t\t\t\t\tackForSeq: envelope.metadata.ackForSeq,\n\t\t\t\t\tenvelope,\n\t\t\t\t\toutbound: pending.envelope,\n\t\t\t\t\terror: bridgePayloadError(envelope.payload, \"remote nack\"),\n\t\t\t\t} satisfies WireBridgeEvent<TOutbound, TInbound>,\n\t\t\t],\n\t\t]);\n\t}\n}\n","import { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport type { Node } from \"../node/node.js\";\nimport type { CanonicalWireEdgeFrame } from \"./bridge-protobuf.js\";\nimport type {\n\tWireBridgeBundle,\n\tWireBridgeCommand,\n\tWireBridgeEnvelope,\n\tWireBridgeProtobufData,\n} from \"./bridge-types.js\";\n\nexport interface WireEdgeGroupEdge {\n\treadonly edgeId: string;\n\treadonly outbound?: Node<Uint8Array>;\n}\nexport type WireEdgeGroupIssueCode =\n\t| \"wire-edge-group-missing-snapshot\"\n\t| \"wire-edge-group-unknown-edge\"\n\t| \"wire-edge-group-duplicate-dirty\"\n\t| \"wire-edge-group-duplicate-data\"\n\t| \"wire-edge-group-data-before-dirty\"\n\t| \"wire-edge-group-competing-cause\"\n\t| \"wire-edge-group-malformed-frame\"\n\t| \"wire-edge-group-incomplete-cause\";\nexport interface WireEdgeGroupIssue {\n\treadonly code: WireEdgeGroupIssueCode;\n\treadonly message: string;\n\treadonly edgeId?: string;\n\treadonly causeId?: string;\n\treadonly activeCauseId?: string;\n}\nexport interface WireEdgeGroupStatus {\n\treadonly state: \"idle\" | \"collecting\" | \"released\" | \"issues\";\n\treadonly expectedEdges: readonly string[];\n\treadonly dirty: number;\n\treadonly data: number;\n\treadonly released: number;\n\treadonly issues: number;\n\treadonly activeCauseId?: string;\n\treadonly lastIssue?: WireEdgeGroupIssue;\n}\nexport interface WireEdgeGroupOptions {\n\treadonly name?: string;\n\treadonly edges: readonly WireEdgeGroupEdge[];\n}\nexport interface WireEdgeGroupBundle {\n\treadonly inbound: ReadonlyMap<string, Node<Uint8Array>>;\n\treadonly status: Node<WireEdgeGroupStatus>;\n\treadonly issues: Node<WireEdgeGroupIssue>;\n\trelease(): void;\n}\n\ntype Command = WireBridgeCommand<WireBridgeProtobufData>;\ntype Event =\n\t| { kind: \"outbound\"; command: Command }\n\t| { kind: \"frame\"; frame: CanonicalWireEdgeFrame }\n\t| { kind: \"bridge-end\" }\n\t| { kind: \"issue\"; issue: WireEdgeGroupIssue };\ntype Gate =\n\t| { kind: \"release\"; causeId: string; edgeId: string; value: Uint8Array }\n\t| { kind: \"progress\"; causeId: string; dirty: number; data: number }\n\t| { kind: \"issue\"; issue: WireEdgeGroupIssue };\ninterface OutState {\n\tnextCause: number;\n\tsnapshots: Map<string, Uint8Array>;\n}\ninterface GateState {\n\tactiveCauseId?: string;\n\tdirty: Set<string>;\n\tdata: Map<string, Uint8Array>;\n\tfailed: CauseTombstones;\n\treleased: CauseTombstones;\n}\n\nconst WIRE_EDGE_GROUP_CAUSE_TOMBSTONE_LIMIT = 1024;\n\nclass CauseTombstones {\n\tprivate readonly seen = new Set<string>();\n\tprivate readonly order: string[] = [];\n\n\thas(causeId: string): boolean {\n\t\treturn this.seen.has(causeId);\n\t}\n\n\tadd(causeId: string): void {\n\t\tif (this.seen.has(causeId)) return;\n\t\tthis.seen.add(causeId);\n\t\tthis.order.push(causeId);\n\t\twhile (this.order.length > WIRE_EDGE_GROUP_CAUSE_TOMBSTONE_LIMIT) {\n\t\t\tconst evicted = this.order.shift();\n\t\t\tif (evicted !== undefined) this.seen.delete(evicted);\n\t\t}\n\t}\n}\n\nexport function wireEdgeGroup(\n\tgraph: Graph,\n\tbridge: WireBridgeBundle<WireBridgeProtobufData, WireBridgeProtobufData>,\n\topts: WireEdgeGroupOptions,\n): WireEdgeGroupBundle {\n\tconst name = opts.name ?? \"wireEdgeGroup\";\n\tconst edges = normalize(opts.edges);\n\tconst expected = edges.map((edge) => edge.edgeId);\n\tconst outbound = edges\n\t\t.map((edge, index) => ({ edge, index }))\n\t\t.filter(\n\t\t\t(entry): entry is { edge: { edgeId: string; outbound: Node<Uint8Array> }; index: number } =>\n\t\t\t\tentry.edge.outbound !== undefined,\n\t\t);\n\tconst topology = graph.topologyGroup({ name: `${name}.wireEdgeGroup` });\n\tconst events = topology.node<Event>(\n\t\t[...outbound.map((entry) => entry.edge.outbound), bridge.inbound],\n\t\teventsFn(\n\t\t\tname,\n\t\t\tedges,\n\t\t\toutbound.map((entry) => entry.index),\n\t\t),\n\t\t{\n\t\t\tname: `${name}/events`,\n\t\t\tfactory: \"wireEdgeGroupEvents\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t\tterminalAsRealInput: true,\n\t\t},\n\t);\n\tconst gate = topology.node<Gate>([events], gateFn(name, expected), {\n\t\tname: `${name}/gate`,\n\t\tfactory: \"wireEdgeGroupGate\",\n\t\tpartial: true,\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst commands = topology.node<Command>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as Event;\n\t\t\t\tif (event.kind === \"outbound\") ctx.down([[\"DATA\", event.command]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/commands`,\n\t\t\tfactory: \"wireEdgeGroupCommands\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst issues = topology.node<WireEdgeGroupIssue>(\n\t\t[events, gate],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as Event;\n\t\t\t\tif (event.kind === \"issue\") ctx.down([[\"DATA\", event.issue]]);\n\t\t\t}\n\t\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\t\tconst event = raw as Gate;\n\t\t\t\tif (event.kind === \"issue\") ctx.down([[\"DATA\", event.issue]]);\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tname: `${name}/issues`,\n\t\t\tfactory: \"wireEdgeGroupIssues\",\n\t\t\tpartial: true,\n\t\t\tcompleteWhenDepsComplete: false,\n\t\t\terrorWhenDepsError: false,\n\t\t},\n\t);\n\tconst status = topology.node<WireEdgeGroupStatus>([events, gate], statusFn(expected), {\n\t\tname: `${name}/status`,\n\t\tfactory: \"wireEdgeGroupStatus\",\n\t\tpartial: true,\n\t\tcompleteWhenDepsComplete: false,\n\t\terrorWhenDepsError: false,\n\t});\n\tconst inbound = new Map(\n\t\tedges.map(\n\t\t\t(edge) =>\n\t\t\t\t[\n\t\t\t\t\tedge.edgeId,\n\t\t\t\t\ttopology.node<Uint8Array>(\n\t\t\t\t\t\t[gate],\n\t\t\t\t\t\t(ctx) => {\n\t\t\t\t\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\t\t\t\t\tconst event = raw as Gate;\n\t\t\t\t\t\t\t\tif (event.kind === \"release\" && event.edgeId === edge.edgeId)\n\t\t\t\t\t\t\t\t\tctx.down([[\"DATA\", Uint8Array.from(event.value)]]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: `${name}/inbound/${edge.edgeId}`,\n\t\t\t\t\t\t\tfactory: \"wireEdgeGroupInboundEdge\",\n\t\t\t\t\t\t\tpartial: true,\n\t\t\t\t\t\t\tcompleteWhenDepsComplete: false,\n\t\t\t\t\t\t\terrorWhenDepsError: false,\n\t\t\t\t\t\t\tmeta: { edgeId: edge.edgeId },\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t] as const,\n\t\t),\n\t);\n\tbridge.command.replaceDeps([commands], commandSourceFn());\n\tlet released = false;\n\treturn {\n\t\tinbound,\n\t\tstatus,\n\t\tissues,\n\t\trelease() {\n\t\t\tif (released) return;\n\t\t\tbridge.command.replaceDeps([], commandSourceFn());\n\t\t\ttry {\n\t\t\t\ttopology.release({ reason: `${name}.wireEdgeGroup.release` });\n\t\t\t\treleased = true;\n\t\t\t} catch (error) {\n\t\t\t\tbridge.command.replaceDeps([commands], commandSourceFn());\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t};\n}\n\nfunction commandSourceFn(): (ctx: Ctx) => void {\n\treturn (ctx) => {\n\t\tfor (const command of depBatch(ctx, 0) ?? []) ctx.down([[\"DATA\", command as Command]]);\n\t};\n}\nfunction normalize(edges: readonly WireEdgeGroupEdge[]) {\n\tconst seen = new Set<string>();\n\tif (edges.length === 0) throw new RangeError(\"wireEdgeGroup: edges must be non-empty\");\n\treturn edges.map((edge) => {\n\t\tif (!edge.edgeId) throw new RangeError(\"wireEdgeGroup: edgeId must be a non-empty string\");\n\t\tif (seen.has(edge.edgeId))\n\t\t\tthrow new RangeError(`wireEdgeGroup: duplicate edgeId ${edge.edgeId}`);\n\t\tseen.add(edge.edgeId);\n\t\treturn edge;\n\t});\n}\nfunction issue(\n\tcode: WireEdgeGroupIssueCode,\n\tmessage: string,\n\textra: Omit<WireEdgeGroupIssue, \"code\" | \"message\"> = {},\n): WireEdgeGroupIssue {\n\treturn { code, message, ...extra };\n}\nfunction send(frame: CanonicalWireEdgeFrame): Command {\n\treturn { kind: \"send\", payload: { kind: \"wire_edge\", frame: clone(frame) } };\n}\nfunction clone(frame: CanonicalWireEdgeFrame): CanonicalWireEdgeFrame {\n\treturn frame.kind === \"data\"\n\t\t? {\n\t\t\t\tkind: \"data\",\n\t\t\t\tedgeId: frame.edgeId,\n\t\t\t\tcauseId: frame.causeId,\n\t\t\t\tvalue: Uint8Array.from(frame.value ?? new Uint8Array()),\n\t\t\t}\n\t\t: { kind: \"dirty\", edgeId: frame.edgeId, causeId: frame.causeId };\n}\nfunction eventsFn(\n\tname: string,\n\tedges: readonly WireEdgeGroupEdge[],\n\toutboundIndexes: readonly number[],\n): (ctx: Ctx) => void {\n\tconst byDep = new Map<number, WireEdgeGroupEdge>();\n\toutboundIndexes.forEach((edgeIndex, depIndex) => {\n\t\tbyDep.set(depIndex, edges[edgeIndex]);\n\t});\n\tconst inboundIndex = outboundIndexes.length;\n\treturn (ctx) => {\n\t\tlet st = ctx.state.get<OutState>();\n\t\tif (!st) {\n\t\t\tst = { nextCause: 1, snapshots: new Map() };\n\t\t\tctx.state.set(st);\n\t\t}\n\t\tlet trigger = false;\n\t\tfor (let i = 0; i < outboundIndexes.length; i++) {\n\t\t\tconst edge = byDep.get(i);\n\t\t\tif (!edge) continue;\n\t\t\tfor (const raw of depBatch(ctx, i) ?? []) {\n\t\t\t\tif (!(raw instanceof Uint8Array))\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"issue\",\n\t\t\t\t\t\t\t\tissue: issue(\n\t\t\t\t\t\t\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t\t\t\t\t\t\t`${name}: outbound edge ${edge.edgeId} must emit Uint8Array bytes`,\n\t\t\t\t\t\t\t\t\t{ edgeId: edge.edgeId },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t} satisfies Event,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\telse {\n\t\t\t\t\tst.snapshots.set(edge.edgeId, Uint8Array.from(raw));\n\t\t\t\t\ttrigger = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (trigger) emitOutbound(ctx, name, edges, st);\n\t\tfor (const rawEnvelope of depBatch(ctx, inboundIndex) ?? []) {\n\t\t\tconst ev = frameEvent(name, rawEnvelope as WireBridgeEnvelope<unknown>);\n\t\t\tif (ev) ctx.down([[\"DATA\", ev]]);\n\t\t}\n\t};\n}\nfunction emitOutbound(\n\tctx: Ctx,\n\tname: string,\n\tedges: readonly WireEdgeGroupEdge[],\n\tst: OutState,\n): void {\n\tconst missing = edges.filter((edge) => !st.snapshots.has(edge.edgeId));\n\tif (missing.length) {\n\t\tfor (const edge of missing)\n\t\t\tctx.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"issue\",\n\t\t\t\t\t\tissue: issue(\n\t\t\t\t\t\t\t\"wire-edge-group-missing-snapshot\",\n\t\t\t\t\t\t\t`${name}: missing outbound snapshot for edge ${edge.edgeId}`,\n\t\t\t\t\t\t\t{ edgeId: edge.edgeId },\n\t\t\t\t\t\t),\n\t\t\t\t\t} satisfies Event,\n\t\t\t\t],\n\t\t\t]);\n\t\treturn;\n\t}\n\tconst causeId = `${name}:cause:${st.nextCause++}`;\n\tfor (const edge of edges)\n\t\tctx.down([\n\t\t\t[\n\t\t\t\t\"DATA\",\n\t\t\t\t{\n\t\t\t\t\tkind: \"outbound\",\n\t\t\t\t\tcommand: send({ kind: \"dirty\", edgeId: edge.edgeId, causeId }),\n\t\t\t\t} satisfies Event,\n\t\t\t],\n\t\t]);\n\tfor (const edge of edges) {\n\t\tconst value = st.snapshots.get(edge.edgeId);\n\t\tif (value)\n\t\t\tctx.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"outbound\",\n\t\t\t\t\t\tcommand: send({ kind: \"data\", edgeId: edge.edgeId, causeId, value }),\n\t\t\t\t\t} satisfies Event,\n\t\t\t\t],\n\t\t\t]);\n\t}\n}\nfunction frameEvent(name: string, envelope: WireBridgeEnvelope<unknown>): Event | undefined {\n\tif (envelope.type === \"close\" || envelope.type === \"error\") return { kind: \"bridge-end\" };\n\tif (envelope.type !== \"data\") return undefined;\n\tconst value = envelope.payload?.kind === \"data\" ? envelope.payload.value : undefined;\n\tif (\n\t\tvalue instanceof Uint8Array ||\n\t\t(typeof value === \"object\" && value !== null && (value as { kind?: unknown }).kind === \"value\")\n\t)\n\t\treturn undefined;\n\tif (\n\t\ttypeof value !== \"object\" ||\n\t\tvalue === null ||\n\t\t(value as { kind?: unknown }).kind !== \"wire_edge\"\n\t)\n\t\treturn {\n\t\t\tkind: \"issue\",\n\t\t\tissue: issue(\n\t\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t\t`${name}: wire-edge payload must be a wire_edge frame`,\n\t\t\t),\n\t\t};\n\tconst frame = (value as { frame?: unknown }).frame;\n\tconst bad = validate(name, frame);\n\treturn bad\n\t\t? { kind: \"issue\", issue: bad }\n\t\t: { kind: \"frame\", frame: clone(frame as CanonicalWireEdgeFrame) };\n}\nfunction validate(name: string, frame: unknown): WireEdgeGroupIssue | undefined {\n\tif (typeof frame !== \"object\" || frame === null)\n\t\treturn issue(\"wire-edge-group-malformed-frame\", `${name}: wire-edge frame must be an object`);\n\tconst f = frame as Partial<CanonicalWireEdgeFrame>;\n\tif (f.kind !== \"dirty\" && f.kind !== \"data\")\n\t\treturn issue(\n\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t`${name}: wire-edge frame kind must be dirty or data`,\n\t\t);\n\tif (!f.edgeId)\n\t\treturn issue(\n\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t`${name}: wire-edge frame edgeId must be non-empty`,\n\t\t\t{ causeId: f.causeId },\n\t\t);\n\tif (!f.causeId)\n\t\treturn issue(\n\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t`${name}: wire-edge frame causeId must be non-empty`,\n\t\t\t{ edgeId: f.edgeId },\n\t\t);\n\tif (f.kind === \"dirty\" && f.value !== undefined)\n\t\treturn issue(\n\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t`${name}: DIRTY wire-edge frame must not carry value bytes`,\n\t\t\t{ edgeId: f.edgeId, causeId: f.causeId },\n\t\t);\n\tif (f.kind === \"data\" && !(f.value instanceof Uint8Array))\n\t\treturn issue(\n\t\t\t\"wire-edge-group-malformed-frame\",\n\t\t\t`${name}: DATA wire-edge frame requires Uint8Array value bytes`,\n\t\t\t{ edgeId: f.edgeId, causeId: f.causeId },\n\t\t);\n\treturn undefined;\n}\nfunction gateFn(name: string, expectedIds: readonly string[]): (ctx: Ctx) => void {\n\tconst expected = new Set(expectedIds);\n\treturn (ctx) => {\n\t\tlet st = ctx.state.get<GateState>();\n\t\tif (!st) {\n\t\t\tst = {\n\t\t\t\tdirty: new Set(),\n\t\t\t\tdata: new Map(),\n\t\t\t\tfailed: new CauseTombstones(),\n\t\t\t\treleased: new CauseTombstones(),\n\t\t\t};\n\t\t\tctx.state.set(st);\n\t\t}\n\t\tconst emitIssue = (i: WireEdgeGroupIssue) =>\n\t\t\tctx.down([[\"DATA\", { kind: \"issue\", issue: i } satisfies Gate]]);\n\t\tconst reset = () => {\n\t\t\tst.activeCauseId = undefined;\n\t\t\tst.dirty.clear();\n\t\t\tst.data.clear();\n\t\t};\n\t\tconst fail = (causeId?: string) => {\n\t\t\tif (causeId) st.failed.add(causeId);\n\t\t\treset();\n\t\t};\n\t\tconst progress = (causeId: string) =>\n\t\t\tctx.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{ kind: \"progress\", causeId, dirty: st.dirty.size, data: st.data.size } satisfies Gate,\n\t\t\t\t],\n\t\t\t]);\n\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\tconst ev = raw as Event;\n\t\t\tif (ev.kind === \"issue\") {\n\t\t\t\temitIssue(ev.issue);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ev.kind === \"outbound\") continue;\n\t\t\tif (ev.kind === \"bridge-end\") {\n\t\t\t\tif (st.activeCauseId) {\n\t\t\t\t\temitIssue(\n\t\t\t\t\t\tissue(\n\t\t\t\t\t\t\t\"wire-edge-group-incomplete-cause\",\n\t\t\t\t\t\t\t`${name}: cause ${st.activeCauseId} ended before all expected edge frames arrived`,\n\t\t\t\t\t\t\t{ causeId: st.activeCauseId },\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tfail(st.activeCauseId);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst f = ev.frame;\n\t\t\tif (st.failed.has(f.causeId)) {\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"wire-edge-group-incomplete-cause\",\n\t\t\t\t\t\t`${name}: cause ${f.causeId} was already failed closed`,\n\t\t\t\t\t\t{ edgeId: f.edgeId, causeId: f.causeId },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (st.released.has(f.causeId)) {\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\n\t\t\t\t\t\tf.kind === \"dirty\"\n\t\t\t\t\t\t\t? \"wire-edge-group-duplicate-dirty\"\n\t\t\t\t\t\t\t: \"wire-edge-group-duplicate-data\",\n\t\t\t\t\t\t`${name}: cause ${f.causeId} was already released`,\n\t\t\t\t\t\t{ edgeId: f.edgeId, causeId: f.causeId },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!expected.has(f.edgeId)) {\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\"wire-edge-group-unknown-edge\", `${name}: unknown edge ${f.edgeId}`, {\n\t\t\t\t\t\tedgeId: f.edgeId,\n\t\t\t\t\t\tcauseId: f.causeId,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tfail(f.causeId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!st.activeCauseId) st.activeCauseId = f.causeId;\n\t\t\tif (st.activeCauseId !== f.causeId) {\n\t\t\t\tconst activeCauseId = st.activeCauseId;\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"wire-edge-group-competing-cause\",\n\t\t\t\t\t\t`${name}: competing cause ${f.causeId} arrived while ${activeCauseId} is active`,\n\t\t\t\t\t\t{ edgeId: f.edgeId, causeId: f.causeId, activeCauseId },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"wire-edge-group-incomplete-cause\",\n\t\t\t\t\t\t`${name}: active cause ${activeCauseId} is incomplete`,\n\t\t\t\t\t\t{ causeId: activeCauseId },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfail(activeCauseId);\n\t\t\t\tst.failed.add(f.causeId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (f.kind === \"dirty\") {\n\t\t\t\tif (st.dirty.has(f.edgeId)) {\n\t\t\t\t\temitIssue(\n\t\t\t\t\t\tissue(\n\t\t\t\t\t\t\t\"wire-edge-group-duplicate-dirty\",\n\t\t\t\t\t\t\t`${name}: duplicate DIRTY for edge ${f.edgeId}`,\n\t\t\t\t\t\t\t{ edgeId: f.edgeId, causeId: f.causeId },\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tfail(f.causeId);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tst.dirty.add(f.edgeId);\n\t\t\t\tprogress(f.causeId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!st.dirty.has(f.edgeId)) {\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\n\t\t\t\t\t\t\"wire-edge-group-data-before-dirty\",\n\t\t\t\t\t\t`${name}: DATA for edge ${f.edgeId} arrived before DIRTY`,\n\t\t\t\t\t\t{ edgeId: f.edgeId, causeId: f.causeId },\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t\tfail(f.causeId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (st.data.has(f.edgeId)) {\n\t\t\t\temitIssue(\n\t\t\t\t\tissue(\"wire-edge-group-duplicate-data\", `${name}: duplicate DATA for edge ${f.edgeId}`, {\n\t\t\t\t\t\tedgeId: f.edgeId,\n\t\t\t\t\t\tcauseId: f.causeId,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tfail(f.causeId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tst.data.set(f.edgeId, Uint8Array.from(f.value ?? new Uint8Array()));\n\t\t\tif (st.dirty.size === expectedIds.length && st.data.size === expectedIds.length) {\n\t\t\t\tfor (const edgeId of expectedIds) {\n\t\t\t\t\tconst value = st.data.get(edgeId);\n\t\t\t\t\tif (value)\n\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkind: \"release\",\n\t\t\t\t\t\t\t\t\tcauseId: f.causeId,\n\t\t\t\t\t\t\t\t\tedgeId,\n\t\t\t\t\t\t\t\t\tvalue: Uint8Array.from(value),\n\t\t\t\t\t\t\t\t} satisfies Gate,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t\tst.released.add(f.causeId);\n\t\t\t\treset();\n\t\t\t} else progress(f.causeId);\n\t\t}\n\t};\n}\nfunction statusFn(expectedIds: readonly string[]): (ctx: Ctx) => void {\n\treturn (ctx) => {\n\t\tlet next =\n\t\t\tctx.state.get<WireEdgeGroupStatus>() ??\n\t\t\t({\n\t\t\t\tstate: \"idle\",\n\t\t\t\texpectedEdges: [...expectedIds],\n\t\t\t\tdirty: 0,\n\t\t\t\tdata: 0,\n\t\t\t\treleased: 0,\n\t\t\t\tissues: 0,\n\t\t\t} satisfies WireEdgeGroupStatus);\n\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\tconst ev = raw as Event;\n\t\t\tif (ev.kind === \"issue\")\n\t\t\t\tnext = { ...next, state: \"issues\", issues: next.issues + 1, lastIssue: ev.issue };\n\t\t}\n\t\tfor (const raw of depBatch(ctx, 1) ?? []) {\n\t\t\tconst ev = raw as Gate;\n\t\t\tif (ev.kind === \"issue\")\n\t\t\t\tnext = { ...next, state: \"issues\", issues: next.issues + 1, lastIssue: ev.issue };\n\t\t\telse if (ev.kind === \"progress\")\n\t\t\t\tnext = {\n\t\t\t\t\t...next,\n\t\t\t\t\tstate: \"collecting\",\n\t\t\t\t\tactiveCauseId: ev.causeId,\n\t\t\t\t\tdirty: ev.dirty,\n\t\t\t\t\tdata: ev.data,\n\t\t\t\t};\n\t\t\telse\n\t\t\t\tnext = {\n\t\t\t\t\t...next,\n\t\t\t\t\tstate: \"released\",\n\t\t\t\t\tactiveCauseId: ev.causeId,\n\t\t\t\t\tdirty: expectedIds.length,\n\t\t\t\t\tdata: expectedIds.length,\n\t\t\t\t\treleased: next.released + 1,\n\t\t\t\t};\n\t\t}\n\t\tctx.state.set(next);\n\t\tctx.down([[\"DATA\", next]]);\n\t};\n}\n","/**\n * Graph-visible outbound environment adapters (D130/D132).\n *\n * Async transport work is confined to graph-local EnvironmentDrivers. Each\n * helper returns declared nodes for events/status/attempts/errors instead of a\n * hidden sink side channel.\n */\n\nimport { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type {\n\tDriverCancel,\n\tHttpResponse,\n\tProcessResult,\n\tWebSocketRequest,\n\tWebSocketSendResult,\n} from \"../graph/environment.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport { nextRetryDelayMs, retryPolicy, shouldRetry } from \"../graph/resilience.js\";\nimport type { Node } from \"../node/node.js\";\nimport { errorPayload } from \"../protocol/messages.js\";\nimport type {\n\tHttpRequestOf,\n\tOutboundAdapterOptions,\n\tOutboundBundle,\n\tOutboundEvent,\n\tOutboundStatus,\n\tProcessCommandOf,\n\tWebSocketSendOf,\n} from \"./environment-types.js\";\n\ninterface SendState {\n\tseq: number;\n\tcancels: Map<number, DriverCancel>;\n\ttimers: Map<number, ReturnType<typeof setTimeout>>;\n\tactive: boolean;\n\tcleanupInstalled: boolean;\n}\n\nfunction assertSourceLocal<T>(source: Node<T>): Node<T> {\n\treturn source;\n}\n\nfunction initSendState(ctx: Ctx): SendState {\n\tlet state = ctx.state.get<SendState>();\n\tif (state === undefined) {\n\t\tstate = {\n\t\t\tseq: 0,\n\t\t\tcancels: new Map(),\n\t\t\ttimers: new Map(),\n\t\t\tactive: true,\n\t\t\tcleanupInstalled: false,\n\t\t};\n\t\tctx.state.set(state);\n\t}\n\tstate.active = true;\n\tif (!state.cleanupInstalled) {\n\t\tstate.cleanupInstalled = true;\n\t\tctx.onDeactivation(() => {\n\t\t\tstate.active = false;\n\t\t\tstate.cleanupInstalled = false;\n\t\t\tfor (const cancel of state.cancels.values()) runCancel(cancel);\n\t\t\tfor (const timer of state.timers.values()) clearTimeout(timer);\n\t\t\tstate.cancels.clear();\n\t\t\tstate.timers.clear();\n\t\t});\n\t}\n\treturn state;\n}\n\nexport function runCancel(cancel: DriverCancel): void {\n\ttry {\n\t\tcancel();\n\t} catch {\n\t\t// Driver cancellation is best-effort and must not hide graph-visible outcomes.\n\t}\n}\n\nfunction outboundNodes<TValue, TResult>(\n\tgraph: Graph,\n\tevents: Node<OutboundEvent<TValue, TResult>>,\n\tname: string,\n): OutboundBundle<TValue, TResult> {\n\tconst status = graph.node<OutboundStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tconst current =\n\t\t\t\tctx.state.get<OutboundStatus>() ??\n\t\t\t\t({ state: \"idle\", inFlight: 0, attempt: 0, sent: 0, failed: 0 } satisfies OutboundStatus);\n\t\t\tlet next = current;\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tnext = reduceStatus(next, event as OutboundEvent<TValue, TResult>);\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"outboundStatus\" },\n\t);\n\tconst attempts = graph.node<number>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as OutboundEvent<TValue, TResult>;\n\t\t\t\tif (\"attempt\" in typed) ctx.down([[\"DATA\", typed.attempt]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/attempts`, factory: \"outboundAttempts\" },\n\t);\n\tconst errors = graph.node<unknown>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const event of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst typed = event as OutboundEvent<TValue, TResult>;\n\t\t\t\tif (\"error\" in typed) ctx.down([[\"DATA\", typed.error]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"outboundErrors\" },\n\t);\n\treturn { events, status, attempts, errors };\n}\n\nfunction reduceStatus<TValue, TResult>(\n\tcurrent: OutboundStatus,\n\tevent: OutboundEvent<TValue, TResult>,\n): OutboundStatus {\n\tswitch (event.kind) {\n\t\tcase \"attempt\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"running\",\n\t\t\t\tinFlight: current.inFlight + 1,\n\t\t\t\tattempt: event.attempt,\n\t\t\t};\n\t\tcase \"retry\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"waiting\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tlastDelayMs: event.delayMs,\n\t\t\t};\n\t\tcase \"sent\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"succeeded\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tsent: current.sent + 1,\n\t\t\t\tlastDelayMs: undefined,\n\t\t\t};\n\t\tcase \"failed\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"failed\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tfailed: current.failed + 1,\n\t\t\t};\n\t\tcase \"exhausted\":\n\t\t\treturn {\n\t\t\t\t...current,\n\t\t\t\tstate: \"exhausted\",\n\t\t\t\tinFlight: Math.max(0, current.inFlight - 1),\n\t\t\t\tattempt: event.attempt,\n\t\t\t\tfailed: current.failed + 1,\n\t\t\t};\n\t\tcase \"upstream-complete\":\n\t\t\treturn { ...current, state: \"completed\" };\n\t\tcase \"upstream-error\":\n\t\t\treturn { ...current, state: \"failed\", failed: current.failed + 1 };\n\t}\n}\n\nfunction outboundNode<TValue, TResult>(\n\tgraph: Graph,\n\tsource: Node<TValue>,\n\tname: string,\n\tsend: (\n\t\tctx: Ctx,\n\t\tvalue: TValue,\n\t\tcallback: (result: { ok: true; value: TResult } | { ok: false; error: unknown }) => void,\n\t) => DriverCancel | undefined,\n\topts: OutboundAdapterOptions,\n): Node<OutboundEvent<TValue, TResult>> {\n\tconst policy = opts.retry ?? retryPolicy();\n\treturn graph.node<OutboundEvent<TValue, TResult>>(\n\t\t[assertSourceLocal(source)],\n\t\t(ctx) => {\n\t\t\tconst state = initSendState(ctx);\n\t\t\tconst start = (value: TValue, attempt: number) => {\n\t\t\t\tif (!state.active) return;\n\t\t\t\tconst id = state.seq++;\n\t\t\t\tctx.down([\n\t\t\t\t\t[\"DATA\", { kind: \"attempt\", value, attempt } satisfies OutboundEvent<TValue, TResult>],\n\t\t\t\t]);\n\t\t\t\tconst failTerminal = (error: unknown) => {\n\t\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{ kind: \"exhausted\", value, attempt, error: payload } satisfies OutboundEvent<\n\t\t\t\t\t\t\t\tTValue,\n\t\t\t\t\t\t\t\tTResult\n\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tctx.down([[\"ERROR\", payload]]);\n\t\t\t\t};\n\t\t\t\tlet cancel: DriverCancel | undefined;\n\t\t\t\tlet done = false;\n\t\t\t\ttry {\n\t\t\t\t\tcancel = send(ctx, value, (result) => {\n\t\t\t\t\t\tif (done || !state.active) return;\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tstate.cancels.delete(id);\n\t\t\t\t\t\tif (result.ok) {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{ kind: \"sent\", value, attempt, result: result.value } satisfies OutboundEvent<\n\t\t\t\t\t\t\t\t\t\tTValue,\n\t\t\t\t\t\t\t\t\t\tTResult\n\t\t\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (shouldRetry(policy, attempt)) {\n\t\t\t\t\t\t\tconst nextAttempt = attempt + 1;\n\t\t\t\t\t\t\tconst delayMs = nextRetryDelayMs(policy, nextAttempt) ?? 0;\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkind: \"retry\",\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\t\t\t\t\terror: errorPayload(result.error),\n\t\t\t\t\t\t\t\t\t} satisfies OutboundEvent<TValue, TResult>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\t\t\t\tstate.timers.delete(id);\n\t\t\t\t\t\t\t\tif (!state.active) return;\n\t\t\t\t\t\t\t\tstart(value, nextAttempt);\n\t\t\t\t\t\t\t}, delayMs);\n\t\t\t\t\t\t\tstate.timers.set(id, timer);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkind: \"exhausted\",\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\t\t\terror: errorPayload(result.error),\n\t\t\t\t\t\t\t\t\t} satisfies OutboundEvent<TValue, TResult>,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!done) {\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tstate.cancels.delete(id);\n\t\t\t\t\t\tfailTerminal(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (cancel === undefined) {\n\t\t\t\t\tif (!done) {\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tfailTerminal(`${name}: missing environment driver capability`);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (!done && state.active) {\n\t\t\t\t\tstate.cancels.set(id, cancel);\n\t\t\t\t} else if (!state.active) {\n\t\t\t\t\trunCancel(cancel);\n\t\t\t\t}\n\t\t\t};\n\t\t\tfor (const value of depBatch(ctx, 0) ?? []) start(value as TValue, 1);\n\t\t\tconst terminal = ctx.terminal[0];\n\t\t\tif (terminal === true) {\n\t\t\t\tctx.down([\n\t\t\t\t\t[\"DATA\", { kind: \"upstream-complete\" } satisfies OutboundEvent<TValue, TResult>],\n\t\t\t\t]);\n\t\t\t} else if (terminal !== false && terminal !== undefined) {\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{ kind: \"upstream-error\", error: terminal } satisfies OutboundEvent<TValue, TResult>,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t}\n\t\t},\n\t\t{ name, factory: name },\n\t);\n}\n\nexport function toHttp<T>(\n\tgraph: Graph,\n\tsource: Node<T>,\n\trequestOf: HttpRequestOf<T>,\n\topts: OutboundAdapterOptions = {},\n): OutboundBundle<T, HttpResponse> {\n\tconst name = opts.name ?? \"toHttp\";\n\tconst events = outboundNode<T, HttpResponse>(\n\t\tgraph,\n\t\tsource,\n\t\tname,\n\t\t(ctx, value, callback) => {\n\t\t\tconst request = requestOf(value);\n\t\t\treturn ctx.environment().httpDriver()?.request(request, callback);\n\t\t},\n\t\topts,\n\t);\n\treturn outboundNodes(graph, events, name);\n}\n\nexport function toProcess<T>(\n\tgraph: Graph,\n\tsource: Node<T>,\n\tcommandOf: ProcessCommandOf<T>,\n\topts: OutboundAdapterOptions = {},\n): OutboundBundle<T, ProcessResult> {\n\tconst name = opts.name ?? \"toProcess\";\n\tconst events = outboundNode<T, ProcessResult>(\n\t\tgraph,\n\t\tsource,\n\t\tname,\n\t\t(ctx, value, callback) => {\n\t\t\tconst command = commandOf(value);\n\t\t\treturn ctx.environment().processDriver()?.run(command, callback);\n\t\t},\n\t\topts,\n\t);\n\treturn outboundNodes(graph, events, name);\n}\n\nexport function toWebSocket<T>(\n\tgraph: Graph,\n\tsource: Node<T>,\n\trequest: WebSocketRequest,\n\tsendOf: WebSocketSendOf<T>,\n\topts: OutboundAdapterOptions = {},\n): OutboundBundle<T, WebSocketSendResult> {\n\tconst name = opts.name ?? \"toWebSocket\";\n\tconst events = outboundNode<T, WebSocketSendResult>(\n\t\tgraph,\n\t\tsource,\n\t\tname,\n\t\t(ctx, value, callback) => {\n\t\t\tconst driver = ctx.environment().webSocketDriver();\n\t\t\treturn driver?.send?.(request, sendOf(value), callback);\n\t\t},\n\t\topts,\n\t);\n\treturn outboundNodes(graph, events, name);\n}\n","/**\n * Graph-visible outbound environment adapters (D130/D132).\n *\n * Async transport work is confined to graph-local EnvironmentDrivers. Each\n * helper returns declared nodes for events/status/attempts/errors instead of a\n * hidden sink side channel.\n */\n\nimport { type Ctx, depBatch } from \"../ctx/types.js\";\nimport type {\n\tDriverCancel,\n\tWebSocketRequest,\n\tWebSocketSend,\n\tWebSocketSessionHandle,\n} from \"../graph/environment.js\";\nimport type { Graph } from \"../graph/graph.js\";\nimport {\n\tnextRetryDelayMs,\n\ttype RetryPolicy,\n\tretryPolicy,\n\tshouldRetry,\n} from \"../graph/resilience.js\";\nimport type { Node } from \"../node/node.js\";\nimport { errorPayload } from \"../protocol/messages.js\";\nimport { runCancel } from \"./environment-outbound.js\";\nimport type {\n\tWebSocketSessionBundle,\n\tWebSocketSessionCommand,\n\tWebSocketSessionInbound,\n\tWebSocketSessionLifecycle,\n\tWebSocketSessionOptions,\n\tWebSocketSessionOutbound,\n\tWebSocketSessionSendPolicy,\n\tWebSocketSessionStatus,\n} from \"./environment-types.js\";\n\ntype WebSocketSessionEvent =\n\t| { readonly kind: \"attempt\"; readonly attempt: number; readonly maxAttempts: number }\n\t| { readonly kind: \"open\"; readonly attempt: number }\n\t| { readonly kind: \"message\"; readonly message: WebSocketSessionInbound }\n\t| { readonly kind: \"sent\"; readonly message: WebSocketSend }\n\t| { readonly kind: \"closing\"; readonly code?: number; readonly reason?: string }\n\t| { readonly kind: \"closed\"; readonly code?: number; readonly reason?: string }\n\t| {\n\t\t\treadonly kind: \"retry\";\n\t\t\treadonly attempt: number;\n\t\t\treadonly nextAttempt: number;\n\t\t\treadonly delayMs: number;\n\t\t\treadonly error: unknown;\n\t }\n\t| { readonly kind: \"outbound\"; readonly fact: WebSocketSessionOutbound }\n\t| { readonly kind: \"error\"; readonly error: unknown; readonly attempt?: number }\n\t| { readonly kind: \"exhausted\"; readonly attempt: number; readonly error: unknown };\n\ninterface WebSocketSessionState {\n\tactive: boolean;\n\tconnected: boolean;\n\tcleanupInstalled: boolean;\n\tcurrentAttempt: number;\n\tcurrentSession: WebSocketSessionHandle | undefined;\n\tsendCancels: Map<number, DriverCancel>;\n\tliveSends: Map<number, PendingWebSocketOutbound>;\n\tpendingOutbound: PendingWebSocketOutbound[];\n\ttimers: Map<number, ReturnType<typeof setTimeout>>;\n\tseq: number;\n\toutboundSeq: number;\n}\n\ninterface PendingWebSocketOutbound {\n\treadonly seq: number;\n\treadonly message: WebSocketSend;\n}\n\nfunction initWebSocketSessionState(ctx: Ctx): WebSocketSessionState {\n\tlet state = ctx.state.get<WebSocketSessionState>();\n\tif (state === undefined) {\n\t\tstate = {\n\t\t\tactive: true,\n\t\t\tconnected: false,\n\t\t\tcleanupInstalled: false,\n\t\t\tcurrentAttempt: 0,\n\t\t\tcurrentSession: undefined,\n\t\t\tsendCancels: new Map(),\n\t\t\tliveSends: new Map(),\n\t\t\tpendingOutbound: [],\n\t\t\ttimers: new Map(),\n\t\t\tseq: 0,\n\t\t\toutboundSeq: 0,\n\t\t};\n\t\tctx.state.set(state);\n\t}\n\tstate.active = true;\n\tif (!state.cleanupInstalled) {\n\t\tstate.cleanupInstalled = true;\n\t\tctx.onDeactivation(() => {\n\t\t\tconst sendCancels = [...state.sendCancels.values()];\n\t\t\tconst timers = [...state.timers.values()];\n\t\t\tconst session = state.currentSession;\n\t\t\tstate.active = false;\n\t\t\tstate.cleanupInstalled = false;\n\t\t\tstate.connected = false;\n\t\t\tstate.currentAttempt = 0;\n\t\t\tstate.currentSession = undefined;\n\t\t\tstate.sendCancels.clear();\n\t\t\tstate.liveSends.clear();\n\t\t\tstate.pendingOutbound = [];\n\t\t\tstate.timers.clear();\n\t\t\tfor (const cancel of sendCancels) runCancel(cancel);\n\t\t\tfor (const timer of timers) clearTimeout(timer);\n\t\t\tsession?.cancel();\n\t\t});\n\t}\n\treturn state;\n}\n\nfunction closeWebSocketSessionState(\n\tstate: WebSocketSessionState,\n\tdriverAction: \"cancel\" | \"none\" = \"cancel\",\n): {\n\treadonly canceled: PendingWebSocketOutbound[];\n\treadonly session: WebSocketSessionHandle | undefined;\n} {\n\tconst session = state.currentSession;\n\tconst timers = [...state.timers.values()];\n\tconst sendCancels = [...state.sendCancels.values()];\n\tconst canceled = [...state.pendingOutbound, ...state.liveSends.values()];\n\tstate.connected = false;\n\tstate.currentAttempt = 0;\n\tstate.currentSession = undefined;\n\tstate.timers.clear();\n\tstate.sendCancels.clear();\n\tstate.pendingOutbound = [];\n\tstate.liveSends.clear();\n\tfor (const timer of timers) clearTimeout(timer);\n\tfor (const cancelSend of sendCancels) runCancel(cancelSend);\n\tif (driverAction === \"cancel\") session?.cancel();\n\treturn { canceled, session };\n}\n\nfunction cancelRetryTimers(state: WebSocketSessionState): void {\n\tfor (const timer of state.timers.values()) clearTimeout(timer);\n\tstate.timers.clear();\n}\n\nfunction cleanupWebSocketConnection(\n\tstate: WebSocketSessionState,\n\tdriverAction: \"cancel\" | \"none\" = \"cancel\",\n): PendingWebSocketOutbound[] {\n\tconst session = state.currentSession;\n\tconst sendCancels = [...state.sendCancels.values()];\n\tconst canceled = [...state.liveSends.values()];\n\tstate.connected = false;\n\tstate.currentAttempt = 0;\n\tstate.currentSession = undefined;\n\tstate.sendCancels.clear();\n\tstate.liveSends.clear();\n\tfor (const cancelSend of sendCancels) runCancel(cancelSend);\n\tif (driverAction === \"cancel\") session?.cancel();\n\treturn canceled;\n}\n\nfunction normalizeWebSocketSessionSendPolicy(\n\tpolicy: WebSocketSessionSendPolicy | undefined,\n): { readonly kind: \"reject\" } | { readonly kind: \"buffer\"; readonly maxPending: number } {\n\tif (policy?.kind !== \"buffer\") return { kind: \"reject\" };\n\tif (!Number.isFinite(policy.maxPending) || policy.maxPending < 1) {\n\t\tthrow new Error(\"webSocketSession: buffer sendPolicy requires finite maxPending >= 1\");\n\t}\n\treturn { kind: \"buffer\", maxPending: Math.floor(policy.maxPending) };\n}\n\nfunction webSocketSessionEventNode(\n\tgraph: Graph,\n\tcommand: Node<WebSocketSessionCommand>,\n\trequest: WebSocketRequest,\n\tname: string,\n\tpolicy: RetryPolicy,\n\tsendPolicy: ReturnType<typeof normalizeWebSocketSessionSendPolicy>,\n): Node<WebSocketSessionEvent> {\n\treturn graph.node<WebSocketSessionEvent>(\n\t\t[command],\n\t\t(ctx) => {\n\t\t\tconst state = initWebSocketSessionState(ctx);\n\n\t\t\tconst emitOutbound = (fact: WebSocketSessionOutbound) => {\n\t\t\t\tctx.down([[\"DATA\", { kind: \"outbound\", fact } satisfies WebSocketSessionEvent]]);\n\t\t\t};\n\n\t\t\tconst emitOutboundCanceled = (\n\t\t\t\titems: readonly PendingWebSocketOutbound[],\n\t\t\t\treason: unknown,\n\t\t\t) => {\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"canceled\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\treason,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst emitOutboundRejected = (items: readonly PendingWebSocketOutbound[], error: unknown) => {\n\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\tfor (const item of items) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: payload,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst retryOrExhaust = (attempt: number, error: unknown) => {\n\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\tconst canceled = cleanupWebSocketConnection(state);\n\t\t\t\temitOutboundCanceled(canceled, `${name}: connection cleanup`);\n\t\t\t\tif (shouldRetry(policy, attempt)) {\n\t\t\t\t\tconst nextAttempt = attempt + 1;\n\t\t\t\t\tconst delayMs = nextRetryDelayMs(policy, nextAttempt) ?? 0;\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"retry\",\n\t\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\t\tnextAttempt,\n\t\t\t\t\t\t\t\tdelayMs,\n\t\t\t\t\t\t\t\terror: payload,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tconst timerId = state.seq++;\n\t\t\t\t\tconst timer = setTimeout(() => {\n\t\t\t\t\t\tstate.timers.delete(timerId);\n\t\t\t\t\t\tif (!state.active) return;\n\t\t\t\t\t\tstart(nextAttempt);\n\t\t\t\t\t}, delayMs);\n\t\t\t\t\tstate.timers.set(timerId, timer);\n\t\t\t\t} else {\n\t\t\t\t\temitOutboundRejected(state.pendingOutbound, payload);\n\t\t\t\t\tstate.pendingOutbound = [];\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{ kind: \"exhausted\", attempt, error: payload } satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst start = (attempt: number) => {\n\t\t\t\tif (\n\t\t\t\t\t!state.active ||\n\t\t\t\t\tstate.connected ||\n\t\t\t\t\tstate.currentAttempt !== 0 ||\n\t\t\t\t\tstate.timers.size > 0\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst driver = ctx.environment().webSocketDriver();\n\t\t\t\tstate.currentAttempt = attempt;\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: \"attempt\",\n\t\t\t\t\t\t\tattempt,\n\t\t\t\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t\tconst connectSession = driver?.connectSession;\n\t\t\t\tif (connectSession === undefined) {\n\t\t\t\t\tretryOrExhaust(attempt, `${name}: missing WebSocket session capability`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tlet session: WebSocketSessionHandle | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tsession = connectSession.call(driver, request, (event) => {\n\t\t\t\t\t\tif (!state.active || state.currentAttempt !== attempt) return;\n\t\t\t\t\t\tif (event.kind === \"event\") {\n\t\t\t\t\t\t\tconst ws = event.event;\n\t\t\t\t\t\t\tif (ws.kind === \"open\") {\n\t\t\t\t\t\t\t\tstate.connected = true;\n\t\t\t\t\t\t\t\tctx.down([[\"DATA\", { kind: \"open\", attempt } satisfies WebSocketSessionEvent]]);\n\t\t\t\t\t\t\t\tflushPending();\n\t\t\t\t\t\t\t} else if (ws.kind === \"text\" || ws.kind === \"binary\") {\n\t\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tkind: \"message\",\n\t\t\t\t\t\t\t\t\t\t\tmessage: ws satisfies WebSocketSessionInbound,\n\t\t\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t} else if (ws.kind === \"close\") {\n\t\t\t\t\t\t\t\tconst normalClose = ws.code === 1000;\n\t\t\t\t\t\t\t\tconst canceled = cleanupWebSocketConnection(state);\n\t\t\t\t\t\t\t\temitOutboundCanceled(canceled, `${name}: session closed`);\n\t\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tkind: \"closed\",\n\t\t\t\t\t\t\t\t\t\t\tcode: ws.code,\n\t\t\t\t\t\t\t\t\t\t\treason: ws.reason,\n\t\t\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tif (!normalClose) {\n\t\t\t\t\t\t\t\t\tretryOrExhaust(attempt, {\n\t\t\t\t\t\t\t\t\t\tkind: \"close\",\n\t\t\t\t\t\t\t\t\t\tcode: ws.code,\n\t\t\t\t\t\t\t\t\t\treason: ws.reason,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (event.kind === \"error\") {\n\t\t\t\t\t\t\tretryOrExhaust(attempt, event.error);\n\t\t\t\t\t\t} else if (event.kind === \"complete\") {\n\t\t\t\t\t\t\tretryOrExhaust(attempt, `${name}: connection completed`);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tretryOrExhaust(attempt, error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (session === undefined) {\n\t\t\t\t\tretryOrExhaust(attempt, `${name}: missing WebSocket session capability`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (state.active && state.currentAttempt === attempt) {\n\t\t\t\t\tstate.currentSession = session;\n\t\t\t\t} else {\n\t\t\t\t\tsession.cancel();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfunction sendNow(item: PendingWebSocketOutbound): void {\n\t\t\t\tif (!state.connected) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t\t});\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst session = state.currentSession;\n\t\t\t\tif (session === undefined) {\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: `${name}: missing WebSocket session capability`,\n\t\t\t\t\t});\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\terror: `${name}: missing WebSocket session capability`,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst sendId = state.seq++;\n\t\t\t\tstate.liveSends.set(sendId, item);\n\t\t\t\temitOutbound({ kind: \"sending\", seq: item.seq, message: item.message });\n\t\t\t\tlet done = false;\n\t\t\t\tlet cancel: DriverCancel | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tcancel = session.send(item.message, (result) => {\n\t\t\t\t\t\tif (done || !state.active || !state.liveSends.has(sendId)) return;\n\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\tstate.liveSends.delete(sendId);\n\t\t\t\t\t\tstate.sendCancels.delete(sendId);\n\t\t\t\t\t\tif (result.ok) {\n\t\t\t\t\t\t\temitOutbound({ kind: \"sent\", seq: item.seq, message: item.message });\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\"DATA\", { kind: \"sent\", message: item.message } satisfies WebSocketSessionEvent],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst payload = errorPayload(result.error);\n\t\t\t\t\t\t\temitOutbound({\n\t\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\t\t\terror: payload,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\t\t\terror: payload,\n\t\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} catch (error) {\n\t\t\t\t\tstate.liveSends.delete(sendId);\n\t\t\t\t\tconst payload = errorPayload(error);\n\t\t\t\t\temitOutbound({\n\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\tmessage: item.message,\n\t\t\t\t\t\terror: payload,\n\t\t\t\t\t});\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"error\", error: payload } satisfies WebSocketSessionEvent]]);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (cancel !== undefined && !done && state.active && state.liveSends.has(sendId)) {\n\t\t\t\t\tstate.sendCancels.set(sendId, cancel);\n\t\t\t\t} else if (cancel !== undefined && !state.active) runCancel(cancel);\n\t\t\t}\n\n\t\t\tfunction flushPending(): void {\n\t\t\t\tconst pending = state.pendingOutbound;\n\t\t\t\tstate.pendingOutbound = [];\n\t\t\t\tfor (let index = 0; index < pending.length; index++) {\n\t\t\t\t\tconst item = pending[index];\n\t\t\t\t\tif (!state.connected || state.currentSession === undefined) {\n\t\t\t\t\t\temitOutboundCanceled(pending.slice(index), `${name}: session closed`);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsendNow(item);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst send = (message: WebSocketSend) => {\n\t\t\t\tconst item = { seq: state.outboundSeq++, message } satisfies PendingWebSocketOutbound;\n\t\t\t\tif (state.connected) {\n\t\t\t\t\tsendNow(item);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (sendPolicy.kind === \"buffer\") {\n\t\t\t\t\tif (state.pendingOutbound.length >= sendPolicy.maxPending) {\n\t\t\t\t\t\temitOutbound({\n\t\t\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\t\t\tseq: item.seq,\n\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\terror: `${name}: outbound buffer full`,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tctx.down([\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\t\t\terror: `${name}: outbound buffer full`,\n\t\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tstate.pendingOutbound.push(item);\n\t\t\t\t\temitOutbound({ kind: \"queued\", seq: item.seq, message });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\temitOutbound({\n\t\t\t\t\tkind: \"rejected\",\n\t\t\t\t\tseq: item.seq,\n\t\t\t\t\tmessage,\n\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t});\n\t\t\t\tctx.down([\n\t\t\t\t\t[\n\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkind: \"error\",\n\t\t\t\t\t\t\terror: `${name}: session is not open`,\n\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t],\n\t\t\t\t]);\n\t\t\t};\n\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst commandValue = raw as WebSocketSessionCommand;\n\t\t\t\tif (commandValue.kind === \"start\") start(1);\n\t\t\t\telse if (commandValue.kind === \"send\") send(commandValue.message);\n\t\t\t\telse {\n\t\t\t\t\tcancelRetryTimers(state);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"closing\",\n\t\t\t\t\t\t\t\tcode: commandValue.code,\n\t\t\t\t\t\t\t\treason: commandValue.reason,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t\tconst { canceled, session } = closeWebSocketSessionState(state, \"none\");\n\t\t\t\t\temitOutboundCanceled(canceled, `${name}: session closed`);\n\t\t\t\t\tsession?.close(commandValue.code, commandValue.reason);\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"closed\",\n\t\t\t\t\t\t\t\tcode: commandValue.code,\n\t\t\t\t\t\t\t\treason: commandValue.reason,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionEvent,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/events`, factory: \"webSocketSessionEvents\" },\n\t);\n}\n\nfunction webSocketSessionNodes(\n\tgraph: Graph,\n\tcommand: Node<WebSocketSessionCommand>,\n\tevents: Node<WebSocketSessionEvent>,\n\tname: string,\n\tpolicy: RetryPolicy,\n): WebSocketSessionBundle {\n\tconst inbound = graph.node<WebSocketSessionInbound>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"message\") ctx.down([[\"DATA\", event.message]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/inbound`, factory: \"webSocketSessionInbound\" },\n\t);\n\tconst lifecycle = graph.node<WebSocketSessionLifecycle>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"attempt\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"starting\",\n\t\t\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\t\t\tmaxAttempts: event.maxAttempts,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionLifecycle,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"open\") {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"open\", attempt: event.attempt }]]);\n\t\t\t\t} else if (event.kind === \"sent\") {\n\t\t\t\t\tctx.down([[\"DATA\", { kind: \"sent\", message: event.message }]]);\n\t\t\t\t} else if (event.kind === \"closing\" || event.kind === \"closed\") {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t} else if (event.kind === \"retry\") {\n\t\t\t\t\tctx.down([\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\"DATA\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkind: \"retrying\",\n\t\t\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\t\t\tnextAttempt: event.nextAttempt,\n\t\t\t\t\t\t\t\tdelayMs: event.delayMs,\n\t\t\t\t\t\t\t\terror: event.error,\n\t\t\t\t\t\t\t} satisfies WebSocketSessionLifecycle,\n\t\t\t\t\t\t],\n\t\t\t\t\t]);\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tctx.down([[\"DATA\", event]]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/lifecycle`, factory: \"webSocketSessionLifecycle\" },\n\t);\n\tconst outbound = graph.node<WebSocketSessionOutbound>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"outbound\") ctx.down([[\"DATA\", event.fact]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/outbound`, factory: \"webSocketSessionOutbound\" },\n\t);\n\tconst status = graph.node<WebSocketSessionStatus>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tlet next =\n\t\t\t\tctx.state.get<WebSocketSessionStatus>() ??\n\t\t\t\t({\n\t\t\t\t\tstate: \"idle\",\n\t\t\t\t\tattempt: 0,\n\t\t\t\t\tmaxAttempts: policy.maxAttempts,\n\t\t\t\t\tsent: 0,\n\t\t\t\t\treceived: 0,\n\t\t\t\t\terrors: 0,\n\t\t\t\t} satisfies WebSocketSessionStatus);\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"attempt\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"connecting\",\n\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\tmaxAttempts: event.maxAttempts,\n\t\t\t\t\t\tlastDelayMs: undefined,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"open\") {\n\t\t\t\t\tnext = { ...next, state: \"open\", attempt: event.attempt, lastDelayMs: undefined };\n\t\t\t\t} else if (event.kind === \"message\") {\n\t\t\t\t\tnext = { ...next, received: next.received + 1 };\n\t\t\t\t} else if (event.kind === \"sent\") {\n\t\t\t\t\tnext = { ...next, sent: next.sent + 1 };\n\t\t\t\t} else if (event.kind === \"closing\") {\n\t\t\t\t\tnext = { ...next, state: \"closing\" };\n\t\t\t\t} else if (event.kind === \"closed\") {\n\t\t\t\t\tnext = { ...next, state: \"closed\" };\n\t\t\t\t} else if (event.kind === \"retry\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"waiting\",\n\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t\tlastDelayMs: event.delayMs,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"error\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"errored\",\n\t\t\t\t\t\tattempt: event.attempt ?? next.attempt,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t} else if (event.kind === \"exhausted\") {\n\t\t\t\t\tnext = {\n\t\t\t\t\t\t...next,\n\t\t\t\t\t\tstate: \"exhausted\",\n\t\t\t\t\t\tattempt: event.attempt,\n\t\t\t\t\t\terrors: next.errors + 1,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.state.set(next);\n\t\t\tctx.down([[\"DATA\", next]]);\n\t\t},\n\t\t{ name: `${name}/status`, factory: \"webSocketSessionStatus\" },\n\t);\n\tconst errors = graph.node<unknown>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (\"error\" in event) ctx.down([[\"DATA\", event.error]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/errors`, factory: \"webSocketSessionErrors\" },\n\t);\n\tconst attempts = graph.node<number>(\n\t\t[events],\n\t\t(ctx) => {\n\t\t\tfor (const raw of depBatch(ctx, 0) ?? []) {\n\t\t\t\tconst event = raw as WebSocketSessionEvent;\n\t\t\t\tif (event.kind === \"attempt\") ctx.down([[\"DATA\", event.attempt]]);\n\t\t\t}\n\t\t},\n\t\t{ name: `${name}/attempts`, factory: \"webSocketSessionAttempts\" },\n\t);\n\treturn {\n\t\tcommand,\n\t\tinbound,\n\t\tlifecycle,\n\t\toutbound,\n\t\tstatus,\n\t\terrors,\n\t\tattempts,\n\t\tstart: () => command.down([[\"DATA\", { kind: \"start\" }]]),\n\t\tsend: (message) =>\n\t\t\tcommand.down([\n\t\t\t\t[\n\t\t\t\t\t\"DATA\",\n\t\t\t\t\t{\n\t\t\t\t\t\tkind: \"send\",\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\ttypeof message === \"string\" || message instanceof Uint8Array\n\t\t\t\t\t\t\t\t? { data: message }\n\t\t\t\t\t\t\t\t: message,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t]),\n\t\tclose: (code, reason) => command.down([[\"DATA\", { kind: \"close\", code, reason }]]),\n\t};\n}\n\n/**\n * Create a graph-visible D133 WebSocket SessionBundle.\n *\n * The convenience start/send/close methods publish command facts only; hidden\n * session state is driven by the command node and graph-local EnvironmentDrivers.\n */\nexport function webSocketSession(\n\tgraph: Graph,\n\trequest: WebSocketRequest,\n\topts: WebSocketSessionOptions = {},\n): WebSocketSessionBundle {\n\tconst name = opts.name ?? \"webSocketSession\";\n\tconst policy = opts.retry ?? retryPolicy();\n\tconst sendPolicy = normalizeWebSocketSessionSendPolicy(opts.sendPolicy);\n\tconst command = graph.node<WebSocketSessionCommand>([], null, {\n\t\tname: `${name}/command`,\n\t\tfactory: \"webSocketSessionCommand\",\n\t});\n\tconst events = webSocketSessionEventNode(graph, command, request, name, policy, sendPolicy);\n\treturn webSocketSessionNodes(graph, command, events, name, policy);\n}\n"],"mappings":"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","names":["isRecord","requestId","request","nowMs","issue","status","emitOutbound","attempt","error","send","emitOutbound","send"]}
|