@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,215 @@
1
+ /**
2
+ * 留白站点(docs/dynamic-workflow/authoring.md「Holes: `hole<T>()`」,docs/analysis.md「Sites」):
3
+ * 站点的构造(三个重载的实参分派、tail 判定)与编译期规则 9012。
4
+ *
5
+ * 9012 的每条规则都是「运行期才炸不如现在就教改写」的那一类(与 9003 / 9004 同席):
6
+ * - 类型实参必须显式写出:T 是补全被检查的契约,推断出的 `unknown` 不是契约;
7
+ * - 名字是非空字面量、≤128 字符,且在脚本的留白与阶段标记中**唯一**(嵌套补全也算):名字
8
+ * 是留白的阶段名与每个界面显示的身份——两个标记同名是一个阶段,两个留白同名却是两个缺口;
9
+ * - 调用必须被 await:没等值的留白会让脚本越过一个还没有值的缺口;
10
+ * - 不能落在 fan-out **回调**里(数组方法的回调,提升与否都算):元素并发跑,补全得在它们
11
+ * 已经在跑的时候写。`for...of` 体**允许**:带 await 的 for...of 是顺序的——第一轮停在留白,
12
+ * 补全到了,后面每轮跑函数体,正是「循环里的留白补全一次、每轮跑一遍」那一条;
13
+ * - 函数体不得引用留白之后才声明的绑定:函数体是编译器不检查「先用后声明」的闭包,引用
14
+ * 后面的 `const` 到运行期才 TDZ 抛错;
15
+ * - 函数体必须是内联的函数字面量:lowering 要把它原样打印成补全文本,一个标识符没有文本可打。
16
+ */
17
+ import ts from "typescript";
18
+ import { literalText } from "./sites-labels.js";
19
+ /** 留白规则的诊断码(9001 = facade-siting、…、9010 = 模型名,顺延)。 */
20
+ export const HOLE_CODE = 9012;
21
+ /** 留白名的长度上限:与阶段名同规(docs/dynamic-workflow/authoring.md「Holes」)。 */
22
+ export const HOLE_NAME_MAX_CHARS = 128;
23
+ const TYPE_MESSAGE = "hole() needs an explicit type argument (hole<Plan>(...)): the type is the contract the " +
24
+ "fill is compiled against, and an inferred unknown is no contract. Write what the rest of " +
25
+ "the script needs from the hole.";
26
+ const NAME_LITERAL_MESSAGE = "hole()'s name must be a compile-time string literal: it is the hole's phase name and the " +
27
+ "identity every surface shows (the station, the notification, the fill file). Write it inline.";
28
+ const NAME_EMPTY_MESSAGE = 'hole("") has no name to show. Give the gap a word in the user\'s language ("决定分组", ' +
29
+ '"choose the plan"); it labels the station and the notification.';
30
+ const NAME_LONG_MESSAGE = `hole()'s name is longer than ${HOLE_NAME_MAX_CHARS} characters; a phase name is a label, not a paragraph.`;
31
+ const AWAIT_MESSAGE = "hole() must be awaited where it is called (await hole<T>(...) or return await hole<T>(...)): " +
32
+ "the script must not run past a gap that has no value yet.";
33
+ const FANOUT_MESSAGE = "hole() cannot stand inside a fan-out callback (xs.map(...), Promise.all(xs.map(...)) and the " +
34
+ "other per-element array methods): the elements run concurrently, so its fill would have to " +
35
+ "be written while they are already running. Hoist the decision out of the callback, or use a " +
36
+ "loop (for, for...of, while), where one round waits and the fill runs in every later round.";
37
+ const BODY_INLINE_MESSAGE = "hole()'s body must be an inline async arrow (async () => { ... }): a fill is spliced into the " +
38
+ "script as text, so a function held in a variable has nothing to splice.";
39
+ /** 名字撞车的文案:撞的是标记还是另一个留白,说清楚。 */
40
+ function duplicateMessage(name, other) {
41
+ return other === "hole"
42
+ ? `two holes are named "${name}"; a hole's name is its identity and must be unique among the script's holes and phase markers.`
43
+ : `hole "${name}" shares its name with a phase("${name}") marker; a hole is a phase of its own, so the name must be unique among holes and markers.`;
44
+ }
45
+ /** 两个不同名字的哈希撞车(hole-id.ts):极罕见,但绝不猜——改一个名字就过。 */
46
+ function idCollisionMessage(name, other) {
47
+ return (`hole "${name}" and hole "${other}" hash to the same site id; rename one of them ` +
48
+ "(any change to the name gives it a new id).");
49
+ }
50
+ function lateBindingMessage(name) {
51
+ return (`the hole's body reads "${name}", which is declared after the hole. The body runs at the ` +
52
+ "hole, before that declaration executes, so the read would throw at run time. Declare it " +
53
+ "before the hole, or compute it inside the body.");
54
+ }
55
+ function isFunctionLiteral(expr) {
56
+ return expr !== undefined && (ts.isArrowFunction(expr) || ts.isFunctionExpression(expr));
57
+ }
58
+ /** 调用是不是顶层 `return` 的操作数(`return await hole(...)` 或 `return hole(...)`)。 */
59
+ function isTailPosition(call) {
60
+ const parent = call.parent;
61
+ if (ts.isReturnStatement(parent))
62
+ return true;
63
+ return ts.isAwaitExpression(parent) && ts.isReturnStatement(parent.parent);
64
+ }
65
+ /**
66
+ * 从一个已按声明判定为 facade `hole` 的调用构造站点。三个重载的分派只看实参形状:第二实参是
67
+ * 函数字面量即函数体,否则是提示;第三实参(若有)是函数体。非字面量的函数体既不算提示也不算
68
+ * 函数体——留给 9012 报「必须内联」。
69
+ */
70
+ export function holeSiteOf(call, id, order, loc, funcDepth, fill) {
71
+ const [first, second, third] = call.arguments;
72
+ const body = isFunctionLiteral(second) ? second : isFunctionLiteral(third) ? third : undefined;
73
+ const prompt = second !== undefined && body !== second ? second : undefined;
74
+ const typeArg = call.typeArguments?.[0];
75
+ const name = literalText(first);
76
+ return {
77
+ call,
78
+ ...(fill === undefined ? {} : { fill }),
79
+ id,
80
+ loc,
81
+ ...(name === undefined ? {} : { name }),
82
+ nameExpr: first,
83
+ order,
84
+ ...(prompt === undefined ? {} : { prompt }),
85
+ ...(body === undefined ? {} : { body }),
86
+ tail: funcDepth === 0 && isTailPosition(call),
87
+ ...(typeArg === undefined ? {} : { typeArg, typeText: typeArg.getText() }),
88
+ };
89
+ }
90
+ /** `node` 是否整体落在 `span` 节点的源码范围内。 */
91
+ function within(node, span, scriptFile) {
92
+ return span.getStart(scriptFile) <= node.getStart(scriptFile) && node.getEnd() <= span.getEnd();
93
+ }
94
+ /**
95
+ * 声明是否会被提升到作用域顶部,因而「先用后声明」在运行期无害:`function` 与 `var`。
96
+ * `let` / `const` / `class` / `enum` 都不是(TDZ 或空对象),引用它们就是运行期错误。
97
+ */
98
+ function isHoisted(declaration) {
99
+ if (ts.isFunctionDeclaration(declaration))
100
+ return true;
101
+ if (!ts.isVariableDeclaration(declaration))
102
+ return false;
103
+ const list = declaration.parent;
104
+ return ts.isVariableDeclarationList(list) && (list.flags & ts.NodeFlags.BlockScoped) === 0;
105
+ }
106
+ /** 校验收集到的留白站点。非空即脚本不可提交(`analyzeWorkflowScript` 与 misuse 同席)。 */
107
+ export function collectHoleDiagnostics(workflow, table) {
108
+ const { program, scriptFile, toScriptLoc } = workflow;
109
+ const checker = program.getTypeChecker();
110
+ const diagnostics = [];
111
+ const push = (loc, message) => {
112
+ diagnostics.push({ code: HOLE_CODE, column: loc.column, line: loc.line, message });
113
+ };
114
+ const at = (node, fallback) => node === undefined ? fallback : toScriptLoc(node.getStart(scriptFile));
115
+ // 名字的唯一性跨留白与标记:标记先登记,所以任何与标记同名的留白都被报出,不论先后;两个
116
+ // 留白同名报在后一个上(源码序)。嵌套补全里的留白与标记也在表里,自然一并计入。
117
+ const seen = new Map();
118
+ for (const marker of table.phases) {
119
+ const name = marker.name?.trim();
120
+ if (name !== undefined && name !== "")
121
+ seen.set(name, "marker");
122
+ }
123
+ // 名字键的哈希撞车:同一个 id 只能属于一个名字(同名的重复已经由上面那条报过)。
124
+ const idOwner = new Map();
125
+ for (const site of [...table.holes].sort((a, b) => a.order - b.order)) {
126
+ const nameLoc = at(site.nameExpr, site.loc);
127
+ if (site.typeArg === undefined)
128
+ push(site.loc, TYPE_MESSAGE);
129
+ if (site.name === undefined)
130
+ push(nameLoc, NAME_LITERAL_MESSAGE);
131
+ else if (site.name.trim() === "")
132
+ push(nameLoc, NAME_EMPTY_MESSAGE);
133
+ else if (site.name.length > HOLE_NAME_MAX_CHARS)
134
+ push(nameLoc, NAME_LONG_MESSAGE);
135
+ else {
136
+ const name = site.name.trim();
137
+ const other = seen.get(name);
138
+ if (other !== undefined)
139
+ push(nameLoc, duplicateMessage(name, other));
140
+ else {
141
+ seen.set(name, "hole");
142
+ const owner = idOwner.get(site.id);
143
+ if (owner !== undefined && owner !== name)
144
+ push(nameLoc, idCollisionMessage(name, owner));
145
+ else
146
+ idOwner.set(site.id, name);
147
+ }
148
+ }
149
+ if (!ts.isAwaitExpression(site.call.parent))
150
+ push(site.loc, AWAIT_MESSAGE);
151
+ // 只有数组方法回调(提升与否都算);for...of 的语句体是顺序的,留白可以站在里面。
152
+ const inCallback = table.iterations.some((cand) => cand.form === "array-method" && within(site.call, cand.body, scriptFile));
153
+ if (inCallback)
154
+ push(site.loc, FANOUT_MESSAGE);
155
+ // 非内联的函数体:第二实参不是提示(不是 string)且不是字面量,或第三实参不是字面量。
156
+ const [, second, third] = site.call.arguments;
157
+ const heldBody = (third !== undefined && site.body !== third ? third : undefined) ??
158
+ (second !== undefined && site.prompt === second && isCallable(second, checker)
159
+ ? second
160
+ : undefined);
161
+ if (heldBody !== undefined)
162
+ push(at(heldBody, site.loc), BODY_INLINE_MESSAGE);
163
+ if (site.body !== undefined) {
164
+ collectLateBindings(site.call, site.body, checker, scriptFile, (node, name) => push(at(node, site.loc), lateBindingMessage(name)));
165
+ }
166
+ }
167
+ return diagnostics;
168
+ }
169
+ function isCallable(expr, checker) {
170
+ return checker.getTypeAtLocation(expr).getCallSignatures().length > 0;
171
+ }
172
+ /**
173
+ * 函数体里每一个解析到「留白之后、函数体之外、不被提升」的脚本声明的标识符引用,每个绑定
174
+ * 报一次(首次引用处)。属性名与声明位不是引用,跳过。
175
+ */
176
+ function collectLateBindings(call, body, checker, scriptFile, report) {
177
+ const holeStart = call.getStart(scriptFile);
178
+ const reported = new Set();
179
+ const visit = (node) => {
180
+ if (ts.isIdentifier(node) && isValueReference(node)) {
181
+ const symbol = checker.getSymbolAtLocation(node);
182
+ if (symbol !== undefined && !reported.has(symbol)) {
183
+ const late = symbol.declarations?.some((decl) => decl.getSourceFile() === scriptFile &&
184
+ !within(decl, body, scriptFile) &&
185
+ decl.getStart(scriptFile) > holeStart &&
186
+ !isHoisted(decl));
187
+ if (late === true) {
188
+ reported.add(symbol);
189
+ report(node, node.text);
190
+ }
191
+ }
192
+ }
193
+ ts.forEachChild(node, visit);
194
+ };
195
+ visit(body.body);
196
+ }
197
+ /** 标识符是不是一次值引用(不是 `x.NAME` 的成员名、不是声明自己的名字、不是属性键)。 */
198
+ function isValueReference(node) {
199
+ const parent = node.parent;
200
+ if (ts.isPropertyAccessExpression(parent) && parent.name === node)
201
+ return false;
202
+ if ((ts.isPropertyAssignment(parent) || ts.isMethodDeclaration(parent)) && parent.name === node)
203
+ return false;
204
+ if (ts.isBindingElement(parent) && parent.propertyName === node)
205
+ return false;
206
+ if ((ts.isVariableDeclaration(parent) ||
207
+ ts.isParameter(parent) ||
208
+ ts.isBindingElement(parent) ||
209
+ ts.isFunctionDeclaration(parent) ||
210
+ ts.isClassDeclaration(parent)) &&
211
+ parent.name === node) {
212
+ return false;
213
+ }
214
+ return true;
215
+ }
@@ -0,0 +1,45 @@
1
+ import type { SiteTable } from "./sites.js";
2
+ /**
3
+ * 补全服务的两件纯文本工具(execution-engine.md「The fill service's checks」):把函数体拼进
4
+ * 留白调用、以及补全前后站点表的稳定性复核。两者都不碰引擎与 journal,run service 按序调用。
5
+ */
6
+ /** 拼接结果:新文本、第一行插入行的脚本行号(1-based)与插入的行数。 */
7
+ export interface SplicedHoleBody {
8
+ text: string;
9
+ insertedAtLine: number;
10
+ insertedLines: number;
11
+ }
12
+ /**
13
+ * 把 `body` 作为最后一个实参拼进留白调用:紧接在**最后一个实参的末尾**插入 `, async () => {\n<body>\n}`,
14
+ * 函数体每行按调用所在行的缩进再加两格,右花括号取调用的缩进。返回 `undefined` 当留白不在表里
15
+ * 或已经有函数体——补全一个已补全的留白不是拼接能表达的事。
16
+ *
17
+ * 插入点是最后一个实参的末尾而不是右括号之前:2026-09-28 首次实测里主代理按 prettier 的习惯写了
18
+ * `hole<T>(\n "名",\n \`提示\`,\n);`——提示后面带一个尾随逗号——在右括号前插入就得到 `, , async`,
19
+ * 四条语法错误全锚在草稿上,而草稿并没有错。接在实参末尾之后,原来的尾随逗号与换行留在函数体
20
+ * 之后(`}, \n)`),仍是合法调用;实参与右括号之间的注释同样原样保留。
21
+ *
22
+ * `insertedAtLine` 是第一条函数体行在新脚本里的行号(`, async () => {` 留在最后一个实参结束的那一
23
+ * 行上),`insertedLines` 是新增的换行数(函数体行数 + 右花括号那一行):诊断按这两个数分到「补全
24
+ * 文件内」与「草稿内」。
25
+ */
26
+ export declare function spliceHoleBody(scriptText: string, table: SiteTable, holeSiteId: string, body: string): SplicedHoleBody | undefined;
27
+ /** 稳定性复核的结果:通过,或一句说明是哪个 id 在哪儿变了。 */
28
+ export type SiteStability = {
29
+ ok: true;
30
+ } | {
31
+ ok: false;
32
+ detail: string;
33
+ };
34
+ /**
35
+ * 补全前后站点表的稳定性(docs/analysis.md「Sites」的站点 id 稳定性规则,延伸到「加函数体」):
36
+ * `before` 的每个 id(全部种类)都在 `after` 里,位置不变或——落在插入点之后时——行号整体后移
37
+ * `insertedLines`;`after` 里 `before` 没有的每个 id 都是这次补全写下的:带 `<holeSiteId>/`
38
+ * 前缀,或者是函数体里新留的留白(`fill` 链通到 `holeSiteId`)及其体内的站点。哪条不成立都是
39
+ * 宿主的错(分析器的编号规则被打破了),run 不能拿到它接不上的 id。
40
+ *
41
+ * 与插入点同一行、插入点之后的站点(`await hole(...); agent("a")` 写在一行)行号后移但列号
42
+ * 变了:那一行只比对行号。
43
+ */
44
+ export declare function checkSiteStability(before: SiteTable, after: SiteTable, holeSiteId: string, insertedAtLine: number, insertedLines: number): SiteStability;
45
+ //# sourceMappingURL=hole-splice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hole-splice.d.ts","sourceRoot":"","sources":["../../src/analysis/hole-splice.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;GAGG;AAEH,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAKD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,eAAe,GAAG,SAAS,CAmB7B;AAED,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAmBzE;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,GACpB,aAAa,CAsCf"}
@@ -0,0 +1,100 @@
1
+ import { SCRIPT_PRELUDE_LENGTH } from "../compiler/compile.js";
2
+ import { holePrefixOf } from "./hole-id.js";
3
+ /** 函数体相对调用缩进再多缩的空格数。 */
4
+ const BODY_EXTRA_INDENT = 2;
5
+ /**
6
+ * 把 `body` 作为最后一个实参拼进留白调用:紧接在**最后一个实参的末尾**插入 `, async () => {\n<body>\n}`,
7
+ * 函数体每行按调用所在行的缩进再加两格,右花括号取调用的缩进。返回 `undefined` 当留白不在表里
8
+ * 或已经有函数体——补全一个已补全的留白不是拼接能表达的事。
9
+ *
10
+ * 插入点是最后一个实参的末尾而不是右括号之前:2026-09-28 首次实测里主代理按 prettier 的习惯写了
11
+ * `hole<T>(\n "名",\n \`提示\`,\n);`——提示后面带一个尾随逗号——在右括号前插入就得到 `, , async`,
12
+ * 四条语法错误全锚在草稿上,而草稿并没有错。接在实参末尾之后,原来的尾随逗号与换行留在函数体
13
+ * 之后(`}, \n)`),仍是合法调用;实参与右括号之间的注释同样原样保留。
14
+ *
15
+ * `insertedAtLine` 是第一条函数体行在新脚本里的行号(`, async () => {` 留在最后一个实参结束的那一
16
+ * 行上),`insertedLines` 是新增的换行数(函数体行数 + 右花括号那一行):诊断按这两个数分到「补全
17
+ * 文件内」与「草稿内」。
18
+ */
19
+ export function spliceHoleBody(scriptText, table, holeSiteId, body) {
20
+ const site = table.holes.find((hole) => hole.id === holeSiteId);
21
+ if (site === undefined || site.body !== undefined)
22
+ return undefined;
23
+ const lastArg = site.call.arguments[site.call.arguments.length - 1];
24
+ if (lastArg === undefined)
25
+ return undefined;
26
+ const insertAt = lastArg.getEnd() - SCRIPT_PRELUDE_LENGTH;
27
+ const lineStart = scriptText.lastIndexOf("\n", site.call.getStart() - SCRIPT_PRELUDE_LENGTH) + 1;
28
+ const indent = /^[ \t]*/.exec(scriptText.slice(lineStart))?.[0] ?? "";
29
+ const bodyIndent = `${indent}${" ".repeat(BODY_EXTRA_INDENT)}`;
30
+ const bodyLines = body.replace(/\r?\n$/, "").split(/\r?\n/);
31
+ const inserted = [
32
+ ", async () => {",
33
+ ...bodyLines.map((line) => (line.trim() === "" ? "" : `${bodyIndent}${line}`)),
34
+ `${indent}}`,
35
+ ];
36
+ const before = scriptText.slice(0, insertAt);
37
+ const text = `${before}${inserted.join("\n")}${scriptText.slice(insertAt)}`;
38
+ const callLine = before.split("\n").length; // 最后一个实参结束的那一行(1-based)
39
+ return { insertedAtLine: callLine + 1, insertedLines: inserted.length - 1, text };
40
+ }
41
+ function everySite(table) {
42
+ return [
43
+ ...table.asks,
44
+ ...table.actors,
45
+ ...table.worldReads,
46
+ ...table.joins,
47
+ ...table.reports,
48
+ ...table.artifacts,
49
+ ...table.holes,
50
+ ].map((site) => ({ id: site.id, loc: site.loc }));
51
+ }
52
+ /**
53
+ * 补全前后站点表的稳定性(docs/analysis.md「Sites」的站点 id 稳定性规则,延伸到「加函数体」):
54
+ * `before` 的每个 id(全部种类)都在 `after` 里,位置不变或——落在插入点之后时——行号整体后移
55
+ * `insertedLines`;`after` 里 `before` 没有的每个 id 都是这次补全写下的:带 `<holeSiteId>/`
56
+ * 前缀,或者是函数体里新留的留白(`fill` 链通到 `holeSiteId`)及其体内的站点。哪条不成立都是
57
+ * 宿主的错(分析器的编号规则被打破了),run 不能拿到它接不上的 id。
58
+ *
59
+ * 与插入点同一行、插入点之后的站点(`await hole(...); agent("a")` 写在一行)行号后移但列号
60
+ * 变了:那一行只比对行号。
61
+ */
62
+ export function checkSiteStability(before, after, holeSiteId, insertedAtLine, insertedLines) {
63
+ const afterById = new Map(everySite(after).map((site) => [site.id, site.loc]));
64
+ const parenLine = insertedAtLine - 1;
65
+ for (const site of everySite(before)) {
66
+ const moved = afterById.get(site.id);
67
+ if (moved === undefined)
68
+ return { detail: `site ${site.id} vanished after the fill`, ok: false };
69
+ const shifted = site.loc.line >= parenLine;
70
+ const expectedLine = shifted ? site.loc.line + insertedLines : site.loc.line;
71
+ const sameLine = moved.line === expectedLine || (site.loc.line === parenLine && moved.line === site.loc.line);
72
+ const sameColumn = site.loc.line === parenLine || moved.column === site.loc.column;
73
+ if (!sameLine || !sameColumn) {
74
+ return {
75
+ detail: `site ${site.id} moved from ${site.loc.line}:${site.loc.column} to ${moved.line}:${moved.column}` +
76
+ ` (expected line ${expectedLine})`,
77
+ ok: false,
78
+ };
79
+ }
80
+ }
81
+ const known = new Set(everySite(before).map((site) => site.id));
82
+ // 这次补全写下的留白:`fill` 链一路通到被补全的留白(体内再留的、以及体内内联填好的)。
83
+ const fillOf = new Map(after.holes.map((hole) => [hole.id, hole.fill]));
84
+ const writtenByFill = (holeId) => {
85
+ for (let cur = holeId; cur !== undefined; cur = fillOf.get(cur)) {
86
+ if (cur === holeSiteId)
87
+ return true;
88
+ }
89
+ return false;
90
+ };
91
+ for (const site of everySite(after)) {
92
+ if (known.has(site.id))
93
+ continue;
94
+ const owner = holePrefixOf(site.id) ?? site.id;
95
+ if (!writtenByFill(owner)) {
96
+ return { detail: `site ${site.id} appeared outside the fill of ${holeSiteId}`, ok: false };
97
+ }
98
+ }
99
+ return { ok: true };
100
+ }
@@ -0,0 +1,26 @@
1
+ import type { WorkflowProgram } from "../compiler/compile.js";
2
+ import type { SiteTable } from "./sites.js";
3
+ import type { AnalysisCore } from "./core.js";
4
+ /**
5
+ * The fused interpreter: ONE interpretation of
6
+ * the script that produces the {@link AnalysisCore}. Engine schedule:
7
+ *
8
+ * 1. the taint listener runs alone to a fixpoint ({@link Evaluator.converge} — global
9
+ * env, placeholder summaries, semantics untouched);
10
+ * 2. ONE final temporal walk ({@link traceOrder}) rides the evaluation-order spine,
11
+ * reading the converged state directly as its oracle ({@link TaintState.emitOracle})
12
+ * — the settle-certainty judgements need converged facts, so logging events on
13
+ * earlier iterations would be waste plus per-iteration state resets for nothing.
14
+ * The order-insensitivity lemma makes this schedule safe: a gen-only, kill-free,
15
+ * monotone fixpoint's result does not depend on visitation order, so the temporal
16
+ * walk's evaluation order is not a second semantics.
17
+ * 3. minting ({@link mintCore}) digests everything position- or checker-shaped into
18
+ * plain data: `within` containment resolved onto sites, provisional `fan-out@order`
19
+ * ids renamed to final `fan-out#N` everywhere (occurrences and type keys included),
20
+ * artifact types materialized as strings.
21
+ *
22
+ * Downstream, graph.ts / causality-graph.ts are pure projections of the core — no
23
+ * `typescript` import, no AST, no checker.
24
+ */
25
+ export declare function interpret(workflow: WorkflowProgram, table: SiteTable): AnalysisCore;
26
+ //# sourceMappingURL=interpret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpret.d.ts","sourceRoot":"","sources":["../../src/analysis/interpret.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,OAAO,KAAK,EACV,YAAY,EASb,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,YAAY,CAOnF"}
@@ -0,0 +1,200 @@
1
+ import { provisionalFanoutId } from "./domain.js";
2
+ import { computeArtifactTypes } from "./artifact-types.js";
3
+ import { Evaluator } from "./taint.js";
4
+ import { traceOrder } from "./causality-order.js";
5
+ import { literalCardinality } from "./fanout-cardinality.js";
6
+ /**
7
+ * The fused interpreter: ONE interpretation of
8
+ * the script that produces the {@link AnalysisCore}. Engine schedule:
9
+ *
10
+ * 1. the taint listener runs alone to a fixpoint ({@link Evaluator.converge} — global
11
+ * env, placeholder summaries, semantics untouched);
12
+ * 2. ONE final temporal walk ({@link traceOrder}) rides the evaluation-order spine,
13
+ * reading the converged state directly as its oracle ({@link TaintState.emitOracle})
14
+ * — the settle-certainty judgements need converged facts, so logging events on
15
+ * earlier iterations would be waste plus per-iteration state resets for nothing.
16
+ * The order-insensitivity lemma makes this schedule safe: a gen-only, kill-free,
17
+ * monotone fixpoint's result does not depend on visitation order, so the temporal
18
+ * walk's evaluation order is not a second semantics.
19
+ * 3. minting ({@link mintCore}) digests everything position- or checker-shaped into
20
+ * plain data: `within` containment resolved onto sites, provisional `fan-out@order`
21
+ * ids renamed to final `fan-out#N` everywhere (occurrences and type keys included),
22
+ * artifact types materialized as strings.
23
+ *
24
+ * Downstream, graph.ts / causality-graph.ts are pure projections of the core — no
25
+ * `typescript` import, no AST, no checker.
26
+ */
27
+ export function interpret(workflow, table) {
28
+ const evaluator = new Evaluator(workflow, table);
29
+ evaluator.converge();
30
+ const facts = evaluator.s.emitFacts();
31
+ const oracle = evaluator.s.emitOracle();
32
+ const trace = traceOrder(workflow, table, oracle);
33
+ return mintCore(workflow, table, facts, trace, oracle.applications);
34
+ }
35
+ /** Mint the core: the one place raw offsets and the checker are still consulted. */
36
+ function mintCore(workflow, table, facts, trace, applications) {
37
+ const { scriptFile } = workflow;
38
+ // Fan-out ordinals over promoted candidates (already source-ordered), and the rename
39
+ // from the taint pass's provisional ids. Moved here from graph assembly: the core
40
+ // speaks final ids only, the provisional vocabulary dies at this boundary.
41
+ const fanoutId = new Map();
42
+ facts.promoted.forEach((fanout, index) => fanoutId.set(fanout.id, `fan-out#${index + 1}`));
43
+ const rename = (site) => fanoutId.get(site) ?? site;
44
+ // Fan-out containment: a site executes once per element when it sits in a promoted
45
+ // candidate's BODY — lexically, or in the body of a function the candidate's body invokes
46
+ // (a named callback `xs.map(review)`, a helper called from the inline callback, and so on
47
+ // transitively, per the call oracle). "Nearest" = the innermost containing span, i.e. the
48
+ // one with the greatest start offset.
49
+ const spanOf = (node) => ({ end: node.getEnd(), start: node.getStart(scriptFile) });
50
+ const insideSpan = (pos, span) => span.start <= pos && pos < span.end;
51
+ const promotedSpans = [];
52
+ for (const cand of table.iterations) {
53
+ const id = fanoutId.get(provisionalFanoutId(cand.order));
54
+ if (id === undefined)
55
+ continue;
56
+ const seedSpans = [spanOf(cand.body)];
57
+ if (cand.call !== undefined) {
58
+ // A non-literal callback's body is the argument expression: no steps live in it, but
59
+ // the functions applied AT the call do.
60
+ for (const [fn, via] of applications.get(cand.call) ?? []) {
61
+ if (via === "argument")
62
+ seedSpans.push(spanOf(fn));
63
+ }
64
+ }
65
+ // Closure: every function applied at a call site inside a span already in the set.
66
+ const spans = [...seedSpans];
67
+ const seen = new Set();
68
+ for (let i = 0; i < spans.length; i += 1) {
69
+ const span = spans[i];
70
+ for (const [site, fns] of applications) {
71
+ if (!insideSpan(site.getStart(scriptFile), span))
72
+ continue;
73
+ for (const fn of fns.keys()) {
74
+ if (seen.has(fn))
75
+ continue;
76
+ seen.add(fn);
77
+ spans.push(spanOf(fn));
78
+ }
79
+ }
80
+ }
81
+ for (const span of spans)
82
+ promotedSpans.push({ id, ...span });
83
+ }
84
+ const within = (pos) => {
85
+ let best;
86
+ for (const span of promotedSpans) {
87
+ if (insideSpan(pos, span) && (best === undefined || span.start > best.start)) {
88
+ best = { id: span.id, start: span.start };
89
+ }
90
+ }
91
+ return best?.id;
92
+ };
93
+ const withinOf = (node) => {
94
+ const enclosing = within(node.getStart(scriptFile));
95
+ return enclosing === undefined ? {} : { within: enclosing };
96
+ };
97
+ const asks = table.asks.map((site) => ({
98
+ id: site.id,
99
+ label: site.label,
100
+ ...(site.labelPattern === undefined ? {} : { labelPattern: site.labelPattern }),
101
+ loc: site.loc,
102
+ order: site.order,
103
+ ...withinOf(site.call),
104
+ }));
105
+ const simple = (site) => ({
106
+ id: site.id,
107
+ label: site.label,
108
+ loc: site.loc,
109
+ order: site.order,
110
+ ...withinOf(site.call),
111
+ });
112
+ const actors = table.actors.map((site) => ({
113
+ id: site.id,
114
+ loc: site.loc,
115
+ ...(site.name === undefined ? {} : { name: site.name }),
116
+ ...(site.namePattern === undefined ? {} : { namePattern: site.namePattern }),
117
+ order: site.order,
118
+ ...withinOf(site.call),
119
+ }));
120
+ // A fan-out's own containment is anchored at its iterated expression, which sits
121
+ // outside its own body — so a candidate never reports itself, only an enclosing one.
122
+ const candByOrder = new Map(table.iterations.map((cand) => [cand.order, cand]));
123
+ const checker = workflow.program.getTypeChecker();
124
+ const fanouts = facts.promoted.map((fanout) => {
125
+ const cand = candByOrder.get(fanout.order);
126
+ // 字面量基数也是铸造期的事:它要看被迭代表达式的 AST 与绑定,投影只读一个数。
127
+ const cardinality = cand === undefined ? undefined : literalCardinality(cand.iterated, checker);
128
+ return {
129
+ id: fanoutId.get(fanout.id),
130
+ label: fanout.label,
131
+ loc: fanout.loc,
132
+ order: fanout.order,
133
+ ...(cand === undefined ? {} : withinOf(cand.iterated)),
134
+ ...(cardinality === undefined ? {} : { cardinality }),
135
+ };
136
+ });
137
+ // 只有开放的留白是站点(docs/analysis.md「Sites」):已补全的留白是一个阶段,不是一步。
138
+ // 名字 / 类型缺席的留白在 9012 处已挡下,这里的兜底只是把不变量写下来。
139
+ const holes = table.holes
140
+ .filter((site) => site.body === undefined)
141
+ .map((site) => ({
142
+ ...(site.fill === undefined ? {} : { fill: site.fill }),
143
+ id: site.id,
144
+ loc: site.loc,
145
+ name: site.name ?? site.id,
146
+ order: site.order,
147
+ ...(site.tail ? { tail: true } : {}),
148
+ type: site.typeText ?? "unknown",
149
+ ...withinOf(site.call),
150
+ }));
151
+ const sites = {
152
+ actors,
153
+ asks,
154
+ fanouts,
155
+ holes,
156
+ joins: table.joins.map(simple),
157
+ worldReads: table.worldReads.map(simple),
158
+ };
159
+ return {
160
+ facts: mintFacts(facts, fanoutId, rename),
161
+ sites,
162
+ trace,
163
+ types: mintTypes(computeArtifactTypes(workflow, table), rename),
164
+ };
165
+ }
166
+ /** Rewrite every occurrence and every `fanoutIn` key to final ids; drop non-promoted
167
+ * fan-out sinks (a candidate that never promoted is a graph node in nothing — the same
168
+ * `continue` graph assembly used to apply at edge emission). */
169
+ function mintFacts(facts, fanoutId, rename) {
170
+ const renameOccs = (occs) => occs.map((occ) => ({ exact: occ.exact, site: rename(occ.site), ...(occ.port === undefined ? {} : { port: occ.port }) }));
171
+ const renameMap = (map) => {
172
+ const out = new Map();
173
+ for (const [sink, occs] of map)
174
+ out.set(sink, renameOccs(occs));
175
+ return out;
176
+ };
177
+ const fanoutIn = new Map();
178
+ for (const [provId, occs] of facts.fanoutIn) {
179
+ const finalId = fanoutId.get(provId);
180
+ if (finalId === undefined)
181
+ continue;
182
+ fanoutIn.set(finalId, renameOccs(occs));
183
+ }
184
+ return {
185
+ askActor: renameMap(facts.askActor),
186
+ askData: renameMap(facts.askData),
187
+ fanoutIn,
188
+ holeData: renameMap(facts.holeData),
189
+ joinIn: renameMap(facts.joinIn),
190
+ returnData: renameOccs(facts.returnData),
191
+ worldReadData: renameMap(facts.worldReadData),
192
+ };
193
+ }
194
+ /** Rename the fan-out keys of the checker's type answers to final ids. */
195
+ function mintTypes(types, rename) {
196
+ const siteType = new Map();
197
+ for (const [id, type] of types.siteType)
198
+ siteType.set(rename(id), type);
199
+ return { joinPortTypes: types.joinPortTypes, siteType };
200
+ }
@@ -0,0 +1,18 @@
1
+ import ts from "typescript";
2
+ import { type AbstractValue } from "./domain.js";
3
+ import type { EvalContext, Evaluator } from "./taint.js";
4
+ /**
5
+ * Array- and object-literal evaluation, split out of the core evaluator (taint.ts) like
6
+ * the call/relay rules in calls.ts — same `Evaluator` instance, free-function shape. A
7
+ * container literal is field-sensitive: a place element/property stores the LIVE value it
8
+ * denotes (aliasing), and spread copies its source's fields by reference (shallow copy).
9
+ *
10
+ * Both functions build a FRESH value for this pass; the evaluator hands it to
11
+ * `state.literalPlaceOf`, which adopts it on first sight and merges it into the persistent
12
+ * allocation-site place afterwards. So the value that flows on from a literal is storage
13
+ * that survives the pass (a callee may write through it), and the `changed` signal for a
14
+ * re-evaluation that grew is raised there — neither function touches `ev.s.changed`.
15
+ */
16
+ export declare function evalArrayLiteral(ev: Evaluator, node: ts.ArrayLiteralExpression, ctx: EvalContext): AbstractValue;
17
+ export declare function evalObjectLiteral(ev: Evaluator, node: ts.ObjectLiteralExpression, ctx: EvalContext): AbstractValue;
18
+ //# sourceMappingURL=literals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../../src/analysis/literals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAML,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;;;;;;;GAWG;AAEH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE,WAAW,GAAG,aAAa,CAmBhH;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE,WAAW,GAAG,aAAa,CAyDlH"}