@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
@@ -94,6 +94,7 @@ var TIER = {
94
94
  START: TIER_START,
95
95
  PAUSE: TIER_CONTROL,
96
96
  RESUME: TIER_CONTROL,
97
+ PULL: TIER_CONTROL,
97
98
  DIRTY: TIER_NOTIFICATION,
98
99
  DATA: TIER_VALUE,
99
100
  RESOLVED: TIER_VALUE,
@@ -1260,6 +1261,17 @@ function isNodeRuntimeReleased(n) {
1260
1261
  function terminalView(t) {
1261
1262
  return t === void 0 ? false : t;
1262
1263
  }
1264
+ function normalizePullDemand(demand) {
1265
+ if (typeof demand !== "object" || demand === null || Array.isArray(demand)) {
1266
+ throw new Error("ctx.up: PULL requires { pullId, params? } demand payload (D269)");
1267
+ }
1268
+ const pullId = demand.pullId;
1269
+ if (typeof pullId !== "string" && typeof pullId !== "symbol") {
1270
+ throw new Error("ctx.up: PULL demand requires a string or symbol pullId (D269)");
1271
+ }
1272
+ const params = demand.params;
1273
+ return params === void 0 ? { pullId } : { pullId, params };
1274
+ }
1263
1275
  function validateDownPayloads(msgs) {
1264
1276
  for (const m of msgs) {
1265
1277
  if (m[0] === "DATA" && m[1] === void 0) {
@@ -1303,7 +1315,7 @@ var Node = class {
1303
1315
  const pull = opts.pullId !== void 0;
1304
1316
  if (pull && pausable === false)
1305
1317
  throw new Error(
1306
- "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)"
1318
+ "node: pullId is incompatible with pausable:false \u2014 a pull node uses the pausable delivery-content axis (R-pull / R-pause-modes / D55,D269)"
1307
1319
  );
1308
1320
  let handle;
1309
1321
  if (handleOrFn === null) handle = null;
@@ -1326,7 +1338,6 @@ var Node = class {
1326
1338
  value.status = "settled";
1327
1339
  }
1328
1340
  const pauseLockset = /* @__PURE__ */ new Set();
1329
- if (pull) pauseLockset.add(pullLock);
1330
1341
  this._core = core ?? new NodeCore();
1331
1342
  const created = this._core.createSlot(
1332
1343
  {
@@ -1367,7 +1378,9 @@ var Node = class {
1367
1378
  pauseLockset,
1368
1379
  pausedDepWaveOccurred: false,
1369
1380
  pauseBuffer: [],
1370
- demandOwed: false,
1381
+ demandOwed: void 0,
1382
+ activePull: void 0,
1383
+ pullDirtyOwed: false,
1371
1384
  inDeliverDemand: false
1372
1385
  },
1373
1386
  privateState: { value: SENTINEL, persist: false },
@@ -1424,10 +1437,11 @@ var Node = class {
1424
1437
  this._wave.batchDirtyOwed = false;
1425
1438
  this._control.pauseBuffer = [];
1426
1439
  this._control.pausedDepWaveOccurred = false;
1427
- this._control.demandOwed = false;
1440
+ this._control.demandOwed = void 0;
1441
+ this._control.activePull = void 0;
1442
+ this._control.pullDirtyOwed = false;
1428
1443
  this._control.inDeliverDemand = false;
1429
1444
  this._control.pauseLockset.clear();
1430
- if (this._slot.pull) this._control.pauseLockset.add(this._slot.pullLock);
1431
1445
  this._privateState.value = state.ctxState.value;
1432
1446
  this._privateState.persist = state.ctxState.persist;
1433
1447
  if (state.version === false) {
@@ -1466,17 +1480,16 @@ var Node = class {
1466
1480
  subscriberCountReaders.set(this, () => this._subscriberCount());
1467
1481
  activationReaders.set(this, () => this._lifecycle.activated);
1468
1482
  }
1469
- /** R-pull (D55): true while a pull node is quiet (holds its own pullId/demand lock). */
1483
+ /** R-pull (D55/D272): true while a pull node is not serving a PULL demand pulse. */
1470
1484
  _isPullQuiet() {
1471
- return this._slot.pull && this._control.pauseLockset.has(this._slot.pullLock);
1485
+ return this._slot.pull && this._control.activePull === void 0;
1472
1486
  }
1473
1487
  /**
1474
- * R-pull (D55/D59): this pull node's pullId (pure data, like {@link cache}/{@link handle} — never
1475
- * triggers computation). A consumer demands one delivery by cone-routing a RESUME of it (no node
1476
- * reference): `ctx.up([["RESUME", pullId]])` (immediate; loops back → D37 for a self-read dep) or
1477
- * `ctx.upNext([["RESUME", pullId]])` (boundary-deferred self-demand, R-up-routing/R-rewire-deferred).
1478
- * Undefined for a non-pull node. The author writes the pullId verbatim, so this getter is mainly
1479
- * for inspection/describe; routing matches by the pullId value carried in the RESUME, by identity.
1488
+ * R-pull (D269/D272): this pull node's pullId (pure data, like {@link cache}/{@link handle} —
1489
+ * never triggers computation). A consumer demands one delivery by cone-routing PULL of it (no
1490
+ * node reference): `ctx.up([["PULL", { pullId }]])` (immediate; loops back → D37 for a self-read
1491
+ * dep) or `ctx.upNext([["PULL", { pullId }]])` (boundary-deferred self-demand). Undefined for a
1492
+ * non-pull node. The author writes the pullId verbatim; routing matches by identity.
1480
1493
  */
1481
1494
  get pullId() {
1482
1495
  return this._slot.pullLock;
@@ -1583,10 +1596,10 @@ var Node = class {
1583
1596
  });
1584
1597
  }
1585
1598
  /**
1586
- * Enqueue a deferred up-going control wave (R-up-routing / R-pull / D59): at the committed wave
1599
+ * Enqueue a deferred up-going control/demand wave (R-up-routing / R-pull / D269): at the committed wave
1587
1600
  * boundary, route `msgs` up from THIS node (broadcast, or up the single `towardDep` edge). The
1588
- * deferred form of `ctx.up` — the SELF-demand path: a consumer issues `ctx.upNext([[RESUME,
1589
- * pullId]])` to demand a dep it ALSO reads; the demand applies at the boundary (not mid-fn), so
1601
+ * deferred form of `ctx.up` — the SELF-demand path: a consumer issues `ctx.upNext([[PULL,
1602
+ * { pullId }]])` to demand a dep it ALSO reads; the demand applies at the boundary (not mid-fn), so
1590
1603
  * the pull node's delivery loops back as a FRESH wave rather than re-entering the consumer (D37 /
1591
1604
  * R-reentrancy). Rides the same R-rewire-deferred (D47) drain as ctx.rewireNext.
1592
1605
  */
@@ -1801,7 +1814,6 @@ var Node = class {
1801
1814
  this._lifecycle.activated = true;
1802
1815
  const seedRestoredDeps = this._restoredActivationPending;
1803
1816
  this._restoredActivationPending = false;
1804
- if (this._slot.pull) this._control.pauseLockset.add(this._slot.pullLock);
1805
1817
  this._dep.unsubs = new Array(this._slot.deps.length);
1806
1818
  this._dep.idxBoxes = new Array(this._slot.deps.length);
1807
1819
  for (const dep of this._slot.deps)
@@ -1873,7 +1885,9 @@ var Node = class {
1873
1885
  this._control.pauseLockset.clear();
1874
1886
  this._control.pauseBuffer = [];
1875
1887
  this._control.pausedDepWaveOccurred = false;
1876
- this._control.demandOwed = false;
1888
+ this._control.demandOwed = void 0;
1889
+ this._control.activePull = void 0;
1890
+ this._control.pullDirtyOwed = false;
1877
1891
  this._value.replayRing = [];
1878
1892
  if (!this._privateState.persist) this._privateState.value = SENTINEL;
1879
1893
  }
@@ -1885,8 +1899,7 @@ var Node = class {
1885
1899
  return this._lifecycle.subscribers.size;
1886
1900
  }
1887
1901
  _isRuntimeQuiescentForRelease() {
1888
- const allowedPullQuietLock = this._slot.pull && this._control.pauseLockset.size === 1 && this._control.pauseLockset.has(this._slot.pullLock);
1889
- 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);
1902
+ 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;
1890
1903
  }
1891
1904
  _releaseRuntime() {
1892
1905
  if (this._released) return;
@@ -1942,7 +1955,9 @@ var Node = class {
1942
1955
  this._control.pauseLockset.clear();
1943
1956
  this._control.pauseBuffer = [];
1944
1957
  this._control.pausedDepWaveOccurred = false;
1945
- this._control.demandOwed = false;
1958
+ this._control.demandOwed = void 0;
1959
+ this._control.activePull = void 0;
1960
+ this._control.pullDirtyOwed = false;
1946
1961
  this._restoredActivationPending = false;
1947
1962
  checkpointReaders.delete(this);
1948
1963
  restoreWriters.delete(this);
@@ -2124,7 +2139,7 @@ var Node = class {
2124
2139
  this._wave.rewireRunPending = true;
2125
2140
  return;
2126
2141
  }
2127
- if (this._slot.pausable === true && this._isPaused()) {
2142
+ if (this._slot.pausable === true && (this._isPaused() || this._isPullQuiet())) {
2128
2143
  this._control.pausedDepWaveOccurred = true;
2129
2144
  return;
2130
2145
  }
@@ -2264,10 +2279,11 @@ var Node = class {
2264
2279
  unsubscribeDep: (dep, fn) => this._requestRewireNext({ kind: "remove", dep, fn }),
2265
2280
  replaceDeps: (deps, fn) => this._requestRewireNext({ kind: "set", deps, fn })
2266
2281
  },
2267
- // R-up-routing / R-pull (D59): deferred up — route a control wave (e.g. a RESUME pull
2268
- // DEMAND) up the declared cone at the committed boundary. The SELF-demand path: an
2282
+ // R-up-routing / R-pull (D269): deferred up — route a control/demand wave (e.g. PULL)
2283
+ // up the declared cone at the committed boundary. The SELF-demand path: an
2269
2284
  // immediate ctx.up whose delivery loops back re-enters this fn (D37 / R-reentrancy).
2270
2285
  upNext: (msgs, towardDep) => this._requestUpNext(msgs, towardDep),
2286
+ ...this._control.activePull === void 0 ? {} : { pull: this._control.activePull },
2271
2287
  [CTX_DEP_CACHE]: { latest: snapshot?.latest ?? this._dep.prev },
2272
2288
  [CTX_NODE_BINDING]: {
2273
2289
  dispatcher: this._slot.dispatcher,
@@ -2282,6 +2298,11 @@ var Node = class {
2282
2298
  _refreshCtx(ctx) {
2283
2299
  ctx.waveData = this._dep.waveData;
2284
2300
  ctx.terminal = this._dep.terminalInput.map(terminalView);
2301
+ if (this._control.activePull === void 0) {
2302
+ delete ctx.pull;
2303
+ } else {
2304
+ ctx.pull = this._control.activePull;
2305
+ }
2285
2306
  ctx[CTX_DEP_CACHE] = { latest: this._dep.prev };
2286
2307
  }
2287
2308
  _makeState() {
@@ -2374,7 +2395,7 @@ var Node = class {
2374
2395
  plannedVersions[i] = plannedVersion;
2375
2396
  }
2376
2397
  }
2377
- if (hasTier3 && !this._wave.insideRunWave && !this._wave.emittedDirtyThisWave) {
2398
+ if (hasTier3 && (!this._wave.insideRunWave || this._control.pullDirtyOwed) && !this._wave.emittedDirtyThisWave) {
2378
2399
  this._wave.emittedDirtyThisWave = true;
2379
2400
  this._value.status = "dirty";
2380
2401
  this._emitToSubs(["DIRTY"], { wave: deliveryWave, last: false });
@@ -2454,13 +2475,18 @@ var Node = class {
2454
2475
  if (m[0] === "PAUSE") {
2455
2476
  this._pauseAcquire(m[1]);
2456
2477
  } else if (m[0] === "RESUME") {
2457
- if (this._slot.pull && m[1] === this._slot.pullLock) {
2458
- if (!this._markDemandRouted(m[1], routeState)) this._onDemand();
2459
- } else if (this._control.pauseLockset.has(m[1])) {
2478
+ if (this._control.pauseLockset.has(m[1])) {
2460
2479
  this._pauseRelease(m[1]);
2461
2480
  } else {
2462
2481
  this._forwardUp(m, towardDep, routeState);
2463
2482
  }
2483
+ } else if (m[0] === "PULL") {
2484
+ const demand = normalizePullDemand(m[1]);
2485
+ if (this._slot.pull && demand.pullId === this._slot.pullLock) {
2486
+ if (!this._markDemandRouted(demand.pullId, routeState)) this._onDemand(demand);
2487
+ } else {
2488
+ this._forwardUp(["PULL", demand], towardDep, routeState);
2489
+ }
2464
2490
  } else if (this._slot.deps.length === 0) {
2465
2491
  if (m[0] === "INVALIDATE") this._down([["INVALIDATE"]]);
2466
2492
  } else {
@@ -2482,7 +2508,7 @@ var Node = class {
2482
2508
  * Forward one up-going control message toward deps (R-up-routing): up the single declared edge
2483
2509
  * `towardDep` (directed — prunes other branches; only meaningful on the issuer's FIRST hop) or
2484
2510
  * broadcast up ALL deps. A depless source has no deps → the message DROPS here (the terminus —
2485
- * e.g. a cone-routed RESUME whose pullId no node up this cone holds, R-up-at-source). Recursive
2511
+ * e.g. a cone-routed PULL whose pullId no node up this cone holds, R-up-at-source). Recursive
2486
2512
  * forwarding carries the same per-wave route state and no `towardDep` → broadcast beyond the
2487
2513
  * first hop.
2488
2514
  */
@@ -2501,9 +2527,7 @@ var Node = class {
2501
2527
  }
2502
2528
  _hasBoundaryPauseLock() {
2503
2529
  if (this._slot.pausable === false) return false;
2504
- let locks = this._control.pauseLockset.size;
2505
- if (this._slot.pull && this._control.pauseLockset.has(this._slot.pullLock)) locks--;
2506
- return locks > 0;
2530
+ return this._control.pauseLockset.size > 0;
2507
2531
  }
2508
2532
  _isAsyncPool() {
2509
2533
  return this._slot.handle !== null && this._slot.dispatcher.poolKind(this._slot.handle.poolId) === "async";
@@ -2514,17 +2538,19 @@ var Node = class {
2514
2538
  _pauseRelease(lockId) {
2515
2539
  if (!this._control.pauseLockset.has(lockId)) return;
2516
2540
  this._control.pauseLockset.delete(lockId);
2517
- if (this._slot.pull && this._control.demandOwed) this._fireOwedDemandIfReady();
2541
+ if (this._slot.pull && this._control.demandOwed !== void 0) this._fireOwedDemandIfReady();
2518
2542
  if (this._hasBoundaryPauseLock()) return;
2519
2543
  scheduleBoundaryDrain(this._core);
2520
- if (this._control.pauseLockset.size > 0) return;
2544
+ if (this._slot.pull) return;
2521
2545
  this._onResume();
2522
2546
  }
2523
2547
  _onResume() {
2524
2548
  if (this._value.terminal !== void 0) {
2525
2549
  this._control.pauseBuffer = [];
2526
2550
  this._control.pausedDepWaveOccurred = false;
2527
- this._control.demandOwed = false;
2551
+ this._control.demandOwed = void 0;
2552
+ this._control.activePull = void 0;
2553
+ this._control.pullDirtyOwed = false;
2528
2554
  return;
2529
2555
  }
2530
2556
  if (this._control.pauseBuffer.length > 0) {
@@ -2538,41 +2564,38 @@ var Node = class {
2538
2564
  }
2539
2565
  }
2540
2566
  /**
2541
- * R-pull (D59): can this pull node fire a demand NOW? — not terminal, settle-ready (_pending===0),
2567
+ * R-pull (D269): can this pull node fire a demand NOW? — not terminal, settle-ready (_pending===0),
2542
2568
  * and no OTHER (non-pullId) lock holds it paused. The gate that decides fire-now vs OWE.
2543
2569
  */
2544
2570
  _canFireDemand() {
2545
2571
  if (this._value.terminal !== void 0 || this._wave.pending > 0) return false;
2546
- const own = this._control.pauseLockset.has(this._slot.pullLock) ? 1 : 0;
2547
- return this._control.pauseLockset.size <= own;
2572
+ return this._control.pauseLockset.size === 0;
2548
2573
  }
2549
2574
  /**
2550
- * R-pull (D59): deliver ONE demand pulse — release the pullId so the demand wave RELAYS (not
2551
- * absorbed), fire it, then RE-QUIET (1:1). The pullId re-add + the re-entrancy flag are in a
2552
- * `finally` so a throwing pull fn (graph-less node, no D30 catch) cannot leave the node
2553
- * permanently non-quiet (the wedge-fix silently disabled) — QA-found robustness fix.
2575
+ * R-pull (D269/D272): deliver ONE demand pulse — install activePull so the demand wave may
2576
+ * emit, fire it, then clear activePull so the node is quiet again (1:1).
2554
2577
  */
2555
- _deliverPullDemand() {
2556
- this._control.demandOwed = false;
2578
+ _deliverPullDemand(demand) {
2579
+ this._control.demandOwed = void 0;
2580
+ this._control.activePull = demand;
2557
2581
  this._control.inDeliverDemand = true;
2558
- this._control.pauseLockset.delete(this._slot.pullLock);
2559
2582
  try {
2560
2583
  this._firePullDemand();
2561
2584
  } finally {
2562
- this._control.pauseLockset.add(this._slot.pullLock);
2585
+ this._control.activePull = void 0;
2563
2586
  this._control.inDeliverDemand = false;
2564
2587
  }
2565
2588
  }
2566
2589
  /**
2567
- * R-pull (D59): a cone-routed RESUME of THIS node's pullId arrived (R-up-routing) = a DEMAND.
2590
+ * R-pull (D269): a cone-routed PULL of THIS node's pullId arrived (R-up-routing) = a DEMAND.
2568
2591
  * Fire immediately if able; else OWE it — pin-5 (a dep DIRTY in flight, _pending>0) or F4/F5 (an
2569
2592
  * external PAUSE lock co-holds the node) — and fire when the node next becomes able. A demand
2570
2593
  * arriving WHILE a delivery is in flight (synchronous re-entry) is DROPPED (1:1, QA guard).
2571
2594
  */
2572
- _onDemand() {
2595
+ _onDemand(demand) {
2573
2596
  if (this._control.inDeliverDemand) return;
2574
- if (this._canFireDemand()) this._deliverPullDemand();
2575
- else this._control.demandOwed = true;
2597
+ if (this._canFireDemand()) this._deliverPullDemand(demand);
2598
+ else this._control.demandOwed = demand;
2576
2599
  }
2577
2600
  /**
2578
2601
  * R-pull (D55): service ONE demand. Delivery content = the orthogonal pausable mode:
@@ -2585,33 +2608,53 @@ var Node = class {
2585
2608
  * `_markDirty` relays the leading DIRTY (not absorbed).
2586
2609
  */
2587
2610
  _firePullDemand() {
2611
+ let drainedBuffer = false;
2588
2612
  if (this._control.pauseBuffer.length > 0) {
2589
2613
  const buf = this._control.pauseBuffer;
2590
2614
  this._control.pauseBuffer = [];
2591
2615
  for (const wave of buf) this._down(wave);
2616
+ drainedBuffer = true;
2592
2617
  }
2618
+ if (drainedBuffer) return;
2593
2619
  if (this._control.pausedDepWaveOccurred) {
2594
2620
  const gated = this._slot.handle !== null && !this._wave.hasCalledFnOnce && !(this._slot.partial || this._allDepsSettled());
2595
2621
  if (this._wave.pending > 0 || gated) return;
2596
2622
  this._control.pausedDepWaveOccurred = false;
2597
- this._markDirty();
2598
- this._tryRun();
2623
+ this._wave.emittedDirtyThisWave = false;
2624
+ this._control.pullDirtyOwed = true;
2625
+ try {
2626
+ this._tryRun();
2627
+ } finally {
2628
+ this._control.pullDirtyOwed = false;
2629
+ }
2630
+ return;
2631
+ }
2632
+ if (this._slot.handle !== null) {
2633
+ if (!this._wave.hasCalledFnOnce && !(this._slot.partial || this._allDepsSettled())) return;
2634
+ this._wave.emittedDirtyThisWave = false;
2635
+ this._control.pullDirtyOwed = true;
2636
+ try {
2637
+ this._runWave();
2638
+ } finally {
2639
+ this._control.pullDirtyOwed = false;
2640
+ }
2599
2641
  }
2600
2642
  }
2601
2643
  /**
2602
- * R-pull (D55/D59): fire a demand that was OWED (deferred at demand time) once the node becomes
2644
+ * R-pull (D269): fire a demand that was OWED (deferred at demand time) once the node becomes
2603
2645
  * able — called from the dep-settle arms (DATA/RESOLVED/INVALIDATE/terminal drain _pending, pin-5
2604
2646
  * + B1/F6) and from `_pauseRelease` (an external PAUSE lock releases, F4/F5).
2605
2647
  */
2606
2648
  _fireOwedDemandIfReady() {
2607
2649
  if (this._control.inDeliverDemand) return;
2608
- if (this._slot.pull && this._control.demandOwed && this._canFireDemand())
2609
- this._deliverPullDemand();
2650
+ if (this._slot.pull && this._control.demandOwed !== void 0 && this._canFireDemand()) {
2651
+ this._deliverPullDemand(this._control.demandOwed);
2652
+ }
2610
2653
  }
2611
2654
  /** Should an outgoing settle slice be deferred into the pause buffer? */
2612
2655
  _shouldBufferOnPause() {
2613
2656
  if (this._slot.pausable === false) return false;
2614
- if (!this._isPaused()) return false;
2657
+ if (!this._isPaused() && !this._isPullQuiet()) return false;
2615
2658
  if (this._slot.pausable === "resumeAll") return true;
2616
2659
  if (!this._wave.insideRunWave && this._isAsyncPool() && this._slot.deps.length > 0) return true;
2617
2660
  return false;
@@ -2651,7 +2694,9 @@ var Node = class {
2651
2694
  this._control.pauseLockset.clear();
2652
2695
  this._control.pauseBuffer = [];
2653
2696
  this._control.pausedDepWaveOccurred = false;
2654
- this._control.demandOwed = false;
2697
+ this._control.demandOwed = void 0;
2698
+ this._control.activePull = void 0;
2699
+ this._control.pullDirtyOwed = false;
2655
2700
  this._value.replayRing = [];
2656
2701
  const isCompute = this._slot.handle !== null || this._slot.deps.length > 0;
2657
2702
  if (isCompute) {
@@ -3053,7 +3098,10 @@ function collectionCore(backend, factory, opts = {}, restore) {
3053
3098
  name: name ? `${name}.delta` : void 0
3054
3099
  });
3055
3100
  const pullId = /* @__PURE__ */ Symbol(name ? `${name}.snapshot` : `${factory}.snapshot`);
3101
+ let deliveredVersion = backend.version;
3056
3102
  const snapFn = (ctx) => {
3103
+ if (ctx.pull !== void 0 && backend.version === deliveredVersion) return;
3104
+ deliveredVersion = backend.version;
3057
3105
  ctx.down([["DATA", backend.snapshot()]]);
3058
3106
  };
3059
3107
  const snapshot = graph2 ? graph2.node([delta], snapFn, {
@@ -6221,7 +6269,13 @@ var Graph = class {
6221
6269
  }
6222
6270
  /** Look up a registered node by its id. */
6223
6271
  find(id) {
6224
- return this._byId.get(id);
6272
+ const local = this._byId.get(id);
6273
+ if (local !== void 0) return local;
6274
+ const separator = id.indexOf("::");
6275
+ if (separator < 0) return void 0;
6276
+ const mountPath = id.slice(0, separator);
6277
+ const childPath = id.slice(separator + 2);
6278
+ return this._mounts.find((mount) => mount.at === mountPath)?.graph.find(childPath);
6225
6279
  }
6226
6280
  _releaseNodes(nodes, _opts = {}) {
6227
6281
  const seen = /* @__PURE__ */ new Set();