@graphrefly/ts 0.0.0 → 0.0.1

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.
Files changed (307) hide show
  1. package/README.md +135 -0
  2. package/dist/adapters/index.cjs +105 -66
  3. package/dist/adapters/index.cjs.map +1 -1
  4. package/dist/adapters/index.d.cts +11 -136
  5. package/dist/adapters/index.d.ts +11 -136
  6. package/dist/adapters/index.js +27 -225
  7. package/dist/adapters/index.js.map +1 -1
  8. package/dist/adapters/observe-storage.d.cts +4 -4
  9. package/dist/adapters/observe-storage.d.ts +4 -4
  10. package/dist/adapters/observe-storage.js +1 -0
  11. package/dist/adapters/observe-storage.js.map +1 -1
  12. package/dist/adapters/react.cjs +166 -0
  13. package/dist/adapters/react.cjs.map +1 -0
  14. package/dist/adapters/react.d.cts +31 -0
  15. package/dist/adapters/react.d.ts +31 -0
  16. package/dist/adapters/react.js +51 -0
  17. package/dist/adapters/react.js.map +1 -0
  18. package/dist/adapters/solid.cjs +157 -0
  19. package/dist/adapters/solid.cjs.map +1 -0
  20. package/dist/adapters/solid.d.cts +26 -0
  21. package/dist/adapters/solid.d.ts +26 -0
  22. package/dist/adapters/solid.js +48 -0
  23. package/dist/adapters/solid.js.map +1 -0
  24. package/dist/adapters/svelte.cjs +148 -0
  25. package/dist/adapters/svelte.cjs.map +1 -0
  26. package/dist/adapters/svelte.d.cts +31 -0
  27. package/dist/adapters/svelte.d.ts +31 -0
  28. package/dist/adapters/svelte.js +46 -0
  29. package/dist/adapters/svelte.js.map +1 -0
  30. package/dist/adapters/vue.cjs +155 -0
  31. package/dist/adapters/vue.cjs.map +1 -0
  32. package/dist/adapters/vue.d.cts +26 -0
  33. package/dist/adapters/vue.d.ts +26 -0
  34. package/dist/adapters/vue.js +46 -0
  35. package/dist/adapters/vue.js.map +1 -0
  36. package/dist/agent-runtime-BesGDZcB.d.ts +555 -0
  37. package/dist/agent-runtime-DZTJ3C-p.d.cts +555 -0
  38. package/dist/agentic-memory-BmRCvh0d.d.ts +517 -0
  39. package/dist/agentic-memory-DfuVZ-lY.d.cts +517 -0
  40. package/dist/capability-admission-B0BzqAm5.d.cts +102 -0
  41. package/dist/capability-admission-g0mn9hpq.d.ts +102 -0
  42. package/dist/{chunk-JR4IKCR2.js → chunk-2747WN4Y.js} +5 -5
  43. package/dist/{chunk-2ILL7HQI.js → chunk-3JR3EDB2.js} +17 -17
  44. package/dist/{chunk-2ILL7HQI.js.map → chunk-3JR3EDB2.js.map} +1 -1
  45. package/dist/{chunk-GDL26N2T.js → chunk-3KN7NJDR.js} +2 -2
  46. package/dist/{chunk-DJC4CHLQ.js → chunk-43BKLFZU.js} +9 -9
  47. package/dist/chunk-6XAIOL3X.js +2407 -0
  48. package/dist/chunk-6XAIOL3X.js.map +1 -0
  49. package/dist/{chunk-SCRFRCGR.js → chunk-BSQGE5PS.js} +1 -1
  50. package/dist/{chunk-Y3ZLRGHC.js → chunk-CZNV3VXM.js} +16 -16
  51. package/dist/chunk-DGUM43GV.js +11 -0
  52. package/dist/chunk-DGUM43GV.js.map +1 -0
  53. package/dist/{chunk-JIMUDQN3.js → chunk-FBUU43PM.js} +2 -2
  54. package/dist/chunk-H75VXTGT.js +219 -0
  55. package/dist/chunk-H75VXTGT.js.map +1 -0
  56. package/dist/{chunk-RIIOUTGM.js → chunk-HKK2JD7Z.js} +12 -9
  57. package/dist/chunk-HKK2JD7Z.js.map +1 -0
  58. package/dist/{chunk-D6BG7U6A.js → chunk-IXZBUWSP.js} +3 -3
  59. package/dist/chunk-PC3BTTBE.js +3217 -0
  60. package/dist/chunk-PC3BTTBE.js.map +1 -0
  61. package/dist/chunk-QFY4AFY4.js +879 -0
  62. package/dist/chunk-QFY4AFY4.js.map +1 -0
  63. package/dist/{chunk-DK554R7P.js → chunk-S6HXABGL.js} +2 -1
  64. package/dist/chunk-S6HXABGL.js.map +1 -0
  65. package/dist/{chunk-PKVBHGBM.js → chunk-SS2A464I.js} +7 -7
  66. package/dist/chunk-UT3MHJCW.js +49 -0
  67. package/dist/chunk-UT3MHJCW.js.map +1 -0
  68. package/dist/{chunk-G4M3NHRJ.js → chunk-V7CIJE4B.js} +3 -3
  69. package/dist/{chunk-TEW47IVR.js → chunk-VPEFSDME.js} +2 -2
  70. package/dist/chunk-VTHLCFN4.js +368 -0
  71. package/dist/chunk-VTHLCFN4.js.map +1 -0
  72. package/dist/{chunk-SWTLEQL6.js → chunk-WQIA3GFB.js} +2 -2
  73. package/dist/chunk-WQIA3GFB.js.map +1 -0
  74. package/dist/{chunk-I3IHOHCJ.js → chunk-XKXWK2KP.js} +108 -64
  75. package/dist/chunk-XKXWK2KP.js.map +1 -0
  76. package/dist/{chunk-COHO25CZ.js → chunk-YDSIVHRR.js} +553 -7
  77. package/dist/chunk-YDSIVHRR.js.map +1 -0
  78. package/dist/chunk-YXMZ2N6J.js +1884 -0
  79. package/dist/chunk-YXMZ2N6J.js.map +1 -0
  80. package/dist/composition/index.cjs +102 -57
  81. package/dist/composition/index.cjs.map +1 -1
  82. package/dist/composition/index.d.cts +4 -4
  83. package/dist/composition/index.d.ts +4 -4
  84. package/dist/composition/index.js +6 -5
  85. package/dist/core/index.cjs +102 -57
  86. package/dist/core/index.cjs.map +1 -1
  87. package/dist/core/index.d.cts +2 -2
  88. package/dist/core/index.d.ts +2 -2
  89. package/dist/core/index.js +5 -4
  90. package/dist/cqrs/index.cjs.map +1 -1
  91. package/dist/cqrs/index.d.cts +4 -4
  92. package/dist/cqrs/index.d.ts +4 -4
  93. package/dist/cqrs/index.js +3 -2
  94. package/dist/cqrs/index.js.map +1 -1
  95. package/dist/cqrs/messaging.cjs +312 -0
  96. package/dist/cqrs/messaging.cjs.map +1 -0
  97. package/dist/cqrs/messaging.d.cts +57 -0
  98. package/dist/cqrs/messaging.d.ts +57 -0
  99. package/dist/cqrs/messaging.js +274 -0
  100. package/dist/cqrs/messaging.js.map +1 -0
  101. package/dist/cqrs/work-queue.cjs +329 -0
  102. package/dist/cqrs/work-queue.cjs.map +1 -0
  103. package/dist/cqrs/work-queue.d.cts +90 -0
  104. package/dist/cqrs/work-queue.d.ts +90 -0
  105. package/dist/cqrs/work-queue.js +292 -0
  106. package/dist/cqrs/work-queue.js.map +1 -0
  107. package/dist/data/index.cjs +19 -0
  108. package/dist/data/index.cjs.map +1 -0
  109. package/dist/data/index.d.cts +36 -0
  110. package/dist/data/index.d.ts +36 -0
  111. package/dist/data/index.js +1 -0
  112. package/dist/data/index.js.map +1 -0
  113. package/dist/data-structures/index.cjs +105 -57
  114. package/dist/data-structures/index.cjs.map +1 -1
  115. package/dist/data-structures/index.d.cts +8 -8
  116. package/dist/data-structures/index.d.ts +8 -8
  117. package/dist/data-structures/index.js +7 -6
  118. package/dist/{describe-BZb7AS2y.d.ts → describe-BpyJuWkw.d.ts} +1 -1
  119. package/dist/{describe-Ciu8SUnN.d.cts → describe-DYMw_l1C.d.cts} +1 -1
  120. package/dist/executors/work-queue.cjs +342 -0
  121. package/dist/executors/work-queue.cjs.map +1 -0
  122. package/dist/executors/work-queue.d.cts +90 -0
  123. package/dist/executors/work-queue.d.ts +90 -0
  124. package/dist/executors/work-queue.js +306 -0
  125. package/dist/executors/work-queue.js.map +1 -0
  126. package/dist/graph/index.cjs +112 -58
  127. package/dist/graph/index.cjs.map +1 -1
  128. package/dist/graph/index.d.cts +9 -9
  129. package/dist/graph/index.d.ts +9 -9
  130. package/dist/graph/index.js +18 -17
  131. package/dist/{graph-DfdF9zy4.d.ts → graph-D-1-SQeC.d.ts} +3 -3
  132. package/dist/{graph-s23RbbFO.d.cts → graph-DCEWh4T2.d.cts} +3 -3
  133. package/dist/{index-CAEmLCYF.d.cts → index-72VZC0-E.d.cts} +2 -2
  134. package/dist/{index-SnzZu3x7.d.ts → index-Bmxeu0nK.d.ts} +2 -2
  135. package/dist/index.cjs +112 -58
  136. package/dist/index.cjs.map +1 -1
  137. package/dist/index.d.cts +11 -10
  138. package/dist/index.d.ts +11 -10
  139. package/dist/index.js +118 -113
  140. package/dist/inspection/boundary.cjs +98 -0
  141. package/dist/inspection/boundary.cjs.map +1 -0
  142. package/dist/inspection/boundary.d.cts +61 -0
  143. package/dist/inspection/boundary.d.ts +61 -0
  144. package/dist/inspection/boundary.js +75 -0
  145. package/dist/inspection/boundary.js.map +1 -0
  146. package/dist/{messages-BZqrGGm1.d.ts → messages-CAzUPPJM.d.cts} +10 -5
  147. package/dist/{messages-BZqrGGm1.d.cts → messages-CAzUPPJM.d.ts} +10 -5
  148. package/dist/messaging/index.cjs +744 -613
  149. package/dist/messaging/index.cjs.map +1 -1
  150. package/dist/messaging/index.d.cts +216 -160
  151. package/dist/messaging/index.d.ts +216 -160
  152. package/dist/messaging/index.js +19 -749
  153. package/dist/messaging/index.js.map +1 -1
  154. package/dist/operators/index.cjs +102 -57
  155. package/dist/operators/index.cjs.map +1 -1
  156. package/dist/operators/index.d.cts +6 -6
  157. package/dist/operators/index.d.ts +6 -6
  158. package/dist/operators/index.js +8 -7
  159. package/dist/orchestration/index.cjs +3333 -59
  160. package/dist/orchestration/index.cjs.map +1 -1
  161. package/dist/orchestration/index.d.cts +7 -4
  162. package/dist/orchestration/index.d.ts +7 -4
  163. package/dist/orchestration/index.js +49 -8
  164. package/dist/orchestration/index.js.map +1 -1
  165. package/dist/orchestration/messaging.cjs +314 -0
  166. package/dist/orchestration/messaging.cjs.map +1 -0
  167. package/dist/orchestration/messaging.d.cts +59 -0
  168. package/dist/orchestration/messaging.d.ts +59 -0
  169. package/dist/orchestration/messaging.js +276 -0
  170. package/dist/orchestration/messaging.js.map +1 -0
  171. package/dist/orchestration/work-queue.cjs +262 -0
  172. package/dist/orchestration/work-queue.cjs.map +1 -0
  173. package/dist/orchestration/work-queue.d.cts +85 -0
  174. package/dist/orchestration/work-queue.d.ts +85 -0
  175. package/dist/orchestration/work-queue.js +226 -0
  176. package/dist/orchestration/work-queue.js.map +1 -0
  177. package/dist/patterns/event-flow.cjs +447 -0
  178. package/dist/patterns/event-flow.cjs.map +1 -0
  179. package/dist/patterns/event-flow.d.cts +115 -0
  180. package/dist/patterns/event-flow.d.ts +115 -0
  181. package/dist/patterns/event-flow.js +14 -0
  182. package/dist/patterns/event-flow.js.map +1 -0
  183. package/dist/patterns/index.cjs +423 -18
  184. package/dist/patterns/index.cjs.map +1 -1
  185. package/dist/patterns/index.d.cts +8 -5
  186. package/dist/patterns/index.d.ts +8 -5
  187. package/dist/patterns/index.js +13 -4
  188. package/dist/{reactive-collection-Cb1II1Fi.d.ts → reactive-collection-BAmfrGjd.d.ts} +9 -9
  189. package/dist/{reactive-collection-BxBqtIOE.d.cts → reactive-collection-DNV0-gFi.d.cts} +9 -9
  190. package/dist/{reactive-collection-storage-D-KmjE0J.d.cts → reactive-collection-storage-BNEldDyi.d.cts} +5 -5
  191. package/dist/{reactive-collection-storage-BNiEc-Gd.d.ts → reactive-collection-storage-YZsAQsWK.d.ts} +5 -5
  192. package/dist/{reactive-map-D-g3dv8I.d.cts → reactive-map-DRD1LJ2H.d.cts} +6 -6
  193. package/dist/{reactive-map-BcB4KsQR.d.ts → reactive-map-EsDiCmJk.d.ts} +6 -6
  194. package/dist/render/index.d.cts +3 -3
  195. package/dist/render/index.d.ts +3 -3
  196. package/dist/render/index.js +1 -0
  197. package/dist/{semantic-memory-graph-BYoIlP35.d.cts → semantic-memory-graph-DKuNzuWw.d.cts} +2 -2
  198. package/dist/{semantic-memory-graph-CxyXLms3.d.ts → semantic-memory-graph-uwbwJdhe.d.ts} +2 -2
  199. package/dist/solutions/index.cjs +4478 -2
  200. package/dist/solutions/index.cjs.map +1 -1
  201. package/dist/solutions/index.d.cts +13 -519
  202. package/dist/solutions/index.d.ts +13 -519
  203. package/dist/solutions/index.js +90 -6
  204. package/dist/solutions/reactive-layout/browser/index.cjs +449 -0
  205. package/dist/solutions/reactive-layout/browser/index.cjs.map +1 -0
  206. package/dist/solutions/reactive-layout/browser/index.d.cts +44 -0
  207. package/dist/solutions/reactive-layout/browser/index.d.ts +44 -0
  208. package/dist/solutions/reactive-layout/browser/index.js +69 -0
  209. package/dist/solutions/reactive-layout/browser/index.js.map +1 -0
  210. package/dist/solutions/reactive-layout/index.cjs +4266 -0
  211. package/dist/solutions/reactive-layout/index.cjs.map +1 -0
  212. package/dist/solutions/reactive-layout/index.d.cts +581 -0
  213. package/dist/solutions/reactive-layout/index.d.ts +581 -0
  214. package/dist/solutions/reactive-layout/index.js +86 -0
  215. package/dist/solutions/reactive-layout/index.js.map +1 -0
  216. package/dist/solutions/reactive-layout/node-canvas/index.cjs +545 -0
  217. package/dist/solutions/reactive-layout/node-canvas/index.cjs.map +1 -0
  218. package/dist/solutions/reactive-layout/node-canvas/index.d.cts +54 -0
  219. package/dist/solutions/reactive-layout/node-canvas/index.d.ts +54 -0
  220. package/dist/solutions/reactive-layout/node-canvas/index.js +131 -0
  221. package/dist/solutions/reactive-layout/node-canvas/index.js.map +1 -0
  222. package/dist/solutions/reactive-layout/react-native/index.cjs +494 -0
  223. package/dist/solutions/reactive-layout/react-native/index.cjs.map +1 -0
  224. package/dist/solutions/reactive-layout/react-native/index.d.cts +51 -0
  225. package/dist/solutions/reactive-layout/react-native/index.d.ts +51 -0
  226. package/dist/solutions/reactive-layout/react-native/index.js +77 -0
  227. package/dist/solutions/reactive-layout/react-native/index.js.map +1 -0
  228. package/dist/solutions/reactive-layout/skia/index.cjs +547 -0
  229. package/dist/solutions/reactive-layout/skia/index.cjs.map +1 -0
  230. package/dist/solutions/reactive-layout/skia/index.d.cts +64 -0
  231. package/dist/solutions/reactive-layout/skia/index.d.ts +64 -0
  232. package/dist/solutions/reactive-layout/skia/index.js +70 -0
  233. package/dist/solutions/reactive-layout/skia/index.js.map +1 -0
  234. package/dist/solutions/work-item/actions.cjs +2164 -0
  235. package/dist/solutions/work-item/actions.cjs.map +1 -0
  236. package/dist/solutions/work-item/actions.d.cts +201 -0
  237. package/dist/solutions/work-item/actions.d.ts +201 -0
  238. package/dist/solutions/work-item/actions.js +1454 -0
  239. package/dist/solutions/work-item/actions.js.map +1 -0
  240. package/dist/solutions/work-item/scheduling.cjs +2454 -0
  241. package/dist/solutions/work-item/scheduling.cjs.map +1 -0
  242. package/dist/solutions/work-item/scheduling.d.cts +433 -0
  243. package/dist/solutions/work-item/scheduling.d.ts +433 -0
  244. package/dist/solutions/work-item/scheduling.js +32 -0
  245. package/dist/solutions/work-item/scheduling.js.map +1 -0
  246. package/dist/solutions/work-item/work-queue.cjs +306 -0
  247. package/dist/solutions/work-item/work-queue.cjs.map +1 -0
  248. package/dist/solutions/work-item/work-queue.d.cts +71 -0
  249. package/dist/solutions/work-item/work-queue.d.ts +71 -0
  250. package/dist/solutions/work-item/work-queue.js +270 -0
  251. package/dist/solutions/work-item/work-queue.js.map +1 -0
  252. package/dist/sources/browser.cjs +169 -57
  253. package/dist/sources/browser.cjs.map +1 -1
  254. package/dist/sources/browser.d.cts +33 -6
  255. package/dist/sources/browser.d.ts +33 -6
  256. package/dist/sources/browser.js +73 -6
  257. package/dist/sources/browser.js.map +1 -1
  258. package/dist/sources/index.cjs +102 -57
  259. package/dist/sources/index.cjs.map +1 -1
  260. package/dist/sources/index.d.cts +5 -5
  261. package/dist/sources/index.d.ts +5 -5
  262. package/dist/sources/index.js +6 -5
  263. package/dist/sources/node.cjs.map +1 -1
  264. package/dist/sources/node.d.cts +4 -4
  265. package/dist/sources/node.d.ts +4 -4
  266. package/dist/sources/node.js +2 -1
  267. package/dist/sources/node.js.map +1 -1
  268. package/dist/storage/browser.js +1 -0
  269. package/dist/storage/browser.js.map +1 -1
  270. package/dist/storage/index.d.cts +5 -5
  271. package/dist/storage/index.d.ts +5 -5
  272. package/dist/storage/index.js +5 -4
  273. package/dist/storage/node.js +1 -0
  274. package/dist/storage/node.js.map +1 -1
  275. package/dist/store-C-joM4gh.d.ts +123 -0
  276. package/dist/store-CNJwmT-h.d.cts +123 -0
  277. package/dist/testing/index.cjs +1 -0
  278. package/dist/testing/index.cjs.map +1 -1
  279. package/dist/testing/index.d.cts +1 -1
  280. package/dist/testing/index.d.ts +1 -1
  281. package/dist/testing/index.js +3 -2
  282. package/dist/{types-h12mNYbq.d.ts → types-BsJvElYZ.d.ts} +31 -31
  283. package/dist/{types-bNMSWKqF.d.cts → types-CcPIn7sy.d.cts} +31 -31
  284. package/dist/work-item-runtime-C3M79vE9.d.ts +228 -0
  285. package/dist/work-item-runtime-qaVgsL0T.d.cts +228 -0
  286. package/dist/work-queue/index.cjs +1132 -0
  287. package/dist/work-queue/index.cjs.map +1 -0
  288. package/dist/work-queue/index.d.cts +369 -0
  289. package/dist/work-queue/index.d.ts +369 -0
  290. package/dist/work-queue/index.js +1078 -0
  291. package/dist/work-queue/index.js.map +1 -0
  292. package/package.json +266 -2
  293. package/dist/chunk-COHO25CZ.js.map +0 -1
  294. package/dist/chunk-DK554R7P.js.map +0 -1
  295. package/dist/chunk-I3IHOHCJ.js.map +0 -1
  296. package/dist/chunk-RIIOUTGM.js.map +0 -1
  297. package/dist/chunk-SWTLEQL6.js.map +0 -1
  298. /package/dist/{chunk-JR4IKCR2.js.map → chunk-2747WN4Y.js.map} +0 -0
  299. /package/dist/{chunk-GDL26N2T.js.map → chunk-3KN7NJDR.js.map} +0 -0
  300. /package/dist/{chunk-DJC4CHLQ.js.map → chunk-43BKLFZU.js.map} +0 -0
  301. /package/dist/{chunk-SCRFRCGR.js.map → chunk-BSQGE5PS.js.map} +0 -0
  302. /package/dist/{chunk-Y3ZLRGHC.js.map → chunk-CZNV3VXM.js.map} +0 -0
  303. /package/dist/{chunk-JIMUDQN3.js.map → chunk-FBUU43PM.js.map} +0 -0
  304. /package/dist/{chunk-D6BG7U6A.js.map → chunk-IXZBUWSP.js.map} +0 -0
  305. /package/dist/{chunk-PKVBHGBM.js.map → chunk-SS2A464I.js.map} +0 -0
  306. /package/dist/{chunk-G4M3NHRJ.js.map → chunk-V7CIJE4B.js.map} +0 -0
  307. /package/dist/{chunk-TEW47IVR.js.map → chunk-VPEFSDME.js.map} +0 -0
