@sunshaobei/dsh-workflow 0.0.0-stage → 2.1.2

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 +67 -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,495 @@
1
+ import ts from "typescript";
2
+ import { addOcc, addPlaceholder, clearExact, cloneValue, collapse, collapseInto, emptyValue, HEAP_MUTATORS, isDirectCallee, isJsonStringify, mergeBound, mergeInto, phKey, singleOcc, VALUE_DEPTH_CAP, } from "./domain.js";
3
+ import { applySuperCall } from "./classes.js";
4
+ import { handleArrayMethod } from "./array-methods.js";
5
+ import { handlePromiseReject, isPromiseReject } from "./promise-ops.js";
6
+ import { callbackSemanticsOf, isForeignMember } from "./callbacks.js";
7
+ import { handleHeapMutator, handleObjectAssign, isObjectAssign } from "./heap-ops.js";
8
+ import { handleAsk, handleJoin, handleWorldRead } from "./relays.js";
9
+ /**
10
+ * Call and relay transfer rules: the facade sinks (`ask`, `files.*`), the relay
11
+ * nodes (`Promise.all` joins and promoted iteration fan-outs), heap mutators, and
12
+ * script-local / higher-order function calls with context-sensitive summaries. These
13
+ * live apart from the core evaluator (taint.ts) but operate on the same `Evaluator`
14
+ * instance.
15
+ */
16
+ export function evalCall(ev, node, ctx) {
17
+ const actorId = ev.s.actorByCall.get(node);
18
+ if (actorId !== undefined)
19
+ return singleOcc(actorId, true);
20
+ // `super(args)` inside a derived constructor applies the base class's constructor with
21
+ // the actuals (param write-back + placeholder actuals), so a base ctor that stores an
22
+ // argument in `this` sees the derived `new`'s arguments. Without this the base ctor's
23
+ // parameters would resolve to nothing (a dropped may-flow). Returns nothing.
24
+ if (node.expression.kind === ts.SyntaxKind.SuperKeyword) {
25
+ applySuperCall(ev, node, ctx);
26
+ return emptyValue();
27
+ }
28
+ const askId = ev.s.askByCall.get(node);
29
+ if (askId !== undefined)
30
+ return handleAsk(ev, node, askId, ctx);
31
+ const hole = ev.s.holeByCall.get(node);
32
+ if (hole !== undefined)
33
+ return handleHole(ev, node, hole, ctx);
34
+ const world = ev.s.worldByCall.get(node);
35
+ if (world !== undefined)
36
+ return handleWorldRead(ev, world.id, world.args, ctx);
37
+ const join = ev.s.joinByCall.get(node);
38
+ if (join !== undefined)
39
+ return handleJoin(ev, node, join.id, join.arg, ctx);
40
+ if (ts.isPropertyAccessExpression(node.expression)) {
41
+ const cand = ev.s.candByCall.get(node);
42
+ if (cand !== undefined)
43
+ return handleArrayMethod(ev, node, cand, ctx);
44
+ if (isJsonStringify(node.expression)) {
45
+ return node.arguments[0] === undefined ? emptyValue() : collapse(ev.evalExpr(node.arguments[0], ctx));
46
+ }
47
+ if (isPromiseReject(node.expression))
48
+ return handlePromiseReject(ev, node, ctx);
49
+ if (isObjectAssign(node.expression))
50
+ return handleObjectAssign(ev, node, ctx);
51
+ if (HEAP_MUTATORS.has(node.expression.name.text)) {
52
+ // The name-only match used to swallow DISPATCH of a script-local method that
53
+ // merely shares a mutator name (`inbox.add(item)` on `{ add(item) { … } }`): the
54
+ // tracked function body was never applied, so its param actuals stayed empty, facade
55
+ // sinks inside it resolved to nothing, and markCalled/promotion were skipped — an
56
+ // under-approximation. Route by what the member actually HOLDS: tracked callables
57
+ // dispatch as an ordinary call (actuals + write-back + return summary). The receiver
58
+ // smear still runs first — a merged value may be EITHER a user object or a native
59
+ // collection (`flag ? { add(…){…} } : new Set()`), and the smear only ADDS taint
60
+ // (sound over-approximation, never a kill). Native collections carry no tracked fns
61
+ // in their member slot (smear-on-read drops `.fns`), so they keep the pure-smear path.
62
+ const smear = handleHeapMutator(ev, node, node.expression, ctx);
63
+ const memberVal = ev.evalExpr(node.expression, ctx);
64
+ const hasTrackedFns = [...memberVal.fns].some((fn) => ev.s.fnId.has(fn));
65
+ return hasTrackedFns ? handleGenericCall(ev, node, ctx) : smear;
66
+ }
67
+ // `.call` / `.apply` / `.bind` on a script-local function receiver reshape the actuals
68
+ // before they reach the callee's positional parameters. Only intercepts when the
69
+ // receiver actually carries a script-local function; otherwise defers to the generic
70
+ // path (which still applies function-valued ARGUMENTS pessimistically — the keystone).
71
+ const forwarded = handleInvocationForwarding(ev, node, node.expression, ctx);
72
+ if (forwarded !== undefined)
73
+ return forwarded;
74
+ // A deferred continuation (`p.then(cb)`, `p.catch(cb)`, `p.finally(cb)`) runs its callback
75
+ // after the RECEIVER settles: record the receiver's value as the settle oracle at the
76
+ // receiver expression's position — the key the ordering walk reads before it inlines the
77
+ // callback body. Recording only; the call's
78
+ // own transfer (the keystone below) is untouched.
79
+ // Keyed by the MEMBER NAME token (`then`): a chain's receivers all start at the same
80
+ // offset (`p.then(a).finally(b)` — both receivers begin at `p`), and an await operand
81
+ // never starts at a member name, so this key collides with nothing.
82
+ if (callbackSemanticsOf(node, ev.checker, ev.s.program)?.deferred === true) {
83
+ const receiver = node.expression.expression;
84
+ ev.s.mergeSink(ev.s.awaitVal, node.expression.name.getStart(ev.s.scriptFile), collapse(ev.evalExpr(receiver, ctx)));
85
+ }
86
+ }
87
+ return handleGenericCall(ev, node, ctx);
88
+ }
89
+ /**
90
+ * 留白(docs/analysis.md「Sites」的 Hole sites 段)。开放的留白:提示是 sink(如 ask 的
91
+ * instructions),返回值是一个来自 run 之外的、以留白站点为标签的不透明值(类型 T)。已补全的
92
+ * 留白:函数体在原地被 cell 调用,所以这里把它当一次**直接**应用——记成 `argument` 应用(时序
93
+ * 走查据此在调用点内联函数体),返回值就是函数体的返回摘要(无实参,exactness 不清:调用是
94
+ * 确定的,不是间接分派)。已补全的留白**不是**图里的节点,所以它的提示不进 sink 表。
95
+ */
96
+ function handleHole(ev, node, site, ctx) {
97
+ ev.s.markFacade(ctx.regionStack);
98
+ if (site.body === undefined) {
99
+ if (site.prompt !== undefined) {
100
+ ev.s.mergeSink(ev.s.holePrompt, site.id, collapse(ev.evalExpr(site.prompt, ctx)));
101
+ }
102
+ return singleOcc(site.id, true);
103
+ }
104
+ if (site.prompt !== undefined)
105
+ ev.evalExpr(site.prompt, ctx);
106
+ const out = emptyValue();
107
+ for (const fn of ev.evalExpr(site.body, ctx).fns) {
108
+ const id = ev.s.fnId.get(fn);
109
+ if (id === undefined)
110
+ continue;
111
+ recordCall(ev, id, ctx.regionStack, [], undefined, { site: node, via: "argument" });
112
+ mergeInto(out, substitute(ev.s.summaryOf(id), id, [], false));
113
+ }
114
+ return out;
115
+ }
116
+ function handleGenericCall(ev, node, ctx) {
117
+ const { explicit, places, tail } = buildActuals(ev, node.arguments, ctx);
118
+ return applyCall(ev, node.expression, explicit, ctx, places, tail, node);
119
+ }
120
+ /**
121
+ * Evaluate an actual-argument list into positional values, their place aliases (for
122
+ * parameter write-back), and an optional inexact TAIL. Positional certainty ends at the
123
+ * first `...spread`: the spread element (and every actual after it) folds into one
124
+ * collapsed, exactness-cleared tail that binds to every parameter at index >= the spread's
125
+ * position — the runtime unpacking length is unknown, so the smear is the sound baseline.
126
+ * `f(...pair)` evaluated the spread as ONE actual at index 0, so params >= 1
127
+ * resolved to nothing (a dropped may-flow: `pair[1]` never reached `f`'s second param).
128
+ */
129
+ function buildActuals(ev, argsNodes, ctx) {
130
+ const spreadIndex = argsNodes.findIndex((a) => ts.isSpreadElement(a));
131
+ if (spreadIndex < 0) {
132
+ const explicit = argsNodes.map((a) => ev.evalExpr(a, ctx));
133
+ return {
134
+ explicit,
135
+ places: argsNodes.map((a, i) => ev.argWriteBackPlace(a, explicit[i])),
136
+ tail: undefined,
137
+ };
138
+ }
139
+ const explicit = argsNodes.slice(0, spreadIndex).map((a) => ev.evalExpr(a, ctx));
140
+ const places = argsNodes.slice(0, spreadIndex).map((a, i) => ev.argWriteBackPlace(a, explicit[i]));
141
+ const tail = emptyValue();
142
+ for (const arg of argsNodes.slice(spreadIndex))
143
+ collapseInto(tail, ev.evalExpr(arg, ctx));
144
+ return { explicit, places, tail: clearExact(tail) };
145
+ }
146
+ /**
147
+ * `.call` / `.apply` / `.bind` on a script-local function receiver. Returns undefined when
148
+ * the receiver carries no script-local function (so the caller defers to the generic /
149
+ * unknown path — which still applies function-valued ARGUMENTS pessimistically, preserving
150
+ * the keystone rule for `someUnknown.call(null, cb)`). The facade-siting layer separately
151
+ * rejects these methods on facade callables, so only ORDINARY script functions land here.
152
+ */
153
+ function handleInvocationForwarding(ev, node, access, ctx) {
154
+ const method = access.name.text;
155
+ if (method !== "call" && method !== "apply" && method !== "bind")
156
+ return undefined;
157
+ const receiverVal = ev.evalExpr(access.expression, ctx);
158
+ const fns = [...receiverVal.fns].filter((fn) => ev.s.fnId.has(fn));
159
+ if (fns.length === 0)
160
+ return undefined;
161
+ const exact = fns.length === 1 && isDirectCallee(access.expression);
162
+ if (method === "call") {
163
+ // f.call(thisArg, a, b, …) ≡ f(a, b, …): drop the thisArg, shift actuals down one.
164
+ // Otherwise the thisArg would occupy actual index 0, and f's param 0 would resolve to `null`.
165
+ const { explicit, places, tail } = buildActuals(ev, node.arguments.slice(1), ctx);
166
+ return applyToFns(ev, fns, exact, explicit, ctx, places, tail, receiverVal.bound, node);
167
+ }
168
+ if (method === "apply") {
169
+ // f.apply(thisArg, argsArray) ≡ f(...argsArray): the args tuple's positional shape is
170
+ // opaque, so smear its collapsed (inexact) taint across every parameter — an ordinary
171
+ // actual at index 1 would never be read by any positional placeholder.
172
+ const argsArray = node.arguments[1];
173
+ const tail = argsArray === undefined ? emptyValue() : clearExact(collapse(ev.evalExpr(argsArray, ctx)));
174
+ return applyToFns(ev, fns, false, [], ctx, undefined, tail, receiverVal.bound, node);
175
+ }
176
+ // f.bind(thisArg, ...prefix): the result is a new function value carrying f's `fns` plus
177
+ // a bound prefix prepended to actuals at the eventual call. Composes with the receiver's
178
+ // existing prefix (rebinding: `f.bind(null, a).bind(null, b)` → [a, b], earlier first).
179
+ // bind previously produced f's substituted summary (no `.fns`), so `g()` was an
180
+ // unknown call AND the prefix never reached f's params.
181
+ const prefixArgs = node.arguments.slice(1).map((arg) => ev.evalExpr(arg, ctx));
182
+ const out = emptyValue();
183
+ for (const fn of receiverVal.fns)
184
+ out.fns.add(fn);
185
+ out.bound = [...(receiverVal.bound ?? []), ...prefixArgs];
186
+ return out;
187
+ }
188
+ /**
189
+ * Apply a callee to already-evaluated argument values. Shared by ordinary call
190
+ * expressions and tagged templates (``tag`…${e}…` `` is the call `tag(strings, e, …)`).
191
+ * Script-local callees route through their context-sensitive summary; unknown/library
192
+ * callees widen (see {@link handleUnknownCall}). `argPlaces[i]`, when present, is the
193
+ * live value of a place actual, used for parameter write-back. `tail`, when present, is an
194
+ * inexact spread smear bound to every parameter at index >= `argVals.length`. `site` is the
195
+ * call / tagged-template node the application is recorded against (the call oracle).
196
+ */
197
+ export function applyCall(ev, calleeExpr, argVals, ctx, argPlaces, tail, site) {
198
+ const calleeVal = ev.evalExpr(calleeExpr, ctx);
199
+ // A library / facade member is never a script function (see {@link isForeignMember}): the
200
+ // callables a whole-value read smeared into the member slot are the receiver's contents,
201
+ // not the callee. `then(a, b).finally(c)` would otherwise dispatch to a and b as `.finally`.
202
+ const foreign = ts.isPropertyAccessExpression(calleeExpr) && isForeignMember(calleeExpr.name, ev.checker, ev.s.scriptFile);
203
+ const fns = foreign ? [] : [...calleeVal.fns].filter((fn) => ev.s.fnId.has(fn));
204
+ if (fns.length === 0)
205
+ return handleUnknownCall(ev, calleeExpr, calleeVal, argVals, ctx, tail, site);
206
+ const exact = fns.length === 1 && isDirectCallee(calleeExpr);
207
+ return applyToFns(ev, fns, exact, argVals, ctx, argPlaces, tail, calleeVal.bound, site);
208
+ }
209
+ /**
210
+ * Apply a resolved set of script-local functions to actuals. `explicit[i]` binds param i;
211
+ * when `tail` is present, every parameter at index >= `explicit.length` (up to each
212
+ * callee's arity) also binds `tail` — an `apply` / spread smear whose positional extent is
213
+ * unknown. `exact` is the dispatch's exactness: a direct single-fn call preserves it, a
214
+ * widened dispatch (indirect / multi-fn) clears the recorded actuals and the return summary
215
+ * so parameter-direct asks emit inexact edges.
216
+ *
217
+ * When `bound` (a `bind` prefix) is present, both alignments are unioned: once WITH the
218
+ * prefix prepended (the genuinely-bound dispatch) and once WITHOUT it. `fns` is a set, so a
219
+ * value merged from a bound and a plain function (`flag ? f : f.bind(null, a)`) can't say
220
+ * which entry is bound; applying both alignments is sound whichever it is, and a bound
221
+ * dispatch is inexact (the alignment is not proven).
222
+ */
223
+ function applyToFns(ev, fns, exact, explicit, ctx, argPlaces, tail, bound, site) {
224
+ const result = emptyValue();
225
+ const hasBound = bound !== undefined && bound.length > 0;
226
+ applyAligned(ev, fns, hasBound ? false : exact, explicit, ctx, argPlaces, tail, result, site);
227
+ if (hasBound) {
228
+ const prefixed = [...bound, ...explicit];
229
+ const prefixedPlaces = [...bound.map(() => undefined), ...(argPlaces ?? [])];
230
+ applyAligned(ev, fns, false, prefixed, ctx, prefixedPlaces, tail, result, site);
231
+ }
232
+ return result;
233
+ }
234
+ /** One alignment of {@link applyToFns}: bind `explicit`/`tail` to each callee and union the
235
+ * recorded actuals + substituted return summaries into `result`. clearExact clones, so the
236
+ * fns-binding and place write-back in recordCall stay live. */
237
+ function applyAligned(ev, fns, exact, explicit, ctx, argPlaces, tail, result, site) {
238
+ const clear = !exact;
239
+ for (const fn of fns) {
240
+ const id = ev.s.fnId.get(fn);
241
+ if (id === undefined)
242
+ continue;
243
+ const paramCount = (ev.s.fnParamSymbols.get(id) ?? []).length;
244
+ const len = tail !== undefined ? Math.max(explicit.length, paramCount) : explicit.length;
245
+ const args = [];
246
+ const places = [];
247
+ for (let i = 0; i < len; i += 1) {
248
+ const explicitVal = i < explicit.length ? explicit[i] : undefined;
249
+ args.push(explicitVal ?? tail);
250
+ places.push(explicitVal !== undefined ? argPlaces?.[i] : undefined);
251
+ }
252
+ const recorded = clear ? args.map((a) => clearExact(a)) : args;
253
+ recordCall(ev, id, ctx.regionStack, recorded, places, site === undefined ? undefined : { site, via: "callee" });
254
+ mergeInto(result, substitute(ev.s.summaryOf(id), id, args, clear));
255
+ }
256
+ }
257
+ /**
258
+ * Unknown / library call: the result is the union of the receiver's and arguments'
259
+ * collapsed sets, exact preserved ("strings launder nothing"). AND — the keystone
260
+ * rule — every script-local function among the arguments is pessimistically applied:
261
+ * the library may invoke it with anything derived from the receiver or a sibling
262
+ * argument, so each of its parameters receives that receiver ∪ siblings union with
263
+ * exactness cleared, and its return summary joins the result (cleared). This closes
264
+ * the higher-order laundering holes: `.then`/`.catch` callbacks (both directions),
265
+ * `.replace(p, fn)`, `Array.from(xs, fn)`, a named callback to `.map`, an inline
266
+ * callback to a non-whitelisted method (`.findIndex`). The old branch
267
+ * collapsed the arguments (which drops `.fns`) and never visited the callback body,
268
+ * so any taint the callback captured or returned was silently dropped.
269
+ *
270
+ * Separately captures PLACEHOLDER-parameter invocations for the promise machinery
271
+ * ({@link handleNewUnknown} / {@link evalAwait}): a placeholder callee (`resolve(draft)` —
272
+ * resolve is a param) records its args, and a placeholder-valued argument (`draft.then(onOk)`)
273
+ * records the pot the unknown fn may invoke it with. Neither affects THIS call's result;
274
+ * they seed `phCallActuals`, read only when the enclosing callback is applied as a promise
275
+ * executor or a thenable's `then`.
276
+ */
277
+ function handleUnknownCall(ev, calleeExpr, calleeVal, argVals, ctx, tail, site) {
278
+ const applied = emptyValue();
279
+ if (ts.isPropertyAccessExpression(calleeExpr))
280
+ collapseInto(applied, ev.evalExpr(calleeExpr.expression, ctx));
281
+ for (const arg of argVals)
282
+ collapseInto(applied, arg);
283
+ if (tail !== undefined)
284
+ collapseInto(applied, tail);
285
+ const out = cloneValue(applied);
286
+ // Pessimistic application of function-valued arguments (exactness cleared). The pot a
287
+ // callback's parameters receive is the sibling DATA, not the callables themselves: a
288
+ // function argument is the callback being invoked, not a value the library hands to a
289
+ // sibling callback (mirrors {@link handleNewUnknown}). With the callables left in,
290
+ // `draft.then(cb)` makes cb's parameter "maybe cb", so any unknown call on that parameter
291
+ // inside the body (`Promise.resolve(text)`) re-applies cb to itself — a phantom recursion
292
+ // the call oracle then inlines as a `loop` (reentrant-then-composition).
293
+ const actual = clearExact(applied);
294
+ actual.fns.clear();
295
+ for (const arg of argVals)
296
+ applyPessimistically(ev, arg, actual, ctx, out, site);
297
+ if (tail !== undefined)
298
+ applyPessimistically(ev, tail, actual, ctx, out, site);
299
+ // Capture (b): a placeholder-valued argument may be invoked by the unknown fn with the
300
+ // pot (`draft.then(onOk)` → onOk's invocations may see the receiver draft).
301
+ for (const arg of argVals)
302
+ recordPhCallActuals(ev, arg, actual);
303
+ if (tail !== undefined)
304
+ recordPhCallActuals(ev, tail, actual);
305
+ // Capture (a): a direct call of a placeholder callee (`resolve(draft)`) passes its args
306
+ // to that param's invocation.
307
+ if (calleeVal.phs.size > 0) {
308
+ const argPot = emptyValue();
309
+ for (const arg of argVals)
310
+ collapseInto(argPot, arg);
311
+ if (tail !== undefined)
312
+ collapseInto(argPot, tail);
313
+ recordPhCallActuals(ev, calleeVal, argPot);
314
+ }
315
+ return out;
316
+ }
317
+ /**
318
+ * Keystone application of every script-local function reachable in `source`: each of its
319
+ * parameters receives `pot` (already exactness-cleared), and its substituted return summary
320
+ * joins `out`. Shared by {@link handleUnknownCall} and {@link handleNewUnknown} (`new`).
321
+ */
322
+ export function applyPessimistically(ev, source, pot, ctx, out, site) {
323
+ for (const fn of source.fns) {
324
+ const id = ev.s.fnId.get(fn);
325
+ if (id === undefined)
326
+ continue;
327
+ const actuals = (ev.s.fnParamSymbols.get(id) ?? []).map(() => pot);
328
+ recordCall(ev, id, ctx.regionStack, actuals, undefined, site === undefined ? undefined : { site, via: "argument" });
329
+ mergeInto(out, substitute(ev.s.summaryOf(id), id, actuals, true));
330
+ }
331
+ }
332
+ /**
333
+ * Apply script-local functions handed to a per-element library call (`xs.map(review)`) with
334
+ * positional actuals already shaped by the registry (element / whole / accumulator slots).
335
+ * Records each as an `argument` application at `site` inside the candidate's region stack and
336
+ * returns the union of the substituted return summaries (inexact: the dispatch is indirect).
337
+ */
338
+ export function applyCallbackFns(ev, fns, actuals, regionStack, site) {
339
+ const out = emptyValue();
340
+ for (const fn of fns) {
341
+ const id = ev.s.fnId.get(fn);
342
+ if (id === undefined)
343
+ continue;
344
+ recordCall(ev, id, regionStack, actuals, undefined, { site, via: "argument" });
345
+ mergeInto(out, substitute(ev.s.summaryOf(id), id, actuals, true));
346
+ }
347
+ return out;
348
+ }
349
+ /** Record `value` against every placeholder-parameter carried by `source` (see phCallActuals). */
350
+ function recordPhCallActuals(ev, source, value) {
351
+ for (const ph of source.phs.values())
352
+ ev.s.recordPhCall(phKey(ph), value);
353
+ }
354
+ export function recordCall(ev, id, regionStack, argVals, argPlaces, application) {
355
+ ev.s.markCalled(regionStack, id);
356
+ if (application !== undefined) {
357
+ const fn = ev.s.functions[id];
358
+ if (fn !== undefined)
359
+ ev.s.recordApplication(application.site, fn, application.via);
360
+ }
361
+ const params = ev.s.fnParamSymbols.get(id) ?? [];
362
+ argVals.forEach((argVal, param) => {
363
+ ev.s.addParamActual(id, param, argVal);
364
+ // Keep the call graph total through parameters: functions passed as arguments
365
+ // must be reachable as callees inside the body.
366
+ const psym = params[param];
367
+ if (psym !== undefined && argVal.fns.size > 0) {
368
+ const fnsOnly = emptyValue();
369
+ for (const fn of argVal.fns)
370
+ fnsOnly.fns.add(fn);
371
+ ev.s.bindSymbol(psym, fnsOnly);
372
+ }
373
+ // Parameter write-back: objects cross call boundaries by reference, so a field the
374
+ // callee wrote through the parameter (`box.f = tainted`) must be visible through the
375
+ // caller's argument. Weak-merge the parameter's accumulated heap effects back into
376
+ // the actual's live value when the actual is a place. Monotone; converges with the
377
+ // fixpoint. The parameter's own top-level placeholder is skipped — merging it back
378
+ // would just resolve (guarded) to the actual itself, adding nothing.
379
+ const actualLive = argPlaces?.[param];
380
+ if (psym !== undefined && actualLive !== undefined) {
381
+ const paramSlot = ev.s.env.get(psym);
382
+ if (paramSlot !== undefined && paramSlot !== actualLive && mergeHeapEffects(actualLive, paramSlot, id, param, argVals)) {
383
+ ev.s.changed = true;
384
+ }
385
+ }
386
+ });
387
+ }
388
+ /**
389
+ * Merge a callee parameter's heap effects (its occurrences + fields, recursively) into
390
+ * a caller actual, skipping the parameter's OWN top-level placeholder. Field writes land
391
+ * in `fields`; in-place mutators (`push`, `Map.set`) fold into `occs` — both propagate.
392
+ * The own placeholder is the parameter's identity, not a written effect, so it is not
393
+ * carried back (it would resolve to the actual itself at emission).
394
+ *
395
+ * OTHER top-level placeholders are written effects and must flow: an in-place mutator
396
+ * routes sibling params into the receiver's top level (`fill(list, v) { list.push(v) }`
397
+ * leaves ph(fill,1) in `list`'s slot), and skipping them meant the caller's array never
398
+ * learned it may contain the pushed value — ask#1 → ask#2 edges through such containers
399
+ * vanished. Same-callee placeholders substitute to THIS call's actuals (context-sensitive,
400
+ * exactly like {@link substitute} does for return summaries; the actuals arrive already
401
+ * exactness-adjusted for the dispatch). A placeholder of an ENCLOSING function carries
402
+ * through raw, resolved in the outer context — mirroring substitute's carry-through arm.
403
+ */
404
+ function mergeHeapEffects(target, source, fnId, selfParam, argVals) {
405
+ let changed = false;
406
+ for (const occ of source.occs.values())
407
+ changed = addOcc(target, occ) || changed;
408
+ for (const ph of source.phs.values()) {
409
+ if (ph.fnId !== fnId) {
410
+ changed = addPlaceholder(target, ph) || changed;
411
+ continue;
412
+ }
413
+ if (ph.param === selfParam)
414
+ continue; // the parameter's own identity, not an effect
415
+ if (ph.rest === true) {
416
+ // A rest formal gathers every actual at index >= ph.param.
417
+ for (let i = ph.param; i < argVals.length; i += 1) {
418
+ const restActual = argVals[i];
419
+ if (restActual !== undefined)
420
+ changed = mergeInto(target, collapse(restActual)) || changed;
421
+ }
422
+ continue;
423
+ }
424
+ const actual = argVals[ph.param];
425
+ // collapse matches what the in-place mutator itself folds into the receiver.
426
+ if (actual !== undefined)
427
+ changed = mergeInto(target, collapse(actual)) || changed;
428
+ }
429
+ for (const fn of source.fns) {
430
+ if (!target.fns.has(fn)) {
431
+ target.fns.add(fn);
432
+ changed = true;
433
+ }
434
+ }
435
+ for (const [key, field] of source.fields) {
436
+ let slot = target.fields.get(key);
437
+ if (slot === undefined) {
438
+ slot = emptyValue();
439
+ target.fields.set(key, slot);
440
+ }
441
+ changed = mergeInto(slot, field) || changed;
442
+ }
443
+ // A parameter carrying a bind prefix, written back through a place actual, keeps it.
444
+ // Routed through the domain's mergeBound rather than duplicating its element-wise loop, so
445
+ // the prefix LENGTH cap applies here too: the write-back target is a persistent place, and
446
+ // an uncapped prefix growing one element per pass never settles (the reason mergeBound caps).
447
+ if (source.bound !== undefined)
448
+ changed = mergeBound(target, source.bound, 0) || changed;
449
+ return changed;
450
+ }
451
+ /** The callee's return summary with this call's actual arguments substituted in. */
452
+ function substitute(summary, fnId, argVals, clear, depth = 0) {
453
+ const out = emptyValue();
454
+ for (const occ of summary.occs.values()) {
455
+ addOcc(out, { exact: clear ? false : occ.exact, port: occ.port, site: occ.site });
456
+ }
457
+ for (const ph of summary.phs.values()) {
458
+ if (ph.fnId !== fnId) {
459
+ addPlaceholder(out, ph); // a placeholder of an enclosing function — carry it through
460
+ continue;
461
+ }
462
+ if (ph.rest === true) {
463
+ // A rest formal gathers every actual at index >= ph.param.
464
+ for (let i = ph.param; i < argVals.length; i += 1) {
465
+ const restActual = argVals[i];
466
+ if (restActual !== undefined)
467
+ mergeInto(out, clear ? clearExact(restActual) : restActual);
468
+ }
469
+ continue;
470
+ }
471
+ const actual = argVals[ph.param];
472
+ if (actual !== undefined)
473
+ mergeInto(out, clear ? clearExact(actual) : actual);
474
+ }
475
+ for (const fn of summary.fns)
476
+ out.fns.add(fn);
477
+ // Depth-bounded like the domain merges: beyond the cap, fold nested summary structure
478
+ // into occurrences rather than recursing (keeps this walk finite for deep summaries).
479
+ if (depth >= VALUE_DEPTH_CAP) {
480
+ for (const field of summary.fields.values())
481
+ collapseInto(out, field);
482
+ for (const el of summary.bound ?? [])
483
+ collapseInto(out, el);
484
+ return out;
485
+ }
486
+ // A returned bound function (`function mk(x){ return f.bind(null, x); }`) carries its
487
+ // prefix through the summary; substitute the callee's placeholders inside each prefix arg
488
+ // so `mk(secret)` yields a value whose prefix is `secret`.
489
+ if (summary.bound !== undefined) {
490
+ out.bound = summary.bound.map((el) => substitute(el, fnId, argVals, clear, depth + 1));
491
+ }
492
+ for (const [key, field] of summary.fields)
493
+ out.fields.set(key, substitute(field, fnId, argVals, clear, depth + 1));
494
+ return out;
495
+ }
@@ -0,0 +1,25 @@
1
+ import { type CausalityGraph, type Certainty, type Fact } from "./causality-graph-types.js";
2
+ /**
3
+ * The LAST pass: rewrite a may-set step into one copy per candidate lane.
4
+ *
5
+ * `(cond ? a : b).ask(p)` is the same program as `cond ? a.ask(p) : b.ask(p)`, and the
6
+ * analyzer already draws the second form as one `maybe` step per lane. Drawing the first
7
+ * form as a single card made the picture depend on where the ternary sits, and on a
8
+ * script whose every ask is a may-set it left candidate lanes with no homed step at all —
9
+ * which the mermaid emitter culls, erasing an actor from the workflow.
10
+ *
11
+ * This runs AFTER ordering and reduction by contract: reduction never sees copies, so
12
+ * every reduction rule and its corpus behaviour are unchanged and this stays a mechanical
13
+ * rewrite of the finished graph.
14
+ */
15
+ export declare function expandMaySetLanes(graph: CausalityGraph): CausalityGraph;
16
+ /** Collapse facts to one edge per ordered pair, keeping the strongest claim. */
17
+ export declare function dedupeFacts(facts: readonly Fact[]): Fact[];
18
+ export declare function weakest(values: readonly Certainty[]): Certainty;
19
+ /**
20
+ * 写下这个站点的那次补全:站点 id 的 `hole#<hash>/` 前缀(只有一层,hole-id.ts);体外的站点
21
+ * 没有。留白自己的 id 不带前缀——它属于哪个留白记在站点表的 `fill` 上,调用方自己查
22
+ * (docs/analysis.md「Sites」)。
23
+ */
24
+ export declare function fillOf(siteId: string): string | undefined;
25
+ //# sourceMappingURL=causality-graph-lanes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"causality-graph-lanes.d.ts","sourceRoot":"","sources":["../../src/analysis/causality-graph-lanes.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,IAAI,EAGV,MAAM,4BAA4B,CAAC;AAiBpC;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAoFvE;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,EAAE,CA8B1D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzD"}