@sunshaobei/dsh-workflow 0.0.0-stage → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/README.md +43 -2
  2. package/cordis.patch.yml +17 -0
  3. package/lib/client.js +14708 -0
  4. package/lib/core.js +137 -0
  5. package/lib/engine-adapter.js +1387 -0
  6. package/lib/host-driver.js +298 -0
  7. package/lib/index.js +536 -0
  8. package/lib/projection.js +159 -0
  9. package/lib/registry.js +218 -0
  10. package/lib/session-records.js +54 -0
  11. package/lib/submission-commit.js +34 -0
  12. package/lib/world-driver.js +275 -0
  13. package/package.json +67 -4
  14. package/vendor/PROVENANCE.md +9 -0
  15. package/vendor/dynamic-workflow/analysis/actor-graph.d.ts +47 -0
  16. package/vendor/dynamic-workflow/analysis/actor-graph.d.ts.map +1 -0
  17. package/vendor/dynamic-workflow/analysis/actor-graph.js +95 -0
  18. package/vendor/dynamic-workflow/analysis/actor-models.d.ts +60 -0
  19. package/vendor/dynamic-workflow/analysis/actor-models.d.ts.map +1 -0
  20. package/vendor/dynamic-workflow/analysis/actor-models.js +208 -0
  21. package/vendor/dynamic-workflow/analysis/actor-names.d.ts +56 -0
  22. package/vendor/dynamic-workflow/analysis/actor-names.d.ts.map +1 -0
  23. package/vendor/dynamic-workflow/analysis/actor-names.js +155 -0
  24. package/vendor/dynamic-workflow/analysis/analyze.d.ts +63 -0
  25. package/vendor/dynamic-workflow/analysis/analyze.d.ts.map +1 -0
  26. package/vendor/dynamic-workflow/analysis/analyze.js +92 -0
  27. package/vendor/dynamic-workflow/analysis/array-methods.d.ts +21 -0
  28. package/vendor/dynamic-workflow/analysis/array-methods.d.ts.map +1 -0
  29. package/vendor/dynamic-workflow/analysis/array-methods.js +132 -0
  30. package/vendor/dynamic-workflow/analysis/artifact-types.d.ts +39 -0
  31. package/vendor/dynamic-workflow/analysis/artifact-types.d.ts.map +1 -0
  32. package/vendor/dynamic-workflow/analysis/artifact-types.js +114 -0
  33. package/vendor/dynamic-workflow/analysis/artifacts.d.ts +67 -0
  34. package/vendor/dynamic-workflow/analysis/artifacts.d.ts.map +1 -0
  35. package/vendor/dynamic-workflow/analysis/artifacts.js +263 -0
  36. package/vendor/dynamic-workflow/analysis/assign.d.ts +42 -0
  37. package/vendor/dynamic-workflow/analysis/assign.d.ts.map +1 -0
  38. package/vendor/dynamic-workflow/analysis/assign.js +287 -0
  39. package/vendor/dynamic-workflow/analysis/callbacks.d.ts +71 -0
  40. package/vendor/dynamic-workflow/analysis/callbacks.d.ts.map +1 -0
  41. package/vendor/dynamic-workflow/analysis/callbacks.js +133 -0
  42. package/vendor/dynamic-workflow/analysis/calls.d.ts +40 -0
  43. package/vendor/dynamic-workflow/analysis/calls.d.ts.map +1 -0
  44. package/vendor/dynamic-workflow/analysis/calls.js +495 -0
  45. package/vendor/dynamic-workflow/analysis/causality-graph-lanes.d.ts +25 -0
  46. package/vendor/dynamic-workflow/analysis/causality-graph-lanes.d.ts.map +1 -0
  47. package/vendor/dynamic-workflow/analysis/causality-graph-lanes.js +161 -0
  48. package/vendor/dynamic-workflow/analysis/causality-graph-types.d.ts +163 -0
  49. package/vendor/dynamic-workflow/analysis/causality-graph-types.d.ts.map +1 -0
  50. package/vendor/dynamic-workflow/analysis/causality-graph-types.js +8 -0
  51. package/vendor/dynamic-workflow/analysis/causality-graph.d.ts +39 -0
  52. package/vendor/dynamic-workflow/analysis/causality-graph.d.ts.map +1 -0
  53. package/vendor/dynamic-workflow/analysis/causality-graph.js +530 -0
  54. package/vendor/dynamic-workflow/analysis/causality-order-calls.d.ts +29 -0
  55. package/vendor/dynamic-workflow/analysis/causality-order-calls.d.ts.map +1 -0
  56. package/vendor/dynamic-workflow/analysis/causality-order-calls.js +266 -0
  57. package/vendor/dynamic-workflow/analysis/causality-order-functions.d.ts +26 -0
  58. package/vendor/dynamic-workflow/analysis/causality-order-functions.d.ts.map +1 -0
  59. package/vendor/dynamic-workflow/analysis/causality-order-functions.js +116 -0
  60. package/vendor/dynamic-workflow/analysis/causality-order-loops.d.ts +5 -0
  61. package/vendor/dynamic-workflow/analysis/causality-order-loops.d.ts.map +1 -0
  62. package/vendor/dynamic-workflow/analysis/causality-order-loops.js +148 -0
  63. package/vendor/dynamic-workflow/analysis/causality-order-settle.d.ts +39 -0
  64. package/vendor/dynamic-workflow/analysis/causality-order-settle.d.ts.map +1 -0
  65. package/vendor/dynamic-workflow/analysis/causality-order-settle.js +263 -0
  66. package/vendor/dynamic-workflow/analysis/causality-order-state.d.ts +110 -0
  67. package/vendor/dynamic-workflow/analysis/causality-order-state.d.ts.map +1 -0
  68. package/vendor/dynamic-workflow/analysis/causality-order-state.js +162 -0
  69. package/vendor/dynamic-workflow/analysis/causality-order-strands.d.ts +79 -0
  70. package/vendor/dynamic-workflow/analysis/causality-order-strands.d.ts.map +1 -0
  71. package/vendor/dynamic-workflow/analysis/causality-order-strands.js +154 -0
  72. package/vendor/dynamic-workflow/analysis/causality-order-types.d.ts +174 -0
  73. package/vendor/dynamic-workflow/analysis/causality-order-types.d.ts.map +1 -0
  74. package/vendor/dynamic-workflow/analysis/causality-order-types.js +1 -0
  75. package/vendor/dynamic-workflow/analysis/causality-order-walk.d.ts +17 -0
  76. package/vendor/dynamic-workflow/analysis/causality-order-walk.d.ts.map +1 -0
  77. package/vendor/dynamic-workflow/analysis/causality-order-walk.js +282 -0
  78. package/vendor/dynamic-workflow/analysis/causality-order.d.ts +60 -0
  79. package/vendor/dynamic-workflow/analysis/causality-order.d.ts.map +1 -0
  80. package/vendor/dynamic-workflow/analysis/causality-order.js +110 -0
  81. package/vendor/dynamic-workflow/analysis/causality-reduce.d.ts +60 -0
  82. package/vendor/dynamic-workflow/analysis/causality-reduce.d.ts.map +1 -0
  83. package/vendor/dynamic-workflow/analysis/causality-reduce.js +198 -0
  84. package/vendor/dynamic-workflow/analysis/classes.d.ts +47 -0
  85. package/vendor/dynamic-workflow/analysis/classes.d.ts.map +1 -0
  86. package/vendor/dynamic-workflow/analysis/classes.js +264 -0
  87. package/vendor/dynamic-workflow/analysis/constants.d.ts +35 -0
  88. package/vendor/dynamic-workflow/analysis/constants.d.ts.map +1 -0
  89. package/vendor/dynamic-workflow/analysis/constants.js +23 -0
  90. package/vendor/dynamic-workflow/analysis/control-flow.d.ts +26 -0
  91. package/vendor/dynamic-workflow/analysis/control-flow.d.ts.map +1 -0
  92. package/vendor/dynamic-workflow/analysis/control-flow.js +132 -0
  93. package/vendor/dynamic-workflow/analysis/core-json.d.ts +45 -0
  94. package/vendor/dynamic-workflow/analysis/core-json.d.ts.map +1 -0
  95. package/vendor/dynamic-workflow/analysis/core-json.js +49 -0
  96. package/vendor/dynamic-workflow/analysis/core.d.ts +194 -0
  97. package/vendor/dynamic-workflow/analysis/core.d.ts.map +1 -0
  98. package/vendor/dynamic-workflow/analysis/core.js +204 -0
  99. package/vendor/dynamic-workflow/analysis/domain.d.ts +269 -0
  100. package/vendor/dynamic-workflow/analysis/domain.d.ts.map +1 -0
  101. package/vendor/dynamic-workflow/analysis/domain.js +523 -0
  102. package/vendor/dynamic-workflow/analysis/facade-misuse.d.ts +56 -0
  103. package/vendor/dynamic-workflow/analysis/facade-misuse.d.ts.map +1 -0
  104. package/vendor/dynamic-workflow/analysis/facade-misuse.js +350 -0
  105. package/vendor/dynamic-workflow/analysis/fanout-cardinality.d.ts +11 -0
  106. package/vendor/dynamic-workflow/analysis/fanout-cardinality.d.ts.map +1 -0
  107. package/vendor/dynamic-workflow/analysis/fanout-cardinality.js +121 -0
  108. package/vendor/dynamic-workflow/analysis/flow-graph.d.ts +113 -0
  109. package/vendor/dynamic-workflow/analysis/flow-graph.d.ts.map +1 -0
  110. package/vendor/dynamic-workflow/analysis/flow-graph.js +411 -0
  111. package/vendor/dynamic-workflow/analysis/flow-phase.d.ts +28 -0
  112. package/vendor/dynamic-workflow/analysis/flow-phase.d.ts.map +1 -0
  113. package/vendor/dynamic-workflow/analysis/flow-phase.js +104 -0
  114. package/vendor/dynamic-workflow/analysis/flow-strands.d.ts +39 -0
  115. package/vendor/dynamic-workflow/analysis/flow-strands.d.ts.map +1 -0
  116. package/vendor/dynamic-workflow/analysis/flow-strands.js +47 -0
  117. package/vendor/dynamic-workflow/analysis/flow-tree.d.ts +35 -0
  118. package/vendor/dynamic-workflow/analysis/flow-tree.d.ts.map +1 -0
  119. package/vendor/dynamic-workflow/analysis/flow-tree.js +33 -0
  120. package/vendor/dynamic-workflow/analysis/graph.d.ts +5 -0
  121. package/vendor/dynamic-workflow/analysis/graph.d.ts.map +1 -0
  122. package/vendor/dynamic-workflow/analysis/graph.js +199 -0
  123. package/vendor/dynamic-workflow/analysis/handoff-graph.d.ts +48 -0
  124. package/vendor/dynamic-workflow/analysis/handoff-graph.d.ts.map +1 -0
  125. package/vendor/dynamic-workflow/analysis/handoff-graph.js +0 -0
  126. package/vendor/dynamic-workflow/analysis/heap-ops.d.ts +14 -0
  127. package/vendor/dynamic-workflow/analysis/heap-ops.d.ts.map +1 -0
  128. package/vendor/dynamic-workflow/analysis/heap-ops.js +70 -0
  129. package/vendor/dynamic-workflow/analysis/hole-id.d.ts +28 -0
  130. package/vendor/dynamic-workflow/analysis/hole-id.d.ts.map +1 -0
  131. package/vendor/dynamic-workflow/analysis/hole-id.js +41 -0
  132. package/vendor/dynamic-workflow/analysis/hole-sites.d.ts +32 -0
  133. package/vendor/dynamic-workflow/analysis/hole-sites.d.ts.map +1 -0
  134. package/vendor/dynamic-workflow/analysis/hole-sites.js +215 -0
  135. package/vendor/dynamic-workflow/analysis/hole-splice.d.ts +45 -0
  136. package/vendor/dynamic-workflow/analysis/hole-splice.d.ts.map +1 -0
  137. package/vendor/dynamic-workflow/analysis/hole-splice.js +100 -0
  138. package/vendor/dynamic-workflow/analysis/interpret.d.ts +26 -0
  139. package/vendor/dynamic-workflow/analysis/interpret.d.ts.map +1 -0
  140. package/vendor/dynamic-workflow/analysis/interpret.js +200 -0
  141. package/vendor/dynamic-workflow/analysis/literals.d.ts +18 -0
  142. package/vendor/dynamic-workflow/analysis/literals.d.ts.map +1 -0
  143. package/vendor/dynamic-workflow/analysis/literals.js +125 -0
  144. package/vendor/dynamic-workflow/analysis/mermaid.d.ts +60 -0
  145. package/vendor/dynamic-workflow/analysis/mermaid.d.ts.map +1 -0
  146. package/vendor/dynamic-workflow/analysis/mermaid.js +477 -0
  147. package/vendor/dynamic-workflow/analysis/patterns.d.ts +31 -0
  148. package/vendor/dynamic-workflow/analysis/patterns.d.ts.map +1 -0
  149. package/vendor/dynamic-workflow/analysis/patterns.js +94 -0
  150. package/vendor/dynamic-workflow/analysis/phase-graph.d.ts +47 -0
  151. package/vendor/dynamic-workflow/analysis/phase-graph.d.ts.map +1 -0
  152. package/vendor/dynamic-workflow/analysis/phase-graph.js +334 -0
  153. package/vendor/dynamic-workflow/analysis/phases.d.ts +24 -0
  154. package/vendor/dynamic-workflow/analysis/phases.d.ts.map +1 -0
  155. package/vendor/dynamic-workflow/analysis/phases.js +54 -0
  156. package/vendor/dynamic-workflow/analysis/promise-ops.d.ts +52 -0
  157. package/vendor/dynamic-workflow/analysis/promise-ops.d.ts.map +1 -0
  158. package/vendor/dynamic-workflow/analysis/promise-ops.js +123 -0
  159. package/vendor/dynamic-workflow/analysis/relays.d.ts +12 -0
  160. package/vendor/dynamic-workflow/analysis/relays.d.ts.map +1 -0
  161. package/vendor/dynamic-workflow/analysis/relays.js +78 -0
  162. package/vendor/dynamic-workflow/analysis/serialize.d.ts +125 -0
  163. package/vendor/dynamic-workflow/analysis/serialize.d.ts.map +1 -0
  164. package/vendor/dynamic-workflow/analysis/serialize.js +321 -0
  165. package/vendor/dynamic-workflow/analysis/site-phases.d.ts +32 -0
  166. package/vendor/dynamic-workflow/analysis/site-phases.d.ts.map +1 -0
  167. package/vendor/dynamic-workflow/analysis/site-phases.js +69 -0
  168. package/vendor/dynamic-workflow/analysis/sites-labels.d.ts +71 -0
  169. package/vendor/dynamic-workflow/analysis/sites-labels.d.ts.map +1 -0
  170. package/vendor/dynamic-workflow/analysis/sites-labels.js +189 -0
  171. package/vendor/dynamic-workflow/analysis/sites.d.ts +267 -0
  172. package/vendor/dynamic-workflow/analysis/sites.d.ts.map +1 -0
  173. package/vendor/dynamic-workflow/analysis/sites.js +225 -0
  174. package/vendor/dynamic-workflow/analysis/state.d.ts +254 -0
  175. package/vendor/dynamic-workflow/analysis/state.d.ts.map +1 -0
  176. package/vendor/dynamic-workflow/analysis/state.js +569 -0
  177. package/vendor/dynamic-workflow/analysis/taint.d.ts +97 -0
  178. package/vendor/dynamic-workflow/analysis/taint.d.ts.map +1 -0
  179. package/vendor/dynamic-workflow/analysis/taint.js +649 -0
  180. package/vendor/dynamic-workflow/analysis/types.d.ts +100 -0
  181. package/vendor/dynamic-workflow/analysis/types.d.ts.map +1 -0
  182. package/vendor/dynamic-workflow/analysis/types.js +1 -0
  183. package/vendor/dynamic-workflow/analysis/world-run.d.ts +27 -0
  184. package/vendor/dynamic-workflow/analysis/world-run.d.ts.map +1 -0
  185. package/vendor/dynamic-workflow/analysis/world-run.js +44 -0
  186. package/vendor/dynamic-workflow/compiler/compile.d.ts +59 -0
  187. package/vendor/dynamic-workflow/compiler/compile.d.ts.map +1 -0
  188. package/vendor/dynamic-workflow/compiler/compile.js +159 -0
  189. package/vendor/dynamic-workflow/compiler/libs.generated.d.ts +3 -0
  190. package/vendor/dynamic-workflow/compiler/libs.generated.d.ts.map +1 -0
  191. package/vendor/dynamic-workflow/compiler/libs.generated.js +64 -0
  192. package/vendor/dynamic-workflow/engine/artifact-spec.d.ts +26 -0
  193. package/vendor/dynamic-workflow/engine/artifact-spec.d.ts.map +1 -0
  194. package/vendor/dynamic-workflow/engine/artifact-spec.js +173 -0
  195. package/vendor/dynamic-workflow/engine/ask-observation-types.d.ts +54 -0
  196. package/vendor/dynamic-workflow/engine/ask-observation-types.d.ts.map +1 -0
  197. package/vendor/dynamic-workflow/engine/ask-observation-types.js +19 -0
  198. package/vendor/dynamic-workflow/engine/cached-ask-facts.d.ts +28 -0
  199. package/vendor/dynamic-workflow/engine/cached-ask-facts.d.ts.map +1 -0
  200. package/vendor/dynamic-workflow/engine/cached-ask-facts.js +35 -0
  201. package/vendor/dynamic-workflow/engine/concurrency.d.ts +151 -0
  202. package/vendor/dynamic-workflow/engine/concurrency.d.ts.map +1 -0
  203. package/vendor/dynamic-workflow/engine/concurrency.js +282 -0
  204. package/vendor/dynamic-workflow/engine/engine-artifacts-primary.d.ts +17 -0
  205. package/vendor/dynamic-workflow/engine/engine-artifacts-primary.d.ts.map +1 -0
  206. package/vendor/dynamic-workflow/engine/engine-artifacts-primary.js +29 -0
  207. package/vendor/dynamic-workflow/engine/engine-artifacts.d.ts +55 -0
  208. package/vendor/dynamic-workflow/engine/engine-artifacts.d.ts.map +1 -0
  209. package/vendor/dynamic-workflow/engine/engine-artifacts.js +367 -0
  210. package/vendor/dynamic-workflow/engine/engine-config.d.ts +90 -0
  211. package/vendor/dynamic-workflow/engine/engine-config.d.ts.map +1 -0
  212. package/vendor/dynamic-workflow/engine/engine-config.js +6 -0
  213. package/vendor/dynamic-workflow/engine/engine-holes.d.ts +116 -0
  214. package/vendor/dynamic-workflow/engine/engine-holes.d.ts.map +1 -0
  215. package/vendor/dynamic-workflow/engine/engine-holes.js +142 -0
  216. package/vendor/dynamic-workflow/engine/engine-launch.d.ts +34 -0
  217. package/vendor/dynamic-workflow/engine/engine-launch.d.ts.map +1 -0
  218. package/vendor/dynamic-workflow/engine/engine-launch.js +26 -0
  219. package/vendor/dynamic-workflow/engine/engine-phase-stamp.d.ts +35 -0
  220. package/vendor/dynamic-workflow/engine/engine-phase-stamp.d.ts.map +1 -0
  221. package/vendor/dynamic-workflow/engine/engine-phase-stamp.js +74 -0
  222. package/vendor/dynamic-workflow/engine/engine-report.d.ts +27 -0
  223. package/vendor/dynamic-workflow/engine/engine-report.d.ts.map +1 -0
  224. package/vendor/dynamic-workflow/engine/engine-report.js +151 -0
  225. package/vendor/dynamic-workflow/engine/engine-resume.d.ts +18 -0
  226. package/vendor/dynamic-workflow/engine/engine-resume.d.ts.map +1 -0
  227. package/vendor/dynamic-workflow/engine/engine-resume.js +38 -0
  228. package/vendor/dynamic-workflow/engine/engine-settlement.d.ts +30 -0
  229. package/vendor/dynamic-workflow/engine/engine-settlement.d.ts.map +1 -0
  230. package/vendor/dynamic-workflow/engine/engine-settlement.js +79 -0
  231. package/vendor/dynamic-workflow/engine/engine-state.d.ts +99 -0
  232. package/vendor/dynamic-workflow/engine/engine-state.d.ts.map +1 -0
  233. package/vendor/dynamic-workflow/engine/engine-state.js +13 -0
  234. package/vendor/dynamic-workflow/engine/engine-world.d.ts +36 -0
  235. package/vendor/dynamic-workflow/engine/engine-world.d.ts.map +1 -0
  236. package/vendor/dynamic-workflow/engine/engine-world.js +189 -0
  237. package/vendor/dynamic-workflow/engine/engine.d.ts +263 -0
  238. package/vendor/dynamic-workflow/engine/engine.d.ts.map +1 -0
  239. package/vendor/dynamic-workflow/engine/engine.js +602 -0
  240. package/vendor/dynamic-workflow/engine/errors.d.ts +87 -0
  241. package/vendor/dynamic-workflow/engine/errors.d.ts.map +1 -0
  242. package/vendor/dynamic-workflow/engine/errors.js +56 -0
  243. package/vendor/dynamic-workflow/engine/hash-mismatch.d.ts +10 -0
  244. package/vendor/dynamic-workflow/engine/hash-mismatch.d.ts.map +1 -0
  245. package/vendor/dynamic-workflow/engine/hash-mismatch.js +15 -0
  246. package/vendor/dynamic-workflow/engine/hash.d.ts +16 -0
  247. package/vendor/dynamic-workflow/engine/hash.d.ts.map +1 -0
  248. package/vendor/dynamic-workflow/engine/hash.js +48 -0
  249. package/vendor/dynamic-workflow/engine/imported-cache-types.d.ts +96 -0
  250. package/vendor/dynamic-workflow/engine/imported-cache-types.d.ts.map +1 -0
  251. package/vendor/dynamic-workflow/engine/imported-cache-types.js +6 -0
  252. package/vendor/dynamic-workflow/engine/imported-cache.d.ts +127 -0
  253. package/vendor/dynamic-workflow/engine/imported-cache.d.ts.map +1 -0
  254. package/vendor/dynamic-workflow/engine/imported-cache.js +244 -0
  255. package/vendor/dynamic-workflow/engine/index.d.ts +11 -0
  256. package/vendor/dynamic-workflow/engine/index.d.ts.map +1 -0
  257. package/vendor/dynamic-workflow/engine/index.js +10 -0
  258. package/vendor/dynamic-workflow/engine/journal-memory.d.ts +32 -0
  259. package/vendor/dynamic-workflow/engine/journal-memory.d.ts.map +1 -0
  260. package/vendor/dynamic-workflow/engine/journal-memory.js +243 -0
  261. package/vendor/dynamic-workflow/engine/journal-read-types.d.ts +72 -0
  262. package/vendor/dynamic-workflow/engine/journal-read-types.d.ts.map +1 -0
  263. package/vendor/dynamic-workflow/engine/journal-read-types.js +28 -0
  264. package/vendor/dynamic-workflow/engine/persona.d.ts +20 -0
  265. package/vendor/dynamic-workflow/engine/persona.d.ts.map +1 -0
  266. package/vendor/dynamic-workflow/engine/persona.js +43 -0
  267. package/vendor/dynamic-workflow/engine/replay-order.d.ts +96 -0
  268. package/vendor/dynamic-workflow/engine/replay-order.d.ts.map +1 -0
  269. package/vendor/dynamic-workflow/engine/replay-order.js +229 -0
  270. package/vendor/dynamic-workflow/engine/run-terminal.d.ts +35 -0
  271. package/vendor/dynamic-workflow/engine/run-terminal.d.ts.map +1 -0
  272. package/vendor/dynamic-workflow/engine/run-terminal.js +7 -0
  273. package/vendor/dynamic-workflow/engine/scheduler-submit.d.ts +22 -0
  274. package/vendor/dynamic-workflow/engine/scheduler-submit.d.ts.map +1 -0
  275. package/vendor/dynamic-workflow/engine/scheduler-submit.js +84 -0
  276. package/vendor/dynamic-workflow/engine/scheduler-types.d.ts +105 -0
  277. package/vendor/dynamic-workflow/engine/scheduler-types.d.ts.map +1 -0
  278. package/vendor/dynamic-workflow/engine/scheduler-types.js +17 -0
  279. package/vendor/dynamic-workflow/engine/scheduler.d.ts +113 -0
  280. package/vendor/dynamic-workflow/engine/scheduler.d.ts.map +1 -0
  281. package/vendor/dynamic-workflow/engine/scheduler.js +484 -0
  282. package/vendor/dynamic-workflow/engine/types.d.ts +979 -0
  283. package/vendor/dynamic-workflow/engine/types.d.ts.map +1 -0
  284. package/vendor/dynamic-workflow/engine/types.js +26 -0
  285. package/vendor/dynamic-workflow/engine/world-read-input.d.ts +10 -0
  286. package/vendor/dynamic-workflow/engine/world-read-input.d.ts.map +1 -0
  287. package/vendor/dynamic-workflow/engine/world-read-input.js +55 -0
  288. package/vendor/dynamic-workflow/facade/artifact-caps.d.ts +48 -0
  289. package/vendor/dynamic-workflow/facade/artifact-caps.d.ts.map +1 -0
  290. package/vendor/dynamic-workflow/facade/artifact-caps.js +47 -0
  291. package/vendor/dynamic-workflow/facade/dts-hole.d.ts +16 -0
  292. package/vendor/dynamic-workflow/facade/dts-hole.d.ts.map +1 -0
  293. package/vendor/dynamic-workflow/facade/dts-hole.js +26 -0
  294. package/vendor/dynamic-workflow/facade/dts-model.d.ts +11 -0
  295. package/vendor/dynamic-workflow/facade/dts-model.d.ts.map +1 -0
  296. package/vendor/dynamic-workflow/facade/dts-model.js +18 -0
  297. package/vendor/dynamic-workflow/facade/dts-stream.d.ts +15 -0
  298. package/vendor/dynamic-workflow/facade/dts-stream.d.ts.map +1 -0
  299. package/vendor/dynamic-workflow/facade/dts-stream.js +41 -0
  300. package/vendor/dynamic-workflow/facade/dts.d.ts +29 -0
  301. package/vendor/dynamic-workflow/facade/dts.d.ts.map +1 -0
  302. package/vendor/dynamic-workflow/facade/dts.js +324 -0
  303. package/vendor/dynamic-workflow/facade/registry.d.ts +218 -0
  304. package/vendor/dynamic-workflow/facade/registry.d.ts.map +1 -0
  305. package/vendor/dynamic-workflow/facade/registry.js +203 -0
  306. package/vendor/dynamic-workflow/facade/report-caps.d.ts +40 -0
  307. package/vendor/dynamic-workflow/facade/report-caps.d.ts.map +1 -0
  308. package/vendor/dynamic-workflow/facade/report-caps.js +39 -0
  309. package/vendor/dynamic-workflow/facade/world-read-caps.d.ts +37 -0
  310. package/vendor/dynamic-workflow/facade/world-read-caps.d.ts.map +1 -0
  311. package/vendor/dynamic-workflow/facade/world-read-caps.js +36 -0
  312. package/vendor/dynamic-workflow/index.d.ts +41 -0
  313. package/vendor/dynamic-workflow/index.d.ts.map +1 -0
  314. package/vendor/dynamic-workflow/index.js +51 -0
  315. package/vendor/dynamic-workflow/lowering/index.d.ts +2 -0
  316. package/vendor/dynamic-workflow/lowering/index.d.ts.map +1 -0
  317. package/vendor/dynamic-workflow/lowering/index.js +1 -0
  318. package/vendor/dynamic-workflow/lowering/lower-hole.d.ts +16 -0
  319. package/vendor/dynamic-workflow/lowering/lower-hole.d.ts.map +1 -0
  320. package/vendor/dynamic-workflow/lowering/lower-hole.js +63 -0
  321. package/vendor/dynamic-workflow/lowering/lower.d.ts +82 -0
  322. package/vendor/dynamic-workflow/lowering/lower.d.ts.map +1 -0
  323. package/vendor/dynamic-workflow/lowering/lower.js +333 -0
  324. package/vendor/dynamic-workflow/projections.d.ts +26 -0
  325. package/vendor/dynamic-workflow/projections.d.ts.map +1 -0
  326. package/vendor/dynamic-workflow/projections.js +23 -0
  327. package/vendor/dynamic-workflow/schema/actor-submit-profiles.d.ts +49 -0
  328. package/vendor/dynamic-workflow/schema/actor-submit-profiles.d.ts.map +1 -0
  329. package/vendor/dynamic-workflow/schema/actor-submit-profiles.js +69 -0
  330. package/vendor/dynamic-workflow/schema/emit.d.ts +55 -0
  331. package/vendor/dynamic-workflow/schema/emit.d.ts.map +1 -0
  332. package/vendor/dynamic-workflow/schema/emit.js +325 -0
  333. package/vendor/dynamic-workflow/schema/jsdoc.d.ts +10 -0
  334. package/vendor/dynamic-workflow/schema/jsdoc.d.ts.map +1 -0
  335. package/vendor/dynamic-workflow/schema/jsdoc.js +83 -0
  336. package/vendor/dynamic-workflow/schema/serialize.d.ts +8 -0
  337. package/vendor/dynamic-workflow/schema/serialize.d.ts.map +1 -0
  338. package/vendor/dynamic-workflow/schema/serialize.js +20 -0
  339. package/vendor/dynamic-workflow/schema/synthesize.d.ts +48 -0
  340. package/vendor/dynamic-workflow/schema/synthesize.d.ts.map +1 -0
  341. package/vendor/dynamic-workflow/schema/synthesize.js +138 -0
  342. package/vendor/dynamic-workflow/schema/types.d.ts +67 -0
  343. package/vendor/dynamic-workflow/schema/types.d.ts.map +1 -0
  344. package/vendor/dynamic-workflow/schema/types.js +18 -0
  345. package/vendor/dynamic-workflow/schema/validate.d.ts +15 -0
  346. package/vendor/dynamic-workflow/schema/validate.d.ts.map +1 -0
  347. package/vendor/dynamic-workflow/schema/validate.js +213 -0
  348. package/vendor/dynamic-workflow/testing/index.d.ts +6 -0
  349. package/vendor/dynamic-workflow/testing/index.d.ts.map +1 -0
  350. package/vendor/dynamic-workflow/testing/index.js +5 -0
  351. package/vendor/dynamic-workflow/testing/journal-contract-artifacts.d.ts +9 -0
  352. package/vendor/dynamic-workflow/testing/journal-contract-artifacts.d.ts.map +1 -0
  353. package/vendor/dynamic-workflow/testing/journal-contract-artifacts.js +195 -0
  354. package/vendor/dynamic-workflow/testing/journal-contract-events.d.ts +9 -0
  355. package/vendor/dynamic-workflow/testing/journal-contract-events.d.ts.map +1 -0
  356. package/vendor/dynamic-workflow/testing/journal-contract-events.js +163 -0
  357. package/vendor/dynamic-workflow/testing/journal-contract-helpers.d.ts +9 -0
  358. package/vendor/dynamic-workflow/testing/journal-contract-helpers.d.ts.map +1 -0
  359. package/vendor/dynamic-workflow/testing/journal-contract-helpers.js +12 -0
  360. package/vendor/dynamic-workflow/testing/journal-contract-isolation.d.ts +9 -0
  361. package/vendor/dynamic-workflow/testing/journal-contract-isolation.d.ts.map +1 -0
  362. package/vendor/dynamic-workflow/testing/journal-contract-isolation.js +46 -0
  363. package/vendor/dynamic-workflow/testing/journal-contract-nodes.d.ts +9 -0
  364. package/vendor/dynamic-workflow/testing/journal-contract-nodes.d.ts.map +1 -0
  365. package/vendor/dynamic-workflow/testing/journal-contract-nodes.js +234 -0
  366. package/vendor/dynamic-workflow/testing/journal-contract-reads.d.ts +11 -0
  367. package/vendor/dynamic-workflow/testing/journal-contract-reads.d.ts.map +1 -0
  368. package/vendor/dynamic-workflow/testing/journal-contract-reads.js +281 -0
  369. package/vendor/dynamic-workflow/testing/journal-contract-runs.d.ts +9 -0
  370. package/vendor/dynamic-workflow/testing/journal-contract-runs.d.ts.map +1 -0
  371. package/vendor/dynamic-workflow/testing/journal-contract-runs.js +396 -0
  372. package/vendor/dynamic-workflow/testing/journal-contract-script.d.ts +12 -0
  373. package/vendor/dynamic-workflow/testing/journal-contract-script.d.ts.map +1 -0
  374. package/vendor/dynamic-workflow/testing/journal-contract-script.js +82 -0
  375. package/vendor/dynamic-workflow/testing/journal-contract.d.ts +15 -0
  376. package/vendor/dynamic-workflow/testing/journal-contract.d.ts.map +1 -0
  377. package/vendor/dynamic-workflow/testing/journal-contract.js +31 -0
  378. package/vendor/dynamic-workflow-runtime/child-cell-streams.js +128 -0
  379. package/vendor/dynamic-workflow-runtime/child-entry-file.js +43 -0
  380. package/vendor/dynamic-workflow-runtime/child-source.js +299 -0
  381. package/vendor/dynamic-workflow-runtime/harness.js +302 -0
  382. package/vendor/dynamic-workflow-runtime/index.js +4 -0
  383. package/vendor/dynamic-workflow-runtime/protocol.js +2 -0
  384. package/vendor/mcode-host/dynamic-workflow-import.js +269 -0
  385. package/vendor/mcode-host/workflow-git-world-read.js +183 -0
  386. package/vendor/mcode-host/workflow-world-read.js +282 -0