@@ -46,6 +46,7 @@ var TIER = {
46
46
  START: TIER_START,
47
47
  PAUSE: TIER_CONTROL,
48
48
  RESUME: TIER_CONTROL,
49
+ PULL: TIER_CONTROL,
49
50
  DIRTY: TIER_NOTIFICATION,
50
51
  DATA: TIER_VALUE,
51
52
  RESOLVED: TIER_VALUE,
@@ -905,6 +906,17 @@ function notifyTopologyDepsChanged(node, prevDeps, deps) {
905
906
  function terminalView(t) {
906
907
  return t === void 0 ? false : t;
907
908
  }
909
+ function normalizePullDemand(demand) {
910
+ if (typeof demand !== "object" || demand === null || Array.isArray(demand)) {
911
+ throw new Error("ctx.up: PULL requires { pullId, params? } demand payload (D269)");
912
+ }
913
+ const pullId = demand.pullId;
914
+ if (typeof pullId !== "string" && typeof pullId !== "symbol") {
915
+ throw new Error("ctx.up: PULL demand requires a string or symbol pullId (D269)");
916
+ }
917
+ const params = demand.params;
918
+ return params === void 0 ? { pullId } : { pullId, params };
919
+ }
908
920
  function validateDownPayloads(msgs) {
909
921
  for (const m of msgs) {
910
922
  if (m[0] === "DATA" && m[1] === void 0) {
@@ -948,7 +960,7 @@ var Node = class {
948
960
  const pull = opts.pullId !== void 0;
949
961
  if (pull && pausable === false)
950
962
  throw new Error(
951
- "node: pullId is incompatible with pausable:false \u2014 a pull node is demanded via RESUME, which pausable:false ignores (R-pull / R-pause-modes / D55,D59)"
963
+ "node: pullId is incompatible with pausable:false \u2014 a pull node uses the pausable delivery-content axis (R-pull / R-pause-modes / D55,D269)"
952
964
  );
953
965
  let handle;
954
966
  if (handleOrFn === null) handle = null;
@@ -971,7 +983,6 @@ var Node = class {
971
983
  value.status = "settled";
972
984
  }
973
985
  const pauseLockset = /* @__PURE__ */ new Set();
974
- if (pull) pauseLockset.add(pullLock);
975
986
  this._core = core ?? new NodeCore();
976
987
  const created = this._core.createSlot(
977
988
  {
@@ -1012,7 +1023,9 @@ var Node = class {
1012
1023
  pauseLockset,
1013
1024
  pausedDepWaveOccurred: false,
1014
1025
  pauseBuffer: [],
1015
- demandOwed: false,
1026
+ demandOwed: void 0,
1027
+ activePull: void 0,
1028
+ pullDirtyOwed: false,
1016
1029
  inDeliverDemand: false
1017
1030
  },
1018
1031
  privateState: { value: SENTINEL, persist: false },
@@ -1069,10 +1082,11 @@ var Node = class {
1069
1082
  this._wave.batchDirtyOwed = false;
1070
1083
  this._control.pauseBuffer = [];
1071
1084
  this._control.pausedDepWaveOccurred = false;
1072
- this._control.demandOwed = false;
1085
+ this._control.demandOwed = void 0;
1086
+ this._control.activePull = void 0;
1087
+ this._control.pullDirtyOwed = false;
1073
1088
  this._control.inDeliverDemand = false;
1074
1089
  this._control.pauseLockset.clear();
1075
- if (this._slot.pull) this._control.pauseLockset.add(this._slot.pullLock);
1076
1090
  this._privateState.value = state.ctxState.value;
1077
1091
  this._privateState.persist = state.ctxState.persist;
1078
1092
  if (state.version === false) {
@@ -1111,17 +1125,16 @@ var Node = class {
1111
1125
  subscriberCountReaders.set(this, () => this._subscriberCount());
1112
1126
  activationReaders.set(this, () => this._lifecycle.activated);
1113
1127
  }
1114
- /** R-pull (D55): true while a pull node is quiet (holds its own pullId/demand lock). */
1128
+ /** R-pull (D55/D272): true while a pull node is not serving a PULL demand pulse. */
1115
1129
  _isPullQuiet() {
1116
- return this._slot.pull && this._control.pauseLockset.has(this._slot.pullLock);
1130
+ return this._slot.pull && this._control.activePull === void 0;
1117
1131
  }
1118
1132
  /**
1119
- * R-pull (D55/D59): this pull node's pullId (pure data, like {@link cache}/{@link handle} — never
1120
- * triggers computation). A consumer demands one delivery by cone-routing a RESUME of it (no node
1121
- * reference): `ctx.up([["RESUME", pullId]])` (immediate; loops back → D37 for a self-read dep) or
1122
- * `ctx.upNext([["RESUME", pullId]])` (boundary-deferred self-demand, R-up-routing/R-rewire-deferred).
1123
- * Undefined for a non-pull node. The author writes the pullId verbatim, so this getter is mainly
1124
- * for inspection/describe; routing matches by the pullId value carried in the RESUME, by identity.
1133
+ * R-pull (D269/D272): this pull node's pullId (pure data, like {@link cache}/{@link handle} —
1134
+ * never triggers computation). A consumer demands one delivery by cone-routing PULL of it (no
1135
+ * node reference): `ctx.up([["PULL", { pullId }]])` (immediate; loops back → D37 for a self-read
1136
+ * dep) or `ctx.upNext([["PULL", { pullId }]])` (boundary-deferred self-demand). Undefined for a
1137
+ * non-pull node. The author writes the pullId verbatim; routing matches by identity.
1125
1138
  */
1126
1139
  get pullId() {
1127
1140
  return this._slot.pullLock;
@@ -1228,10 +1241,10 @@ var Node = class {
1228
1241
  });
1229
1242
  }
1230
1243
  /**
1231
- * Enqueue a deferred up-going control wave (R-up-routing / R-pull / D59): at the committed wave
1244
+ * Enqueue a deferred up-going control/demand wave (R-up-routing / R-pull / D269): at the committed wave
1232
1245
  * boundary, route `msgs` up from THIS node (broadcast, or up the single `towardDep` edge). The
1233
- * deferred form of `ctx.up` — the SELF-demand path: a consumer issues `ctx.upNext([[RESUME,
1234
- * pullId]])` to demand a dep it ALSO reads; the demand applies at the boundary (not mid-fn), so
1246
+ * deferred form of `ctx.up` — the SELF-demand path: a consumer issues `ctx.upNext([[PULL,
1247
+ * { pullId }]])` to demand a dep it ALSO reads; the demand applies at the boundary (not mid-fn), so
1235
1248
  * the pull node's delivery loops back as a FRESH wave rather than re-entering the consumer (D37 /
1236
1249
  * R-reentrancy). Rides the same R-rewire-deferred (D47) drain as ctx.rewireNext.
1237
1250
  */
@@ -1446,7 +1459,6 @@ var Node = class {
1446
1459
  this._lifecycle.activated = true;
1447
1460
  const seedRestoredDeps = this._restoredActivationPending;
1448
1461
  this._restoredActivationPending = false;
1449
- if (this._slot.pull) this._control.pauseLockset.add(this._slot.pullLock);
1450
1462
  this._dep.unsubs = new Array(this._slot.deps.length);
1451
1463
  this._dep.idxBoxes = new Array(this._slot.deps.length);
1452
1464
  for (const dep of this._slot.deps)
@@ -1518,7 +1530,9 @@ var Node = class {
1518
1530
  this._control.pauseLockset.clear();
1519
1531
  this._control.pauseBuffer = [];
1520
1532
  this._control.pausedDepWaveOccurred = false;
1521
- this._control.demandOwed = false;
1533
+ this._control.demandOwed = void 0;
1534
+ this._control.activePull = void 0;
1535
+ this._control.pullDirtyOwed = false;
1522
1536
  this._value.replayRing = [];
1523
1537
  if (!this._privateState.persist) this._privateState.value = SENTINEL;
1524
1538
  }
@@ -1530,8 +1544,7 @@ var Node = class {
1530
1544
  return this._lifecycle.subscribers.size;
1531
1545
  }
1532
1546
  _isRuntimeQuiescentForRelease() {
1533
- const allowedPullQuietLock = this._slot.pull && this._control.pauseLockset.size === 1 && this._control.pauseLockset.has(this._slot.pullLock);
1534
- return !this._released && this._value.status !== "dirty" && this._value.status !== "pending" && this._wave.pending === 0 && !this._wave.insideRunWave && !this._wave.inDepMutation && !this._wave.rewireRunPending && !this._wave.batchDirtyOwed && this._dep.dirty.every((dirty) => !dirty) && this._control.pauseBuffer.length === 0 && !this._control.pausedDepWaveOccurred && !this._control.demandOwed && !this._control.inDeliverDemand && (this._control.pauseLockset.size === 0 || allowedPullQuietLock);
1547
+ return !this._released && this._value.status !== "dirty" && this._value.status !== "pending" && this._wave.pending === 0 && !this._wave.insideRunWave && !this._wave.inDepMutation && !this._wave.rewireRunPending && !this._wave.batchDirtyOwed && this._dep.dirty.every((dirty) => !dirty) && this._control.pauseBuffer.length === 0 && !this._control.pausedDepWaveOccurred && this._control.demandOwed === void 0 && this._control.activePull === void 0 && !this._control.inDeliverDemand && this._control.pauseLockset.size === 0;
1535
1548
  }
1536
1549
  _releaseRuntime() {
1537
1550
  if (this._released) return;
@@ -1587,7 +1600,9 @@ var Node = class {
1587
1600
  this._control.pauseLockset.clear();
1588
1601
  this._control.pauseBuffer = [];
1589
1602
  this._control.pausedDepWaveOccurred = false;
1590
- this._control.demandOwed = false;
1603
+ this._control.demandOwed = void 0;
1604
+ this._control.activePull = void 0;
1605
+ this._control.pullDirtyOwed = false;
1591
1606
  this._restoredActivationPending = false;
1592
1607
  checkpointReaders.delete(this);
1593
1608
  restoreWriters.delete(this);
@@ -1769,7 +1784,7 @@ var Node = class {
1769
1784
  this._wave.rewireRunPending = true;
1770
1785
  return;
1771
1786
  }
1772
- if (this._slot.pausable === true && this._isPaused()) {
1787
+ if (this._slot.pausable === true && (this._isPaused() || this._isPullQuiet())) {
1773
1788
  this._control.pausedDepWaveOccurred = true;
1774
1789
  return;
1775
1790
  }
@@ -1909,10 +1924,11 @@ var Node = class {
1909
1924
  unsubscribeDep: (dep, fn) => this._requestRewireNext({ kind: "remove", dep, fn }),
1910
1925
  replaceDeps: (deps, fn) => this._requestRewireNext({ kind: "set", deps, fn })
1911
1926
  },
1912
- // R-up-routing / R-pull (D59): deferred up — route a control wave (e.g. a RESUME pull
1913
- // DEMAND) up the declared cone at the committed boundary. The SELF-demand path: an
1927
+ // R-up-routing / R-pull (D269): deferred up — route a control/demand wave (e.g. PULL)
1928
+ // up the declared cone at the committed boundary. The SELF-demand path: an
1914
1929
  // immediate ctx.up whose delivery loops back re-enters this fn (D37 / R-reentrancy).
1915
1930
  upNext: (msgs, towardDep) => this._requestUpNext(msgs, towardDep),
1931
+ ...this._control.activePull === void 0 ? {} : { pull: this._control.activePull },
1916
1932
  [CTX_DEP_CACHE]: { latest: snapshot?.latest ?? this._dep.prev },
1917
1933
  [CTX_NODE_BINDING]: {
1918
1934
  dispatcher: this._slot.dispatcher,
@@ -1927,6 +1943,11 @@ var Node = class {
1927
1943
  _refreshCtx(ctx) {
1928
1944
  ctx.waveData = this._dep.waveData;
1929
1945
  ctx.terminal = this._dep.terminalInput.map(terminalView);
1946
+ if (this._control.activePull === void 0) {
1947
+ delete ctx.pull;
1948
+ } else {
1949
+ ctx.pull = this._control.activePull;
1950
+ }
1930
1951
  ctx[CTX_DEP_CACHE] = { latest: this._dep.prev };
1931
1952
  }
1932
1953
  _makeState() {
@@ -2019,7 +2040,7 @@ var Node = class {
2019
2040
  plannedVersions[i] = plannedVersion;
2020
2041
  }
2021
2042
  }
2022
- if (hasTier3 && !this._wave.insideRunWave && !this._wave.emittedDirtyThisWave) {
2043
+ if (hasTier3 && (!this._wave.insideRunWave || this._control.pullDirtyOwed) && !this._wave.emittedDirtyThisWave) {
2023
2044
  this._wave.emittedDirtyThisWave = true;
2024
2045
  this._value.status = "dirty";
2025
2046
  this._emitToSubs(["DIRTY"], { wave: deliveryWave, last: false });
@@ -2099,13 +2120,18 @@ var Node = class {
2099
2120
  if (m[0] === "PAUSE") {
2100
2121
  this._pauseAcquire(m[1]);
2101
2122
  } else if (m[0] === "RESUME") {
2102
- if (this._slot.pull && m[1] === this._slot.pullLock) {
2103
- if (!this._markDemandRouted(m[1], routeState)) this._onDemand();
2104
- } else if (this._control.pauseLockset.has(m[1])) {
2123
+ if (this._control.pauseLockset.has(m[1])) {
2105
2124
  this._pauseRelease(m[1]);
2106
2125
  } else {
2107
2126
  this._forwardUp(m, towardDep, routeState);
2108
2127
  }
2128
+ } else if (m[0] === "PULL") {
2129
+ const demand = normalizePullDemand(m[1]);
2130
+ if (this._slot.pull && demand.pullId === this._slot.pullLock) {
2131
+ if (!this._markDemandRouted(demand.pullId, routeState)) this._onDemand(demand);
2132
+ } else {
2133
+ this._forwardUp(["PULL", demand], towardDep, routeState);
2134
+ }
2109
2135
  } else if (this._slot.deps.length === 0) {
2110
2136
  if (m[0] === "INVALIDATE") this._down([["INVALIDATE"]]);
2111
2137
  } else {
@@ -2127,7 +2153,7 @@ var Node = class {
2127
2153
  * Forward one up-going control message toward deps (R-up-routing): up the single declared edge
2128
2154
  * `towardDep` (directed — prunes other branches; only meaningful on the issuer's FIRST hop) or
2129
2155
  * broadcast up ALL deps. A depless source has no deps → the message DROPS here (the terminus —
2130
- * e.g. a cone-routed RESUME whose pullId no node up this cone holds, R-up-at-source). Recursive
2156
+ * e.g. a cone-routed PULL whose pullId no node up this cone holds, R-up-at-source). Recursive
2131
2157
  * forwarding carries the same per-wave route state and no `towardDep` → broadcast beyond the
2132
2158
  * first hop.
2133
2159
  */
@@ -2146,9 +2172,7 @@ var Node = class {
2146
2172
  }
2147
2173
  _hasBoundaryPauseLock() {
2148
2174
  if (this._slot.pausable === false) return false;
2149
- let locks = this._control.pauseLockset.size;
2150
- if (this._slot.pull && this._control.pauseLockset.has(this._slot.pullLock)) locks--;
2151
- return locks > 0;
2175
+ return this._control.pauseLockset.size > 0;
2152
2176
  }
2153
2177
  _isAsyncPool() {
2154
2178
  return this._slot.handle !== null && this._slot.dispatcher.poolKind(this._slot.handle.poolId) === "async";
@@ -2159,17 +2183,19 @@ var Node = class {
2159
2183
  _pauseRelease(lockId) {
2160
2184
  if (!this._control.pauseLockset.has(lockId)) return;
2161
2185
  this._control.pauseLockset.delete(lockId);
2162
- if (this._slot.pull && this._control.demandOwed) this._fireOwedDemandIfReady();
2186
+ if (this._slot.pull && this._control.demandOwed !== void 0) this._fireOwedDemandIfReady();
2163
2187
  if (this._hasBoundaryPauseLock()) return;
2164
2188
  scheduleBoundaryDrain(this._core);
2165
- if (this._control.pauseLockset.size > 0) return;
2189
+ if (this._slot.pull) return;
2166
2190
  this._onResume();
2167
2191
  }
2168
2192
  _onResume() {
2169
2193
  if (this._value.terminal !== void 0) {
2170
2194
  this._control.pauseBuffer = [];
2171
2195
  this._control.pausedDepWaveOccurred = false;
2172
- this._control.demandOwed = false;
2196
+ this._control.demandOwed = void 0;
2197
+ this._control.activePull = void 0;
2198
+ this._control.pullDirtyOwed = false;
2173
2199
  return;
2174
2200
  }
2175
2201
  if (this._control.pauseBuffer.length > 0) {
@@ -2183,41 +2209,38 @@ var Node = class {
2183
2209
  }
2184
2210
  }
2185
2211
  /**
2186
- * R-pull (D59): can this pull node fire a demand NOW? — not terminal, settle-ready (_pending===0),
2212
+ * R-pull (D269): can this pull node fire a demand NOW? — not terminal, settle-ready (_pending===0),
2187
2213
  * and no OTHER (non-pullId) lock holds it paused. The gate that decides fire-now vs OWE.
2188
2214
  */
2189
2215
  _canFireDemand() {
2190
2216
  if (this._value.terminal !== void 0 || this._wave.pending > 0) return false;
2191
- const own = this._control.pauseLockset.has(this._slot.pullLock) ? 1 : 0;
2192
- return this._control.pauseLockset.size <= own;
2217
+ return this._control.pauseLockset.size === 0;
2193
2218
  }
2194
2219
  /**
2195
- * R-pull (D59): deliver ONE demand pulse — release the pullId so the demand wave RELAYS (not
2196
- * absorbed), fire it, then RE-QUIET (1:1). The pullId re-add + the re-entrancy flag are in a
2197
- * `finally` so a throwing pull fn (graph-less node, no D30 catch) cannot leave the node
2198
- * permanently non-quiet (the wedge-fix silently disabled) — QA-found robustness fix.
2220
+ * R-pull (D269/D272): deliver ONE demand pulse — install activePull so the demand wave may
2221
+ * emit, fire it, then clear activePull so the node is quiet again (1:1).
2199
2222
  */
2200
- _deliverPullDemand() {
2201
- this._control.demandOwed = false;
2223
+ _deliverPullDemand(demand) {
2224
+ this._control.demandOwed = void 0;
2225
+ this._control.activePull = demand;
2202
2226
  this._control.inDeliverDemand = true;
2203
- this._control.pauseLockset.delete(this._slot.pullLock);
2204
2227
  try {
2205
2228
  this._firePullDemand();
2206
2229
  } finally {
2207
- this._control.pauseLockset.add(this._slot.pullLock);
2230
+ this._control.activePull = void 0;
2208
2231
  this._control.inDeliverDemand = false;
2209
2232
  }
2210
2233
  }
2211
2234
  /**
2212
- * R-pull (D59): a cone-routed RESUME of THIS node's pullId arrived (R-up-routing) = a DEMAND.
2235
+ * R-pull (D269): a cone-routed PULL of THIS node's pullId arrived (R-up-routing) = a DEMAND.
2213
2236
  * Fire immediately if able; else OWE it — pin-5 (a dep DIRTY in flight, _pending>0) or F4/F5 (an
2214
2237
  * external PAUSE lock co-holds the node) — and fire when the node next becomes able. A demand
2215
2238
  * arriving WHILE a delivery is in flight (synchronous re-entry) is DROPPED (1:1, QA guard).
2216
2239
  */
2217
- _onDemand() {
2240
+ _onDemand(demand) {
2218
2241
  if (this._control.inDeliverDemand) return;
2219
- if (this._canFireDemand()) this._deliverPullDemand();
2220
- else this._control.demandOwed = true;
2242
+ if (this._canFireDemand()) this._deliverPullDemand(demand);
2243
+ else this._control.demandOwed = demand;
2221
2244
  }
2222
2245
  /**
2223
2246
  * R-pull (D55): service ONE demand. Delivery content = the orthogonal pausable mode:
@@ -2230,33 +2253,53 @@ var Node = class {
2230
2253
  * `_markDirty` relays the leading DIRTY (not absorbed).
2231
2254
  */
2232
2255
  _firePullDemand() {
2256
+ let drainedBuffer = false;
2233
2257
  if (this._control.pauseBuffer.length > 0) {
2234
2258
  const buf = this._control.pauseBuffer;
2235
2259
  this._control.pauseBuffer = [];
2236
2260
  for (const wave of buf) this._down(wave);
2261
+ drainedBuffer = true;
2237
2262
  }
2263
+ if (drainedBuffer) return;
2238
2264
  if (this._control.pausedDepWaveOccurred) {
2239
2265
  const gated = this._slot.handle !== null && !this._wave.hasCalledFnOnce && !(this._slot.partial || this._allDepsSettled());
2240
2266
  if (this._wave.pending > 0 || gated) return;
2241
2267
  this._control.pausedDepWaveOccurred = false;
2242
- this._markDirty();
2243
- this._tryRun();
2268
+ this._wave.emittedDirtyThisWave = false;
2269
+ this._control.pullDirtyOwed = true;
2270
+ try {
2271
+ this._tryRun();
2272
+ } finally {
2273
+ this._control.pullDirtyOwed = false;
2274
+ }
2275
+ return;
2276
+ }
2277
+ if (this._slot.handle !== null) {
2278
+ if (!this._wave.hasCalledFnOnce && !(this._slot.partial || this._allDepsSettled())) return;
2279
+ this._wave.emittedDirtyThisWave = false;
2280
+ this._control.pullDirtyOwed = true;
2281
+ try {
2282
+ this._runWave();
2283
+ } finally {
2284
+ this._control.pullDirtyOwed = false;
2285
+ }
2244
2286
  }
2245
2287
  }
2246
2288
  /**
2247
- * R-pull (D55/D59): fire a demand that was OWED (deferred at demand time) once the node becomes
2289
+ * R-pull (D269): fire a demand that was OWED (deferred at demand time) once the node becomes
2248
2290
  * able — called from the dep-settle arms (DATA/RESOLVED/INVALIDATE/terminal drain _pending, pin-5
2249
2291
  * + B1/F6) and from `_pauseRelease` (an external PAUSE lock releases, F4/F5).
2250
2292
  */
2251
2293
  _fireOwedDemandIfReady() {
2252
2294
  if (this._control.inDeliverDemand) return;
2253
- if (this._slot.pull && this._control.demandOwed && this._canFireDemand())
2254
- this._deliverPullDemand();
2295
+ if (this._slot.pull && this._control.demandOwed !== void 0 && this._canFireDemand()) {
2296
+ this._deliverPullDemand(this._control.demandOwed);
2297
+ }
2255
2298
  }
2256
2299
  /** Should an outgoing settle slice be deferred into the pause buffer? */
2257
2300
  _shouldBufferOnPause() {
2258
2301
  if (this._slot.pausable === false) return false;
2259
- if (!this._isPaused()) return false;
2302
+ if (!this._isPaused() && !this._isPullQuiet()) return false;
2260
2303
  if (this._slot.pausable === "resumeAll") return true;
2261
2304
  if (!this._wave.insideRunWave && this._isAsyncPool() && this._slot.deps.length > 0) return true;
2262
2305
  return false;
@@ -2296,7 +2339,9 @@ var Node = class {
2296
2339
  this._control.pauseLockset.clear();
2297
2340
  this._control.pauseBuffer = [];
2298
2341
  this._control.pausedDepWaveOccurred = false;
2299
- this._control.demandOwed = false;
2342
+ this._control.demandOwed = void 0;
2343
+ this._control.activePull = void 0;
2344
+ this._control.pullDirtyOwed = false;
2300
2345
  this._value.replayRing = [];
2301
2346
  const isCompute = this._slot.handle !== null || this._slot.deps.length > 0;
2302
2347
  if (isCompute) {