@sunshaobei/dsh-workflow 0.0.0-stage → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/README.md +43 -2
  2. package/cordis.patch.yml +17 -0
  3. package/lib/client.js +14708 -0
  4. package/lib/core.js +137 -0
  5. package/lib/engine-adapter.js +1387 -0
  6. package/lib/host-driver.js +298 -0
  7. package/lib/index.js +536 -0
  8. package/lib/projection.js +159 -0
  9. package/lib/registry.js +218 -0
  10. package/lib/session-records.js +54 -0
  11. package/lib/submission-commit.js +34 -0
  12. package/lib/world-driver.js +275 -0
  13. package/package.json +64 -4
  14. package/vendor/PROVENANCE.md +9 -0
  15. package/vendor/dynamic-workflow/analysis/actor-graph.d.ts +47 -0
  16. package/vendor/dynamic-workflow/analysis/actor-graph.d.ts.map +1 -0
  17. package/vendor/dynamic-workflow/analysis/actor-graph.js +95 -0
  18. package/vendor/dynamic-workflow/analysis/actor-models.d.ts +60 -0
  19. package/vendor/dynamic-workflow/analysis/actor-models.d.ts.map +1 -0
  20. package/vendor/dynamic-workflow/analysis/actor-models.js +208 -0
  21. package/vendor/dynamic-workflow/analysis/actor-names.d.ts +56 -0
  22. package/vendor/dynamic-workflow/analysis/actor-names.d.ts.map +1 -0
  23. package/vendor/dynamic-workflow/analysis/actor-names.js +155 -0
  24. package/vendor/dynamic-workflow/analysis/analyze.d.ts +63 -0
  25. package/vendor/dynamic-workflow/analysis/analyze.d.ts.map +1 -0
  26. package/vendor/dynamic-workflow/analysis/analyze.js +92 -0
  27. package/vendor/dynamic-workflow/analysis/array-methods.d.ts +21 -0
  28. package/vendor/dynamic-workflow/analysis/array-methods.d.ts.map +1 -0
  29. package/vendor/dynamic-workflow/analysis/array-methods.js +132 -0
  30. package/vendor/dynamic-workflow/analysis/artifact-types.d.ts +39 -0
  31. package/vendor/dynamic-workflow/analysis/artifact-types.d.ts.map +1 -0
  32. package/vendor/dynamic-workflow/analysis/artifact-types.js +114 -0
  33. package/vendor/dynamic-workflow/analysis/artifacts.d.ts +67 -0
  34. package/vendor/dynamic-workflow/analysis/artifacts.d.ts.map +1 -0
  35. package/vendor/dynamic-workflow/analysis/artifacts.js +263 -0
  36. package/vendor/dynamic-workflow/analysis/assign.d.ts +42 -0
  37. package/vendor/dynamic-workflow/analysis/assign.d.ts.map +1 -0
  38. package/vendor/dynamic-workflow/analysis/assign.js +287 -0
  39. package/vendor/dynamic-workflow/analysis/callbacks.d.ts +71 -0
  40. package/vendor/dynamic-workflow/analysis/callbacks.d.ts.map +1 -0
  41. package/vendor/dynamic-workflow/analysis/callbacks.js +133 -0
  42. package/vendor/dynamic-workflow/analysis/calls.d.ts +40 -0
  43. package/vendor/dynamic-workflow/analysis/calls.d.ts.map +1 -0
  44. package/vendor/dynamic-workflow/analysis/calls.js +495 -0
  45. package/vendor/dynamic-workflow/analysis/causality-graph-lanes.d.ts +25 -0
  46. package/vendor/dynamic-workflow/analysis/causality-graph-lanes.d.ts.map +1 -0
  47. package/vendor/dynamic-workflow/analysis/causality-graph-lanes.js +161 -0
  48. package/vendor/dynamic-workflow/analysis/causality-graph-types.d.ts +163 -0
  49. package/vendor/dynamic-workflow/analysis/causality-graph-types.d.ts.map +1 -0
  50. package/vendor/dynamic-workflow/analysis/causality-graph-types.js +8 -0
  51. package/vendor/dynamic-workflow/analysis/causality-graph.d.ts +39 -0
  52. package/vendor/dynamic-workflow/analysis/causality-graph.d.ts.map +1 -0
  53. package/vendor/dynamic-workflow/analysis/causality-graph.js +530 -0
  54. package/vendor/dynamic-workflow/analysis/causality-order-calls.d.ts +29 -0
  55. package/vendor/dynamic-workflow/analysis/causality-order-calls.d.ts.map +1 -0
  56. package/vendor/dynamic-workflow/analysis/causality-order-calls.js +266 -0
  57. package/vendor/dynamic-workflow/analysis/causality-order-functions.d.ts +26 -0
  58. package/vendor/dynamic-workflow/analysis/causality-order-functions.d.ts.map +1 -0
  59. package/vendor/dynamic-workflow/analysis/causality-order-functions.js +116 -0
  60. package/vendor/dynamic-workflow/analysis/causality-order-loops.d.ts +5 -0
  61. package/vendor/dynamic-workflow/analysis/causality-order-loops.d.ts.map +1 -0
  62. package/vendor/dynamic-workflow/analysis/causality-order-loops.js +148 -0
  63. package/vendor/dynamic-workflow/analysis/causality-order-settle.d.ts +39 -0
  64. package/vendor/dynamic-workflow/analysis/causality-order-settle.d.ts.map +1 -0
  65. package/vendor/dynamic-workflow/analysis/causality-order-settle.js +263 -0
  66. package/vendor/dynamic-workflow/analysis/causality-order-state.d.ts +110 -0
  67. package/vendor/dynamic-workflow/analysis/causality-order-state.d.ts.map +1 -0
  68. package/vendor/dynamic-workflow/analysis/causality-order-state.js +162 -0
  69. package/vendor/dynamic-workflow/analysis/causality-order-strands.d.ts +79 -0
  70. package/vendor/dynamic-workflow/analysis/causality-order-strands.d.ts.map +1 -0
  71. package/vendor/dynamic-workflow/analysis/causality-order-strands.js +154 -0
  72. package/vendor/dynamic-workflow/analysis/causality-order-types.d.ts +174 -0
  73. package/vendor/dynamic-workflow/analysis/causality-order-types.d.ts.map +1 -0
  74. package/vendor/dynamic-workflow/analysis/causality-order-types.js +1 -0
  75. package/vendor/dynamic-workflow/analysis/causality-order-walk.d.ts +17 -0
  76. package/vendor/dynamic-workflow/analysis/causality-order-walk.d.ts.map +1 -0
  77. package/vendor/dynamic-workflow/analysis/causality-order-walk.js +282 -0
  78. package/vendor/dynamic-workflow/analysis/causality-order.d.ts +60 -0
  79. package/vendor/dynamic-workflow/analysis/causality-order.d.ts.map +1 -0
  80. package/vendor/dynamic-workflow/analysis/causality-order.js +110 -0
  81. package/vendor/dynamic-workflow/analysis/causality-reduce.d.ts +60 -0
  82. package/vendor/dynamic-workflow/analysis/causality-reduce.d.ts.map +1 -0
  83. package/vendor/dynamic-workflow/analysis/causality-reduce.js +198 -0
  84. package/vendor/dynamic-workflow/analysis/classes.d.ts +47 -0
  85. package/vendor/dynamic-workflow/analysis/classes.d.ts.map +1 -0
  86. package/vendor/dynamic-workflow/analysis/classes.js +264 -0
  87. package/vendor/dynamic-workflow/analysis/constants.d.ts +35 -0
  88. package/vendor/dynamic-workflow/analysis/constants.d.ts.map +1 -0
  89. package/vendor/dynamic-workflow/analysis/constants.js +23 -0
  90. package/vendor/dynamic-workflow/analysis/control-flow.d.ts +26 -0
  91. package/vendor/dynamic-workflow/analysis/control-flow.d.ts.map +1 -0
  92. package/vendor/dynamic-workflow/analysis/control-flow.js +132 -0
  93. package/vendor/dynamic-workflow/analysis/core-json.d.ts +45 -0
  94. package/vendor/dynamic-workflow/analysis/core-json.d.ts.map +1 -0
  95. package/vendor/dynamic-workflow/analysis/core-json.js +49 -0
  96. package/vendor/dynamic-workflow/analysis/core.d.ts +194 -0
  97. package/vendor/dynamic-workflow/analysis/core.d.ts.map +1 -0
  98. package/vendor/dynamic-workflow/analysis/core.js +204 -0
  99. package/vendor/dynamic-workflow/analysis/domain.d.ts +269 -0
  100. package/vendor/dynamic-workflow/analysis/domain.d.ts.map +1 -0
  101. package/vendor/dynamic-workflow/analysis/domain.js +523 -0
  102. package/vendor/dynamic-workflow/analysis/facade-misuse.d.ts +56 -0
  103. package/vendor/dynamic-workflow/analysis/facade-misuse.d.ts.map +1 -0
  104. package/vendor/dynamic-workflow/analysis/facade-misuse.js +350 -0
  105. package/vendor/dynamic-workflow/analysis/fanout-cardinality.d.ts +11 -0
  106. package/vendor/dynamic-workflow/analysis/fanout-cardinality.d.ts.map +1 -0
  107. package/vendor/dynamic-workflow/analysis/fanout-cardinality.js +121 -0
  108. package/vendor/dynamic-workflow/analysis/flow-graph.d.ts +113 -0
  109. package/vendor/dynamic-workflow/analysis/flow-graph.d.ts.map +1 -0
  110. package/vendor/dynamic-workflow/analysis/flow-graph.js +411 -0
  111. package/vendor/dynamic-workflow/analysis/flow-phase.d.ts +28 -0
  112. package/vendor/dynamic-workflow/analysis/flow-phase.d.ts.map +1 -0
  113. package/vendor/dynamic-workflow/analysis/flow-phase.js +104 -0
  114. package/vendor/dynamic-workflow/analysis/flow-strands.d.ts +39 -0
  115. package/vendor/dynamic-workflow/analysis/flow-strands.d.ts.map +1 -0
  116. package/vendor/dynamic-workflow/analysis/flow-strands.js +47 -0
  117. package/vendor/dynamic-workflow/analysis/flow-tree.d.ts +35 -0
  118. package/vendor/dynamic-workflow/analysis/flow-tree.d.ts.map +1 -0
  119. package/vendor/dynamic-workflow/analysis/flow-tree.js +33 -0
  120. package/vendor/dynamic-workflow/analysis/graph.d.ts +5 -0
  121. package/vendor/dynamic-workflow/analysis/graph.d.ts.map +1 -0
  122. package/vendor/dynamic-workflow/analysis/graph.js +199 -0
  123. package/vendor/dynamic-workflow/analysis/handoff-graph.d.ts +48 -0
  124. package/vendor/dynamic-workflow/analysis/handoff-graph.d.ts.map +1 -0
  125. package/vendor/dynamic-workflow/analysis/handoff-graph.js +0 -0
  126. package/vendor/dynamic-workflow/analysis/heap-ops.d.ts +14 -0
  127. package/vendor/dynamic-workflow/analysis/heap-ops.d.ts.map +1 -0
  128. package/vendor/dynamic-workflow/analysis/heap-ops.js +70 -0
  129. package/vendor/dynamic-workflow/analysis/hole-id.d.ts +28 -0
  130. package/vendor/dynamic-workflow/analysis/hole-id.d.ts.map +1 -0
  131. package/vendor/dynamic-workflow/analysis/hole-id.js +41 -0
  132. package/vendor/dynamic-workflow/analysis/hole-sites.d.ts +32 -0
  133. package/vendor/dynamic-workflow/analysis/hole-sites.d.ts.map +1 -0
  134. package/vendor/dynamic-workflow/analysis/hole-sites.js +215 -0
  135. package/vendor/dynamic-workflow/analysis/hole-splice.d.ts +45 -0
  136. package/vendor/dynamic-workflow/analysis/hole-splice.d.ts.map +1 -0
  137. package/vendor/dynamic-workflow/analysis/hole-splice.js +100 -0
  138. package/vendor/dynamic-workflow/analysis/interpret.d.ts +26 -0
  139. package/vendor/dynamic-workflow/analysis/interpret.d.ts.map +1 -0
  140. package/vendor/dynamic-workflow/analysis/interpret.js +200 -0
  141. package/vendor/dynamic-workflow/analysis/literals.d.ts +18 -0
  142. package/vendor/dynamic-workflow/analysis/literals.d.ts.map +1 -0
  143. package/vendor/dynamic-workflow/analysis/literals.js +125 -0
  144. package/vendor/dynamic-workflow/analysis/mermaid.d.ts +60 -0
  145. package/vendor/dynamic-workflow/analysis/mermaid.d.ts.map +1 -0
  146. package/vendor/dynamic-workflow/analysis/mermaid.js +477 -0
  147. package/vendor/dynamic-workflow/analysis/patterns.d.ts +31 -0
  148. package/vendor/dynamic-workflow/analysis/patterns.d.ts.map +1 -0
  149. package/vendor/dynamic-workflow/analysis/patterns.js +94 -0
  150. package/vendor/dynamic-workflow/analysis/phase-graph.d.ts +47 -0
  151. package/vendor/dynamic-workflow/analysis/phase-graph.d.ts.map +1 -0
  152. package/vendor/dynamic-workflow/analysis/phase-graph.js +334 -0
  153. package/vendor/dynamic-workflow/analysis/phases.d.ts +24 -0
  154. package/vendor/dynamic-workflow/analysis/phases.d.ts.map +1 -0
  155. package/vendor/dynamic-workflow/analysis/phases.js +54 -0
  156. package/vendor/dynamic-workflow/analysis/promise-ops.d.ts +52 -0
  157. package/vendor/dynamic-workflow/analysis/promise-ops.d.ts.map +1 -0
  158. package/vendor/dynamic-workflow/analysis/promise-ops.js +123 -0
  159. package/vendor/dynamic-workflow/analysis/relays.d.ts +12 -0
  160. package/vendor/dynamic-workflow/analysis/relays.d.ts.map +1 -0
  161. package/vendor/dynamic-workflow/analysis/relays.js +78 -0
  162. package/vendor/dynamic-workflow/analysis/serialize.d.ts +125 -0
  163. package/vendor/dynamic-workflow/analysis/serialize.d.ts.map +1 -0
  164. package/vendor/dynamic-workflow/analysis/serialize.js +321 -0
  165. package/vendor/dynamic-workflow/analysis/site-phases.d.ts +32 -0
  166. package/vendor/dynamic-workflow/analysis/site-phases.d.ts.map +1 -0
  167. package/vendor/dynamic-workflow/analysis/site-phases.js +69 -0
  168. package/vendor/dynamic-workflow/analysis/sites-labels.d.ts +71 -0
  169. package/vendor/dynamic-workflow/analysis/sites-labels.d.ts.map +1 -0
  170. package/vendor/dynamic-workflow/analysis/sites-labels.js +189 -0
  171. package/vendor/dynamic-workflow/analysis/sites.d.ts +267 -0
  172. package/vendor/dynamic-workflow/analysis/sites.d.ts.map +1 -0
  173. package/vendor/dynamic-workflow/analysis/sites.js +225 -0
  174. package/vendor/dynamic-workflow/analysis/state.d.ts +254 -0
  175. package/vendor/dynamic-workflow/analysis/state.d.ts.map +1 -0
  176. package/vendor/dynamic-workflow/analysis/state.js +569 -0
  177. package/vendor/dynamic-workflow/analysis/taint.d.ts +97 -0
  178. package/vendor/dynamic-workflow/analysis/taint.d.ts.map +1 -0
  179. package/vendor/dynamic-workflow/analysis/taint.js +649 -0
  180. package/vendor/dynamic-workflow/analysis/types.d.ts +100 -0
  181. package/vendor/dynamic-workflow/analysis/types.d.ts.map +1 -0
  182. package/vendor/dynamic-workflow/analysis/types.js +1 -0
  183. package/vendor/dynamic-workflow/analysis/world-run.d.ts +27 -0
  184. package/vendor/dynamic-workflow/analysis/world-run.d.ts.map +1 -0
  185. package/vendor/dynamic-workflow/analysis/world-run.js +44 -0
  186. package/vendor/dynamic-workflow/compiler/compile.d.ts +59 -0
  187. package/vendor/dynamic-workflow/compiler/compile.d.ts.map +1 -0
  188. package/vendor/dynamic-workflow/compiler/compile.js +159 -0
  189. package/vendor/dynamic-workflow/compiler/libs.generated.d.ts +3 -0
  190. package/vendor/dynamic-workflow/compiler/libs.generated.d.ts.map +1 -0
  191. package/vendor/dynamic-workflow/compiler/libs.generated.js +64 -0
  192. package/vendor/dynamic-workflow/engine/artifact-spec.d.ts +26 -0
  193. package/vendor/dynamic-workflow/engine/artifact-spec.d.ts.map +1 -0
  194. package/vendor/dynamic-workflow/engine/artifact-spec.js +173 -0
  195. package/vendor/dynamic-workflow/engine/ask-observation-types.d.ts +54 -0
  196. package/vendor/dynamic-workflow/engine/ask-observation-types.d.ts.map +1 -0
  197. package/vendor/dynamic-workflow/engine/ask-observation-types.js +19 -0
  198. package/vendor/dynamic-workflow/engine/cached-ask-facts.d.ts +28 -0
  199. package/vendor/dynamic-workflow/engine/cached-ask-facts.d.ts.map +1 -0
  200. package/vendor/dynamic-workflow/engine/cached-ask-facts.js +35 -0
  201. package/vendor/dynamic-workflow/engine/concurrency.d.ts +151 -0
  202. package/vendor/dynamic-workflow/engine/concurrency.d.ts.map +1 -0
  203. package/vendor/dynamic-workflow/engine/concurrency.js +282 -0
  204. package/vendor/dynamic-workflow/engine/engine-artifacts-primary.d.ts +17 -0
  205. package/vendor/dynamic-workflow/engine/engine-artifacts-primary.d.ts.map +1 -0
  206. package/vendor/dynamic-workflow/engine/engine-artifacts-primary.js +29 -0
  207. package/vendor/dynamic-workflow/engine/engine-artifacts.d.ts +55 -0
  208. package/vendor/dynamic-workflow/engine/engine-artifacts.d.ts.map +1 -0
  209. package/vendor/dynamic-workflow/engine/engine-artifacts.js +367 -0
  210. package/vendor/dynamic-workflow/engine/engine-config.d.ts +90 -0
  211. package/vendor/dynamic-workflow/engine/engine-config.d.ts.map +1 -0
  212. package/vendor/dynamic-workflow/engine/engine-config.js +6 -0
  213. package/vendor/dynamic-workflow/engine/engine-holes.d.ts +116 -0
  214. package/vendor/dynamic-workflow/engine/engine-holes.d.ts.map +1 -0
  215. package/vendor/dynamic-workflow/engine/engine-holes.js +142 -0
  216. package/vendor/dynamic-workflow/engine/engine-launch.d.ts +34 -0
  217. package/vendor/dynamic-workflow/engine/engine-launch.d.ts.map +1 -0
  218. package/vendor/dynamic-workflow/engine/engine-launch.js +26 -0
  219. package/vendor/dynamic-workflow/engine/engine-phase-stamp.d.ts +35 -0
  220. package/vendor/dynamic-workflow/engine/engine-phase-stamp.d.ts.map +1 -0
  221. package/vendor/dynamic-workflow/engine/engine-phase-stamp.js +74 -0
  222. package/vendor/dynamic-workflow/engine/engine-report.d.ts +27 -0
  223. package/vendor/dynamic-workflow/engine/engine-report.d.ts.map +1 -0
  224. package/vendor/dynamic-workflow/engine/engine-report.js +151 -0
  225. package/vendor/dynamic-workflow/engine/engine-resume.d.ts +18 -0
  226. package/vendor/dynamic-workflow/engine/engine-resume.d.ts.map +1 -0
  227. package/vendor/dynamic-workflow/engine/engine-resume.js +38 -0
  228. package/vendor/dynamic-workflow/engine/engine-settlement.d.ts +30 -0
  229. package/vendor/dynamic-workflow/engine/engine-settlement.d.ts.map +1 -0
  230. package/vendor/dynamic-workflow/engine/engine-settlement.js +79 -0
  231. package/vendor/dynamic-workflow/engine/engine-state.d.ts +99 -0
  232. package/vendor/dynamic-workflow/engine/engine-state.d.ts.map +1 -0
  233. package/vendor/dynamic-workflow/engine/engine-state.js +13 -0
  234. package/vendor/dynamic-workflow/engine/engine-world.d.ts +36 -0
  235. package/vendor/dynamic-workflow/engine/engine-world.d.ts.map +1 -0
  236. package/vendor/dynamic-workflow/engine/engine-world.js +189 -0
  237. package/vendor/dynamic-workflow/engine/engine.d.ts +263 -0
  238. package/vendor/dynamic-workflow/engine/engine.d.ts.map +1 -0
  239. package/vendor/dynamic-workflow/engine/engine.js +602 -0
  240. package/vendor/dynamic-workflow/engine/errors.d.ts +87 -0
  241. package/vendor/dynamic-workflow/engine/errors.d.ts.map +1 -0
  242. package/vendor/dynamic-workflow/engine/errors.js +56 -0
  243. package/vendor/dynamic-workflow/engine/hash-mismatch.d.ts +10 -0
  244. package/vendor/dynamic-workflow/engine/hash-mismatch.d.ts.map +1 -0
  245. package/vendor/dynamic-workflow/engine/hash-mismatch.js +15 -0
  246. package/vendor/dynamic-workflow/engine/hash.d.ts +16 -0
  247. package/vendor/dynamic-workflow/engine/hash.d.ts.map +1 -0
  248. package/vendor/dynamic-workflow/engine/hash.js +48 -0
  249. package/vendor/dynamic-workflow/engine/imported-cache-types.d.ts +96 -0
  250. package/vendor/dynamic-workflow/engine/imported-cache-types.d.ts.map +1 -0
  251. package/vendor/dynamic-workflow/engine/imported-cache-types.js +6 -0
  252. package/vendor/dynamic-workflow/engine/imported-cache.d.ts +127 -0
  253. package/vendor/dynamic-workflow/engine/imported-cache.d.ts.map +1 -0
  254. package/vendor/dynamic-workflow/engine/imported-cache.js +244 -0
  255. package/vendor/dynamic-workflow/engine/index.d.ts +11 -0
  256. package/vendor/dynamic-workflow/engine/index.d.ts.map +1 -0
  257. package/vendor/dynamic-workflow/engine/index.js +10 -0
  258. package/vendor/dynamic-workflow/engine/journal-memory.d.ts +32 -0
  259. package/vendor/dynamic-workflow/engine/journal-memory.d.ts.map +1 -0
  260. package/vendor/dynamic-workflow/engine/journal-memory.js +243 -0
  261. package/vendor/dynamic-workflow/engine/journal-read-types.d.ts +72 -0
  262. package/vendor/dynamic-workflow/engine/journal-read-types.d.ts.map +1 -0
  263. package/vendor/dynamic-workflow/engine/journal-read-types.js +28 -0
  264. package/vendor/dynamic-workflow/engine/persona.d.ts +20 -0
  265. package/vendor/dynamic-workflow/engine/persona.d.ts.map +1 -0
  266. package/vendor/dynamic-workflow/engine/persona.js +43 -0
  267. package/vendor/dynamic-workflow/engine/replay-order.d.ts +96 -0
  268. package/vendor/dynamic-workflow/engine/replay-order.d.ts.map +1 -0
  269. package/vendor/dynamic-workflow/engine/replay-order.js +229 -0
  270. package/vendor/dynamic-workflow/engine/run-terminal.d.ts +35 -0
  271. package/vendor/dynamic-workflow/engine/run-terminal.d.ts.map +1 -0
  272. package/vendor/dynamic-workflow/engine/run-terminal.js +7 -0
  273. package/vendor/dynamic-workflow/engine/scheduler-submit.d.ts +22 -0
  274. package/vendor/dynamic-workflow/engine/scheduler-submit.d.ts.map +1 -0
  275. package/vendor/dynamic-workflow/engine/scheduler-submit.js +84 -0
  276. package/vendor/dynamic-workflow/engine/scheduler-types.d.ts +105 -0
  277. package/vendor/dynamic-workflow/engine/scheduler-types.d.ts.map +1 -0
  278. package/vendor/dynamic-workflow/engine/scheduler-types.js +17 -0
  279. package/vendor/dynamic-workflow/engine/scheduler.d.ts +113 -0
  280. package/vendor/dynamic-workflow/engine/scheduler.d.ts.map +1 -0
  281. package/vendor/dynamic-workflow/engine/scheduler.js +484 -0
  282. package/vendor/dynamic-workflow/engine/types.d.ts +979 -0
  283. package/vendor/dynamic-workflow/engine/types.d.ts.map +1 -0
  284. package/vendor/dynamic-workflow/engine/types.js +26 -0
  285. package/vendor/dynamic-workflow/engine/world-read-input.d.ts +10 -0
  286. package/vendor/dynamic-workflow/engine/world-read-input.d.ts.map +1 -0
  287. package/vendor/dynamic-workflow/engine/world-read-input.js +55 -0
  288. package/vendor/dynamic-workflow/facade/artifact-caps.d.ts +48 -0
  289. package/vendor/dynamic-workflow/facade/artifact-caps.d.ts.map +1 -0
  290. package/vendor/dynamic-workflow/facade/artifact-caps.js +47 -0
  291. package/vendor/dynamic-workflow/facade/dts-hole.d.ts +16 -0
  292. package/vendor/dynamic-workflow/facade/dts-hole.d.ts.map +1 -0
  293. package/vendor/dynamic-workflow/facade/dts-hole.js +26 -0
  294. package/vendor/dynamic-workflow/facade/dts-model.d.ts +11 -0
  295. package/vendor/dynamic-workflow/facade/dts-model.d.ts.map +1 -0
  296. package/vendor/dynamic-workflow/facade/dts-model.js +18 -0
  297. package/vendor/dynamic-workflow/facade/dts-stream.d.ts +15 -0
  298. package/vendor/dynamic-workflow/facade/dts-stream.d.ts.map +1 -0
  299. package/vendor/dynamic-workflow/facade/dts-stream.js +41 -0
  300. package/vendor/dynamic-workflow/facade/dts.d.ts +29 -0
  301. package/vendor/dynamic-workflow/facade/dts.d.ts.map +1 -0
  302. package/vendor/dynamic-workflow/facade/dts.js +324 -0
  303. package/vendor/dynamic-workflow/facade/registry.d.ts +218 -0
  304. package/vendor/dynamic-workflow/facade/registry.d.ts.map +1 -0
  305. package/vendor/dynamic-workflow/facade/registry.js +203 -0
  306. package/vendor/dynamic-workflow/facade/report-caps.d.ts +40 -0
  307. package/vendor/dynamic-workflow/facade/report-caps.d.ts.map +1 -0
  308. package/vendor/dynamic-workflow/facade/report-caps.js +39 -0
  309. package/vendor/dynamic-workflow/facade/world-read-caps.d.ts +37 -0
  310. package/vendor/dynamic-workflow/facade/world-read-caps.d.ts.map +1 -0
  311. package/vendor/dynamic-workflow/facade/world-read-caps.js +36 -0
  312. package/vendor/dynamic-workflow/index.d.ts +41 -0
  313. package/vendor/dynamic-workflow/index.d.ts.map +1 -0
  314. package/vendor/dynamic-workflow/index.js +51 -0
  315. package/vendor/dynamic-workflow/lowering/index.d.ts +2 -0
  316. package/vendor/dynamic-workflow/lowering/index.d.ts.map +1 -0
  317. package/vendor/dynamic-workflow/lowering/index.js +1 -0
  318. package/vendor/dynamic-workflow/lowering/lower-hole.d.ts +16 -0
  319. package/vendor/dynamic-workflow/lowering/lower-hole.d.ts.map +1 -0
  320. package/vendor/dynamic-workflow/lowering/lower-hole.js +63 -0
  321. package/vendor/dynamic-workflow/lowering/lower.d.ts +82 -0
  322. package/vendor/dynamic-workflow/lowering/lower.d.ts.map +1 -0
  323. package/vendor/dynamic-workflow/lowering/lower.js +333 -0
  324. package/vendor/dynamic-workflow/projections.d.ts +26 -0
  325. package/vendor/dynamic-workflow/projections.d.ts.map +1 -0
  326. package/vendor/dynamic-workflow/projections.js +23 -0
  327. package/vendor/dynamic-workflow/schema/actor-submit-profiles.d.ts +49 -0
  328. package/vendor/dynamic-workflow/schema/actor-submit-profiles.d.ts.map +1 -0
  329. package/vendor/dynamic-workflow/schema/actor-submit-profiles.js +69 -0
  330. package/vendor/dynamic-workflow/schema/emit.d.ts +55 -0
  331. package/vendor/dynamic-workflow/schema/emit.d.ts.map +1 -0
  332. package/vendor/dynamic-workflow/schema/emit.js +325 -0
  333. package/vendor/dynamic-workflow/schema/jsdoc.d.ts +10 -0
  334. package/vendor/dynamic-workflow/schema/jsdoc.d.ts.map +1 -0
  335. package/vendor/dynamic-workflow/schema/jsdoc.js +83 -0
  336. package/vendor/dynamic-workflow/schema/serialize.d.ts +8 -0
  337. package/vendor/dynamic-workflow/schema/serialize.d.ts.map +1 -0
  338. package/vendor/dynamic-workflow/schema/serialize.js +20 -0
  339. package/vendor/dynamic-workflow/schema/synthesize.d.ts +48 -0
  340. package/vendor/dynamic-workflow/schema/synthesize.d.ts.map +1 -0
  341. package/vendor/dynamic-workflow/schema/synthesize.js +138 -0
  342. package/vendor/dynamic-workflow/schema/types.d.ts +67 -0
  343. package/vendor/dynamic-workflow/schema/types.d.ts.map +1 -0
  344. package/vendor/dynamic-workflow/schema/types.js +18 -0
  345. package/vendor/dynamic-workflow/schema/validate.d.ts +15 -0
  346. package/vendor/dynamic-workflow/schema/validate.d.ts.map +1 -0
  347. package/vendor/dynamic-workflow/schema/validate.js +213 -0
  348. package/vendor/dynamic-workflow/testing/index.d.ts +6 -0
  349. package/vendor/dynamic-workflow/testing/index.d.ts.map +1 -0
  350. package/vendor/dynamic-workflow/testing/index.js +5 -0
  351. package/vendor/dynamic-workflow/testing/journal-contract-artifacts.d.ts +9 -0
  352. package/vendor/dynamic-workflow/testing/journal-contract-artifacts.d.ts.map +1 -0
  353. package/vendor/dynamic-workflow/testing/journal-contract-artifacts.js +195 -0
  354. package/vendor/dynamic-workflow/testing/journal-contract-events.d.ts +9 -0
  355. package/vendor/dynamic-workflow/testing/journal-contract-events.d.ts.map +1 -0
  356. package/vendor/dynamic-workflow/testing/journal-contract-events.js +163 -0
  357. package/vendor/dynamic-workflow/testing/journal-contract-helpers.d.ts +9 -0
  358. package/vendor/dynamic-workflow/testing/journal-contract-helpers.d.ts.map +1 -0
  359. package/vendor/dynamic-workflow/testing/journal-contract-helpers.js +12 -0
  360. package/vendor/dynamic-workflow/testing/journal-contract-isolation.d.ts +9 -0
  361. package/vendor/dynamic-workflow/testing/journal-contract-isolation.d.ts.map +1 -0
  362. package/vendor/dynamic-workflow/testing/journal-contract-isolation.js +46 -0
  363. package/vendor/dynamic-workflow/testing/journal-contract-nodes.d.ts +9 -0
  364. package/vendor/dynamic-workflow/testing/journal-contract-nodes.d.ts.map +1 -0
  365. package/vendor/dynamic-workflow/testing/journal-contract-nodes.js +234 -0
  366. package/vendor/dynamic-workflow/testing/journal-contract-reads.d.ts +11 -0
  367. package/vendor/dynamic-workflow/testing/journal-contract-reads.d.ts.map +1 -0
  368. package/vendor/dynamic-workflow/testing/journal-contract-reads.js +281 -0
  369. package/vendor/dynamic-workflow/testing/journal-contract-runs.d.ts +9 -0
  370. package/vendor/dynamic-workflow/testing/journal-contract-runs.d.ts.map +1 -0
  371. package/vendor/dynamic-workflow/testing/journal-contract-runs.js +396 -0
  372. package/vendor/dynamic-workflow/testing/journal-contract-script.d.ts +12 -0
  373. package/vendor/dynamic-workflow/testing/journal-contract-script.d.ts.map +1 -0
  374. package/vendor/dynamic-workflow/testing/journal-contract-script.js +82 -0
  375. package/vendor/dynamic-workflow/testing/journal-contract.d.ts +15 -0
  376. package/vendor/dynamic-workflow/testing/journal-contract.d.ts.map +1 -0
  377. package/vendor/dynamic-workflow/testing/journal-contract.js +31 -0
  378. package/vendor/dynamic-workflow-runtime/child-cell-streams.js +128 -0
  379. package/vendor/dynamic-workflow-runtime/child-entry-file.js +43 -0
  380. package/vendor/dynamic-workflow-runtime/child-source.js +299 -0
  381. package/vendor/dynamic-workflow-runtime/harness.js +302 -0
  382. package/vendor/dynamic-workflow-runtime/index.js +4 -0
  383. package/vendor/dynamic-workflow-runtime/protocol.js +2 -0
  384. package/vendor/mcode-host/dynamic-workflow-import.js +269 -0
  385. package/vendor/mcode-host/workflow-git-world-read.js +183 -0
  386. package/vendor/mcode-host/workflow-world-read.js +282 -0