@@ -0,0 +1,396 @@
1
+ /**
2
+ * 修复原因:journal-contract.ts 顶到 oxlint max-lines 上限(400 行),把run 记录(建 run / 结算袋 / 元数据列 / 用量)的用例拆到本文件;
3
+ * 公开面仍从 journal-contract.ts 导出(`runJournalStoreContract` 按原顺序调用各主题的注册函数)。
4
+ *
5
+ * 注意:这里只登记 `it(...)`,不另开 describe——套件的分组与用例顺序必须与拆分前逐字相同。
6
+ */
7
+ import { expect, it } from "vitest";
8
+ import { baseRun } from "./journal-contract-helpers.js";
9
+ export function registerRunCases(factory) {
10
+ it("creates and reads back a run record", () => {
11
+ const store = factory();
12
+ store.createRun(baseRun("r1"));
13
+ expect(store.getRun("r1")).toMatchObject({ runId: "r1", status: "running", spentTokens: 0 });
14
+ expect(store.getRun("missing")).toBeUndefined();
15
+ });
16
+ it("rejects duplicate run creation loudly", () => {
17
+ const store = factory();
18
+ store.createRun(baseRun("r1"));
19
+ expect(() => store.createRun(baseRun("r1"))).toThrow();
20
+ });
21
+ it("updates run status and failure", () => {
22
+ const store = factory();
23
+ store.createRun(baseRun("r1"));
24
+ store.updateRunStatus("r1", "errored", {
25
+ failure: { code: "ReportCapExceeded", message: "cap" },
26
+ });
27
+ const run = store.getRun("r1");
28
+ expect(run?.status).toBe("errored");
29
+ expect(run?.failure).toEqual({ code: "ReportCapExceeded", message: "cap" });
30
+ expect(run?.stopReason).toBeUndefined();
31
+ });
32
+ // 三终态(docs/execution-engine.md):stopped 随 stopReason 一笔写,
33
+ // provider / interrupted 带 failure,user / model 不带。两个实现读回来必须逐字段一致——
34
+ // SQLite 侧物理列仍是旧词(cancelled + failure_json 信封),编解码是它自己的事。
35
+ it("settles a stopped run with its reason and a ProviderStop failure", () => {
36
+ const store = factory();
37
+ store.createRun(baseRun("r1"));
38
+ const failure = {
39
+ code: "ProviderStop",
40
+ message: "Sign-in to BigModel expired.",
41
+ providerStop: {
42
+ kind: "auth",
43
+ reason: "auth_failed",
44
+ providerId: "account:bigmodel-coding-plan",
45
+ modelId: "GLM-5.3",
46
+ providerCode: "1006",
47
+ subagent: "verify@2",
48
+ phase: "Verify",
49
+ rawMessage: "[1006] token expired",
50
+ },
51
+ };
52
+ store.updateRunStatus("r1", "stopped", { stopReason: "provider", failure });
53
+ const run = store.getRun("r1");
54
+ expect(run?.status).toBe("stopped");
55
+ expect(run?.stopReason).toBe("provider");
56
+ expect(run?.failure).toEqual(failure);
57
+ expect(run?.result).toBeUndefined();
58
+ });
59
+ it("settles a stopped run without a failure and reads the reason back", () => {
60
+ const store = factory();
61
+ store.createRun(baseRun("r1"));
62
+ store.updateRunStatus("r1", "stopped", { stopReason: "model" });
63
+ const run = store.getRun("r1");
64
+ expect(run?.status).toBe("stopped");
65
+ expect(run?.stopReason).toBe("model");
66
+ expect(run?.failure).toBeUndefined();
67
+ });
68
+ it("settles an interrupted run with its Interrupted failure", () => {
69
+ const store = factory();
70
+ store.createRun(baseRun("r1"));
71
+ store.updateRunStatus("r1", "stopped", {
72
+ stopReason: "interrupted",
73
+ failure: { code: "Interrupted", message: "owner process exited" },
74
+ });
75
+ const run = store.getRun("r1");
76
+ expect(run?.status).toBe("stopped");
77
+ expect(run?.stopReason).toBe("interrupted");
78
+ expect(run?.failure?.code).toBe("Interrupted");
79
+ });
80
+ // 结算袋存在的理由:终态与产物必须一笔写。分两笔写会开出一个崩溃窗口,
81
+ // 造出「completed 但产物不可恢复」的 run。
82
+ it("settles a completed run together with its artifact", () => {
83
+ const store = factory();
84
+ store.createRun(baseRun("r1"));
85
+ store.updateRunStatus("r1", "completed", { result: { answer: 42, notes: ["a", "b"] } });
86
+ const run = store.getRun("r1");
87
+ expect(run?.status).toBe("completed");
88
+ expect(run?.result).toEqual({ answer: 42, notes: ["a", "b"] });
89
+ expect(run?.failure).toBeUndefined();
90
+ });
91
+ // 产物是脚本的顶层返回值——任意 JSON 值,不只是 record。
92
+ it.each([
93
+ ["a string artifact", "plain text answer"],
94
+ ["an array artifact", [1, "two", { three: true }]],
95
+ ["a number artifact", 7],
96
+ ["a boolean artifact", false],
97
+ // `null` 是合法产物,必须原样回来,而不是塌成「没有 result」。
98
+ ["a null artifact", null],
99
+ ])("round-trips %s", (_label, artifact) => {
100
+ const store = factory();
101
+ store.createRun(baseRun("r1"));
102
+ store.updateRunStatus("r1", "completed", { result: artifact });
103
+ const run = store.getRun("r1");
104
+ expect(run?.status).toBe("completed");
105
+ expect("result" in (run ?? {})).toBe(true);
106
+ expect(run?.result).toEqual(artifact);
107
+ });
108
+ it("leaves result absent for an errored settlement", () => {
109
+ const store = factory();
110
+ store.createRun(baseRun("r1"));
111
+ store.updateRunStatus("r1", "errored", { failure: { code: "DriverError", message: "boom" } });
112
+ const run = store.getRun("r1");
113
+ expect(run?.status).toBe("errored");
114
+ expect(run?.failure).toEqual({ code: "DriverError", message: "boom" });
115
+ expect(run?.result).toBeUndefined();
116
+ });
117
+ // 结算袋缺省 = 「不触碰 failure 与 result」。既覆盖引擎自己的 `running` 写入,
118
+ // 也覆盖 0020 之前落库的历史行。
119
+ it("leaves result absent when no settlement bag is passed", () => {
120
+ const store = factory();
121
+ store.createRun(baseRun("r1"));
122
+ store.updateRunStatus("r1", "completed");
123
+ expect(store.getRun("r1").result).toBeUndefined();
124
+ expect(store.getRun("r1")?.status).toBe("completed");
125
+ });
126
+ // 规则三的存储侧(apps/zcode-cli/packages/dynamic-workflow/docs/execution-engine.md「Engine ownership」)。
127
+ // Bug 根因(2026-09-04):第二个桌面实例的孤儿收敛在本进程引擎仍活着的 run 上写下终态失败,
128
+ // 引擎随后正常 completed——而「缺席 = 不触碰」的旧语义(SQLite 的 coalesce)让那份外来失败
129
+ // 原样留下,行同时说「完成了」和「被打断了」。失败三件套因此**整体改写**,产物不变。
130
+ it("clears a stale failure when a later settlement completes the run", () => {
131
+ const store = factory();
132
+ store.createRun(baseRun("r1"));
133
+ store.updateRunStatus("r1", "stopped", {
134
+ stopReason: "interrupted",
135
+ failure: { code: "Interrupted", message: "foreign reconcile" },
136
+ });
137
+ store.updateRunStatus("r1", "completed", { result: { done: true } });
138
+ const run = store.getRun("r1");
139
+ expect(run?.status).toBe("completed");
140
+ expect(run?.failure).toBeUndefined();
141
+ expect(run?.stopReason).toBeUndefined();
142
+ expect(run?.result).toEqual({ done: true });
143
+ });
144
+ it("clears an errored failure when a later settlement completes the run", () => {
145
+ const store = factory();
146
+ store.createRun(baseRun("r1"));
147
+ store.updateRunStatus("r1", "errored", { failure: { code: "DriverError", message: "boom" } });
148
+ store.updateRunStatus("r1", "completed", { result: { done: true } });
149
+ const run = store.getRun("r1");
150
+ expect(run?.status).toBe("completed");
151
+ expect(run?.failure).toBeUndefined();
152
+ expect(run?.result).toEqual({ done: true });
153
+ });
154
+ it("keeps an already-settled artifact when a later write omits it", () => {
155
+ const store = factory();
156
+ store.createRun(baseRun("r1"));
157
+ store.updateRunStatus("r1", "completed", { result: { kept: true } });
158
+ store.updateRunStatus("r1", "completed");
159
+ expect(store.getRun("r1").result).toEqual({ kept: true });
160
+ });
161
+ // amend 停下的前驱:`superseded` 与后继 id 同一笔落库、同一封 envelope 读回
162
+ // (docs/execution-engine.md「Amend-resume」)。少了嗅探白名单里的那个值,整封解不出来、行退化成 user。
163
+ it("round-trips stopped(superseded) together with supersededBy", () => {
164
+ const store = factory();
165
+ store.createRun(baseRun("r1"));
166
+ store.updateRunStatus("r1", "stopped", { stopReason: "superseded", supersededBy: "r2" });
167
+ const run = store.getRun("r1");
168
+ expect(run?.status).toBe("stopped");
169
+ expect(run?.stopReason).toBe("superseded");
170
+ expect(run?.supersededBy).toBe("r2");
171
+ expect(run?.failure).toBeUndefined();
172
+ // 其余原因不带后继指针。
173
+ store.createRun(baseRun("r3"));
174
+ store.updateRunStatus("r3", "stopped", { stopReason: "model" });
175
+ expect(store.getRun("r3")?.supersededBy).toBeUndefined();
176
+ });
177
+ // resume 语义:把 run 翻回非终态时,上一世的 settlement 残留必须一并清空。
178
+ // 引擎的 resume 分支写的是 `updateRunStatus(runId, "running")`(无结算袋),而
179
+ // 「缺席键 = 不触碰」的终态语义会让一个被孤儿收敛成 failed+Interrupted 的 run
180
+ // 恢复后带着陈旧的 failure_json 与 running 并存——journal 快照读面会同时报告
181
+ // 「在跑」和「已失败」。所以非终态写入的语义是**清空**,不是保留。
182
+ it("clears failure and stopReason when flipping a stopped run back to a non-terminal status", () => {
183
+ const store = factory();
184
+ store.createRun(baseRun("r1"));
185
+ store.updateRunStatus("r1", "stopped", {
186
+ stopReason: "interrupted",
187
+ failure: { code: "Interrupted", message: "killed" },
188
+ });
189
+ store.updateRunStatus("r1", "running");
190
+ const run = store.getRun("r1");
191
+ expect(run?.status).toBe("running");
192
+ expect(run?.failure).toBeUndefined();
193
+ expect(run?.stopReason).toBeUndefined();
194
+ expect(run?.supersededBy).toBeUndefined();
195
+ });
196
+ it("clears result when flipping a completed run back to a non-terminal status", () => {
197
+ // completed run 不在可恢复集里,但端口语义按状态类别定义、不按调用方好恶:
198
+ // 非终态 = 无 settlement。让语义带例外只会把门的知识泄漏进存储层。
199
+ const store = factory();
200
+ store.createRun(baseRun("r1"));
201
+ store.updateRunStatus("r1", "completed", { result: { stale: true } });
202
+ store.updateRunStatus("r1", "pending");
203
+ const run = store.getRun("r1");
204
+ expect(run?.status).toBe("pending");
205
+ expect(run?.result).toBeUndefined();
206
+ });
207
+ it("ignores a settlement bag on a non-terminal write (cleared, not stored)", () => {
208
+ // 非终态携带结算袋是调用方的矛盾请求:一个「在跑」的 run 没有结算。语义定为清空优先,
209
+ // 免得两个实现对这个矛盾各自发明不同的解释。
210
+ const store = factory();
211
+ store.createRun(baseRun("r1"));
212
+ store.updateRunStatus("r1", "running", { failure: { code: "DriverError", message: "x" } });
213
+ expect(store.getRun("r1")?.failure).toBeUndefined();
214
+ });
215
+ // createRun 也要认这个字段:内存实现整条克隆记录,SQLite 若不写这一列,同一个 record
216
+ // 存进两个实现再读回来就会分叉。引擎只以 running 建 run,但端口的语义不该有这个洞。
217
+ it("creates and reads back a run carrying an artifact", () => {
218
+ const store = factory();
219
+ store.createRun({ ...baseRun("r1"), status: "completed", result: { seeded: true } });
220
+ expect(store.getRun("r1").result).toEqual({ seeded: true });
221
+ });
222
+ // name 是 run 的展示标签(`input.name` → createRun → dwf_run.name),与 scriptText/cwd 同一条
223
+ // 元数据路。两个实现都有 createRun/getRun,所以它属于契约:SQLite 若漏写这一列,同一条
224
+ // record 存进两个实现再读回来就会分叉(result 列当年逐字同一条论证)。
225
+ it("round-trips a run name and keeps it absent when unnamed", () => {
226
+ const store = factory();
227
+ store.createRun({ ...baseRun("named"), name: "nightly triage" });
228
+ store.createRun(baseRun("unnamed"));
229
+ expect(store.getRun("named")?.name).toBe("nightly triage");
230
+ const unnamed = store.getRun("unnamed");
231
+ expect(unnamed?.name).toBeUndefined();
232
+ // 缺席的可选字段必须原样缺席地回来,而不是变成 name: null / name: undefined。
233
+ expect(unnamed !== undefined && "name" in unnamed).toBe(false);
234
+ });
235
+ // 实参(`dwf_run.args_json`,migration 0026)与 scriptText / name 同一条 createRun
236
+ // 元数据路,属于契约的理由更硬:resume **重放**存下来的实参,所以 SQLite 若漏写这一列,
237
+ // 恢复出来的 run 会带着 `{}` 静默跑一遍——「批准的是 A、恢复的是 B」。
238
+ it("round-trips the run args and keeps them absent when the run had none", () => {
239
+ const store = factory();
240
+ store.createRun({
241
+ ...baseRun("with-args"),
242
+ args: { target: "packages/core", depth: 3, nested: { deep: true } },
243
+ });
244
+ store.createRun(baseRun("no-args"));
245
+ expect(store.getRun("with-args")?.args).toEqual({
246
+ target: "packages/core",
247
+ depth: 3,
248
+ nested: { deep: true },
249
+ });
250
+ const bare = store.getRun("no-args");
251
+ // 缺席的可选字段原样缺席地回来(0026 之前的老行走的正是这条路):记录层面「没有
252
+ // 实参」与「实参是空袋」保持可分辨,沙箱侧才统一把缺席读作 `{}`。
253
+ expect(bare?.args).toBeUndefined();
254
+ expect(bare !== undefined && "args" in bare).toBe(false);
255
+ });
256
+ it("keeps the run args across a status settlement", () => {
257
+ const store = factory();
258
+ store.createRun({ ...baseRun("r-args"), args: { keep: "me" } });
259
+ store.updateRunStatus("r-args", "completed", { result: "done" });
260
+ // resume 能读回它,是因为结算那条 UPDATE 不碰这一列。
261
+ expect(store.getRun("r-args")?.args).toEqual({ keep: "me" });
262
+ });
263
+ // 结算只改状态与产物:name 不在 updateRunStatus 的写入面上(SQLite 侧那条 UPDATE 若把
264
+ // name 列进去,run 一结算就会丢名字)。
265
+ it("keeps the run name across a status settlement", () => {
266
+ const store = factory();
267
+ store.createRun({ ...baseRun("r1"), name: "keeps its name" });
268
+ store.updateRunStatus("r1", "completed", { result: "done" });
269
+ expect(store.getRun("r1")?.name).toBe("keeps its name");
270
+ });
271
+ // toolCallId 是发起 run 的 CreateWorkflow 工具调用 id——重启后工具卡 join 与 resume
272
+ // 的持久锚点(docs/execution-engine.md)。它与 scriptText/cwd 走同一条
273
+ // createRun 元数据路,属于契约:SQLite 若漏写这一列,重启后的发现查询拿不回关联键。
274
+ it("round-trips the originating toolCallId and keeps it absent when not given", () => {
275
+ const store = factory();
276
+ store.createRun({ ...baseRun("anchored"), toolCallId: "call-42" });
277
+ store.createRun(baseRun("bare"));
278
+ expect(store.getRun("anchored")?.toolCallId).toBe("call-42");
279
+ const bare = store.getRun("bare");
280
+ expect(bare?.toolCallId).toBeUndefined();
281
+ // 缺席的可选字段必须原样缺席地回来,而不是变成 toolCallId: null / undefined。
282
+ expect(bare !== undefined && "toolCallId" in bare).toBe(false);
283
+ });
284
+ // 结算只改状态与产物:toolCallId 不在 updateRunStatus 的写入面上。
285
+ it("keeps the toolCallId across a status settlement and across a resume flip", () => {
286
+ const store = factory();
287
+ store.createRun({ ...baseRun("r1"), toolCallId: "call-7" });
288
+ store.updateRunStatus("r1", "stopped", { stopReason: "user" });
289
+ expect(store.getRun("r1")?.toolCallId).toBe("call-7");
290
+ // resume 把 run 翻回 running 清的是 settlement,锚点必须原样保留。
291
+ store.updateRunStatus("r1", "running");
292
+ expect(store.getRun("r1")?.toolCallId).toBe("call-7");
293
+ });
294
+ // resumedFrom 是 amend-resume 的 lineage 指针(本 run 修订自哪个前驱 run,
295
+ // docs/execution-engine.md)。与 toolCallId / args 同一条 createRun 元数据路,
296
+ // 属于契约的理由是它是**存续依赖**:修订 run 崩溃后的 plain resume 靠读回这个指针重建
297
+ // ImportedCache,SQLite 若漏写这一列,恢复出来的 run 会把全部未消费的缓存降级成 live 重跑。
298
+ it("round-trips the resumedFrom lineage pointer and keeps it absent for a fresh run", () => {
299
+ const store = factory();
300
+ store.createRun({ ...baseRun("amended"), resumedFrom: "run-predecessor" });
301
+ store.createRun(baseRun("fresh"));
302
+ expect(store.getRun("amended")?.resumedFrom).toBe("run-predecessor");
303
+ const fresh = store.getRun("fresh");
304
+ expect(fresh?.resumedFrom).toBeUndefined();
305
+ // 缺席的可选字段必须原样缺席地回来(NULL 解码成缺席的键,不是 null / undefined)——
306
+ // 绝大多数 run 不是修订,这条才是常态路径。
307
+ expect(fresh !== undefined && "resumedFrom" in fresh).toBe(false);
308
+ });
309
+ // 结算与 resume 翻转都不在 lineage 的写入面上:链式修订要沿着这个指针回溯任意深度的
310
+ // 祖先,任何一环在结算时丢掉指针,链就断在那里。
311
+ it("keeps resumedFrom across a status settlement and across a resume flip", () => {
312
+ const store = factory();
313
+ store.createRun({ ...baseRun("r1"), resumedFrom: "run-a" });
314
+ store.updateRunStatus("r1", "stopped", { stopReason: "user" });
315
+ expect(store.getRun("r1")?.resumedFrom).toBe("run-a");
316
+ store.updateRunStatus("r1", "running");
317
+ expect(store.getRun("r1")?.resumedFrom).toBe("run-a");
318
+ });
319
+ it("isolates a stored artifact from later mutation of the caller's object", () => {
320
+ const store = factory();
321
+ store.createRun(baseRun("r1"));
322
+ const artifact = { nested: { value: 1 } };
323
+ store.updateRunStatus("r1", "completed", { result: artifact });
324
+ artifact.nested.value = 999;
325
+ // r1 两行前刚 createRun,getRun 必命中;用非空断言代替 ?.,否则其后的 .nested.value 链式
326
+ // 访问在 lint 眼里是 unsafe optional chaining(?. 短路成 undefined 时会直接 throw)。
327
+ expect(store.getRun("r1").result.nested.value).toBe(1);
328
+ });
329
+ it("settles an artifact and a failure independently on separate runs", () => {
330
+ const store = factory();
331
+ store.createRun(baseRun("ok"));
332
+ store.createRun(baseRun("bad"));
333
+ store.updateRunStatus("ok", "completed", { result: "done" });
334
+ store.updateRunStatus("bad", "errored", {
335
+ failure: { code: "DriverError", message: "stop" },
336
+ });
337
+ expect(store.getRun("ok")?.result).toBe("done");
338
+ expect(store.getRun("ok")?.failure).toBeUndefined();
339
+ expect(store.getRun("bad")?.result).toBeUndefined();
340
+ expect(store.getRun("bad")?.failure?.code).toBe("DriverError");
341
+ });
342
+ it("throws when updating an unknown run", () => {
343
+ const store = factory();
344
+ expect(() => store.updateRunStatus("nope", "completed")).toThrow();
345
+ });
346
+ it("persists accumulated usage without disturbing status or failure", () => {
347
+ // 用量是 run 结算之外的独立写入路径:askStats 每次累加都要落库,
348
+ // 否则 resume 会从零用量重来(阶段 1.5 的潜伏 bug)。
349
+ const store = factory();
350
+ store.createRun(baseRun("r1"));
351
+ store.updateRunUsage("r1", 4200);
352
+ expect(store.getRun("r1")).toMatchObject({ spentTokens: 4200, status: "running" });
353
+ expect(store.getRun("r1")?.failure).toBeUndefined();
354
+ // 已结算(含 failure)的 run 上再写用量,状态与失败原因不得被改写。
355
+ store.updateRunStatus("r1", "errored", {
356
+ failure: { code: "DriverError", message: "over" },
357
+ });
358
+ store.updateRunUsage("r1", 5100);
359
+ const run = store.getRun("r1");
360
+ expect(run?.spentTokens).toBe(5100);
361
+ expect(run?.status).toBe("errored");
362
+ expect(run?.failure).toEqual({ code: "DriverError", message: "over" });
363
+ });
364
+ it("throws when updating the usage of an unknown run", () => {
365
+ const store = factory();
366
+ expect(() => store.updateRunUsage("nope", 1)).toThrow();
367
+ });
368
+ // `caps_max_concurrency` 的**第二个写入者**(docs/dynamic-workflow/concurrency.md
369
+ // 「Two bounds on a run」):一次只改 `max_concurrency` 的修订就地作用在活着的 run 上,
370
+ // 而 resume 沿用行里的 caps——不落库,恢复出来的就还是旧上界。与用量同族的窄写入:
371
+ // 只碰这一列,状态 / 用量 / 结算袋一概不动。
372
+ it("retunes the concurrency cap without disturbing status, usage or failure", () => {
373
+ const store = factory();
374
+ store.createRun(baseRun("r1"));
375
+ store.updateRunUsage("r1", 4200);
376
+ store.updateRunCaps("r1", { maxConcurrency: 2 });
377
+ expect(store.getRun("r1")).toMatchObject({
378
+ caps: { maxConcurrency: 2 },
379
+ spentTokens: 4200,
380
+ status: "running",
381
+ });
382
+ // 已结算(含 failure)的 run 上再写上界,状态与失败原因不得被改写。
383
+ store.updateRunStatus("r1", "errored", {
384
+ failure: { code: "DriverError", message: "over" },
385
+ });
386
+ store.updateRunCaps("r1", { maxConcurrency: 7 });
387
+ const run = store.getRun("r1");
388
+ expect(run?.caps).toEqual({ maxConcurrency: 7 });
389
+ expect(run?.status).toBe("errored");
390
+ expect(run?.failure).toEqual({ code: "DriverError", message: "over" });
391
+ });
392
+ it("throws when retuning the caps of an unknown run", () => {
393
+ const store = factory();
394
+ expect(() => store.updateRunCaps("nope", { maxConcurrency: 1 })).toThrow();
395
+ });
396
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `updateRunScript` 的契约用例(docs/execution-engine.md「Holes」→「The engine's part」):它是
3
+ * `script_text` / `script_hash` 两列在 `createRun` 之后的**第二个写入者**——一次补全把有效脚本
4
+ * 写回 run 行,resume 拿行里的哈希对行里的文本,所以两列必须同一笔写;行上其余一切(状态、
5
+ * 用量、上界、结算袋、元数据)不在这条写入的范围里,与 `updateRunUsage` 同族。
6
+ *
7
+ * 独立成模块而不是追加到 journal-contract-runs.ts:那个文件已顶到 oxlint max-lines 上限。
8
+ * 这里只登记 `it(...)`,不另开 describe——套件的分组与用例顺序由 journal-contract.ts 决定。
9
+ */
10
+ import type { JournalStorePort } from "../engine/index.js";
11
+ export declare function registerScriptCases(factory: () => JournalStorePort): void;
12
+ //# sourceMappingURL=journal-contract-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-contract-script.d.ts","sourceRoot":"","sources":["../../src/testing/journal-contract-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG3D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,gBAAgB,GAAG,IAAI,CA6EzE"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * `updateRunScript` 的契约用例(docs/execution-engine.md「Holes」→「The engine's part」):它是
3
+ * `script_text` / `script_hash` 两列在 `createRun` 之后的**第二个写入者**——一次补全把有效脚本
4
+ * 写回 run 行,resume 拿行里的哈希对行里的文本,所以两列必须同一笔写;行上其余一切(状态、
5
+ * 用量、上界、结算袋、元数据)不在这条写入的范围里,与 `updateRunUsage` 同族。
6
+ *
7
+ * 独立成模块而不是追加到 journal-contract-runs.ts:那个文件已顶到 oxlint max-lines 上限。
8
+ * 这里只登记 `it(...)`,不另开 describe——套件的分组与用例顺序由 journal-contract.ts 决定。
9
+ */
10
+ import { expect, it } from "vitest";
11
+ import { baseRun } from "./journal-contract-helpers.js";
12
+ export function registerScriptCases(factory) {
13
+ it("rewrites the script text and hash together and leaves the rest of the row untouched", () => {
14
+ const store = factory();
15
+ store.createRun({
16
+ ...baseRun("r1"),
17
+ scriptText: "original",
18
+ scriptHash: "h0",
19
+ name: "nightly",
20
+ args: { depth: 2 },
21
+ toolCallId: "call-1",
22
+ resumedFrom: "r0",
23
+ cwd: "/repo",
24
+ });
25
+ store.updateRunUsage("r1", 4200);
26
+ store.updateRunCaps("r1", { maxConcurrency: 2 });
27
+ store.updateRunScript("r1", "effective", "h1");
28
+ const run = store.getRun("r1");
29
+ expect(run?.scriptText).toBe("effective");
30
+ expect(run?.scriptHash).toBe("h1");
31
+ expect(run?.status).toBe("running");
32
+ expect(run?.spentTokens).toBe(4200);
33
+ expect(run?.caps).toEqual({ maxConcurrency: 2 });
34
+ expect(run?.name).toBe("nightly");
35
+ expect(run?.args).toEqual({ depth: 2 });
36
+ expect(run?.toolCallId).toBe("call-1");
37
+ expect(run?.resumedFrom).toBe("r0");
38
+ expect(run?.cwd).toBe("/repo");
39
+ expect(run?.failure).toBeUndefined();
40
+ });
41
+ it("fills the script columns of a run created without them", () => {
42
+ const store = factory();
43
+ store.createRun(baseRun("r1"));
44
+ store.updateRunScript("r1", "effective", "h1");
45
+ expect(store.getRun("r1")).toMatchObject({ scriptText: "effective", scriptHash: "h1" });
46
+ });
47
+ it("keeps the rewritten script across a status settlement and across a resume flip", () => {
48
+ const store = factory();
49
+ store.createRun({ ...baseRun("r1"), scriptText: "original", scriptHash: "h0" });
50
+ store.updateRunScript("r1", "effective", "h1");
51
+ store.updateRunStatus("r1", "stopped", { stopReason: "user" });
52
+ expect(store.getRun("r1")).toMatchObject({
53
+ status: "stopped",
54
+ scriptText: "effective",
55
+ scriptHash: "h1",
56
+ });
57
+ store.updateRunStatus("r1", "running");
58
+ expect(store.getRun("r1")).toMatchObject({
59
+ status: "running",
60
+ scriptText: "effective",
61
+ scriptHash: "h1",
62
+ });
63
+ });
64
+ it("takes the last write when the script is rewritten twice (a second fill)", () => {
65
+ const store = factory();
66
+ store.createRun({ ...baseRun("r1"), scriptText: "original", scriptHash: "h0" });
67
+ store.updateRunScript("r1", "first fill", "h1");
68
+ store.updateRunScript("r1", "second fill", "h2");
69
+ expect(store.getRun("r1")).toMatchObject({ scriptText: "second fill", scriptHash: "h2" });
70
+ });
71
+ it("writes only the named run", () => {
72
+ const store = factory();
73
+ store.createRun({ ...baseRun("r1"), scriptText: "one", scriptHash: "h-one" });
74
+ store.createRun({ ...baseRun("r2"), scriptText: "two", scriptHash: "h-two" });
75
+ store.updateRunScript("r1", "one'", "h-one'");
76
+ expect(store.getRun("r2")).toMatchObject({ scriptText: "two", scriptHash: "h-two" });
77
+ });
78
+ it("throws when rewriting the script of an unknown run", () => {
79
+ const store = factory();
80
+ expect(() => store.updateRunScript("nope", "x", "h")).toThrow();
81
+ });
82
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * JournalStorePort 契约套件:写一次、跑多次。阶段一对内存实现运行,阶段二对 SQLite 实现复用。
3
+ * 以工厂 `() => JournalStorePort` 注入被测实现,覆盖 run/actor/node/event 的写入-读取语义与隔离性。
4
+ *
5
+ * 之所以住在 src/(而非 tests/):SQLite 实现在 @zcode/adapters 里,需要经
6
+ * `@zcode/dynamic-workflow/testing` 子路径导入同一份套件。vitest 仍是 devDependency——
7
+ * 本文件只在消费方的测试进程里执行,不进入任何运行时路径。
8
+ *
9
+ * 用例按主题分住兄弟模块(journal-contract-runs / -script / -nodes / -artifacts / -events / -isolation / -reads.ts,
10
+ * 共用夹具在 journal-contract-helpers.ts;拆分原因:oxlint max-lines 上限 400 行)。本文件只保留
11
+ * 入口:同一个 describe 里按拆分前的顺序依次登记各组用例,套件的分组与顺序逐字不变。
12
+ */
13
+ import type { JournalStorePort } from "../engine/index.js";
14
+ export declare function runJournalStoreContract(factory: () => JournalStorePort): void;
15
+ //# sourceMappingURL=journal-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal-contract.d.ts","sourceRoot":"","sources":["../../src/testing/journal-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAS3D,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAU7E"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * JournalStorePort 契约套件:写一次、跑多次。阶段一对内存实现运行,阶段二对 SQLite 实现复用。
3
+ * 以工厂 `() => JournalStorePort` 注入被测实现,覆盖 run/actor/node/event 的写入-读取语义与隔离性。
4
+ *
5
+ * 之所以住在 src/(而非 tests/):SQLite 实现在 @zcode/adapters 里,需要经
6
+ * `@zcode/dynamic-workflow/testing` 子路径导入同一份套件。vitest 仍是 devDependency——
7
+ * 本文件只在消费方的测试进程里执行,不进入任何运行时路径。
8
+ *
9
+ * 用例按主题分住兄弟模块(journal-contract-runs / -script / -nodes / -artifacts / -events / -isolation / -reads.ts,
10
+ * 共用夹具在 journal-contract-helpers.ts;拆分原因:oxlint max-lines 上限 400 行)。本文件只保留
11
+ * 入口:同一个 describe 里按拆分前的顺序依次登记各组用例,套件的分组与顺序逐字不变。
12
+ */
13
+ import { describe } from "vitest";
14
+ import { registerRunCases } from "./journal-contract-runs.js";
15
+ import { registerScriptCases } from "./journal-contract-script.js";
16
+ import { registerNodeCases } from "./journal-contract-nodes.js";
17
+ import { registerArtifactCases } from "./journal-contract-artifacts.js";
18
+ import { registerEventCases } from "./journal-contract-events.js";
19
+ import { registerIsolationCases } from "./journal-contract-isolation.js";
20
+ import { registerReadCases } from "./journal-contract-reads.js";
21
+ export function runJournalStoreContract(factory) {
22
+ describe("JournalStorePort contract", () => {
23
+ registerRunCases(factory);
24
+ registerScriptCases(factory);
25
+ registerNodeCases(factory);
26
+ registerArtifactCases(factory);
27
+ registerEventCases(factory);
28
+ registerIsolationCases(factory);
29
+ registerReadCases(factory);
30
+ });
31
+ }