@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,602 @@
1
+ /**
2
+ * 执行引擎的确定性状态机(Boundary A 的实现 + 向下驱动 Boundary B + 向上回报 sink)。
3
+ *
4
+ * 核心不做任何 I/O、不读时钟、不用随机数:随时间/调度变化的决策要么被 journal 记录、要么被
5
+ * "每站点序号 + 每 actor FIFO 的 actorSeq"这套确定性规则固定,从而首次执行与 replay 逐字一致。
6
+ *
7
+ * 关键不变量:
8
+ * - 实例身份 = 站点 id × 每站点执行序号(第 n 次 ask#3 = ask#3@n)。actor 身份 = 创建站点 × 序号。
9
+ * - journal 决策:每次 host 调用先查 (siteId, ordinal);命中即短路(无 driver 调用),并防御性
10
+ * 校验 inputHash——不一致则整个 run 大声失败(结构化错误,绝不静默偏移)。
11
+ * - 每 actor FIFO + actorSeq 准入顺序 + replay 的 hold 规则:见 scheduler.ts(本文件把 ask 生命周期委托给它)。
12
+ *
13
+ * 本文件聚焦 run 生命周期:host API 入口、用量记账、run 结算与事件记录。用户面产物、report、
14
+ * world 节点与导入缓存、run 终态三条路径的方法体各在兄弟模块(engine-artifacts.ts / engine-report.ts /
15
+ * engine-world.ts / engine-settlement.ts),经 engine-state.ts 的 {@link EngineState} 接缝读写这里的
16
+ * 私有状态;本类上只留薄委托(拆分原因:oxlint max-lines 上限 400 行)。出生阶段坐标的两个
17
+ * 打戳函数(事件与 ProviderStop)是纯函数,住在 engine-phase-stamp.ts,只读本类拥有的
18
+ * `instancePhases` 表。
19
+ */
20
+ import { ImportedWorldQueue, matchImportedActor } from "./imported-cache.js";
21
+ import { AskScheduler } from "./scheduler.js";
22
+ import { declarePresetArtifact, publishContentArtifact } from "./engine-artifacts.js";
23
+ import { publishReport } from "./engine-report.js";
24
+ import { closeImportCache, readWorld, recoverImportClosure } from "./engine-world.js";
25
+ import { ReplaySettleOrder } from "./replay-order.js";
26
+ import { restoreFromJournal } from "./engine-resume.js";
27
+ import { settleCompleted, settleFailed, settleStopped } from "./engine-settlement.js";
28
+ import { HoleRegistry, fillHole as fillHoleBody, reachHole, } from "./engine-holes.js";
29
+ import { refToString, WorkflowError } from "./types.js";
30
+ import { runLaunchedEvent } from "./engine-launch.js";
31
+ import { normalizePersona } from "./persona.js";
32
+ import { enrichProviderStopPhase, stampBirthPhase } from "./engine-phase-stamp.js";
33
+ export class WorkflowEngine {
34
+ runId;
35
+ driver;
36
+ journal;
37
+ /**
38
+ * 本 run 的并发上界。**可变**(见 {@link setMaxConcurrency}):一次只改 `max_concurrency`
39
+ * 的修订就地作用在活着的 run 上。整份替换而不是原地改字段——已记进事件与 journal 的那几份
40
+ * caps 必须保持它们被记下时的样子(调用方递进来的那个对象同理不被回写)。
41
+ */
42
+ caps;
43
+ /**
44
+ * 每 ask 站点的静态规格。**可变**(见 {@link fillHole}):一次补全把它整份换成有效脚本的表
45
+ * (原表的超集)。整份替换而不是原地改,与 caps 同一条纪律。
46
+ */
47
+ askSpecs;
48
+ validate;
49
+ scheduler;
50
+ /** 每站点执行序号计数器(ask / world-read / actor 共用,站点 id 互不相同)。 */
51
+ ordinals = new Map();
52
+ /**
53
+ * 阶段进入次数,按名字。**不与**
54
+ * `ordinals` 共表:阶段名是作者的任意字符串,一个恰好叫 `report#1` 的阶段不能挪动那个
55
+ * 站点的节点序号(site-id stability),反之亦然。
56
+ */
57
+ phaseOrdinals = new Map();
58
+ /**
59
+ * 控制流当前所在的阶段名(`enterPhase` 维护;第一个标记之前为 undefined)。只在铸造点被
60
+ * 读取——见 {@link nextOrdinal}。
61
+ */
62
+ currentPhase;
63
+ /** 站点 → 词法出生阶段(见 {@link EngineConfig.sitePhases})。可变,与 `askSpecs` 同一条路换表。 */
64
+ sitePhases;
65
+ /** 留白的停驻表与本世的补全记忆(engine-holes.ts)。 */
66
+ holes;
67
+ /**
68
+ * 实例(`siteId@ordinal`)→ 它**出生时**的阶段名。写在铸造点、读在 {@link record} 的打戳漏斗:静态因果图按阶段拷贝
69
+ * 站点,运行时实例必须带同一个坐标,否则一条车道上的实例会被那个站点的每一份阶段拷贝
70
+ * 同时认领(本 bug 的形状:五个阶段各 20 个子代理,五张卡各显示 100 个)。
71
+ */
72
+ instancePhases = new Map();
73
+ /**
74
+ * 本 run 内已被认领的**非空有效 actor 名** → 认领它的 actor(用于失败信息里指认前一处)。
75
+ * 见 {@link createActor} 的查重与 replay 安全性说明。
76
+ */
77
+ actorNames = new Map();
78
+ /** amend-resume 的导入缓存(纯数据,缺席即本次不是修订续跑)。 */
79
+ importedCache;
80
+ /** world 导入队列的消费游标(第 n 次出现对第 n 条)。 */
81
+ importedWorld;
82
+ /**
83
+ * 导入缓存是否已**关闭**:第一笔写入之前置真、永不重开
84
+ * ——某个 live 子代理即将执行改写工具(driver 上报 askMutating),或一条 world.run live 执行。
85
+ * 关闭后 world 节点与带工具的 ask 不再问导入表(哈希只比对文本,比不出工作区已被改写);
86
+ * 纯 ask(toolCalls 0)照常命中。resume 时从 `import-cache-closed` 事件恢复,见 {@link recoverImportClosure}。
87
+ */
88
+ importClosed = false;
89
+ /**
90
+ * replay 的结算次序闸(docs/execution-engine.md「Replaying the settle order」):命中缓存的
91
+ * 结算按 journal 记下的**首生结算次序**释放,而不是按准入次序——join 之后的每一个站点序号
92
+ * 都由那个次序决定。非 resume 恒为空闸(人人放行)。
93
+ */
94
+ replaySettleOrder = ReplaySettleOrder.empty();
95
+ /** resume 时从事件恢复的「崩溃前曾 live 的 ask 实例」(`siteId@ordinal`);非 resume 为空。 */
96
+ liveAskInstances = new Set();
97
+ /** resume 时从事件次序恢复的「准入早于关门的 ask 实例」;续跑在飞 ask 的判定据此复原。 */
98
+ queuedBeforeImportClose = new Set();
99
+ /**
100
+ * 本 run 已发布的报告条数与 item 字节数(REPORT_CAPS 两个 run 级上限的计数器)。resume 时从
101
+ * journal 的 kind:"report" 行恢复——上限是 run 级的,跨 resume 必须连续计数,否则一个反复
102
+ * resume 的 run 可以无限报告。
103
+ */
104
+ reportTally = { count: 0, bytes: 0 };
105
+ /**
106
+ * 本 run 每个**用户面产物** id 的状态。与 `reportTally`
107
+ * 同一条恢复法:resume 时从 journal 的 `kind: "artifact"` 行重建,此后在内存里维护——
108
+ * 上限(32 个 id / 每 id 16 版)与版本号都是 run 级的事实,跨 resume 必须连续,否则一个
109
+ * 反复 resume 的 run 可以无限发布。
110
+ *
111
+ * ⚠ 术语:artifact = 用户面产物,不是 `RunSettlement.artifact`(顶层返回值)。
112
+ */
113
+ artifacts = new Map();
114
+ /** 累计 token 用量(观察面:只记账、只广播,永远不会让 run 失败)。 */
115
+ spentTokens = 0;
116
+ runSettled = false;
117
+ runFailure;
118
+ settledDeferred;
119
+ /** 兄弟模块自由函数读写私有状态的接缝(构造函数里用箭头闭包装配,见 engine-state.ts)。 */
120
+ state;
121
+ constructor(config) {
122
+ this.runId = config.runId;
123
+ this.driver = config.driver;
124
+ this.journal = config.driver.journal;
125
+ // 自己留一份:调用方(harness / run service)手里的那个对象不该因为一次 retune 而被改写。
126
+ this.caps = { maxConcurrency: config.caps.maxConcurrency };
127
+ this.askSpecs = config.askSpecs;
128
+ this.validate = config.validate;
129
+ this.sitePhases = config.sitePhases ?? new Map();
130
+ this.holes = new HoleRegistry(config.now ?? Date.now);
131
+ this.importedCache = config.importedCache;
132
+ this.importedWorld = new ImportedWorldQueue(config.importedCache?.world ?? new Map());
133
+ let resolve;
134
+ const promise = new Promise((res) => {
135
+ resolve = res;
136
+ });
137
+ this.settledDeferred = { promise, resolve };
138
+ this.state = {
139
+ runId: this.runId,
140
+ driver: this.driver,
141
+ journal: this.journal,
142
+ artifacts: this.artifacts,
143
+ importedCache: this.importedCache,
144
+ importedWorld: this.importedWorld,
145
+ isRunSettled: () => this.runSettled,
146
+ runError: () => this.runError(),
147
+ failRun: (error) => this.failRun(error),
148
+ record: (event) => this.record(event),
149
+ nextOrdinal: (siteId) => this.nextOrdinal(siteId),
150
+ holdForReplay: (instance, release) => {
151
+ this.replaySettleOrder.hold(instance, release);
152
+ },
153
+ reportTally: () => this.reportTally,
154
+ countReport: (bytes) => {
155
+ this.reportTally = {
156
+ count: this.reportTally.count + 1,
157
+ bytes: this.reportTally.bytes + bytes,
158
+ };
159
+ },
160
+ importClosed: () => this.importClosed,
161
+ closeImport: () => {
162
+ this.importClosed = true;
163
+ },
164
+ markSettled: (failure) => {
165
+ this.runSettled = true;
166
+ if (failure !== undefined)
167
+ this.runFailure = failure;
168
+ // 闸门随结算永久打开:还挂在次序表上的释放动作一律放掉,否则脚本那侧的 promise
169
+ // 永不兑现(沙箱会被关掉,但同进程跑脚本的装配就此挂死)。
170
+ this.replaySettleOrder.open();
171
+ },
172
+ abortInFlight: (error, emitCancelled) => {
173
+ this.scheduler.abortInFlight(error, emitCancelled);
174
+ // 停在留白上的分支与在飞 ask 同一笔拒绝:结算之后没有什么可以再补全它。
175
+ this.holes.rejectAll(error);
176
+ },
177
+ resolveSettled: (settlement) => this.settledDeferred.resolve(settlement),
178
+ };
179
+ // caps 对调度器是**现读**:setMaxConcurrency 整份换掉 this.caps,而派发判据必须看见新值
180
+ // (见 SchedulerHost.caps)。箭头闭包而不是对象字面量里的 `this`——后者指的是字面量自己。
181
+ const readCaps = () => this.caps;
182
+ const host = {
183
+ runId: this.runId,
184
+ get caps() {
185
+ return readCaps();
186
+ },
187
+ driver: this.driver,
188
+ validate: this.validate,
189
+ nextOrdinal: (siteId) => this.nextOrdinal(siteId),
190
+ holdForReplay: (instance, release) => {
191
+ this.replaySettleOrder.hold(instance, release);
192
+ },
193
+ record: (event) => this.record(event),
194
+ isRunSettled: () => this.runSettled,
195
+ runError: () => this.runError(),
196
+ failRun: (error) => this.failRun(error),
197
+ importCacheClosed: () => this.importClosed,
198
+ wasLiveBeforeResume: (instance) => this.liveAskInstances.has(refToString(instance)),
199
+ wasQueuedBeforeImportClose: (instance) => this.queuedBeforeImportClose.has(refToString(instance)),
200
+ };
201
+ this.scheduler = new AskScheduler(host);
202
+ const existing = this.journal.getRun(this.runId);
203
+ if (existing === undefined) {
204
+ // 修订 run 从前驱的累计值起账;
205
+ // 全新 run 缺席即 0。归一(非有限值与负数按缺席、小数下取整)就在这一处:这个数要落
206
+ // `spent_tokens` 列,协议 schema 要求非负整数,而它是过了 harness 边界的纯数据——一个 NaN
207
+ // 会同时毒化列值与投影补丁,所以脏值必须死在写库之前,而不是死在投影的补丁校验里。
208
+ const inherited = config.inheritedTokens ?? 0;
209
+ this.spentTokens = Number.isFinite(inherited) ? Math.max(0, Math.floor(inherited)) : 0;
210
+ this.journal.createRun({
211
+ runId: this.runId,
212
+ caps: this.caps,
213
+ spentTokens: this.spentTokens,
214
+ status: "running",
215
+ // 元数据只在创建 run 时落库;保存传入的脚本与会话字段,供恢复和 script_hash 校验使用。
216
+ // name 是后来加入同一条路的展示元数据。缺省的字段保持缺席(不落成 undefined 键)。
217
+ ...(config.scriptText === undefined ? {} : { scriptText: config.scriptText }),
218
+ // 实参与 scriptText 同一条元数据路,且同样只在建 run 时写一次:resume 从这里读回
219
+ // 重放,绝不接受调用方给的新实参。
220
+ ...(config.args === undefined ? {} : { args: config.args }),
221
+ ...(config.name === undefined ? {} : { name: config.name }),
222
+ ...(config.scriptHash === undefined ? {} : { scriptHash: config.scriptHash }),
223
+ ...(config.parentSessionId === undefined
224
+ ? {}
225
+ : { parentSessionId: config.parentSessionId }),
226
+ ...(config.cwd === undefined ? {} : { cwd: config.cwd }),
227
+ ...(config.toolCallId === undefined ? {} : { toolCallId: config.toolCallId }),
228
+ // lineage 也只在建 run 时写一次:修订是 supersede(新 run),前驱行零触碰。
229
+ ...(config.resumedFrom === undefined ? {} : { resumedFrom: config.resumedFrom }),
230
+ });
231
+ }
232
+ else {
233
+ // resume 的前置条件:脚本必须与建 run 时逐字节相同。哈希
234
+ // 不一致说明调用方拿另一份脚本复用了同一个 runId——站点 id 是 journal 的键,继续下去
235
+ // 会把新脚本的站点对上旧脚本的结果。拒绝**这次 resume**(同步抛出),而不是先接受
236
+ // 再 failRun:后者会把 failed 盖到一份仍能用正确脚本 resume 的记录上。
237
+ if (existing.scriptHash !== undefined &&
238
+ config.scriptHash !== undefined &&
239
+ existing.scriptHash !== config.scriptHash) {
240
+ throw new WorkflowError("ScriptHashMismatch", `Cannot resume run ${this.runId}: its script changed (recorded hash ${existing.scriptHash}, ` +
241
+ `got ${config.scriptHash}). Resume needs the byte-identical script; to run a revised ` +
242
+ `script, start a new run with resume_from instead.`, { mismatch: { expected: existing.scriptHash, got: config.scriptHash } });
243
+ }
244
+ // resume:次序闸、actor 的已记录 ask 数、报告计数与产物状态从 journal 恢复(engine-resume.ts)。
245
+ ({ replaySettleOrder: this.replaySettleOrder, reportTally: this.reportTally } =
246
+ restoreFromJournal(this.state, this.scheduler));
247
+ // 用量从记录恢复(跨生命周期连续)。
248
+ this.spentTokens = existing.spentTokens;
249
+ // 修订 run 的崩溃恢复:导入表被整表重建,而「门是否已关」不落库——从事件精确恢复。
250
+ if (this.importedCache !== undefined) {
251
+ const recovered = recoverImportClosure(this.journal, this.runId);
252
+ this.liveAskInstances = recovered.live;
253
+ this.queuedBeforeImportClose = recovered.queuedBeforeClose;
254
+ this.importClosed = recovered.closed;
255
+ }
256
+ this.journal.updateRunStatus(this.runId, "running");
257
+ }
258
+ this.record({ type: "run-started", runId: this.runId, caps: this.caps });
259
+ // 建 run 那一世才记锚点,且放在 run-started 之后:投影把 run-started 当作建条目事件,
260
+ // 锚点事件对它只是抬水位(reducer 的 default 分支)。
261
+ if (existing === undefined && config.launch !== undefined) {
262
+ this.record(runLaunchedEvent(config.launch, config));
263
+ }
264
+ // 继承(amend)或恢复(resume)来的用量在这里补发一条:投影把 `run-started` 当作
265
+ // 「用量清零」(workflow-runs-started.ts 剥掉上一世的结算残影),所以不补发的话,卡片会在
266
+ // 第一轮 live turn 落地之前显示 0——而「这条 run 还没花钱」是假的。一世没有任何 live ask 时
267
+ // 更糟:投影会一直停在 0,直到冷回放才对得上行值。
268
+ // 零不发:reset 本身已经说了零,再发一条是每个全新 run 都要付的一条噪音事件。
269
+ if (this.spentTokens > 0)
270
+ this.record({ type: "usage-updated", spentTokens: this.spentTokens });
271
+ }
272
+ /** run 结算 promise:完成/失败/取消时兑现。 */
273
+ get settled() {
274
+ return this.settledDeferred.promise;
275
+ }
276
+ /** 当前 run 状态。 */
277
+ status() {
278
+ return this.journal.getRun(this.runId)?.status ?? "running";
279
+ }
280
+ // ——————————————————————————————— Boundary A ———————————————————————————————
281
+ /**
282
+ * 建一个 actor。**有效名**是 `normalizePersona` 之后的 `spec.name`(persona.name 压过 name
283
+ * 实参),非空即必须在本 run 内唯一——重名让整个 run 大声失败(DuplicateActorName)。
284
+ *
285
+ * 为什么是 run 级失败而不是改名/警告:具名 actor 是 amend-resume 缓存导入的身份键,而任何
286
+ * run 都是未来修订的潜在前驱,前驱里重名会让导入匹配歧义。
287
+ * 规则因此对所有 run 生效,不只是修订 run。匿名(缺席或空串)从不查、任意多个合法——
288
+ * 代价已裁决:没有缓存资格。
289
+ *
290
+ * **replay 安全**:查重表是纯内存的、随引擎实例而生。逐字节相同脚本的 resume 在一个**全新**
291
+ * 引擎实例里从头重跑同一串 createActor 调用,每个名字因此恰好被登记一次,不会把上一轮
292
+ * 自己的登记当成重名。这也是它不能落 journal 的理由——落库的表会在 resume 时与自己撞车。
293
+ *
294
+ * **导入缓存的附着也在这里**(amend-resume):按有效名查 `importedCache.actors`,
295
+ * persona 规范化后一致才把候选挂到调度器的 actor 态上。比对之所以在**运行期**而不是
296
+ * 提交时静态比对两份脚本:名字与 persona 都是运行期值(`agent()` 的实参可以是动态表达式),
297
+ * 静态比对是第二份真相,恰是本包处处要防的(判定见 imported-cache.ts 的 `matchImportedActor`)。
298
+ */
299
+ createActor(siteId, name, persona) {
300
+ this.assertRunning("createActor");
301
+ const ordinal = this.nextOrdinal(siteId);
302
+ const ref = { siteId, ordinal };
303
+ const id = refToString(ref);
304
+ const spec = normalizePersona(name, persona);
305
+ const effectiveName = spec.name;
306
+ if (effectiveName !== undefined && effectiveName !== "") {
307
+ const claimed = this.actorNames.get(effectiveName);
308
+ if (claimed !== undefined) {
309
+ // assertRunning 同姿态的同步表面:createActor 无 promise 可拒,只能抛。
310
+ const err = new WorkflowError("DuplicateActorName", `Subagent name "${effectiveName}" is used twice in this run (${claimed} and ${id}). ` +
311
+ `A named subagent is the identity an amended re-run matches its cache by, so names must ` +
312
+ `be unique; give this one its own name or drop the name to make it anonymous.`);
313
+ this.failRun(err);
314
+ throw err;
315
+ }
316
+ this.actorNames.set(effectiveName, id);
317
+ }
318
+ this.scheduler.registerActor(ref, id, name, spec, matchImportedActor(this.importedCache, spec));
319
+ // putActor 是整条记录的替换,而 sessionId / resolvedModel 是 **driver 拥有**的字段
320
+ // (前者由 ensureSession 写、后者由宿主侧的 runtime 工厂写)。这里必须把既有值原样带过去,
321
+ // 否则 replay 命中同一 (siteId, ordinal) 时会把两者抹成空。
322
+ const existing = this.journal.getActor(this.runId, siteId, ordinal);
323
+ this.journal.putActor({
324
+ runId: this.runId,
325
+ siteId,
326
+ ordinal,
327
+ name,
328
+ persona: spec,
329
+ sessionId: existing?.sessionId,
330
+ resolvedModel: existing?.resolvedModel,
331
+ });
332
+ this.record({ type: "actor-created", actor: ref, name, persona: spec });
333
+ return id;
334
+ }
335
+ ask(siteId, actorId, instructions) {
336
+ if (this.runSettled)
337
+ return Promise.reject(this.runError());
338
+ if (!this.scheduler.hasActor(actorId)) {
339
+ // 未知 actor:脚本/lowering 契约被破坏,整个 run 大声失败。
340
+ const err = new WorkflowError("UnknownActor", `Unknown subagent handle: ${actorId}.`);
341
+ this.failRun(err);
342
+ return Promise.reject(err);
343
+ }
344
+ const spec = this.askSpecs.get(siteId);
345
+ if (spec === undefined) {
346
+ // 站点表与 schema 合成来自同一次编译,所以 miss 只可能是接线错误(两份编译产物被
347
+ // 拼在一起)。`?? { typed: false }` 兜底会把 typed ask 静默降级成 untyped:
348
+ // 不注册 submit_result、拿末轮文本当结果、schema 校验整个消失——一个降级到
349
+ // 「结果永远合法」的类型系统比没有类型系统更糟,所以宁可让整个 run 大声失败。
350
+ const err = new WorkflowError("MissingAskSpec", `Ask site ${siteId} has no spec: askSpecs is incomplete (compile output mismatch).`);
351
+ this.failRun(err);
352
+ return Promise.reject(err);
353
+ }
354
+ return this.scheduler.admitAsk(siteId, actorId, instructions, spec);
355
+ }
356
+ /** world 节点(world-read / world-run):方法体在 engine-world.ts 的 readWorld。 */
357
+ worldRead(siteId, op, args) {
358
+ return readWorld(this.state, siteId, op, args);
359
+ }
360
+ log(message) {
361
+ if (this.runSettled)
362
+ return;
363
+ this.record({ type: "log", message });
364
+ }
365
+ /**
366
+ * 控制流经过了一个 `phase("…")` 标记(Boundary A 的 `enterPhase`)。与 `log` 同一副姿态:同步、无返回值、
367
+ * 结算后 no-op、**不落 journal 行**——标记不是站点,没有 `dwf_node` 可写。
368
+ *
369
+ * ordinal 按名字计数,用自己的表({@link phaseOrdinals}):阶段名与 site id 互不消耗对方的
370
+ * 序号(site-id stability)。
371
+ * **每次求值都发**:`for { phase("B"); ask }` 的第二轮就是 B 的第二次进入;若「与当前阶段
372
+ * 同名即不发」,单阶段循环体的轮次就丢了。resume 重跑会把前缀再发一遍——这里刻意不去重
373
+ * (去重需要引擎读事件表),reducer 以 `rounds = max(rounds, ordinal)` 单调归约。
374
+ */
375
+ enterPhase(name) {
376
+ if (this.runSettled)
377
+ return;
378
+ const trimmed = name.trim();
379
+ if (trimmed.length === 0)
380
+ return;
381
+ const ordinal = (this.phaseOrdinals.get(trimmed) ?? 0) + 1;
382
+ this.phaseOrdinals.set(trimmed, ordinal);
383
+ // 此后铸造的实例都出生在这个阶段。
384
+ this.currentPhase = trimmed;
385
+ this.record({ type: "phase-entered", name: trimmed, ordinal });
386
+ }
387
+ /** 脚本到达一处未补全的留白(Boundary A 的 `hole`):方法体在 engine-holes.ts 的 reachHole。 */
388
+ hole(siteId, name, prompt) {
389
+ return reachHole(this.state, this.holes, siteId, name, prompt);
390
+ }
391
+ /**
392
+ * 主代理补全一处留白(docs/execution-engine.md「The engine's part」):一个同步步骤里换掉规格表
393
+ * 与阶段表、写回有效脚本、记 `hole-filled`、记住代码、放行停驻的每一个分支。方法体在
394
+ * engine-holes.ts 的 fillHole;两条 no-op(`not_waiting` / `settled`)不写不发。
395
+ */
396
+ fillHole(fill) {
397
+ return fillHoleBody(this.state, this.holes, fill, (askSpecs, sitePhases) => {
398
+ this.askSpecs = askSpecs;
399
+ this.sitePhases = sitePhases;
400
+ });
401
+ }
402
+ /** 仍在等的留白(快照投影:事件之外还要问引擎,进程死过之后没有 promise 在等)。 */
403
+ openHoles() {
404
+ return this.holes.open();
405
+ }
406
+ /** 本世已补全的留白。 */
407
+ filledHoles() {
408
+ return this.holes.filledList();
409
+ }
410
+ /** 发布一条中间结果(Boundary A 的 `report`):方法体在 engine-report.ts 的 publishReport。 */
411
+ report(siteId, item, artifactId) {
412
+ publishReport(this.state, siteId, item, artifactId);
413
+ }
414
+ /**
415
+ * 发布一个**内容产物**(`artifact.file` / `artifact.markdown`):方法体在 engine-artifacts.ts
416
+ * 的 publishContentArtifact。
417
+ */
418
+ publishArtifact(siteId, op, args) {
419
+ return publishContentArtifact(this.state, siteId, op, args);
420
+ }
421
+ /**
422
+ * 声明一个**预置产物**(`artifact.chart` / `table` / `metrics` / `board`):方法体在
423
+ * engine-artifacts.ts 的 declarePresetArtifact。
424
+ */
425
+ declareArtifact(siteId, op, args) {
426
+ declarePresetArtifact(this.state, siteId, op, args);
427
+ }
428
+ // —————————————————————— 外部驱动的 run 生命周期 ——————————————————————
429
+ /** 沙箱脚本成功返回顶层 artifact,结算为 completed:方法体在 engine-settlement.ts 的 settleCompleted。 */
430
+ complete(artifact) {
431
+ settleCompleted(this.state, artifact);
432
+ }
433
+ /**
434
+ * 外部停止:中止在飞 ask(deferred 以 Cancelled reject、补发 node-settled(cancelled)),run
435
+ * 结算 `stopped(reason)`;已完结的 journal 条目保留(可 resume)。四个 reason 走同一条路:
436
+ * `user` / `model`(cancel 入口传进来的 initiator)、`interrupted`(harness 的沙箱故障)、
437
+ * `provider`(driver 经 `stopRun` 报上来的确定性模型侧错误)。`error` 只对后两者在场。
438
+ * first-wins:已结算即忽略。方法体在 engine-settlement.ts 的 settleStopped。
439
+ */
440
+ stop(reason, error, supersededBy) {
441
+ settleStopped(this.state, reason, error, supersededBy);
442
+ }
443
+ /**
444
+ * 外部失败:complete 的失败对偶。harness 用它把子进程 `{complete, ok:false, error}`(脚本抛出)、
445
+ * 子进程崩溃、墙钟超时、NDJSON 解析失败等都归为 run 失败,
446
+ * 而非伪装成 cancel——否则 journal 的 failure 与调用方看到的结果会分叉。
447
+ * 走内部 failRun 路径:first-wins(对 complete/cancel/内部失败)、driver 侧取消在飞 ask、
448
+ * journal run 状态 failed + failure_json、发 run-failure 事件、settled 结算为 failed。
449
+ */
450
+ fail(error) {
451
+ this.failRun(error);
452
+ }
453
+ /**
454
+ * 就地改本 run **自己**的并发上界(docs/dynamic-workflow/concurrency.md「Two bounds on a run」)。
455
+ * 一次只带 `max_concurrency` 的修订作用在活着的 run 上:同一个 runId、不铸后继、不 supersede、
456
+ * 在飞 ask 一个不丢——这正是它与 AmendWorkflow 的全部差别,也是它存在的唯一理由。
457
+ *
458
+ * 返回**这次是否真的改了**。两条 no-op 都返回 false 且不写库、不发事件:run 已结算(宿主的
459
+ * 存活判定与本调用之间的竞态——调用方据此回落到一次真正的 amend),以及新值与当前值相同。
460
+ *
461
+ * 改成时三件事在同一个同步步骤里发生,于是三者永远一致:整份换掉 caps(调度器现读)、写
462
+ * `dwf_run.caps_max_concurrency`(resume 沿用行里的 caps,不落库就恢复成旧上界)、记一条
463
+ * `run-caps-changed`。**抬高**还多一次 `pumpAll()`——上界是派发前现读的,但没有别的事件会
464
+ * 触发重扫,排队的 ask 否则要等到下一次结算。调低不召回在飞 ask:它们照常跑完,上界只管
465
+ * 「还能不能再放一个」。
466
+ *
467
+ * 钳到 `[1, 天花板]` 归调用方——天花板是宿主事实(机器核数),引擎既看不见也不该看见。
468
+ * 这里只做落库归一,与构造函数里的 `inheritedTokens` 同一条纪律:这个数要落
469
+ * `caps_max_concurrency`(integer not null),一个 NaN 会同时毒化列值与派发判据。
470
+ */
471
+ setMaxConcurrency(maxConcurrency) {
472
+ if (this.runSettled)
473
+ return false;
474
+ if (!Number.isFinite(maxConcurrency))
475
+ return false;
476
+ const previous = this.caps;
477
+ const next = Math.max(1, Math.floor(maxConcurrency));
478
+ if (next === previous.maxConcurrency)
479
+ return false;
480
+ const caps = { maxConcurrency: next };
481
+ this.caps = caps;
482
+ this.journal.updateRunCaps(this.runId, caps);
483
+ this.record({ type: "run-caps-changed", runId: this.runId, caps, previous });
484
+ if (next > previous.maxConcurrency)
485
+ this.scheduler.pumpAll();
486
+ return true;
487
+ }
488
+ // ——————————————————————————— Boundary B(向上回报)———————————————————————————
489
+ askSubmitAttempted(instance, payload) {
490
+ this.scheduler.submitAttempted(instance, payload);
491
+ }
492
+ askTurnEnded(instance, finalText) {
493
+ this.scheduler.turnEnded(instance, finalText);
494
+ }
495
+ /**
496
+ * ask 内进度观察:**纯透传**,
497
+ * 与 askStats → usage-updated 同一副姿态——不改调度、不进 inputHash、replay 不比对它。
498
+ * 与用量同理,结算后到达的迟到观察只丢事件(这里没有账要入),不给已完结的 run 长尾巴。
499
+ */
500
+ askProgress(instance, progress) {
501
+ if (this.runSettled)
502
+ return;
503
+ this.record({ type: "node-progress", instance, ...progress });
504
+ }
505
+ askStats(instance, stats) {
506
+ this.scheduler.noteStats(instance, stats);
507
+ this.spentTokens += stats.tokens;
508
+ // 用量不能只在 createRun(0) 落库一次:累计不回写会让 resume 恢复出零用量。
509
+ // 累加后立刻持久化,且早于事件——事件载荷与列值在同一同步步骤产生,二者永远相等。
510
+ this.journal.updateRunUsage(this.runId, this.spentTokens);
511
+ // 结算后到达的 straggler stats(真实 actor 的用量在 turn 解析后才知道,最后一个
512
+ // ask 的 stats 常晚于 complete/cancel 到达)不能照发事件——事件被追加在 run-settled 之后,
513
+ // 下游投影不预期(run-settled 必须是事件流最后一条)。结算后只记账(用量行 + noteStats
514
+ // 的节点回填都是 journal 行更新,不是事件),不再发事件。账仍要入:可 resume 的 run 用量
515
+ // 跨生命周期连续。
516
+ if (this.runSettled)
517
+ return;
518
+ this.record({ type: "usage-updated", spentTokens: this.spentTokens });
519
+ }
520
+ askFailed(instance, error) {
521
+ this.scheduler.failed(instance, error);
522
+ }
523
+ /**
524
+ * 确定性的模型侧错误:不结算节点,
525
+ * 整个 run 以 `stopped(provider)` 停下。run 已结算后到达的调用被 `stop` 的 first-wins 忽略。
526
+ */
527
+ stopRun(error) {
528
+ this.stop("provider", enrichProviderStopPhase(error, this.instancePhases));
529
+ }
530
+ /** run 级停滞观察:只 record;run 已结算后到达的调用忽略。 */
531
+ runStalled(info) {
532
+ if (this.runSettled)
533
+ return;
534
+ this.record({ type: "run-stalled", ...info });
535
+ }
536
+ // 自适应并发的三个纯观察:引擎只 record,
537
+ // 不据它们做任何决策。run 已结算或节点已结算后到达的调用被忽略——那是迟到的观察,
538
+ // 落 journal 只会让一个已完结的 run 长出尾巴。
539
+ askWaiting(instance, info) {
540
+ if (this.runSettled || !this.scheduler.isLive(instance))
541
+ return;
542
+ this.record({ type: "node-waiting", instance, ...info });
543
+ }
544
+ askExecuting(instance) {
545
+ if (this.runSettled || !this.scheduler.isLive(instance))
546
+ return;
547
+ this.record({ type: "node-executing", instance });
548
+ }
549
+ /**
550
+ * 唯一一个引擎据以做决策的 driver 观察:在飞 ask 的子代理
551
+ * 即将改写工作区 ⇒ 关导入缓存。迟到的观察(run 或节点已结算)忽略,与上面两个同一姿态。
552
+ */
553
+ askMutating(instance) {
554
+ if (this.runSettled || !this.scheduler.isLive(instance))
555
+ return;
556
+ closeImportCache(this.state, instance, "mutating-tool", this.scheduler.liveActorName(instance));
557
+ }
558
+ concurrencyChanged(change) {
559
+ if (this.runSettled)
560
+ return;
561
+ this.record({ type: "concurrency-changed", ...change });
562
+ }
563
+ // ——————————————————————————————— 内部 ———————————————————————————————
564
+ /** run 级失败(first-wins):方法体在 engine-settlement.ts 的 settleFailed。 */
565
+ failRun(error) {
566
+ settleFailed(this.state, error);
567
+ }
568
+ /**
569
+ * 站点序号的**唯一**铸造点(createActor / admitAsk 第一行 / worldRead / report / artifact 全
570
+ * 同步经它),因此也是实例出生阶段的唯一记录点:这一行总在脚本调用的同一个 tick 里执行,
571
+ * 而事件未必——ask 的 `node-queued` 会被 hold 规则推迟到下一个标记之后才发出。
572
+ */
573
+ nextOrdinal(siteId) {
574
+ const next = (this.ordinals.get(siteId) ?? 0) + 1;
575
+ this.ordinals.set(siteId, next);
576
+ // 词法优先、动态兜底:并发的两个 future 各带自己的标记时,「最近经过的标记」是谁家的全凭
577
+ // 时序;编译期表里的阶段才是确认图上用户看到的那个(docs/execution-engine.md)。
578
+ const phase = this.sitePhases.get(siteId) ?? this.currentPhase;
579
+ if (phase !== undefined)
580
+ this.instancePhases.set(refToString({ siteId, ordinal: next }), phase);
581
+ return next;
582
+ }
583
+ assertRunning(op) {
584
+ if (this.runSettled)
585
+ throw (this.runFailure ??
586
+ new WorkflowError("Cancelled", `Run already settled; ${op} is no longer accepted.`));
587
+ }
588
+ runError() {
589
+ return this.runFailure ?? new WorkflowError("Cancelled", "Run already settled.");
590
+ }
591
+ /**
592
+ * 每个事件既落 journal(dwf_event,持久)又经 driver.emit 扇出(Boundary C,实时)。
593
+ *
594
+ * 所有事件的唯一漏斗,出生阶段也就在这里补上({@link stampBirthPhase})。两条路线拿到的
595
+ * 必须是**同一个对象**:bootstrap 的 `createJournalSequenceCapture` 按引用相等核对序号。
596
+ */
597
+ record(event) {
598
+ const stamped = stampBirthPhase(event, this.instancePhases);
599
+ this.journal.appendEvent(this.runId, stamped);
600
+ this.driver.emit(stamped);
601
+ }
602
+ }