@@ -0,0 +1,263 @@
1
+ import ts from "typescript";
2
+ import { isFunctionLike } from "./sites.js";
3
+ import { boundIdentifiers } from "./causality-order-functions.js";
4
+ import { currentFrame, isVisiblySettled, joinStrands, } from "./causality-order-strands.js";
5
+ const NO_CLAIM = { certain: [], maybe: [] };
6
+ /**
7
+ * The iteration constructs (loop statements and iteration-candidate callbacks) that
8
+ * lexically enclose a node, memoized. Repetition is what makes a settle of a
9
+ * not-yet-issued step realizable, so this is the test {@link admissionOf} needs.
10
+ */
11
+ function iterationAncestorsOf(state, node) {
12
+ const cached = state.iterationAncestorCache.get(node);
13
+ if (cached !== undefined)
14
+ return cached;
15
+ const out = new Set();
16
+ for (let cur = node.parent; cur !== undefined; cur = cur.parent) {
17
+ if (ts.isForStatement(cur) ||
18
+ ts.isForOfStatement(cur) ||
19
+ ts.isForInStatement(cur) ||
20
+ ts.isWhileStatement(cur) ||
21
+ ts.isDoStatement(cur) ||
22
+ state.candByCallback.has(cur) ||
23
+ state.eachCallbackFns.has(cur)) {
24
+ out.add(cur);
25
+ }
26
+ }
27
+ state.iterationAncestorCache.set(node, out);
28
+ return out;
29
+ }
30
+ /**
31
+ * THE TEMPORAL INVARIANT: a promise cannot settle before its request issues. The oracle
32
+ * is flow-INsensitive while this walk is flow-sensitive, so an occurrence set can name a
33
+ * step that has not been issued at this point in evaluation order, and settling it here
34
+ * would be a temporally impossible event. Returns HOW the witness was admitted, because
35
+ * the two ways carry different certainty (see {@link claimAt}).
36
+ *
37
+ * Bug this fixes: in async-promise-double-await-mutate, `first.steps.push(extra)` merges
38
+ * ask#2's label into the very slot `plan` denotes, so the EARLIER `await plan` read
39
+ * {ask#1, ask#2}. That phantom settle of ask#2 both cost the await its singleton-exact
40
+ * certainty and emitted `ask#2 -> ask#3 seq maybe`, which dedupeFacts' min-certainty
41
+ * merge then used to demote a true `data always` edge.
42
+ *
43
+ * The `repetition` carve-out is not optional. A step issued LATER IN THE WALK but sharing
44
+ * an enclosing iteration construct with the await is realizable by REPETITION: iteration
45
+ * k's promise settles at iteration k+1's await, which is exactly the loop-carried settle
46
+ * the oracle exists to find (reduce-accumulator awaits the accumulator, i.e. the previous
47
+ * round's ask, before issuing this round's). A bare `issued.has(step)` test drops it, the
48
+ * barrier falls through to a widening that finds nothing pending inside the region, and
49
+ * the step loses its `serial` cue for a `stack` that claims N concurrent instances the
50
+ * script serializes — trading a model-only certainty bit for a wrong cue that is DRAWN.
51
+ * This mirrors `realizableCarry` in causality-graph.ts, which decides backwards edges by
52
+ * the same "a shared iteration region is what repetition can realize" rule.
53
+ */
54
+ function admissionOf(state, awaitNode, step) {
55
+ if (state.issued.has(step))
56
+ return "issued";
57
+ const call = state.callByStep.get(step);
58
+ if (call === undefined)
59
+ return undefined;
60
+ const enclosing = iterationAncestorsOf(state, awaitNode);
61
+ if (enclosing.size === 0)
62
+ return undefined;
63
+ for (const ancestor of iterationAncestorsOf(state, call)) {
64
+ if (enclosing.has(ancestor))
65
+ return "repetition";
66
+ }
67
+ return undefined;
68
+ }
69
+ /**
70
+ * Read one oracle position and split it by the SETTLE-CERTAINTY RULE: a singleton exact
71
+ * witness is certain, anything else is a may-claim.
72
+ *
73
+ * `admit` applies the temporal invariant ({@link admissionOf}) BEFORE the singleton
74
+ * judgement, and that order is load-bearing: dropping a phantom witness is what lets the
75
+ * surviving set be a singleton and settle certainly. Judging first and filtering after
76
+ * would leave the phantom's vote counted.
77
+ *
78
+ * A witness admitted by REPETITION never settles certainly, even as a singleton exact
79
+ * one, because the ordering it would claim fails at BOTH ends of the loop: the first
80
+ * iteration awaits the initial value and settles nothing, and the last iteration's issue
81
+ * escapes the loop unawaited (the head await of iteration k+1 never runs), so that
82
+ * instance is still pending afterwards. A certain claim there would assert a post-loop
83
+ * ordering the final instance violates — over-ordering as a may-claim is the licensed
84
+ * direction, over-CERTAINTY on a real edge is not. `order-loop-head-await-tail-issue`
85
+ * pins it. The demotion costs the multiplicity cue nothing: `settledInside` records the
86
+ * step whatever the event's certainty, so a `serial` cue survives it.
87
+ *
88
+ * Guard lookups pass no `admit` — see the note on {@link controllersOf}.
89
+ */
90
+ function claimAt(state, map, at, admit) {
91
+ const occs = (map.get(at) ?? []).filter((occ) => state.realSteps.has(occ.site));
92
+ // Dedupe by site, OR-ing exactness the way the domain's own addOcc merges witnesses.
93
+ // `certainOk` is per-SITE: admission is a property of the site, not of an occurrence.
94
+ const bySite = new Map();
95
+ for (const occ of occs) {
96
+ const how = admit === undefined ? "issued" : admit(occ.site);
97
+ if (how === undefined)
98
+ continue; // temporally impossible at this point in the walk
99
+ const existing = bySite.get(occ.site);
100
+ if (existing === undefined)
101
+ bySite.set(occ.site, { certainOk: how === "issued", exact: occ.exact });
102
+ else
103
+ existing.exact = existing.exact || occ.exact;
104
+ }
105
+ const sites = [...bySite.keys()];
106
+ if (sites.length === 0)
107
+ return NO_CLAIM;
108
+ const only = sites[0];
109
+ const solo = bySite.get(only);
110
+ if (sites.length === 1 && solo.exact && solo.certainOk)
111
+ return { certain: [only], maybe: [] };
112
+ return { certain: [], maybe: sites };
113
+ }
114
+ export function settlesAt(state, node, at) {
115
+ return claimAt(state, state.oracle.awaitSettles, at, (step) => admissionOf(state, node, step));
116
+ }
117
+ /**
118
+ * An `await` barrier over the union of what the two halves resolved, plus the summaries of
119
+ * the STRANDS it joins: `certain` settles as a certainty, `maybe` as a may-claim (a step
120
+ * claimed by both counts as certain). Steps already settled IN A VISIBLE FRAME drop out,
121
+ * and a claim that has entirely settled already is a no-op. Widening is reached only when
122
+ * the claim and every joined summary were empty to begin with.
123
+ *
124
+ * The already-settled no-op is not new; what changed is that it became REACHABLE. Before
125
+ * the settle oracle, an indirect await (`await held`, `await p` in a helper, a second await of
126
+ * one promise) resolved to the empty set, so every such await fell through to widening and
127
+ * manufactured `seq maybe` claims over unrelated steps still in flight. The oracle makes
128
+ * the claim non-empty, so the no-op catches it and those spurious barriers disappear —
129
+ * which is why several async-promise-* snapshots got STRONGER certainties once the oracle
130
+ * landed rather than gaining edges.
131
+ *
132
+ * Two frame rules carry the strand model:
133
+ * freshness is judged against EVERY frame on the stack, because a step the spawner
134
+ * already awaited is settled for the strands it spawns; fresh steps are recorded in the
135
+ * CURRENT frame alone, because this activation's await tells the spawner nothing.
136
+ * `awaited` is the operand this barrier stands over, which {@link joinStrands} scans for
137
+ * the promises it names; a barrier with no operand (a deferred callback's receiver
138
+ * prologue) can still LIFT a strand out of its own claim.
139
+ */
140
+ export function barrier(state, certain, maybe, chain, awaited) {
141
+ const { events, issued } = state;
142
+ const joins = joinStrands(state, certain, maybe, awaited);
143
+ const summaryOf = (regions) => regions.flatMap((region) => [
144
+ ...(state.strands.find((record) => record.region === region)?.summary ?? []),
145
+ ]);
146
+ // A joined strand contributes what IT awaited: syntactically joined certainly, lifted
147
+ // with the certainty of the claim that lifted it.
148
+ const allCertain = [...certain, ...summaryOf(joins.certain)];
149
+ const allMaybe = [...maybe, ...summaryOf(joins.maybe)];
150
+ const joined = [...joins.certain, ...joins.maybe];
151
+ const frame = currentFrame(state);
152
+ const freshCertain = [];
153
+ for (const step of allCertain) {
154
+ if (!isVisiblySettled(state, step) && !freshCertain.includes(step))
155
+ freshCertain.push(step);
156
+ }
157
+ for (const step of freshCertain)
158
+ frame.settled.add(step);
159
+ const freshMaybe = [];
160
+ for (const step of allMaybe) {
161
+ if (!isVisiblySettled(state, step) && !freshMaybe.includes(step))
162
+ freshMaybe.push(step);
163
+ }
164
+ for (const step of freshMaybe)
165
+ frame.settled.add(step);
166
+ // `joins` rides the FIRST event this barrier emits: it is a property of the barrier, not
167
+ // of either certainty side, and the control-flow projection reads it as one set.
168
+ const withJoins = joined.length === 0 ? {} : { joins: joined };
169
+ if (freshCertain.length > 0) {
170
+ events.push({ at: "settle", maybe: false, regions: chain, steps: freshCertain, ...withJoins });
171
+ }
172
+ if (freshMaybe.length > 0) {
173
+ events.push({
174
+ at: "settle",
175
+ maybe: true,
176
+ regions: chain,
177
+ steps: freshMaybe,
178
+ ...(freshCertain.length > 0 ? {} : withJoins),
179
+ });
180
+ }
181
+ if (freshCertain.length > 0 || freshMaybe.length > 0)
182
+ return;
183
+ // Nothing fresh to settle, but a join is a control-flow fact of its own: it is where the
184
+ // strand's parked exits reconnect, so it is recorded even with no steps to its name.
185
+ const joinOnly = () => {
186
+ if (joined.length === 0)
187
+ return;
188
+ events.push({ at: "settle", joins: joined, maybe: false, regions: chain, steps: [] });
189
+ };
190
+ if (allCertain.length > 0 || allMaybe.length > 0) {
191
+ joinOnly(); // already settled: adds no step
192
+ return;
193
+ }
194
+ // Widened barrier: neither half resolved anything, so assume everything in flight
195
+ // settled. Over-orders (understates parallelism), never invents concurrency.
196
+ const pending = [...issued].filter((step) => !isVisiblySettled(state, step));
197
+ if (pending.length === 0) {
198
+ joinOnly();
199
+ return;
200
+ }
201
+ for (const step of pending)
202
+ frame.settled.add(step);
203
+ events.push({ at: "settle", maybe: true, regions: chain, steps: pending, ...withJoins });
204
+ }
205
+ export function bindSteps(state, name, steps) {
206
+ if (steps.length === 0)
207
+ return;
208
+ for (const identifier of boundIdentifiers(name)) {
209
+ const symbol = state.checker.getSymbolAtLocation(identifier);
210
+ if (symbol === undefined)
211
+ continue;
212
+ const set = state.stepsBySymbol.get(symbol) ?? new Set();
213
+ for (const step of steps)
214
+ set.add(step);
215
+ state.stepsBySymbol.set(symbol, set);
216
+ }
217
+ }
218
+ /**
219
+ * Steps whose answers the guard expression reads, as the UNION of the syntactic
220
+ * `stepsBySymbol` scan (certain witnesses) and the taint oracle's `guardReads`. A step
221
+ * both sides claim counts once, as certain.
222
+ *
223
+ * Do not "simplify" this into the oracle alone. The scan is the ONLY side that sees an
224
+ * implicit flow — `const flag = (await ask()) ? 1 : 2; if (flag)` taints nothing, because
225
+ * a condition never joins the data contract — and the oracle is the only side that sees a
226
+ * derived binding (`const ok = t.escalate`), whose declaration issues nothing for the
227
+ * scan to record. Dropping either half silently loses a `control` edge; both cases are
228
+ * pinned (order-implicit-flow-guard, order-derived-guard-control).
229
+ */
230
+ function controllersOf(state, guard) {
231
+ const controllers = [];
232
+ const scan = (node) => {
233
+ if (isFunctionLike(node))
234
+ return;
235
+ if (ts.isIdentifier(node)) {
236
+ const symbol = state.checker.getSymbolAtLocation(node);
237
+ const steps = symbol === undefined ? undefined : state.stepsBySymbol.get(symbol);
238
+ if (steps !== undefined) {
239
+ for (const step of steps)
240
+ if (!controllers.includes(step))
241
+ controllers.push(step);
242
+ }
243
+ return;
244
+ }
245
+ ts.forEachChild(node, scan);
246
+ };
247
+ scan(guard);
248
+ const claim = claimAt(state, state.oracle.guardReads, guard.getStart(state.scriptFile));
249
+ for (const step of claim.certain)
250
+ if (!controllers.includes(step))
251
+ controllers.push(step);
252
+ return {
253
+ controllers,
254
+ maybeControllers: claim.maybe.filter((step) => !controllers.includes(step)),
255
+ };
256
+ }
257
+ /** Record a guard's control dependence against a region, when it has any. */
258
+ export function recordControl(state, guard, region) {
259
+ const { controllers, maybeControllers } = controllersOf(state, guard);
260
+ if (controllers.length > 0 || maybeControllers.length > 0) {
261
+ state.controls.push({ controllers, maybeControllers, region });
262
+ }
263
+ }
@@ -0,0 +1,110 @@
1
+ import ts from "typescript";
2
+ import type { ScriptLoc, WorkflowProgram } from "../compiler/compile.js";
3
+ import { type HoleSite, type IterationCandidate, type PhaseMarkerSite, type SiteTable } from "./sites.js";
4
+ import type { ApplicationVia } from "./state.js";
5
+ import { type JumpKind, type TraceRegionKind } from "./constants.js";
6
+ import type { ControlFact, OrderEvent, OrderOracle, OrderRegion, PhaseInfo } from "./causality-order-types.js";
7
+ import { type ScriptFunction } from "./causality-order-functions.js";
8
+ import { type Frame, type StrandRecord } from "./causality-order-strands.js";
9
+ /** The walk's whole shared state: what `traceOrder` used to hold in closure. */
10
+ export interface TraceState {
11
+ readonly scriptFile: ts.SourceFile;
12
+ readonly program: ts.Program;
13
+ readonly checker: ts.TypeChecker;
14
+ readonly toScriptLoc: WorkflowProgram["toScriptLoc"];
15
+ readonly oracle: OrderOracle;
16
+ readonly body: ts.Block;
17
+ readonly askByCall: ReadonlyMap<ts.Node, string>;
18
+ readonly readByCall: ReadonlyMap<ts.Node, string>;
19
+ readonly actorByCall: ReadonlyMap<ts.Node, string>;
20
+ /** `hole<T>()` calls by CALL node, open and filled (causality-order-holes.ts). */
21
+ readonly holeByCall: ReadonlyMap<ts.Node, HoleSite>;
22
+ /** Per-element callback calls by CALL node (the fan-out region opens there). */
23
+ readonly candByCall: ReadonlyMap<ts.Node, IterationCandidate>;
24
+ /** Their inline literals (an iteration construct for the admission test). */
25
+ readonly candByCallback: ReadonlyMap<ts.Node, IterationCandidate>;
26
+ /**
27
+ * A function applied per element at a candidate call (`xs.map(review)`) encloses its
28
+ * steps in an iteration exactly as an inline callback literal does.
29
+ */
30
+ readonly eachCallbackFns: ReadonlySet<ts.Node>;
31
+ readonly recursive: ReadonlySet<ts.Node>;
32
+ /**
33
+ * Only real steps can be ordered. An occurrence set may also carry join and fan-out
34
+ * labels, which are relays, not things that take time.
35
+ */
36
+ readonly realSteps: ReadonlySet<string>;
37
+ readonly callByStep: ReadonlyMap<string, ts.Node>;
38
+ readonly iterationAncestorCache: Map<ts.Node, Set<ts.Node>>;
39
+ readonly events: OrderEvent[];
40
+ readonly regions: OrderRegion[];
41
+ readonly controls: ControlFact[];
42
+ readonly counters: Map<TraceRegionKind, number>;
43
+ readonly issued: Set<string>;
44
+ readonly frames: Frame[];
45
+ /** Every strand the walk spawned, in spawn order; `joined` is the ones already awaited. */
46
+ readonly strands: StrandRecord[];
47
+ readonly joined: Set<string>;
48
+ /** Which strands a variable may hold the promise of — the syntactic half of the join. */
49
+ readonly strandsBySymbol: Map<ts.Symbol, Set<string>>;
50
+ readonly returnTargets: string[];
51
+ readonly throwTargets: string[];
52
+ readonly regionByStatement: Map<ts.Node, string>;
53
+ /** decl -> the `loop` region its SCC entry opened; where a re-entrant call `recur`s to. */
54
+ readonly sccLoopByDecl: Map<ts.Node, string>;
55
+ /**
56
+ * Which steps a variable may hold the answer of. The syntactic half of the control
57
+ * relation: it catches implicit flows the taint oracle cannot see, because a condition
58
+ * never joins the data contract (`const flag = (await ask()) ? 1 : 2` taints nothing).
59
+ */
60
+ readonly stepsBySymbol: Map<ts.Symbol, Set<string>>;
61
+ readonly walkedFns: Set<ts.Node>;
62
+ readonly fnStack: ts.Node[];
63
+ readonly markerByStatement: ReadonlyMap<ts.Node, PhaseMarkerSite>;
64
+ readonly phases: PhaseInfo[];
65
+ readonly phaseIdByName: Map<string, string>;
66
+ /** Hole phases already minted (a hole in a helper is reached per call, minted once). */
67
+ readonly holePhases: Set<string>;
68
+ /**
69
+ * The filled holes whose bodies the walk is inside, innermost last: every phase minted
70
+ * while the stack is non-empty carries its top as `fill` ({@link PhaseInfo.fill}).
71
+ */
72
+ readonly fillStack: string[];
73
+ currentPhase: string;
74
+ /** The root `seq` region id; every other region descends from it. */
75
+ readonly root: string;
76
+ /** The node visitor, bound to this state so every module can recurse without a cycle. */
77
+ readonly walk: (node: ts.Node, chain: readonly string[]) => void;
78
+ }
79
+ /** The script functions the oracle says `node` applies, by `via`, in recording order. */
80
+ export declare function applicationsAt(state: Pick<TraceState, "oracle" | "scriptFile">, node: ts.Node, via: ApplicationVia): ScriptFunction[];
81
+ export declare function openRegion(state: Pick<TraceState, "counters" | "regions">, kind: TraceRegionKind, parent: string | undefined, extra: {
82
+ entered: boolean;
83
+ loc?: ScriptLoc;
84
+ bound?: number;
85
+ label?: string;
86
+ exhaustive?: boolean;
87
+ fallthrough?: boolean;
88
+ detached?: boolean;
89
+ recursive?: boolean;
90
+ strand?: true;
91
+ }): string;
92
+ /** Build the state and index the site table; `walk` is the node visitor to bind. */
93
+ export declare function createTraceState(workflow: WorkflowProgram, table: SiteTable, oracle: OrderOracle, walk: (state: TraceState, node: ts.Node, chain: readonly string[]) => void): TraceState;
94
+ export declare function locOf(state: TraceState, node: ts.Node): ScriptLoc;
95
+ export declare function innermost(state: TraceState, chain: readonly string[]): string;
96
+ export declare function issue(state: TraceState, step: string, chain: readonly string[]): void;
97
+ export declare function jump(state: TraceState, kind: JumpKind, target: string, chain: readonly string[]): void;
98
+ /** Step ids issued by events at or after `mark`, in issue order, deduped. */
99
+ export declare function issuesSince(state: TraceState, mark: number): string[];
100
+ /**
101
+ * The id a marker names. Same name → same id (names are the key, unlike an actor's);
102
+ * a new name mints `phase#N` at FIRST REACH, so numbering follows evaluation order and
103
+ * a marker in dead code the walk never reaches mints nothing.
104
+ *
105
+ * A marker whose name the collector could not read (non-literal, empty) mints nothing
106
+ * and leaves the current phase alone: those are diagnostics (9004) and the script never
107
+ * reaches this pass, so this is the invariant written down rather than a fallback.
108
+ */
109
+ export declare function phaseIdOf(state: TraceState, marker: PhaseMarkerSite): string | undefined;
110
+ //# sourceMappingURL=causality-order-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"causality-order-state.d.ts","sourceRoot":"","sources":["../../src/analysis/causality-order-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,162 @@
1
+ import ts from "typescript";
2
+ import { findWorkflowBody, } from "./sites.js";
3
+ import { UNPHASED_ID } from "./constants.js";
4
+ import { asScriptFunction, collectRecursiveFunctions, } from "./causality-order-functions.js";
5
+ import { innermostOpenStrand } from "./causality-order-strands.js";
6
+ /** The script functions the oracle says `node` applies, by `via`, in recording order. */
7
+ export function applicationsAt(state, node, via) {
8
+ const out = [];
9
+ for (const [fn, how] of state.oracle.applications.get(node) ?? []) {
10
+ if (how !== via)
11
+ continue;
12
+ const decl = asScriptFunction(fn, state.scriptFile);
13
+ if (decl !== undefined)
14
+ out.push(decl);
15
+ }
16
+ return out;
17
+ }
18
+ export function openRegion(state, kind, parent, extra) {
19
+ const next = (state.counters.get(kind) ?? 0) + 1;
20
+ state.counters.set(kind, next);
21
+ const id = `${kind}#${next}`;
22
+ state.regions.push({ id, kind, ...(parent === undefined ? {} : { parent }), ...extra });
23
+ return id;
24
+ }
25
+ /** Build the state and index the site table; `walk` is the node visitor to bind. */
26
+ export function createTraceState(workflow, table, oracle, walk) {
27
+ const { program, scriptFile, toScriptLoc } = workflow;
28
+ const checker = program.getTypeChecker();
29
+ const body = findWorkflowBody(scriptFile);
30
+ const askByCall = new Map(table.asks.map((site) => [site.call, site.id]));
31
+ const readByCall = new Map(table.worldReads.map((site) => [site.call, site.id]));
32
+ const actorByCall = new Map(table.actors.map((site) => [site.call, site.id]));
33
+ const holeByCall = new Map(table.holes.map((site) => [site.call, site]));
34
+ // 只有开放的留白是一步(docs/analysis.md「Sites」):已补全的留白由它的函数体在原地代表。
35
+ const openHoles = table.holes.filter((site) => site.body === undefined);
36
+ const candByCall = new Map();
37
+ const candByCallback = new Map();
38
+ for (const cand of table.iterations) {
39
+ if (cand.call !== undefined)
40
+ candByCall.set(cand.call, cand);
41
+ if (cand.callback !== undefined)
42
+ candByCallback.set(cand.callback, cand);
43
+ }
44
+ const eachCallbackFns = new Set();
45
+ for (const call of candByCall.keys()) {
46
+ for (const fn of applicationsAt({ oracle, scriptFile }, call, "argument"))
47
+ eachCallbackFns.add(fn);
48
+ }
49
+ const recursive = collectRecursiveFunctions(scriptFile, checker, oracle.applications);
50
+ const realSteps = new Set([
51
+ ...table.asks.map((site) => site.id),
52
+ ...table.worldReads.map((site) => site.id),
53
+ ...openHoles.map((site) => site.id),
54
+ ]);
55
+ const callByStep = new Map([
56
+ ...table.asks.map((site) => [site.id, site.call]),
57
+ ...table.worldReads.map((site) => [site.id, site.call]),
58
+ ...openHoles.map((site) => [site.id, site.call]),
59
+ ]);
60
+ const markerByStatement = new Map();
61
+ for (const marker of table.phases) {
62
+ if (ts.isExpressionStatement(marker.call.parent))
63
+ markerByStatement.set(marker.call.parent, marker);
64
+ }
65
+ const regions = [];
66
+ const counters = new Map();
67
+ const root = openRegion({ counters, regions }, "seq", undefined, { entered: true });
68
+ const state = {
69
+ actorByCall,
70
+ askByCall,
71
+ body,
72
+ callByStep,
73
+ candByCall,
74
+ candByCallback,
75
+ checker,
76
+ controls: [],
77
+ counters,
78
+ currentPhase: UNPHASED_ID,
79
+ eachCallbackFns,
80
+ events: [],
81
+ fillStack: [],
82
+ fnStack: [],
83
+ frames: [{ region: root, settled: new Set() }],
84
+ holeByCall,
85
+ holePhases: new Set(),
86
+ issued: new Set(),
87
+ iterationAncestorCache: new Map(),
88
+ joined: new Set(),
89
+ markerByStatement,
90
+ oracle,
91
+ phaseIdByName: new Map(),
92
+ phases: [],
93
+ program,
94
+ readByCall,
95
+ realSteps,
96
+ recursive,
97
+ regionByStatement: new Map(),
98
+ regions,
99
+ returnTargets: [],
100
+ root,
101
+ sccLoopByDecl: new Map(),
102
+ scriptFile,
103
+ stepsBySymbol: new Map(),
104
+ strands: [],
105
+ strandsBySymbol: new Map(),
106
+ throwTargets: [],
107
+ toScriptLoc,
108
+ walk: (node, chain) => walk(state, node, chain),
109
+ walkedFns: new Set(),
110
+ };
111
+ return state;
112
+ }
113
+ export function locOf(state, node) {
114
+ return state.toScriptLoc(node.getStart(state.scriptFile));
115
+ }
116
+ export function innermost(state, chain) {
117
+ return chain[chain.length - 1] ?? state.root;
118
+ }
119
+ export function issue(state, step, chain) {
120
+ state.issued.add(step);
121
+ // The strand this issue happened in owns the step for the LIFT rule: awaiting a promise
122
+ // that carries this step's label is evidence that that activation has completed.
123
+ innermostOpenStrand(state)?.issued.add(step);
124
+ state.events.push({ at: "issue", phase: state.currentPhase, regions: chain, step });
125
+ }
126
+ export function jump(state, kind, target, chain) {
127
+ state.events.push({ at: "jump", kind, phase: state.currentPhase, regions: chain, target });
128
+ }
129
+ /** Step ids issued by events at or after `mark`, in issue order, deduped. */
130
+ export function issuesSince(state, mark) {
131
+ const out = [];
132
+ for (let i = mark; i < state.events.length; i += 1) {
133
+ const event = state.events[i];
134
+ if (event.at === "issue" && !out.includes(event.step))
135
+ out.push(event.step);
136
+ }
137
+ return out;
138
+ }
139
+ /**
140
+ * The id a marker names. Same name → same id (names are the key, unlike an actor's);
141
+ * a new name mints `phase#N` at FIRST REACH, so numbering follows evaluation order and
142
+ * a marker in dead code the walk never reaches mints nothing.
143
+ *
144
+ * A marker whose name the collector could not read (non-literal, empty) mints nothing
145
+ * and leaves the current phase alone: those are diagnostics (9004) and the script never
146
+ * reaches this pass, so this is the invariant written down rather than a fallback.
147
+ */
148
+ export function phaseIdOf(state, marker) {
149
+ const name = marker.name?.trim();
150
+ if (name === undefined || name === "")
151
+ return undefined;
152
+ const existing = state.phaseIdByName.get(name);
153
+ if (existing !== undefined)
154
+ return existing;
155
+ // 编号只数标记铸出的阶段:留白的阶段以站点 id 为 id、不进 phaseIdByName,所以夹在中间的留白
156
+ // 不会让 `phase#N` 跳号。
157
+ const id = `phase#${state.phaseIdByName.size + 1}`;
158
+ state.phaseIdByName.set(name, id);
159
+ const fill = state.fillStack[state.fillStack.length - 1];
160
+ state.phases.push({ id, loc: marker.loc, name, ...(fill === undefined ? {} : { fill }) });
161
+ return id;
162
+ }
@@ -0,0 +1,79 @@
1
+ import ts from "typescript";
2
+ import type { TraceState } from "./causality-order-state.js";
3
+ /**
4
+ * One open activation's settled set. The root body is the first frame and is never a
5
+ * strand; every strand pushes one more. A step is settled FROM A FRAME'S VIEW when some
6
+ * frame on the stack holds it — which is the whole of the fix: a barrier inside a strand
7
+ * no longer settles anything for the spawner, because the spawner's frame is below it and
8
+ * the strand's frame is popped when the strand closes.
9
+ */
10
+ export interface Frame {
11
+ readonly region: string;
12
+ readonly settled: Set<string>;
13
+ }
14
+ /** One strand the walk spawned, in spawn order. */
15
+ export interface StrandRecord {
16
+ /** The `call` / `fanout` region that IS the strand. */
17
+ readonly region: string;
18
+ /**
19
+ * Spawn order: this record's own index in `state.strands`. A barrier joins every strand
20
+ * with `at >= the count it saw when it took its mark`, which is "spawned while the
21
+ * operand was evaluated". Deliberately NOT an event index: a strand that emits no event
22
+ * before the await inside it would then tie with that await's mark, and the barrier
23
+ * would join the very strand it stands in (`await ask()` as the first statement of an
24
+ * `async` helper settled the helper's own summary into its own frame).
25
+ */
26
+ readonly at: number;
27
+ /** Steps issued inside it (the innermost open strand at each issue) — the lift rule. */
28
+ readonly issued: Set<string>;
29
+ /** What the strand itself awaited: its frame's settled set at close. */
30
+ summary: ReadonlySet<string>;
31
+ /** False until the body finished. Only a CLOSED strand can be lifted. */
32
+ closed: boolean;
33
+ }
34
+ /** The awaited expression a barrier stands over, with the strand count it started at. */
35
+ export interface AwaitedOperand {
36
+ /** `state.strands.length` where the operand's evaluation began. */
37
+ mark: number;
38
+ operand: ts.Expression;
39
+ }
40
+ /** The frame a fresh settle lands in: the innermost open one. */
41
+ export declare function currentFrame(state: TraceState): Frame;
42
+ /** True iff some frame on the stack has settled `step` — the freshness test. */
43
+ export declare function isVisiblySettled(state: TraceState, step: string): boolean;
44
+ /** The strand an `issue` belongs to: the innermost one still being walked. */
45
+ export declare function innermostOpenStrand(state: TraceState): StrandRecord | undefined;
46
+ /** Spawn a strand on `region`: record it and push its frame. */
47
+ export declare function openStrand(state: TraceState, region: string): StrandRecord;
48
+ /** Close a strand: pop its frame and keep what it awaited as the strand's summary. */
49
+ export declare function closeStrand(state: TraceState, record: StrandRecord): void;
50
+ /** The walk's strand counter: the mark a caller takes before evaluating an expression. */
51
+ export declare function strandMark(state: TraceState): number;
52
+ /** Strand regions spawned at or after `mark`, in spawn order. */
53
+ export declare function strandsSince(state: TraceState, mark: number): string[];
54
+ /**
55
+ * Bind strand regions to the identifiers a declaration or assignment introduces — the
56
+ * syntactic half of the join, the exact shape `bindSteps` gives steps and for the same
57
+ * reason: `const work = ids.map(async …)` issues nothing at the declaration, so only the
58
+ * binding can tell a later `await Promise.all(work)` which strands `work` stands for.
59
+ */
60
+ export declare function bindStrands(state: TraceState, name: ts.BindingName, regions: readonly string[]): void;
61
+ /** True iff the applied function carries the `async` modifier — what makes a body a strand. */
62
+ export declare function isAsyncFunction(decl: ts.Node): boolean;
63
+ /**
64
+ * The strands a barrier waits for, split by the certainty each one's summary settles with,
65
+ * and MARKED JOINED so a second await of the same promise adds nothing (exactly as a
66
+ * second settle of one step already does).
67
+ *
68
+ * Two ways in. SYNTACTIC — spawned while the operand was evaluated, or bound to an
69
+ * identifier in an awaited position of it — settles the summary certainly: the await
70
+ * provably waits for that activation. LIFTED — a closed, not-yet-joined strand one of whose
71
+ * issued steps this barrier claims — settles it with the certainty the claim came in with:
72
+ * the promise reached the await through a container or a helper, and all we know is that
73
+ * something the strand issued has settled.
74
+ */
75
+ export declare function joinStrands(state: TraceState, certain: readonly string[], maybe: readonly string[], awaited: AwaitedOperand | undefined): {
76
+ certain: string[];
77
+ maybe: string[];
78
+ };
79
+ //# sourceMappingURL=causality-order-strands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"causality-order-strands.d.ts","sourceRoot":"","sources":["../../src/analysis/causality-order-strands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAQ7D;;;;;;GAMG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,wEAAwE;IACxE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,yEAAyE;IACzE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC;CACxB;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAErD;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,SAAS,CAM/E;AAED,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAW1E;AAED,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAIzE;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,EAAE,CAAC,WAAW,EACpB,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,IAAI,CASN;AAED,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,OAAO,CAGtD;AA+CD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,OAAO,EAAE,cAAc,GAAG,SAAS,GAClC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAqBxC"}