@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,484 @@
1
+ /**
2
+ * ask 调度器:把"每 actor FIFO + hold 规则 + 并发上限派发 + ask 结算"从引擎主体拆出,
3
+ * 使两个文件都聚焦、可读(并满足单文件行数上限)。引擎通过 {@link SchedulerHost} 注入其
4
+ * 依赖(driver、caps、序号分配、run 级失败),调度器只负责 ask 生命周期,不管 run 生命周期。
5
+ *
6
+ * 关键规则见 engine.ts 顶部说明:命中短路、actorSeq 准入顺序、replay 的 hold 规则、串行 actor。
7
+ *
8
+ * 内部类型与 SchedulerHost 在 scheduler-types.ts;submit / turn 的向上回报处理在 scheduler-submit.ts
9
+ * (拆分原因:oxlint max-lines 上限 400 行)。SchedulerHost 在此原地再导出,导入路径不变。
10
+ * replay 命中的哈希不一致错误 {@link hashMismatch} 在 hash-mismatch.ts(同一个理由)。
11
+ */
12
+ import { cachedAskFacts, headOfInstructions } from "./cached-ask-facts.js";
13
+ import { inputHash } from "./hash.js";
14
+ import { hashMismatch } from "./hash-mismatch.js";
15
+ import { importedAskRecord } from "./imported-cache.js";
16
+ import { defer } from "./scheduler-types.js";
17
+ import { handleSubmitAttempted, handleTurnEnded } from "./scheduler-submit.js";
18
+ import { NUDGE_ATTEMPTS, refToString, REPAIR_ATTEMPTS, WorkflowError, } from "./types.js";
19
+ export class AskScheduler {
20
+ host;
21
+ actors = new Map();
22
+ actorOrder = [];
23
+ liveNodes = new Map();
24
+ /**
25
+ * 「转录早于本次派发」的 ask 实例(`siteId@ordinal`):续跑前驱在飞 ask 的,以及 resume 时
26
+ * 据 running 行重新派发的。它们落 journal 的 stats 要抹掉 `worldToolCalls`,见 {@link journaledStats}。
27
+ * 结算后不清理——迟到的 stats 回填还要查它。
28
+ */
29
+ priorTranscriptAsks = new Set();
30
+ /**
31
+ * 每个 actor 在 journal 里已记录的 ask 行数(`siteId@ordinal` → 行数),由引擎的 resume 分支用它
32
+ * 已经读好的 ask 行一次建好({@link seedRecordedAsks})。修复原因:registerActor 原先每建一个
33
+ * actor 就把整张节点表读一遍再过滤——宽扇出下是 O(actor × 行) 次解码,而且解的是每条 ask 的回答
34
+ * 与每条 report item。一次建表是对的:actor 总在它的第一次 ask 之前注册,所以注册那一刻 journal
35
+ * 里属于它的 ask 行只可能来自前几世;全新 run 的表为空。
36
+ */
37
+ recordedAsks = new Map();
38
+ activeAsks = 0;
39
+ /** scheduler-submit.ts 的自由函数经它查 live 节点、按结果结算(见 {@link SubmitSeam})。 */
40
+ submitSeam;
41
+ constructor(host) {
42
+ this.host = host;
43
+ this.submitSeam = {
44
+ host,
45
+ liveNode: (instance) => this.liveNodes.get(refToString(instance)),
46
+ settleOk: (node, artifact) => this.settleOk(node, artifact),
47
+ settleFailed: (node, error) => this.settleFailed(node, error),
48
+ };
49
+ }
50
+ get journal() {
51
+ return this.host.driver.journal;
52
+ }
53
+ /** resume 时喂入本 run 已落库的 ask 行(可不带结果),建好 {@link recordedAsks}。 */
54
+ seedRecordedAsks(askRows) {
55
+ for (const row of askRows) {
56
+ if (row.kind !== "ask" || row.actorSiteId === undefined || row.actorOrdinal === undefined) {
57
+ continue;
58
+ }
59
+ const actorKey = refToString({ siteId: row.actorSiteId, ordinal: row.actorOrdinal });
60
+ this.recordedAsks.set(actorKey, (this.recordedAsks.get(actorKey) ?? 0) + 1);
61
+ }
62
+ }
63
+ hasActor(id) {
64
+ return this.actors.has(id);
65
+ }
66
+ /**
67
+ * 注册一个 actor(创建站点 × 序号)。`imported` 是 amend-resume 的导入候选:引擎已在
68
+ * createActor 里按有效名 + 规范化 persona 匹配过,调度器只负责消费它。
69
+ */
70
+ registerActor(ref, id, name, persona, imported) {
71
+ const recordedCount = this.recordedAsks.get(refToString(ref)) ?? 0;
72
+ const actor = {
73
+ ref,
74
+ id,
75
+ persona,
76
+ name,
77
+ recordedCount,
78
+ nextAdmitSeq: 0,
79
+ pendingRecorded: new Map(),
80
+ pendingLive: [],
81
+ liveQueue: [],
82
+ ...(imported === undefined ? {} : { imported }),
83
+ };
84
+ // 不能把 journal 记录的 sessionId 预解析成 actor.session/sessionPromise:
85
+ // 让 resume 后的 ensureSession 跳过 driver.createActorSession。但生产 driver 的会话表
86
+ // **只**在 createActorSession 里填充,startAsk 按表查会话——于是 resume 重新派发的每个
87
+ // ask 都以「未知会话」失败。纯 replay(零派发)与 fake driver(startAsk 不查表)都暴露
88
+ // 不了它。会话身份本就归 driver 所有(生产铸造函数按 (runId, actorRef) 纯确定,重挂时
89
+ // 铸出同一个 id);journal 的 dwf_actor.session_id 是记录、不是权威,所以这里绝不从
90
+ // journal 短路会话——首次派发一律走 driver.createActorSession(见 ensureSession)。
91
+ this.actors.set(id, actor);
92
+ this.actorOrder.push(actor);
93
+ return actor;
94
+ }
95
+ /** 受理一次 ask:完结命中短路(走 hold 规则),running 命中或未命中则 live 派发。 */
96
+ admitAsk(siteId, actorId, instructions, spec) {
97
+ const actor = this.actors.get(actorId);
98
+ const ordinal = this.host.nextOrdinal(siteId);
99
+ const instance = { siteId, ordinal };
100
+ const hash = inputHash(instructions);
101
+ const deferred = defer();
102
+ const recorded = this.journal.getNode(this.host.runId, siteId, ordinal);
103
+ if (recorded !== undefined) {
104
+ // 命中即防御性校验 inputHash——不一致说明纯度契约被破坏,run 大声失败。
105
+ if (recorded.inputHash !== hash) {
106
+ const err = hashMismatch(instance, recorded.inputHash, hash);
107
+ this.host.failRun(err);
108
+ return Promise.reject(err);
109
+ }
110
+ const seq = recorded.actorSeq ?? 0;
111
+ const reconcile = () => actor.imported?.reconcileRecorded(seq, recorded.inputHash, this.host.wasLiveBeforeResume(instance), this.host.wasQueuedBeforeImportClose(instance));
112
+ if (recorded.status === "running") {
113
+ // 崩溃于执行中:按记录的 actorSeq 位置重新 live 派发(hold 规则保证其准入次序)。
114
+ // 这一条的转录里已经有上一轮跑出来的那些消息,所以按「转录早于本次派发」记 stats。
115
+ actor.pendingRecorded.set(seq, () => {
116
+ reconcile();
117
+ this.admitLive(instance, actor, seq, instructions, hash, spec, deferred, true);
118
+ });
119
+ }
120
+ else {
121
+ // completed / failed:短路结算,无 driver 调用。出生事实在 reconcile 之后**当场**取
122
+ // (答案是否读自前驱的转录,看的是此刻的导入消费态;事件可能被结算次序闸推迟)。
123
+ actor.pendingRecorded.set(seq, () => {
124
+ reconcile();
125
+ this.releaseCachedAsk(instance, recorded, deferred, cachedAskFacts(actor.ref, seq, instructions, actor.imported));
126
+ });
127
+ }
128
+ this.drainAdmission(actor);
129
+ return deferred.promise;
130
+ }
131
+ // 未命中(fresh):注册到 pendingLive,按到达顺序在记录节点排空后准入并分配新的 actorSeq。
132
+ // 分配到 seq 之后先问导入缓存(amend-resume):命中即 cached settle,不 live。
133
+ actor.pendingLive.push(() => {
134
+ const seq = actor.nextAdmitSeq++;
135
+ if (this.tryImportedSettle(instance, actor, seq, hash, instructions, deferred))
136
+ return;
137
+ // 未命中之后才知道它是不是「续跑前驱的在飞 ask」——判定在 take 里随分歧一起做出。
138
+ const carried = actor.imported?.carriedAt(seq) === true;
139
+ this.admitLive(instance, actor, seq, instructions, hash, spec, deferred, carried);
140
+ });
141
+ this.drainAdmission(actor);
142
+ this.pumpAll();
143
+ return deferred.promise;
144
+ }
145
+ /**
146
+ * 把一个 ask 作为 live 节点准入:建节点、准入即落 running 记录、入队并记事件。
147
+ *
148
+ * `priorTranscript` 为真表示这一条不是从空转录开跑的(续跑前驱在飞 ask,或 resume 据 running
149
+ * 行重新派发)——它只影响 stats 怎么落库,见 {@link journaledStats}。
150
+ */
151
+ admitLive(instance, actor, seq, instructions, hash, spec, deferred, priorTranscript = false) {
152
+ if (priorTranscript)
153
+ this.priorTranscriptAsks.add(refToString(instance));
154
+ // 指令开头随出生事件一起落轨(docs/execution-engine.md「Events」):这里的 instructions 还是
155
+ // 作者的原文——driver 的质量 / schema 尾注在 startAsk 里才追加,所以摘要里不会混进引擎的话。
156
+ // 算一次存在节点上:派发要重复出生事实,两条事件带的必须是同一个串。
157
+ const instructionsHead = headOfInstructions(instructions);
158
+ const node = {
159
+ instance,
160
+ actor,
161
+ actorSeq: seq,
162
+ instructions,
163
+ hash,
164
+ spec,
165
+ deferred,
166
+ repairsRemaining: REPAIR_ATTEMPTS,
167
+ nudgesRemaining: NUDGE_ATTEMPTS,
168
+ settled: false,
169
+ dispatched: false,
170
+ ...(instructionsHead === undefined ? {} : { instructionsHead }),
171
+ };
172
+ this.liveNodes.set(refToString(instance), node);
173
+ // 准入即落 running(携 actorSeq + inputHash):崩溃于执行中的节点 resume 可据此重新派发。
174
+ this.journal.putNode({
175
+ runId: this.host.runId,
176
+ siteId: instance.siteId,
177
+ ordinal: instance.ordinal,
178
+ kind: "ask",
179
+ actorSiteId: actor.ref.siteId,
180
+ actorOrdinal: actor.ref.ordinal,
181
+ actorSeq: seq,
182
+ inputHash: hash,
183
+ status: "running",
184
+ });
185
+ actor.liveQueue.push(node);
186
+ this.host.record({
187
+ type: "node-queued",
188
+ instance,
189
+ kind: "ask",
190
+ actor: actor.ref,
191
+ actorSeq: seq,
192
+ ...(instructionsHead === undefined ? {} : { instructionsHead }),
193
+ });
194
+ // 转 live **不**关导入缓存。曾经在这里关:任一 ask live
195
+ // 即视为工作区可能被改写。那是拿时钟代替依赖——同一个 Promise.all 里排在第一个未命中之后的
196
+ // 兄弟 ask 全被判失效,而它们之间没有任何依赖(实测 50 路扇出丢 6 个命中,5 路扇出
197
+ // 丢掉唯一的 1 个)。现在关门的是**第一笔写入**:driver 在子代理即将执行改写工具时上报
198
+ // askMutating,或一条 world.run live 执行;在此之前的世界与前驱留下的世界相同,缓存命中都成立。
199
+ }
200
+ /**
201
+ * fresh ask 准入时问一次导入缓存(amend-resume)。命中即 **cached settle** 并返回 true
202
+ * (调用方不再 live);判定与分歧记账全在 {@link ImportedActorState}。
203
+ *
204
+ * 命中写一行**真** dwf_node,只发 `node-settled cached:true`——与 replay 命中的
205
+ * {@link releaseCachedAsk} 同一副姿态:不发 node-queued / node-dispatched,
206
+ * 不入 liveQueue,不建会话,不占 `actor.current`。那条结算因此就是出生事件,重发出生事实,
207
+ * 并点名前驱里持有这段交换的会话({@link cachedAskFacts})。
208
+ */
209
+ tryImportedSettle(instance, actor, seq, hash, instructions, deferred) {
210
+ // 缓存已关闭 ⇒ 只放**纯** ask(前驱记下 toolCalls === 0):它只依赖指令与转录前缀,与工作区
211
+ // 无关,所以对旧世界的答案对新世界同样成立;带工具的条目即便同哈希也转 live——它读过的
212
+ // 工作区可能已被改写。转 live 的那个 ask 让该 actor 分歧(转录从此不同),已消费前缀仍是种子
213
+ // 边界的依据。
214
+ const entry = this.host.importCacheClosed()
215
+ ? actor.imported?.takeIfPure(seq, hash)
216
+ : actor.imported?.take(seq, hash);
217
+ if (entry === undefined)
218
+ return false;
219
+ this.journal.putNode(importedAskRecord(this.host.runId, instance, actor.ref, seq, hash, entry));
220
+ const facts = cachedAskFacts(actor.ref, seq, instructions, actor.imported);
221
+ this.host.record({ type: "node-settled", instance, outcome: "ok", cached: true, ...facts });
222
+ deferred.resolve(entry.result);
223
+ return true;
224
+ }
225
+ // ——————————————————————————————— 向上回报 ———————————————————————————————
226
+ /** submit_result 到达:方法体在 scheduler-submit.ts 的 handleSubmitAttempted。 */
227
+ submitAttempted(instance, payload) {
228
+ handleSubmitAttempted(this.submitSeam, instance, payload);
229
+ }
230
+ /** turn 结束(无 submit):方法体在 scheduler-submit.ts 的 handleTurnEnded。 */
231
+ turnEnded(instance, finalText) {
232
+ handleTurnEnded(this.submitSeam, instance, finalText);
233
+ }
234
+ noteStats(instance, stats) {
235
+ const node = this.liveNodes.get(refToString(instance));
236
+ if (node !== undefined) {
237
+ node.lastStats = stats;
238
+ return;
239
+ }
240
+ // 节点已离开 liveNodes——typed-accept 主导路径:submit 停 turn 并在 settle 时落库,而真实
241
+ // actor 的用量在 turn 解析后(submit 之后)才知道,故 stats 在结算之后才到达。回填已结算的
242
+ // journal 记录:只新增/覆写 stats,保留 status/result/actorSeq/inputHash/error/kind/actor 身份。
243
+ // 尽力而为且幂等;预算扣减仍在 engine.askStats(此处只补 journal 完整性)。
244
+ const recorded = this.journal.getNode(this.host.runId, instance.siteId, instance.ordinal);
245
+ if (recorded === undefined)
246
+ return;
247
+ this.journal.putNode({ ...recorded, stats: this.journaledStats(instance, stats) });
248
+ }
249
+ /**
250
+ * 落 journal 的 stats:**转录早于本次派发**的 ask 抹掉 `worldToolCalls`。
251
+ *
252
+ * 根因:driver 的工具计数器是内存态、每次 ask 起跑时清零,所以接着一段既有转录跑的 ask 只数
253
+ * 得到自己这几轮,转录里原有的工具调用一个也数不到。少报的后果不是账目不准(那是 tokens 的
254
+ * 事),而是**纯度判据被污染**:一个报 0 的 ask 会被后来的修订当成纯条目,在关门之后仍从缓存
255
+ * 结算——而它其实碰过工作区。缺席这个键本就表示「碰过」(保守读法),所以抹掉才是诚实记录。
256
+ * tokens / toolCalls / turns 照记:它们是用量,不是纯度声明。
257
+ */
258
+ journaledStats(instance, stats) {
259
+ if (!this.priorTranscriptAsks.has(refToString(instance)))
260
+ return stats;
261
+ const { worldToolCalls: _unreliable, ...rest } = stats;
262
+ return rest;
263
+ }
264
+ failed(instance, error) {
265
+ const node = this.liveNodes.get(refToString(instance));
266
+ if (node === undefined || node.settled)
267
+ return;
268
+ this.settleFailed(node, error);
269
+ }
270
+ /** 该实例是否仍是在飞(已准入、未结算)的 live ask——限流观察事件只对这样的节点有意义。 */
271
+ isLive(instance) {
272
+ const node = this.liveNodes.get(refToString(instance));
273
+ return node !== undefined && !node.settled;
274
+ }
275
+ /** 在飞 ask 所属子代理的有效名(关门事件里点名用);不在飞即 undefined。 */
276
+ liveActorName(instance) {
277
+ const node = this.liveNodes.get(refToString(instance));
278
+ return node === undefined || node.settled ? undefined : node.actor.persona.name;
279
+ }
280
+ /** 中止所有在飞 ask:run 取消/失败时用。emitCancelled 为真时补发 node-settled(cancelled)。 */
281
+ abortInFlight(error, emitCancelled) {
282
+ for (const node of this.liveNodes.values()) {
283
+ if (node.settled)
284
+ continue;
285
+ node.settled = true;
286
+ if (node.dispatched)
287
+ this.host.driver.cancelAsk(node.instance);
288
+ if (emitCancelled) {
289
+ this.host.record({ type: "node-settled", instance: node.instance, outcome: "cancelled" });
290
+ }
291
+ node.deferred.reject(error);
292
+ }
293
+ this.liveNodes.clear();
294
+ this.activeAsks = 0;
295
+ }
296
+ // ——————————————————————————————— 内部:准入 / 派发 ———————————————————————————————
297
+ drainAdmission(actor) {
298
+ let progressed = true;
299
+ while (progressed) {
300
+ progressed = false;
301
+ const release = actor.pendingRecorded.get(actor.nextAdmitSeq);
302
+ if (release !== undefined) {
303
+ actor.pendingRecorded.delete(actor.nextAdmitSeq);
304
+ actor.nextAdmitSeq++;
305
+ release();
306
+ progressed = true;
307
+ continue;
308
+ }
309
+ if (actor.nextAdmitSeq >= actor.recordedCount && actor.pendingLive.length > 0) {
310
+ const admit = actor.pendingLive.shift();
311
+ admit();
312
+ progressed = true;
313
+ }
314
+ }
315
+ this.pumpActor(actor);
316
+ }
317
+ /**
318
+ * 命中记录的 ask:按 journal 记下的**结算次序**释放(docs/execution-engine.md
319
+ * 「Replaying the settle order」)。hold 规则定的是同一个 actor 内的准入次序,跨 actor 的
320
+ * 完成次序要这一道闸才回得来——扇出分支在 await 之后的每一次 journal 调用都按它编号。
321
+ */
322
+ releaseCachedAsk(instance, recorded, deferred, facts) {
323
+ this.host.holdForReplay(instance, () => this.settleCachedAsk(instance, recorded, deferred, facts));
324
+ }
325
+ settleCachedAsk(instance, recorded, deferred, facts) {
326
+ if (recorded.status === "completed") {
327
+ this.host.record({ type: "node-settled", instance, outcome: "ok", cached: true, ...facts });
328
+ deferred.resolve(recorded.result);
329
+ }
330
+ else {
331
+ // 已记录的失败也要短路复现:脚本可能已 try/catch 过它并据此分支,replay 必须重放同一 rejection。
332
+ this.host.record({ type: "node-settled", instance, outcome: "failed", cached: true, error: recorded.error, ...facts });
333
+ deferred.reject(WorkflowError.fromJSON(recorded.error));
334
+ }
335
+ }
336
+ /**
337
+ * 重扫每个 actor 的待派发队列。公开面**只为一个调用方**:引擎在抬高本 run 的并发上界之后
338
+ * 调它(docs/dynamic-workflow/concurrency.md「Two bounds on a run」)。上界本身是
339
+ * {@link pumpActor} 每次派发前现读的,但没有任何别的事件会触发一次重扫——排队的 ask
340
+ * 否则要一直等到下一次结算才动,而「抬高之后立刻多跑几个」正是这条命令买的东西。
341
+ */
342
+ pumpAll() {
343
+ for (const actor of this.actorOrder)
344
+ this.pumpActor(actor);
345
+ }
346
+ pumpActor(actor) {
347
+ if (this.host.isRunSettled())
348
+ return;
349
+ if (actor.current !== undefined)
350
+ return;
351
+ if (actor.liveQueue.length === 0)
352
+ return;
353
+ if (this.activeAsks >= this.host.caps.maxConcurrency)
354
+ return;
355
+ const node = actor.liveQueue.shift();
356
+ actor.current = node;
357
+ this.activeAsks++;
358
+ void this.dispatch(node);
359
+ }
360
+ async dispatch(node) {
361
+ let session;
362
+ try {
363
+ session = await this.ensureSession(node.actor);
364
+ }
365
+ catch (cause) {
366
+ if (this.host.isRunSettled() || node.settled)
367
+ return;
368
+ // 把 cause 的文本带进 message:WorkflowError.toJSON 只落 code/message,cause 不进 journal 也
369
+ // 无人记日志,于是「创建 actor 会话失败」在 GUI / journal 里成了无法诊断的黑盒
370
+ // (实机上底层其实是 session_task_link 的 FOREIGN KEY constraint failed)。
371
+ this.settleFailed(node, new WorkflowError("DriverError", `Failed to create the subagent session: ${describeCause(cause)}`, { cause }));
372
+ return;
373
+ }
374
+ if (this.host.isRunSettled() || node.settled)
375
+ return;
376
+ // node-dispatched 在会话就绪之后(docs/dynamic-workflow/concurrency.md「Two bounds on a run」)。进程级并发闸门
377
+ // 不在这里:它按**模型请求**准入,住在 driver 之下的 runtime deps 里(决策 34/38);调度器只守
378
+ // per-run 的 ask 级上界(决策 17)。
379
+ // 这一条重复该实例的出生事实(types.ts 的 `node-dispatched`):调度器手上现成的那几样
380
+ // 与它的 `node-queued` 同源,两个出生阶段名由引擎在 record 里按同一张铸造表补。
381
+ this.host.record({
382
+ type: "node-dispatched",
383
+ instance: node.instance,
384
+ kind: "ask",
385
+ actor: node.actor.ref,
386
+ ...(node.actor.name === undefined ? {} : { actorName: node.actor.name }),
387
+ ...(node.actor.persona.model === undefined
388
+ ? {}
389
+ : { actorPersonaModel: node.actor.persona.model }),
390
+ ...(node.instructionsHead === undefined ? {} : { instructionsHead: node.instructionsHead }),
391
+ });
392
+ node.dispatched = true;
393
+ const message = {
394
+ instructions: node.instructions,
395
+ typed: node.spec.typed,
396
+ schema: node.spec.schema,
397
+ };
398
+ this.host.driver.startAsk(session, node.instance, message);
399
+ }
400
+ ensureSession(actor) {
401
+ if (actor.sessionPromise !== undefined)
402
+ return actor.sessionPromise;
403
+ // 种子只有到分歧点才知道(运行期发现),所以必须在这里、由引擎侧交给 driver——引擎持有
404
+ // 导入态,driver 持有会话 store,这个签名是两者的最小汇合点。
405
+ const seed = actor.imported?.seed();
406
+ const promise = this.host.driver.createActorSession(actor.ref, actor.persona, seed).then((session) => {
407
+ actor.session = session;
408
+ // resolvedModel 由宿主侧的 runtime 工厂在 createActorSession **内部**写下(它才知道
409
+ // "lite" 落到哪个模型)。putActor 是整条记录的替换,所以这条写入必须把刚写下的值读回来
410
+ // 带过去,否则这里就会把它抹掉——档位解析的审计与 resume 依据随之丢失。
411
+ const resolvedModel = this.journal.getActor(this.host.runId, actor.ref.siteId, actor.ref.ordinal)?.resolvedModel;
412
+ this.journal.putActor({
413
+ runId: this.host.runId,
414
+ siteId: actor.ref.siteId,
415
+ ordinal: actor.ref.ordinal,
416
+ name: actor.name,
417
+ persona: actor.persona,
418
+ sessionId: session.id,
419
+ resolvedModel,
420
+ });
421
+ return session;
422
+ });
423
+ actor.sessionPromise = promise;
424
+ return promise;
425
+ }
426
+ // ——————————————————————————————— 内部:结算 ———————————————————————————————
427
+ settleOk(node, artifact) {
428
+ if (node.settled)
429
+ return;
430
+ node.settled = true;
431
+ this.journal.putNode(this.nodeRecordFor(node, { status: "completed", result: artifact }));
432
+ this.host.record({ type: "node-settled", instance: node.instance, outcome: "ok" });
433
+ this.finishLiveNode(node);
434
+ node.deferred.resolve(artifact);
435
+ }
436
+ settleFailed(node, error) {
437
+ if (node.settled)
438
+ return;
439
+ node.settled = true;
440
+ // 结算失败必须落 journal(覆盖准入时的 running):失败是"完结",且脚本可能已观察到该 rejection
441
+ // 并据此分支,replay 必须复现它——journal 化失败是重放正确性的硬性要求,而非可选。
442
+ this.journal.putNode(this.nodeRecordFor(node, { status: "failed", error: error.toJSON() }));
443
+ this.host.record({ type: "node-settled", instance: node.instance, outcome: "failed", error: error.toJSON() });
444
+ this.finishLiveNode(node);
445
+ // 节点失败只 reject 该 ask,不失败整个 run(脚本可 try/catch)。
446
+ node.deferred.reject(error);
447
+ }
448
+ finishLiveNode(node) {
449
+ this.liveNodes.delete(refToString(node.instance));
450
+ if (node.actor.current === node) {
451
+ node.actor.current = undefined;
452
+ this.activeAsks--;
453
+ }
454
+ this.pumpAll();
455
+ }
456
+ nodeRecordFor(node, outcome) {
457
+ const record = {
458
+ runId: this.host.runId,
459
+ siteId: node.instance.siteId,
460
+ ordinal: node.instance.ordinal,
461
+ kind: "ask",
462
+ actorSiteId: node.actor.ref.siteId,
463
+ actorOrdinal: node.actor.ref.ordinal,
464
+ actorSeq: node.actorSeq,
465
+ inputHash: node.hash,
466
+ status: outcome.status,
467
+ };
468
+ if (outcome.status === "completed")
469
+ record.result = outcome.result;
470
+ else
471
+ record.error = outcome.error;
472
+ if (node.lastStats !== undefined)
473
+ record.stats = this.journaledStats(node.instance, node.lastStats);
474
+ return record;
475
+ }
476
+ }
477
+ /** cause → 一行有界文本(Error 取 message,其余 String();空则给占位)。 */
478
+ function describeCause(cause) {
479
+ const text = cause instanceof Error ? cause.message : String(cause);
480
+ const trimmed = text.trim();
481
+ if (trimmed.length === 0)
482
+ return "unknown error";
483
+ return trimmed.length > 300 ? `${trimmed.slice(0, 300)}…` : trimmed;
484
+ }