@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,979 @@
1
+ /**
2
+ * 执行引擎的边界类型(boundary types)。
3
+ *
4
+ * 这个模块是纯类型 + 结构化错误 + 常量的词汇表,三条边界都以它为契约:
5
+ * - Boundary A(host API):沙箱脚本的 facade shim 调用 {@link WorkflowHostApi}。
6
+ * - Boundary B(driver port):引擎核心(确定性状态机)向下驱动 {@link WorkflowDriver},
7
+ * driver 通过 {@link WorkflowReportSink} 向上回报进度。
8
+ * - Journal:{@link JournalStorePort} 以仓储式方法暴露 run/actor/node/event 记录,
9
+ * 内存实现与未来 SQLite 实现都能自然落位(同步方法契合 node:sqlite 的 DatabaseSync,且让核心保持确定性)。
10
+ */
11
+ import type { ArtifactContentOp, ArtifactOp, ArtifactPresetOp, WorldReadOp } from "../facade/registry.js";
12
+ import type { AskProgress, AskStats } from "./ask-observation-types.js";
13
+ import type { ActorSessionSeed } from "./imported-cache-types.js";
14
+ import type { GetNodeOptions, ListActorsOptions, ListEventsOptions, ListNodesOptions } from "./journal-read-types.js";
15
+ /**
16
+ * 一个 ask 实例的身份:站点 id × 每站点执行序号(ordinal)。
17
+ * 第 n 次 `ask("ask#3", …)` 调用即实例 `ask#3@n`(ordinal 从 1 开始)。
18
+ */
19
+ export interface InstanceRef {
20
+ siteId: string;
21
+ ordinal: number;
22
+ }
23
+ /** actor 身份:创建站点 × 序号(与 InstanceRef 同构,但语义是 actor 而非 ask)。 */
24
+ export interface ActorRef {
25
+ siteId: string;
26
+ ordinal: number;
27
+ }
28
+ /**
29
+ * 交给脚本的不透明 actor 句柄。脚本侧的 `Agent` 只是持有它的薄包装。
30
+ * 引擎内部把 ActorId 映射回 {@link ActorRef};格式对脚本不可见,但需稳定可解析。
31
+ */
32
+ export type ActorId = string;
33
+ /** 把 InstanceRef / ActorRef 渲染为稳定字符串 `site@ordinal`,用于日志与句柄。 */
34
+ export declare function refToString(ref: InstanceRef | ActorRef): string;
35
+ /**
36
+ * 冻结的 actor persona,交给 {@link WorkflowDriver.createActorSession}。
37
+ *
38
+ * persona 只剩身份(名字 + system prompt)。模型档位(`model?: "main" | "lite"`)
39
+ * 与工具档位(`tools?: "default" | "readonly" | "none"`)都已退场:宿主没有 lite 模型来源,而
40
+ * 工具档位买到的只有「裁判不能改文件」——普通子代理也不靠档位保证这一点,ask 文本说清即可。
41
+ * 子代理一律跑在父会话当前模型上、拿完整工作工具集减去会悬挂/越权的交互工具。
42
+ * 是否注册 submit_result 由 driver 结合站点图判定(全 untyped 的 actor 不注册),
43
+ * 不在这里表达——保持 persona 只描述身份。
44
+ *
45
+ * 2026-09-26 追记:persona 可以点名一个**具体**模型(`model`,docs/dynamic-workflow/authoring.md
46
+ * 「Choosing a model per subagent」)。那不是退场的档位回来了:档位要宿主给出一个它没有的映射,
47
+ * 而这里是脚本逐字写下的模型名,launch 时已对着宿主的模型目录解析成绑定表(run-launched 的
48
+ * `modelBindings`)。引擎只记这个名字、从不解读它——查表与建会话都是宿主的事(bootstrap 的
49
+ * workflow-actor-model.ts)。它**不是**缓存身份的一部分(imported-cache.ts 的 matchImportedActor)。
50
+ */
51
+ export interface PersonaSpec {
52
+ name?: string;
53
+ system?: string;
54
+ /** 脚本逐字写下的模型名(`ModelRef` 在 lowering 里已抹成它的名字);缺席 = 跑 run 的子代理模型。 */
55
+ model?: string;
56
+ }
57
+ /**
58
+ * 单次 ask 的下发消息:指令正文 + 是否 typed + typed 时的 schema(结构对核心不透明,
59
+ * 仅透传给 {@link ValidateFn} 与 driver 的 schema 尾注)。schema 由 schema 合成侧产出,
60
+ * 核心从不解读其形状。
61
+ */
62
+ export interface AskMessage {
63
+ instructions: string;
64
+ typed: boolean;
65
+ schema?: unknown;
66
+ }
67
+ /**
68
+ * 单条校验违规,设计为在 repair 的 tool_result 里对模型可读:JSON 路径 + 期望 + 实得。
69
+ * 与 schema 子模块共用同一类型(并行开发期各自声明,落地后统一到 schema/types)。
70
+ */
71
+ export type { Violation } from "../schema/types.js";
72
+ import type { Violation } from "../schema/types.js";
73
+ /**
74
+ * 注入的校验函数:`(schema, value) => 违规列表`(空列表即通过)。真正的校验器由另一
75
+ * 个 agent 并行实现(src/schema/),核心只依赖这个最小契约,绝不 import 其实现。
76
+ */
77
+ export type ValidateFn = (schema: unknown, value: unknown) => Violation[];
78
+ /** 每个 ask 站点的静态规格:是否 typed 及其 schema。untyped 站点无 schema。 */
79
+ export interface AskSpec {
80
+ typed: boolean;
81
+ schema?: unknown;
82
+ }
83
+ /** 导入缓存关门的两种原因:子代理的改写工具、live 的 `world.run`。 */
84
+ export type ImportCloseCause = "mutating-tool" | "world-run";
85
+ /**
86
+ * run 级别的容量上限,submit 时定下并存入 dwf_run。只剩并发上界:token 预算与节点上限已整体
87
+ * 移除(docs/dynamic-workflow/authoring.md)——它们在生产里从未被设置或只是门柱,取消才是控制面。
88
+ *
89
+ * 值**在 run 存活期间可以变一次以上**:一次只改 `max_concurrency` 的修订作用在活着的 run 上
90
+ * ({@link WorkflowEngine.setMaxConcurrency},docs/dynamic-workflow/concurrency.md
91
+ * 「Two bounds on a run」)。引擎因此整份替换自己持有的 caps 而不是原地改字段——已记进
92
+ * `run-started` / `run-caps-changed` 事件的那几份必须保持它们被记下时的样子。
93
+ */
94
+ export interface Caps {
95
+ maxConcurrency: number;
96
+ }
97
+ import type { ProviderStopDetails, RunStallInfo } from "./run-terminal.js";
98
+ export type { ProviderStopDetails, RunStallInfo };
99
+ import type { WorkflowError, WorkflowErrorJson } from "./errors.js";
100
+ export { WorkflowError } from "./errors.js";
101
+ export type { WorkflowErrorCode, WorkflowErrorJson, WorkflowErrorMismatch } from "./errors.js";
102
+ /**
103
+ * 世界读取操作(只读、可 journal)。词汇表由 world-read 注册表推导——加一个原语就是给
104
+ * `facade/registry.ts` 加一行,这里不必改(见该模块顶部的容器键说明)。
105
+ */
106
+ export type { WorldReadOp };
107
+ /**
108
+ * 用户面产物的 op(词汇表由产物注册表推导,见 `facade/registry.ts`)。
109
+ * `ArtifactContentOp` 走 {@link WorkflowHostApi.publishArtifact}(效应,经 driver),
110
+ * `ArtifactPresetOp` 走 {@link WorkflowHostApi.declareArtifact}(声明,不经 driver)。
111
+ */
112
+ export type { ArtifactContentOp, ArtifactOp, ArtifactPresetOp };
113
+ /**
114
+ * 交给脚本的产物引用(facade 的 `ArtifactRef`):id + 本次发布铸出的版本号。
115
+ * 内容成员的 promise 以它兑现。
116
+ */
117
+ export interface ArtifactRef {
118
+ id: string;
119
+ version: number;
120
+ }
121
+ /**
122
+ * 一个产物版本的落库形态(`dwf_node.result_json` 的形状;shared 侧有 zod 镜像)。
123
+ *
124
+ * 内容成员与预置成员共用一个形状,各自只填自己那一半:内容有 `bytes`/`uri`/`sourcePath`,
125
+ * 预置有 `spec`。字节**绝不**进 journal——`uri` 指向 tool-artifact store,那才是字节的家。
126
+ */
127
+ export interface ArtifactVersionRecord {
128
+ id: string;
129
+ kind: ArtifactOp;
130
+ /** 从 1 起。预置声明恒为 1(声明没有版本,它只有一次)。 */
131
+ version: number;
132
+ title?: string;
133
+ description?: string;
134
+ /** 内容成员的 MIME 类型(扩展名表或 `opts.contentType`)。 */
135
+ contentType?: string;
136
+ /** 内容成员的字节数。 */
137
+ bytes?: number;
138
+ /** store 返回的 `zcode-artifact://…`(内容成员)。 */
139
+ uri?: string;
140
+ /** 工作区相对的原路径(`file` 才有,作出处与「在工作区显示」)。 */
141
+ sourcePath?: string;
142
+ /** 预置成员的 spec(规范化后的形状;引擎按 canonicalJson 比对重复声明)。 */
143
+ spec?: unknown;
144
+ /** 发布时刻(epoch 毫秒)。driver / 宿主写入——引擎没有时钟。 */
145
+ publishedAt?: number;
146
+ /**
147
+ * 这个 id 是本 run 的交付物。**引擎**盖章,
148
+ * 不是 driver:按 id 粘着——一旦某版带上,之后的版本都带上,不管发布时有没有再写 `primary`。
149
+ */
150
+ primary?: true;
151
+ }
152
+ /**
153
+ * driver 执行一次内容产物发布的请求(Boundary B)。
154
+ *
155
+ * `version` 由**引擎**在 dispatch 之前算好(journal 里该 id 已 completed 的行数 + 1)并传下来,
156
+ * 而不是让 driver 自己数:driver 不该知道 journal 的形状,而 store 的 `toolCallId` 里要带上它
157
+ * (每一版一份字节)。`path` / `content` 二选一,按 `op` 定;实参校验归 driver。
158
+ */
159
+ export interface ArtifactPublishRequest {
160
+ runId: string;
161
+ siteId: string;
162
+ ordinal: number;
163
+ op: ArtifactContentOp;
164
+ id: string;
165
+ version: number;
166
+ /** `file`:工作区相对路径。 */
167
+ path?: string;
168
+ /** `markdown`:正文。 */
169
+ content?: string;
170
+ /** 脚本给的 `opts`(原样透传,形状校验归 driver)。 */
171
+ opts?: unknown;
172
+ }
173
+ /**
174
+ * host API:lowered 脚本的 facade shim 跨沙箱边界调用的表面。全部可序列化、异步。
175
+ * `createActor` 同步返回不透明句柄;session 的创建在首次 live dispatch 时惰性完成。
176
+ *
177
+ * `worldRead` 带的是**位置实参数组**,不是按 op 定制的 payload 对象:`files.grep(pattern, glob?)`
178
+ * 与 `git.diff(base?, path?)` 是多参、`git.status()` 无参,单字符串签名撑不住;而 payload 对象
179
+ * 会把「按 op 分支」搬进 lowering——那恰是新增原语最该零改动的一处。lowering 只做原样透传,
180
+ * 每个 op 的元数与校验归 driver(它才是知道一个 base ref 长什么样的那一侧)。
181
+ */
182
+ export interface WorkflowHostApi {
183
+ createActor(siteId: string, name?: string, persona?: string | PersonaSpec): ActorId;
184
+ ask(siteId: string, actor: ActorId, instructions: string): Promise<unknown>;
185
+ worldRead(siteId: string, op: WorldReadOp, args: unknown[]): Promise<unknown>;
186
+ /**
187
+ * 发布一条中间结果。**即发即忘(同步签名、无返回值)却有站点、要落 journal**——这个组合
188
+ * 就是 report 的全部设计,两半都是被迫的:脚本发布一条发现,没有什么可以 await;而
189
+ * run 面板与完成通知在 resume 之后不能把同一条发现显示两次,所以必须 journal。
190
+ *
191
+ * 无 driver 往返:引擎在核心里落节点、发事件(或在 replay 命中时静默跳过)即结束。
192
+ */
193
+ report(siteId: string, item: unknown, artifactId?: string): void;
194
+ /**
195
+ * 控制流经过了一个 `phase("…")` 标记。同步、无返回值、无 driver 往返、**不落 journal 行**:
196
+ * 引擎只发一条 `phase-entered` 事件就结束。`name` 由 lowering 从字面量取出并去两端空白。
197
+ */
198
+ enterPhase(name: string): void;
199
+ /**
200
+ * 脚本到达一处**未补全的留白**(docs/execution-engine.md「Holes」)。Boundary A 的调用,与 ask
201
+ * 同姿态、少一个 driver:引擎铸序号、盖出生阶段、记 `hole-reached`、把 promise 停在站点下,
202
+ * 直到主代理经 {@link import("./engine.js").WorkflowEngine.fillHole} 送来有效脚本里这处留白的
203
+ * 体(`{code}`,lowering 的 `holeBodies[siteId]`)。**不落 journal 行**:留白不是会自己结算的
204
+ * 节点,补全产出的东西已经以有效脚本的身份在 run 行上了。
205
+ *
206
+ * 已补全的站点(cell 的 fill 表命中、或引擎本世已记住代码)不该再走到这里;引擎仍以记住的
207
+ * 代码立刻作答、不停驻、不记事件,作为防御。`prompt` 记录前被截到
208
+ * {@link import("./engine-holes.js").HOLE_PROMPT_MAX_CHARS}。
209
+ */
210
+ hole(siteId: string, name: string, prompt?: string): Promise<{
211
+ code: string;
212
+ }>;
213
+ /**
214
+ * 发布一个**内容产物**(`artifact.file` / `artifact.markdown`)。效应:经 driver 把字节拷进
215
+ * store,落一行 journal,成功兑现 {@link ArtifactRef}、失败**可 catch 地拒绝**。
216
+ *
217
+ * 与 `worldRead` 同规:`args` 是脚本调用点的位置实参(`[id, path, opts]`),lowering 原样
218
+ * 打包,本层只从中取引擎自己要用的 id(上限与版本号要它),其余透传给 driver。
219
+ */
220
+ publishArtifact(siteId: string, op: ArtifactContentOp, args: unknown[]): Promise<ArtifactRef>;
221
+ /**
222
+ * 声明一个**预置产物**(`artifact.chart` / `table` / `metrics` / `board`)。同步、无返回值、
223
+ * **不经 driver**:一个声明没有可等的东西,引擎在核心里校验 spec、落节点、发事件就结束。
224
+ *
225
+ * 失败(spec 非法 / 同 id 异 spec / 超上限)一律 failRun——void 返回没有拒绝通道,与
226
+ * `report` 同一条论证。
227
+ */
228
+ declareArtifact(siteId: string, op: ArtifactPresetOp, args: unknown[]): void;
229
+ log(message: string): void;
230
+ }
231
+ /** 一个 actor 会话的不透明引用(生产侧是 zcode session id)。 */
232
+ export interface SessionRef {
233
+ readonly id: string;
234
+ }
235
+ /** 核心对一次 submit 尝试的裁决,经 respondToSubmit 下发给 driver。 */
236
+ export type SubmitVerdict = {
237
+ kind: "accept";
238
+ } | {
239
+ kind: "reject";
240
+ violations: Violation[];
241
+ } | {
242
+ kind: "nudge";
243
+ };
244
+ /**
245
+ * 向下端口:核心请求 driver 执行的副作用。核心是纯确定性状态机,副作用与进度回报都在 driver。
246
+ * journal 与 emit 挂在 driver 上:核心通过 `driver.journal` 做
247
+ * journal 决策、通过 `driver.emit` 做 Boundary C 扇出。
248
+ */
249
+ export interface WorkflowDriver {
250
+ /**
251
+ * 铸一个 actor 会话。`seed` **仅当该 actor 消费了 ≥1 条导入 ask 条目时在场**
252
+ * (amend-resume 的转录截断,见 {@link ActorSessionSeed}):driver 必须在返回之前把源会话
253
+ * 的前 `messageCount` 条消息复制进新铸的会话,且这一步要**幂等**——目标会话已有内容时跳过,
254
+ * 那是崩溃后 resume 重挂同一个会话 id 的情形(会话 id 由 driver 按 (runId, actorRef) 纯确定地铸出)。
255
+ *
256
+ * 参数可选:既有 driver 实现少写一个形参在 TS 里合法,不带种子语义的 driver(fake、
257
+ * 纯 replay 测试)可以直接忽略它。
258
+ */
259
+ createActorSession(actor: ActorRef, persona: PersonaSpec, seed?: ActorSessionSeed): Promise<SessionRef>;
260
+ startAsk(session: SessionRef, instance: InstanceRef, message: AskMessage): void;
261
+ respondToSubmit(instance: InstanceRef, verdict: SubmitVerdict): void;
262
+ cancelAsk(instance: InstanceRef): void;
263
+ /**
264
+ * 执行一次世界读取。`args` 是脚本调用点的**位置实参**,lowering 原样打包、不做任何检查;
265
+ * 每个 op 的元数与实参校验归 driver(见 {@link WorkflowHostApi.worldRead})。
266
+ */
267
+ executeWorldRead(op: WorldReadOp, args: unknown[]): Promise<unknown>;
268
+ /**
269
+ * 发布一个内容产物的字节:校验实参形状、
270
+ * 解析工作区相对路径(越界拒绝)、读字节(cap+1 探测,超限拒绝不截断)、按扩展名定
271
+ * contentType、写 tool-artifact store,返回落库记录。
272
+ *
273
+ * **可选**:纯 replay / fake 装配没有 store 也没有文件系统。缺席时引擎以
274
+ * `ArtifactStoreUnavailable` 拒绝该节点——大声的一条命名失败,不是静默降级(预置成员不
275
+ * 受影响,它们本来就不过 driver)。
276
+ */
277
+ executeArtifactPublish?(request: ArtifactPublishRequest): Promise<ArtifactVersionRecord>;
278
+ journal: JournalStorePort;
279
+ emit(event: RunEvent): void;
280
+ /**
281
+ * run 结算后的资源释放:引擎在三条终态路径(complete / cancel / fail)记下 `run-settled`
282
+ * 之后恰好调一次。生产 driver 在这里对每个 actor runtime 跑 app 关会话的同一条关闭链
283
+ * (runtime 的 `closeBrowserSession`:beginShutdown + node_repl 会话释放 + 浏览器会话关闭)
284
+ * 并清空会话表;在飞 ask 此刻已被 cancelAsk 中止。可选:fake / 纯 replay 装配没有可释放
285
+ * 的东西。
286
+ */
287
+ dispose?(): void;
288
+ }
289
+ /**
290
+ * 一次在飞 ask 的模型请求正在**等**:
291
+ * - `cause: "slot"`:下一个请求在进程级准入闸门前排队(driver 的 `tryAdmit` 未命中);无其余字段。
292
+ * - `cause: "backoff"`:runner 已排定重试(`model_retry_scheduled`),带 reason / attempt / delayMs / retryAfterMs。
293
+ * `reason` 是 contracts `ModelRetryReason` 的值(`rate_limited` / `provider_overloaded` / `server_error` /
294
+ * `network_error` / `timeout` / `stream_idle_timeout` / `stale_connection` / `offpeak_queued` …),
295
+ * 纯包不 import contracts 故为开放字符串。`delayMs` 是相对量:引擎无时钟。
296
+ */
297
+ export interface AskWaitInfo {
298
+ cause: "slot" | "backoff";
299
+ reason?: string;
300
+ attempt?: number;
301
+ delayMs?: number;
302
+ retryAfterMs?: number;
303
+ }
304
+ /**
305
+ * 进程级并发 cap 变化的原因(决策 8/22)。`limit_lowered`:治理器压低了这个 key 的增长上限
306
+ * (一个上界更高的 run 结算或被调低),cap 被拉到新上限(docs/dynamic-workflow/concurrency.md
307
+ * 「The governor」)。`seeded`:用户调高了一个 run 的上界,cap 直接跳到它(同文档「Seeding」)。
308
+ * 线上是开放字符串,旧读者按普通变化显示。
309
+ */
310
+ export type ConcurrencyChangeReason = "rate_limited" | "provider_overloaded" | "offpeak_queued" | "recovered" | "idle_reset" | "limit_lowered" | "seeded";
311
+ /**
312
+ * 治理器对某 provider key 的 cap 调整,扇出给每个有该 key 在飞或等待 ask 的 run
313
+ * (进程级事实按 run 落多份是可接受的冗余——journal 里能解释「这个 run 为什么慢了」)。
314
+ */
315
+ export interface ConcurrencyChange {
316
+ /** provider key(`${providerId}/${modelId}`)。 */
317
+ key: string;
318
+ previous: number;
319
+ next: number;
320
+ reason: ConcurrencyChangeReason;
321
+ lastGood?: number;
322
+ lastBad?: number;
323
+ /** 带 Retry-After 的限流:新派发冻结的时长(相对量)。 */
324
+ cooldownMs?: number;
325
+ }
326
+ /**
327
+ * 向上表面:driver 把会话进度回报进核心。核心实现这个接口(生产侧 driver 持有其引用;
328
+ * 阶段一测试里由测试直接扮演"模型"调用这些方法)。
329
+ */
330
+ export interface WorkflowReportSink {
331
+ /** 一次 submit 尝试;核心校验后经 respondToSubmit 回裁决。 */
332
+ askSubmitAttempted(instance: InstanceRef, payload: unknown): void;
333
+ /** 一轮 turn 结束且未提交:核心决定 nudge,或据 finalText 结算 untyped ask。 */
334
+ askTurnEnded(instance: InstanceRef, finalText: string): void;
335
+ /**
336
+ * 一次 turn 解析时的进度观察:引擎只
337
+ * `record()` 成 `node-progress`,不据它做任何决策。**必须先于同一次 turn 的 askStats 调用**
338
+ * ——两条事件的先后是读面的契约。run 已结算后到达的调用被忽略。
339
+ */
340
+ askProgress(instance: InstanceRef, progress: AskProgress): void;
341
+ /** 用量统计:累计 run 用量并广播 usage/instance 更新。 */
342
+ askStats(instance: InstanceRef, stats: AskStats): void;
343
+ /** driver 侧不可恢复错误,结算该 ask 为失败。 */
344
+ askFailed(instance: InstanceRef, error: WorkflowError): void;
345
+ /**
346
+ * 确定性的模型侧错误:**不**结算
347
+ * 节点,而是让整个 run 以 `stopped(provider)` 停下(在飞 ask 一律 abort,与 cancel 同)。
348
+ * `error.code` 必须是 `ProviderStop`。run 已结算后到达的调用被忽略。
349
+ */
350
+ stopRun(error: WorkflowError): void;
351
+ /** run 级停滞观察:引擎只 `record()`。 */
352
+ runStalled(info: RunStallInfo): void;
353
+ /**
354
+ * 三个纯观察:引擎只 `record()`,不做任何决策。
355
+ * run 已结算 / 节点已结算后到达的调用被忽略。
356
+ */
357
+ /** 该 ask 的下一个模型请求在等:进程级准入闸门(slot)或 runner 退避(backoff)。 */
358
+ askWaiting(instance: InstanceRef, info: AskWaitInfo): void;
359
+ /** 该 ask 的一个模型请求真正发出了(`model_request_started`,且进入前不在 executing)。 */
360
+ askExecuting(instance: InstanceRef): void;
361
+ /**
362
+ * 该 ask 的子代理**即将**执行一个会改写工作区的工具:
363
+ * 引擎据此关闭导入缓存。这是唯一一个引擎据以做决策的 driver 观察——缓存的答案是对前驱世界
364
+ * 说的,第一笔写入之后那个世界就不存在了。工具还没动手就上报(PreToolUse 之后、handler 之前),
365
+ * 所以关门先于第一个字节落盘。run 已结算 / 节点已结算后到达的调用被忽略。
366
+ */
367
+ askMutating(instance: InstanceRef): void;
368
+ /** 进程级治理器调整了本 run 所在 provider key 的 cap。 */
369
+ concurrencyChanged(change: ConcurrencyChange): void;
370
+ }
371
+ /**
372
+ * 节点种类:ask、world-read、world-run 或 report(后三者都无 actor、无 actorSeq)。
373
+ * `world-run` 是 world.run 的 journal 化命令执行——机制与 world-read 完全同构,单列一种
374
+ * 是为了审计面诚实(效应不该伪装成读)。
375
+ * `report` 有 journal 行却在两张图里都不是节点——它发的是进度而不是次序。
376
+ * `artifact` 是**用户面产物**的一次发布或一次声明,与
377
+ * `report` 同族地有行无节点:交付物不是别人能等的一步。⚠ 与 `RunSettlement.artifact`
378
+ * (顶层返回值)无关。
379
+ */
380
+ export type NodeKind = "ask" | "world-read" | "world-run" | "report" | "artifact";
381
+ /**
382
+ * 一个 world-read / world-run 节点的**有界**输入(`dwf_node.input_json`)。`args` 按位置原样
383
+ * 保留,但序列化后超过 {@link WORLD_READ_INPUT_MAX_BYTES} 时逐项截成字符串预览并置
384
+ * `truncated`——审计面宁可诚实地说「被截了」,也不把一个 200 KB 的 `node -e` 代码串整个塞进
385
+ * 一张高频读的表。
386
+ */
387
+ export interface WorldReadInput {
388
+ op: string;
389
+ args: unknown[];
390
+ truncated?: true;
391
+ }
392
+ /** `WorldReadInput` 序列化后的字节上限(4 KB)。 */
393
+ export declare const WORLD_READ_INPUT_MAX_BYTES = 4096;
394
+ /** 节点结算的语义结果。replay 命中通过事件上的 `cached` 标志区分,不并入这里。 */
395
+ export type NodeOutcome = "ok" | "failed" | "cancelled";
396
+ /**
397
+ * run 生命周期状态。三个终态:
398
+ * - `completed`:脚本 return;
399
+ * - `errored`:脚本之错(脚本抛错、引擎契约违反)——不可 resume,只能 `resume_from` 修订;
400
+ * - `stopped`:run 被停下(`RunStopReason`),**一律可 resume**。
401
+ *
402
+ * 物理列 `dwf_run.status` 仍是旧五值(`failed` / `cancelled`)且不迁移:这里是**逻辑**词汇,
403
+ * 新旧之间的映射只活在 SQLite 仓储的编解码里(adapters `dwf-journal-codecs.ts`)。
404
+ */
405
+ export type RunStatus = "pending" | "running" | "completed" | "errored" | "stopped";
406
+ /**
407
+ * run 为什么停下:`user`(用户取消)/ `model`(主代理 TaskStop)/ `provider`(确定性模型侧
408
+ * 错误,见 `ProviderStop`)/ `interrupted`(持有进程亡故、沙箱崩溃 / 超时 / 协议损坏——宿主侧,
409
+ * 重跑很可能就好)/ `superseded`(被一次 AmendWorkflow 停下并替代,后继 id 在 `supersededBy`;
410
+ * **不可 resume**——活的是后继)。
411
+ */
412
+ export type RunStopReason = "user" | "model" | "provider" | "interrupted" | "superseded";
413
+ /**
414
+ * run 事件词汇表(Boundary C)。每个值得观察的状态迁移都发一个事件。
415
+ * `compaction` 为长上下文压缩预留——v1 从不发出,仅占位以便将来非破坏地加入。
416
+ */
417
+ export type RunEvent = {
418
+ type: "run-started";
419
+ runId: string;
420
+ caps: Caps;
421
+ }
422
+ /**
423
+ * 发起 run 的那一轮:`inputId` 是父会话里发起这次
424
+ * run 的 turn 的 inputId(中枢直接启动为铸出的 UUID v7)。**只在建 run 那一世记一次**,紧跟第一条
425
+ * `run-started`;resume 再发 `run-started` 时不再发它——同 run 的子代理 step 因此永远挂在同一个
426
+ * message 下。零 SQL:锚点活在 journal 事件里,不在 dwf_run 列上(刻意不做迁移)。
427
+ * `phaseNames` 是脚本声明的阶段表(声明序),由提交方从因果图填入;侧栏迷你轨道据此画出前方
428
+ * 的站点。同样只记一次,
429
+ * 冷重放免费重建;脚本没有 `phase()` 标记时缺席。
430
+ * `subagentModel` 是本 run 的子代理跑在哪个模型上,规范形 `providerId/modelId[$reasoningLevel]`。与锚点、阶段表同一路宿主元数据:引擎**从不读它**,
431
+ * 只在建 run 那一世随这条事件记一次;宿主在 resume 与两条读面上从事件头读回同一个串
432
+ * (子代理会话按「本字段 > resume pin > 父会话模型」定选型,bootstrap 的
433
+ * workflow-actor-model.ts)。同样零 SQL——不在 `dwf_run` 列上。缺席即子代理跑在会话模型上。
434
+ * `phaseAlongside` 与 `phaseNames` **按位置对齐**:`phaseAlongside[i]` 是进入 `phaseNames[i]` 时
435
+ * strand 仍在跑的其他阶段的下标(下标落在同一张 `phaseNames` 里)。侧栏据此把并行的两站画成
436
+ * 双线段;没有阶段并行时缺席,缺席就是「这条轨道是一条直线」。
437
+ * `scriptPath` 是本 run 的脚本**来自哪个文件**(绝对路径)。与 `subagentModel` 逐条同规:引擎从不读、只在建 run 那一世
438
+ * 记一次、零 SQL,宿主在两条读面上从事件头读回同一个串。缺席即这个 run 没有可编辑的脚本
439
+ * 文件(草稿写不下去的项目、本特性之前发起的 run),模型面因此退回内联重提交的老话。
440
+ * `subagentPermissionMode` 是本 run 子代理的权限模式(docs/dynamic-workflow/launch.md
441
+ * 「Permissions inside a run」):发起会话的权限模式名(plan 不带入)。与 `subagentModel`
442
+ * 逐条同规:引擎从不读、只在建 run 那一世记一次、零 SQL,宿主在 resume 时从事件头读回并
443
+ * 校验,据此让子代理以该模式运行。缺席或宿主不认得的值即子代理跑在 YOLO 上。
444
+ */
445
+ | {
446
+ type: "run-launched";
447
+ inputId: string;
448
+ toolCallId?: string;
449
+ parentSessionId?: string;
450
+ phaseNames?: string[];
451
+ subagentModel?: string;
452
+ subagentPermissionMode?: string;
453
+ /**
454
+ * 脚本里点名的每个模型名(逐字)→ 规范串 `providerId/modelId[$level]`
455
+ * (docs/dynamic-workflow/launch.md「Models the script names」)。与 `subagentModel` 同一条路:
456
+ * 提交方给出、建 run 那一世记一次、引擎从不读。脚本没点名任何模型时缺席。
457
+ */
458
+ modelBindings?: Record<string, string>;
459
+ scriptPath?: string;
460
+ phaseAlongside?: number[][];
461
+ /**
462
+ * `phaseNames` 里哪些下标是**未补全的留白**(docs/execution-engine.md「Holes」):留白按名字
463
+ * 占它在阶段表里的位置,侧栏据此把那一站画成虚线。与 `phaseAlongside` 同规对齐、同车同规
464
+ * (提交方给出、引擎不读);脚本没有留白时缺席。
465
+ */
466
+ holes?: number[];
467
+ }
468
+ /**
469
+ * `phaseName` 记录实例出生时最近一次 `enterPhase` 指定的阶段名。
470
+ * 只出现在**出生事件**上——actor 的 `actor-created`、
471
+ * 节点的 `node-queued`、以及命中缓存(replay / amend-resume)时代替 queued 的
472
+ * `node-settled { cached: true }`;其余 `node-*` 事件不带,reducer 沿用 `actorSiteId`
473
+ * 的先例向前携带。标记之前出生的实例整个键缺席。
474
+ *
475
+ * 它**不是**发出这条事件时的当前阶段:node-queued 可能被 hold 规则推迟到下一个标记
476
+ * 之后才发出,而出生时刻在上一个阶段。
477
+ */
478
+ | {
479
+ type: "actor-created";
480
+ actor: ActorRef;
481
+ name?: string;
482
+ persona?: PersonaSpec;
483
+ phaseName?: string;
484
+ } | {
485
+ type: "node-queued";
486
+ instance: InstanceRef;
487
+ kind: NodeKind;
488
+ actor?: ActorRef;
489
+ actorSeq?: number;
490
+ phaseName?: string;
491
+ /**
492
+ * 作者指令的**开头** {@link INSTRUCTIONS_HEAD_MAX_CHARS} 个字符(去两端空白,不加省略号),
493
+ * 只在 ask 节点上在场。事件轨上「这个子代理在干什么」的唯一答案:完整指令只活在
494
+ * `dwf_node.input_json` 里,而读面(run 详情、GetWorkflowRun)不为一行摘要去读那张表。
495
+ *
496
+ * 取的是**准入时刻**的指令,也就是引擎尾注追加之前的那一份——尾注是引擎的话,不是作者的。
497
+ */
498
+ instructionsHead?: string;
499
+ }
500
+ /**
501
+ * 派发:driver 被告知开跑。ask 的这一条**重复它自己的出生事实**——`kind` / `actor` /
502
+ * `phaseName` / `instructionsHead` 与该实例的 `node-queued` 逐字相同,`actorName` /
503
+ * `actorPhaseName` 则是它那个子代理的 `actor-created` 带过的 `name` / `phaseName`。
504
+ *
505
+ * 为什么要重复一遍已经发过的事实:读面的表是**有界**的,而「重要」发生在派发这一刻,不在
506
+ * 排队那一刻(docs/dynamic-workflow/presentation.md)。2000 个 agent 的 run 会在头几秒里把
507
+ * 全部 `actor-created` / `node-queued` 发完,表被前 1024 个排队者占满、一个都还没结算,
508
+ * 此后每一个**真正在跑**的实例都进不了表。带上出生事实,这条事件就是一次自足的出生:
509
+ * 读面可以据它把实例连同它的子代理一起收进表,而不必回头去找那条早已被拒的 queued。
510
+ *
511
+ * 两个阶段名都是**出生戳**,不是发这条事件时的当前阶段:排队的 ask 会卡在并发上界后面,
512
+ * 而脚本早已走进后面的阶段(打戳见 engine-phase-stamp.ts,读的是铸造点写下的那张表)。
513
+ * world-read 的派发不带这些键:它紧跟着自己的 `node-queued` 发出,也没有子代理。
514
+ */
515
+ | {
516
+ type: "node-dispatched";
517
+ instance: InstanceRef;
518
+ kind?: NodeKind;
519
+ actor?: ActorRef;
520
+ actorName?: string;
521
+ actorPhaseName?: string;
522
+ /**
523
+ * 它那个子代理 persona 的 `model`(脚本里写的名字,逐字):与 `actorName` 同理重复出生事实,
524
+ * 让读面在派发这一刻收回表的子代理也带着它的模型(宿主据绑定表派生规范串)。
525
+ */
526
+ actorPersonaModel?: string;
527
+ phaseName?: string;
528
+ instructionsHead?: string;
529
+ } | {
530
+ type: "node-repairing";
531
+ instance: InstanceRef;
532
+ attempt: number;
533
+ violations: Violation[];
534
+ } | {
535
+ type: "node-nudged";
536
+ instance: InstanceRef;
537
+ }
538
+ /**
539
+ * 自适应并发的三个观察事件。与 escalation 同族:
540
+ * 引擎核心不据它们做任何决策,它们只是 driver / 治理器观察到的事实经引擎 `record()` 落
541
+ * journal + 扇出。`node-waiting` ⇄ `node-executing` 是 dispatched 之后、settled 之前的自环
542
+ * (`executing` 由此成为**可观察**相位),不改变节点的 journal 记录
543
+ * (不写 dwf_node)。
544
+ */
545
+ | ({
546
+ type: "node-waiting";
547
+ instance: InstanceRef;
548
+ } & AskWaitInfo) | {
549
+ type: "node-executing";
550
+ instance: InstanceRef;
551
+ } | ({
552
+ type: "concurrency-changed";
553
+ } & ConcurrencyChange)
554
+ /**
555
+ * 本 run **自己**的并发上界被就地改了(docs/dynamic-workflow/concurrency.md
556
+ * 「Two bounds on a run」):一次只带 `max_concurrency` 的修订作用在活着的 run 上,同一个
557
+ * runId、不铸后继、在飞 ask 一个不丢。
558
+ *
559
+ * 与紧挨着的 `concurrency-changed` 分属**两条界**,别混:那条是进程级共享 cap 的治理器观察
560
+ * (单位是模型请求,引擎只 record),这条是本 run 的在飞 ask 上界,且是一次**命令**的结果
561
+ * ——换 caps、写 `dwf_run.caps_max_concurrency`、发这条事件在同一个同步步骤里发生,三者永远一致。
562
+ * `previous` 是改之前的那一份:读面要说的是「8 → 2」,从单个 caps 值推不出来。
563
+ */
564
+ | {
565
+ type: "run-caps-changed";
566
+ runId: string;
567
+ caps: Caps;
568
+ previous: Caps;
569
+ } | {
570
+ type: "node-settled";
571
+ instance: InstanceRef;
572
+ outcome: NodeOutcome;
573
+ cached?: boolean;
574
+ error?: WorkflowErrorJson;
575
+ /** 仅 `cached: true` 时在场:命中的节点没有 queued,这条就是它的出生事件。 */
576
+ phaseName?: string;
577
+ /**
578
+ * 以下四个只在 **ask 的缓存命中**上在场(replay 命中与 amend 导入命中同一副姿态):这条结算
579
+ * 就是出生事件,所以它**重发出生事实**——`node-queued` 本会带的 `kind` / `actor` /
580
+ * `actorSeq` / `instructionsHead`,与 `node-dispatched` 重发它们同一个理由:一个从没见过这条
581
+ * 实例入队的读面(修订 run 从空表开始)也要知道这是谁的答案。缺了它们,一个全部 ask 都命中
582
+ * 的子代理在读面上就是「待开始」。world 节点的缓存结算不带:它没有子代理。
583
+ */
584
+ kind?: NodeKind;
585
+ actor?: ActorRef;
586
+ actorSeq?: number;
587
+ instructionsHead?: string;
588
+ /**
589
+ * 答案读自**前驱的转录**时在场(导入命中,或修订 run resume 时对一条导入行的重放),值是
590
+ * 持有那段交换的会话(导入候选的 `transcriptSourceSessionId`)。本 run 没有为这次命中建会话,
591
+ * transcript 读面要去这条会话里看(docs/dynamic-workflow/presentation.md「Subagent
592
+ * transcripts」)。缺席即答案在本 run 自己的会话里产生过。
593
+ */
594
+ sourceSessionId?: string;
595
+ }
596
+ /**
597
+ * 一条 ask 在一次 turn 解析时的进度。
598
+ * 与 escalation / 并发那几个观察同族:**引擎核心不解释它**,只 `record()`——它不改任何调度
599
+ * 决策、不进 inputHash、replay 不比对它。同一次 turn 的两条事件顺序是载荷性的:
600
+ * 本条先于 `usage-updated`,于是读到新用量的人一定已经读到了挣来它的那次进度。
601
+ */
602
+ | ({
603
+ type: "node-progress";
604
+ instance: InstanceRef;
605
+ } & AskProgress)
606
+ /** run 级 token 用量更新:直接携带已花总量(journal 的 spent_tokens 同步写入,二者永远相等)。 */
607
+ | {
608
+ type: "usage-updated";
609
+ spentTokens: number;
610
+ } | {
611
+ type: "log";
612
+ message: string;
613
+ }
614
+ /**
615
+ * amend-resume 的导入缓存关闭了:某个 live 子代理即将
616
+ * 改写工作区(`cause: "mutating-tool"`,`actorName` 是它的有效名),或一条 `world.run` live 执行
617
+ * (`cause: "world-run"`)。每个 run 最多一条;修订 run 崩溃后 resume 据它恢复「门已关」——这是
618
+ * 关门的**唯一**事实来源,不再由「曾有 ask live」推断。非修订 run 没有表可关,不发。
619
+ */
620
+ | {
621
+ type: "import-cache-closed";
622
+ instance: InstanceRef;
623
+ cause: ImportCloseCause;
624
+ actorName?: string;
625
+ }
626
+ /**
627
+ * 控制流经过了一个 `phase("…")` 标记。**无站点、无 journal 行、无 driver 往返**——标记不是一步工作,它只是
628
+ * 「跑到哪了」的一个刻度。`name` 是作者的原词(去两端空白,与分析器铸造阶段 id 的键同一);
629
+ * `ordinal` 按名字计数,**每次求值都发**:同名再入即 +1,分析器也正是把第二个同名标记读成
630
+ * 回边。resume 时脚本重跑会把前缀再发一遍(没有 journal 行可去重),消费者单调归约即免疫。
631
+ */
632
+ | {
633
+ type: "phase-entered";
634
+ name: string;
635
+ ordinal: number;
636
+ }
637
+ /**
638
+ * 脚本到达一处未补全的留白(docs/execution-engine.md「Holes」)。`instance` 是
639
+ * `<留白 id>@ordinal`——序号与节点同族铸造,但**没有 journal 行**;`phaseName` 是出生阶段,
640
+ * 与 `node-queued` 同一张表打戳。`prompt` 已截到 4000 字符。resume 后一个仍在等的留白会被
641
+ * 脚本重新到达、再记一条(没有行、没有序号可撞)。
642
+ */
643
+ | {
644
+ type: "hole-reached";
645
+ instance: InstanceRef;
646
+ name: string;
647
+ prompt?: string;
648
+ phaseName?: string;
649
+ }
650
+ /**
651
+ * `fillHole`:有效脚本已写回 run 行、停驻的分支已放行。`phaseNames` 是有效脚本的阶段表
652
+ * (留白按名字占位),`holes` 是其中仍未补全的留白下标(与 `run-launched.holes` 同规对齐),
653
+ * 侧栏据此重画站点而不必等展示载荷;`filledBy` 是补全它的会话。
654
+ */
655
+ | {
656
+ type: "hole-filled";
657
+ siteId: string;
658
+ filledAt: number;
659
+ filledBy?: string;
660
+ phaseNames: string[];
661
+ holes?: number[];
662
+ /**
663
+ * 这次补全给一个原本没有草稿的 run 铸下的草稿(docs/dynamic-workflow/launch.md「The draft
664
+ * after a fill」)。`run-launched.scriptPath` 只在建 run 那一世写一次,冷读面若只看它,重启后
665
+ * 就找不到补全铸的那份——所以后铸的路径随这条事件落 journal,冷读取最后一条在场的。
666
+ * 原本就有草稿的补全(就地改写、路径不变)不带它。
667
+ */
668
+ scriptPath?: string;
669
+ }
670
+ /**
671
+ * 一条被发布的中间结果,每个**未被跳过**的 report 调用恰好一次(replay 命中即静默跳过,
672
+ * 不重发)。走与其他 run 事件完全相同的路线(进度汇 → 有界会话事件 → 投影 reducer),
673
+ * 终点是 run 面板的 Results 区。
674
+ *
675
+ * `artifactId` 在场即这条 item 同时喂给了那个预置产物(`report(item, "perf")`)——投影据它
676
+ * 给该产物的 `itemCount` 加一,看板 hook 以计数变化为增量取数的信号。
677
+ */
678
+ | {
679
+ type: "report";
680
+ instance: InstanceRef;
681
+ item: unknown;
682
+ artifactId?: string;
683
+ }
684
+ /**
685
+ * 一个**用户面产物**的新版本已就位:内容成员每成功发布一次一条,预置成员每次真正落下
686
+ * 声明(幂等 no-op 不发)一条。与 report 同规——replay 命中不重发,冷恢复从 journal 读。
687
+ *
688
+ * 成功路径**只发这一条**,不发任何节点生命周期事件(node-queued / dispatched / settled)。
689
+ * 与 `report` 同一条论证:产物是交付物,不是别人能等的一步,它在两张图里都不是节点。
690
+ */
691
+ | {
692
+ type: "artifact-published";
693
+ instance: InstanceRef;
694
+ artifact: ArtifactVersionRecord;
695
+ }
696
+ /**
697
+ * 一次内容产物发布失败(节点以 `failed` 落 journal,脚本那侧拿到一个可 catch 的拒绝)。
698
+ *
699
+ * **刻意不复用 `node-settled{failed}`**:那个事件的读者会把它归约进 `nodes[]` 并要求站点在
700
+ * 图里有对应的节点,而产物站点**不进任何图**——一条 node-settled 落在这样的站点上,在 run
701
+ * 面板里就是一个无从解释的「未知节点」,图层还会报告一个不认识的 site id。发布的失败因此
702
+ * 需要自己的事件:它带着足以渲染一张失败卡的东西(id / 种类 / 结构化错误),而不冒充一步
703
+ * 工作。replay 命中一条失败记录时**不重发**(同 report / artifact-published)。
704
+ */
705
+ | {
706
+ type: "artifact-failed";
707
+ instance: InstanceRef;
708
+ id: string;
709
+ op: ArtifactContentOp;
710
+ error: WorkflowErrorJson;
711
+ } | {
712
+ type: "compaction";
713
+ actor: ActorRef;
714
+ }
715
+ /**
716
+ * 一个 actor 把阻塞问题升级给了主代理,并停驻在自己那次 ask 里等答案。
717
+ *
718
+ * **引擎核心从不发这两个事件**——它们由 driver 在执行 ask 的边界内发出(与 repair /
719
+ * nudge 轮次同层),零 I/O 状态机不感知升级。之所以仍然住在这份词汇表里:它们走的是与
720
+ * 其他 run 事件完全相同的两条轨(journal 的 dwf_event + driver.emit 的实时扇出),而那两条
721
+ * 轨的形状由 `RunEvent` 定义。升级**不写 dwf_node 行**(等待不是工作量)。
722
+ */
723
+ | {
724
+ type: "escalation-raised";
725
+ qid: string;
726
+ actor: ActorRef;
727
+ /**
728
+ * actor 的**有效名**(= `normalizePersona` 后的 `spec.name`,也就是 `actor-created`
729
+ * 事件上那一个、以及 amend-resume 用作缓存身份键的那一个)。匿名 actor 缺席,
730
+ * 且不合成兜底标签——消费者各自决定怎么渲染「无名」。
731
+ */
732
+ actorName?: string;
733
+ question: string;
734
+ context?: string;
735
+ /**
736
+ * 提问时刻(epoch 毫秒)。**必填**:读者要回答的第一个问题恒是「这个问题已经等了多久」,
737
+ * 而事件轨上没有别的时钟可用——`dwf_event.time_created` 只在 durable 那一轨上有,实时轨
738
+ * (driver.emit → progress sink → 侧栏)拿不到它,让 UI 用「收到事件的本地时刻」兜底就会
739
+ * 在冷启动重放整段历史时把每个问题都显示成刚刚提的。
740
+ *
741
+ * 与快照 `pendingQuestions[].askedAt` **同一个瞬间**(driver 只取一次 `Date.now()`,
742
+ * 事件与停驻记录共用),所以两条读面上的等待时长永远一致。
743
+ */
744
+ askedAt: number;
745
+ } | {
746
+ type: "escalation-resolved";
747
+ qid: string;
748
+ answer: string;
749
+ }
750
+ /** run 级停滞观察(见 {@link RunStallInfo});run 结算后到达的调用被忽略。 */
751
+ | ({
752
+ type: "run-stalled";
753
+ } & RunStallInfo)
754
+ /**
755
+ * `stopReason` 只在 `status === "stopped"` 时在场;`error` 在 `errored` 恒在场,在
756
+ * `stopped` 只对 `provider`(`ProviderStop`)与 `interrupted`(`Interrupted`)在场。
757
+ */
758
+ | {
759
+ type: "run-settled";
760
+ status: RunStatus;
761
+ stopReason?: RunStopReason;
762
+ /** `stopReason === "superseded"` 时在场:停下本 run 的那次修订铸出的新 run。 */
763
+ supersededBy?: string;
764
+ error?: WorkflowErrorJson;
765
+ };
766
+ /** dwf_run 记录(核心只强依赖 caps/status/failure;其余为阶段二整形预留)。 */
767
+ export interface RunRecord {
768
+ runId: string;
769
+ parentSessionId?: string;
770
+ cwd?: string;
771
+ /**
772
+ * 人给的 run 名字(`CreateWorkflow` 的可选 `input.name`)。纯展示元数据:引擎不读它,
773
+ * 只在 createRun 时随 scriptText / cwd 一起落库,供宿主的枚举面拿来当标签——否则跨会话
774
+ * 列出来的只能是一串裸 runId。缺席即没起名(读侧按脚本首行兜底,不回写)。
775
+ */
776
+ name?: string;
777
+ /**
778
+ * 发起这次 run 的 CreateWorkflow 工具调用 id。纯宿主元数据:引擎不读它,只在 createRun
779
+ * 时随 scriptText / cwd 一起落库。它是重启后仅存的关联锚点——`workflowRuns` 投影跨进程
780
+ * 不存活,工具卡 join、resume 的通知锚点都只能从这里还原。
781
+ */
782
+ toolCallId?: string;
783
+ scriptText?: string;
784
+ scriptHash?: string;
785
+ /**
786
+ * 本次 run 的实参(saved workflow 的声明式参数,已校验并回填默认值)。
787
+ *
788
+ * 与 `scriptText` 同级的 run **身份**的一部分,不是展示元数据:resume 重放这里存下的
789
+ * 实参,永不接受新的——换实参就是另一次 run,该走一次新的确认窗。缺席(老行的 NULL)
790
+ * 解读为 `{}`,不回填(不变式 6/7)。
791
+ */
792
+ args?: Record<string, unknown>;
793
+ /**
794
+ * amend-resume 的 lineage 指针:本 run 由哪个前驱 run 修订而来。宿主元数据,引擎不读它,只在 createRun 时随其余
795
+ * 元数据落库。修订是 **supersede**——新 runId、新脚本、前驱行零触碰——所以两侧唯一的联系
796
+ * 就是这个指针:resume 重建导入缓存(`port.resume` 见它在场即重建 ImportedCache)与
797
+ * UI 的「续自 run X」都从这里还原。缺席即本 run 不是修订(绝大多数 run)。
798
+ */
799
+ resumedFrom?: string;
800
+ caps: Caps;
801
+ /** 累计 token 用量(观察面,不是控制面)。 */
802
+ spentTokens: number;
803
+ status: RunStatus;
804
+ /** `status === "stopped"` 时在场(老行解码时缺席 ⇒ `user`,见仓储编解码)。 */
805
+ stopReason?: RunStopReason;
806
+ /** `stopReason === "superseded"` 时在场:替代本 run 的后继 run(与它的 `resumedFrom` 是同一条边的两端)。 */
807
+ supersededBy?: string;
808
+ failure?: WorkflowErrorJson;
809
+ /** 脚本的顶层返回值。Present only for completed runs(`undefined` 产物即整字段缺席)。 */
810
+ result?: unknown;
811
+ }
812
+ /** dwf_actor 记录,unique(runId, siteId, ordinal)。 */
813
+ export interface ActorRecord {
814
+ runId: string;
815
+ siteId: string;
816
+ ordinal: number;
817
+ name?: string;
818
+ persona?: PersonaSpec;
819
+ sessionId?: string;
820
+ /**
821
+ * actor 实际跑在哪个模型上(`providerId/modelId`),由 driver 侧写入。
822
+ *
823
+ * 为什么不塞进 `persona`:persona 是引擎在 createActor 时同步写下的冻结身份,而模型是宿主
824
+ * 事实(父会话**当时**的选择),引擎看不见。分成两个字段,身份与宿主事实就各有一个作者,
825
+ * 谁写的谁负责。
826
+ *
827
+ * 为什么要落库:run 的成本因此可审计,且 resume 能重新附着到**同一个**模型——父会话在两次
828
+ * 运行之间换了主模型,也不会让同一个 run 的后半段悄悄换模型(pin,见 bootstrap 的
829
+ * workflow-actor-model.ts)。
830
+ *
831
+ * 与 `sessionId` 同属「driver 拥有的字段」:引擎的 putActor 只负责把已有值原样带过去
832
+ * (见 engine.ts 的 createActor 与 scheduler.ts 的 ensureSession),绝不自己产出它。
833
+ */
834
+ resolvedModel?: string;
835
+ }
836
+ /**
837
+ * 节点的落库状态。节点在**准入时**即以 `running` 落库(携带 actorSeq 与 inputHash),
838
+ * 结算时更新为 completed/failed。因此崩溃于执行中的节点在 journal 里留有 `running` 记录,
839
+ * resume 时按记录的 actorSeq 位置重新 live 派发(而非当作已完结结果短路)。
840
+ *
841
+ * **report 节点是这条「两次写」规则唯一的例外**:它只写一次、落库即 `completed`——准入与
842
+ * 结算之间没有 driver 调用,也就没有什么能在中间失败。
843
+ */
844
+ export type NodeRecordStatus = "running" | "completed" | "failed";
845
+ /**
846
+ * dwf_node 记录。unique(runId, siteId, ordinal);对 ask 另有
847
+ * unique(runId, actorSiteId, actorOrdinal, actorSeq)。world-read 与 report 的 actor* 与
848
+ * actorSeq 均空;report 行还满足:一次写入、status 恒为 `completed`、`result` 即被报告的 item、
849
+ * `inputHash` 覆盖该 item(replay 命中时防御性比对)。
850
+ */
851
+ export interface NodeRecord {
852
+ runId: string;
853
+ siteId: string;
854
+ ordinal: number;
855
+ kind: NodeKind;
856
+ actorSiteId?: string;
857
+ actorOrdinal?: number;
858
+ actorSeq?: number;
859
+ inputHash: string;
860
+ status: NodeRecordStatus;
861
+ result?: unknown;
862
+ error?: WorkflowErrorJson;
863
+ stats?: AskStats;
864
+ /**
865
+ * **用户面产物**的 id(`dwf_node.artifact_id` 列)。两种行会带它:`kind: "artifact"` 的行
866
+ * (它发布/声明的那个产物),以及带标签的 `kind: "report"` 行(这条 item 喂给了哪个预置)。
867
+ * 后者正是「看板 = journal 的投影」这条不变式的落点——一个看板的每个点都是一行
868
+ * `kind = report ∧ artifact_id = ?`。其余行为空。
869
+ */
870
+ artifactId?: string;
871
+ /**
872
+ * **world-read / world-run 节点专用**:这一站
873
+ * 实际执行的 op 与实参,**有界**({@link WorldReadInput})。`inputHash` 只回答「同一个输入吗」,
874
+ * 回答不了「输入是什么」——工作区 transcript 要说 *what ran*,不只是 *something ran*。
875
+ * 准入即写(与 `inputHash` 同一次 putNode),结算的 upsert 原样带过去;0030 之前的行与
876
+ * ask / report / artifact 行一律缺席。
877
+ */
878
+ input?: WorldReadInput;
879
+ /**
880
+ * **ask 节点专用**:该 ask 的完整交换(含 repair / nudge 轮与 submit 之后的收尾消息)结束后,
881
+ * 该 actor 会话消息 log 的长度——一个 count offset,不是消息 id 区间。
882
+ *
883
+ * driver 拥有的补写字段(与 `stats` 回填同族、同样经 getNode + putNode 读改写落库),引擎
884
+ * 不产出它。存 count 而不是 id 区间,是因为 count 的关键性质是**前缀复制下不变**:把源会话
885
+ * 前 N 条消息复制进一个新会话,消息 id 全变而 count 不变,于是被复制 ask 的边界值在新会话里
886
+ * 原样有效。这正是 amend-resume 全保真转录截断(以及链式修订)的根基。
887
+ */
888
+ messageBoundary?: number;
889
+ }
890
+ /** 一条已落库事件,sequence 由 appendEvent 单调分配。 */
891
+ export interface StoredEvent {
892
+ sequence: number;
893
+ event: RunEvent;
894
+ /**
895
+ * 存储层追加这条事件的时刻(epoch 毫秒)。事件日志里一切「多久以前」的唯一时钟:
896
+ * 日志行的年龄、子代理上一次动作的时刻、run 停滞了多久,都只能从它算。
897
+ * 由读者现取 `Date.now()` 兜底是错的——那会把一次冷重放里一周前的整段历史全标成「刚刚」。
898
+ *
899
+ * 类型上可选,好让实现了端口的测试替身继续编译;两个**真**实现(SQLite 的 `time_created`
900
+ * 列、内存实现的 append 时戳)都必须填,契约测试钉住这一条。
901
+ */
902
+ timeCreated?: number;
903
+ }
904
+ export type { GetNodeOptions, ListActorsOptions, ListEventsOptions, ListNodesOptions, RunEventType, } from "./journal-read-types.js";
905
+ /**
906
+ * run 结算随附的落库内容。存在的理由是**一笔写**:终态状态与产物分两次 UPDATE,
907
+ * 中间崩溃就造出一个 `completed` 但产物不可恢复的 run。缺省的键表示「不触碰该列」
908
+ * (引擎的 `running` 写入与该列引入之前的历史行都靠这条语义)。
909
+ */
910
+ export interface RunSettlementRecord {
911
+ /** 与 `status === "stopped"` 同时写入;其余状态不带。 */
912
+ stopReason?: RunStopReason;
913
+ /** 与 `stopReason === "superseded"` 同一笔写入(stopped 信封整体重写,分两笔会丢)。 */
914
+ supersededBy?: string;
915
+ failure?: WorkflowErrorJson;
916
+ result?: unknown;
917
+ }
918
+ /**
919
+ * journal 存储端口:仓储式、同步方法,无 SQL 泄漏。内存实现见 journal-memory.ts;
920
+ * SQLite 实现与内存实现共用此端口。旧测试入口已随 Vitest 清理,避免生产编译依赖未声明的测试框架。
921
+ */
922
+ export interface JournalStorePort {
923
+ createRun(record: RunRecord): void;
924
+ getRun(runId: string): RunRecord | undefined;
925
+ updateRunStatus(runId: string, status: RunStatus, settlement?: RunSettlementRecord): void;
926
+ /**
927
+ * 单独持久化累计 token 用量(run 结算之外的高频小写入)。未知 runId 必须抛错;
928
+ * 绝不触碰 status / failure——用量更新与 run 结算是两条独立的写入路径。
929
+ */
930
+ updateRunUsage(runId: string, spentTokens: number): void;
931
+ /**
932
+ * 单独持久化本 run 的并发上界(`dwf_run.caps_max_concurrency`)。未知 runId 必须抛错;
933
+ * **只碰这一列**——状态、用量与结算袋都不在这条写入的范围里,与 {@link updateRunUsage} 同族。
934
+ *
935
+ * 它是那一列的**第二个写入者**(第一个是 {@link createRun}):一次只改 `max_concurrency` 的
936
+ * 修订就地作用在活着的 run 上,而 resume 沿用行里的 caps——不落库,恢复出来的就还是旧上界
937
+ * (docs/dynamic-workflow/concurrency.md「Two bounds on a run」)。
938
+ */
939
+ updateRunCaps(runId: string, caps: Caps): void;
940
+ /**
941
+ * 把**有效脚本**写回 run 行(`dwf_run.script_text` / `script_hash`,docs/execution-engine.md
942
+ * 「Holes」)。它是这两列在 {@link createRun} 之后的第二个写入者:一次补全把留白的体接进
943
+ * 脚本,此后 resume 拿行里的哈希对行里的文本,所以两列**必须同一笔写**。未知 runId 必须抛错;
944
+ * 行上其余一切(状态、用量、上界、结算袋、元数据)都不在这条写入的范围里,与
945
+ * {@link updateRunUsage} 同族。
946
+ */
947
+ updateRunScript(runId: string, scriptText: string, scriptHash: string): void;
948
+ putActor(record: ActorRecord): void;
949
+ getActor(runId: string, siteId: string, ordinal: number): ActorRecord | undefined;
950
+ listActors(runId: string, opts: ListActorsOptions): ActorRecord[];
951
+ putNode(record: NodeRecord): void;
952
+ getNode(runId: string, siteId: string, ordinal: number, opts?: GetNodeOptions): NodeRecord | undefined;
953
+ /** 读面必须说清要什么(docs/execution-engine.md「Reading the journal」);整表读写 `"all"`。 */
954
+ listNodes(runId: string, opts: ListNodesOptions): NodeRecord[];
955
+ /** `count(*)`:只要行数的读者不必把行读出来。 */
956
+ countNodes(runId: string, kind: NodeKind): number;
957
+ /**
958
+ * 该 kind 各行 `result` 的 UTF-8 序列化字节数之和(`JSON.stringify(result)` 的字节;无结果的行
959
+ * 计 0)。只要字节数的读者(resume 恢复报告的 run 级字节计数)不必把结果读出来:SQLite 侧是
960
+ * `sum(octet_length(result_json))`,长度从行头读,不碰结果本身。
961
+ */
962
+ sumResultBytes(runId: string, kind: NodeKind): number;
963
+ appendEvent(runId: string, event: RunEvent): StoredEvent;
964
+ /**
965
+ * 按 sequence 升序列出事件。类型过滤、cursor、limit 与 report item 的剥离都必须在存储层
966
+ * 做,不得取全量再切片——分页与过滤存在的理由就是不把整条 journal 读进内存。
967
+ * 未知 runId 与越界 cursor 一律返回空数组(不抛错):投影与 journal 之间的竞态窗口里,
968
+ * 客户端拿着一个尚未存在的 cursor 回来是正常时序。
969
+ */
970
+ listEvents(runId: string, opts: ListEventsOptions): StoredEvent[];
971
+ }
972
+ export { INSTRUCTIONS_HEAD_MAX_CHARS, LAST_TOOL_NAME_MAX_CHARS, LAST_TOOL_TARGET_MAX_CHARS, } from "./ask-observation-types.js";
973
+ export type { AskLastTool, AskProgress, AskStats } from "./ask-observation-types.js";
974
+ export type { ActorSessionSeed, ImportedActorCandidate, ImportedAskEntry, ImportedInFlightAsk, ImportedRunCache, ImportedWorldEntry, } from "./imported-cache-types.js";
975
+ /** 节点内 repair(拒绝重试)次数上限:3 次。 */
976
+ export declare const REPAIR_ATTEMPTS = 3;
977
+ /** turn 结束未提交时的 nudge 次数上限:1 次。 */
978
+ export declare const NUDGE_ATTEMPTS = 1;
979
+ //# sourceMappingURL=types.d.ts.map