@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,82 @@
1
+ import { type CompileDiagnostic, type WorkflowProgram } from "../compiler/compile.js";
2
+ import { type SiteTable } from "../analysis/sites.js";
3
+ /**
4
+ * Lowering(instrumentation emit step):把已 typecheck + analyze 干净的 workflow 脚本降级为沙箱可跑的
5
+ * **JavaScript**。两件事:
6
+ *
7
+ * 1. 剥离类型——程序已经 typecheck 过,这里是对同一份源码做 transpile 级别的类型擦除。
8
+ * 2. 用站点表里的**静态 site id** 给每个 facade 调用打桩,改写成 Boundary A 的 `__host.*`:
9
+ * agent(name, persona) -> __host.createActor("actor#2", name, persona)
10
+ * planner.ask<Plan>(text) -> __host.ask("ask#3", planner, text)
11
+ * maybe?.ask<Plan>(text) -> maybe === null || maybe === undefined
12
+ * ? undefined : __host.ask("ask#3", maybe, text)
13
+ * (可选链的短路保留:receiver 为 nullish 时跳过 ask、
14
+ * 实参不求值;非标识符 receiver 经临时变量求值一次)
15
+ * files.glob(p) / files.read(p)
16
+ * -> __host.worldRead("world-read#1", "glob", [p])
17
+ * __host.worldRead("world-read#2", "read", [p])
18
+ * report(x) -> __host.report("report#1", x)
19
+ * report(x, "perf") -> __host.report("report#1", x, "perf")
20
+ * artifact.file(id, p, o) -> __host.publishArtifact("artifact#1", "file", [id, p, o])
21
+ * artifact.chart(id, spec) -> __host.declareArtifact("artifact#2", "chart", [id, spec])
22
+ * log(msg) -> __host.log(msg)
23
+ * phase("gate") -> __host.enterPhase("gate")(无站点;引擎只发一条事件)
24
+ * model("GLM-5.3-Flash") -> "GLM-5.3-Flash"(无站点、无 host 调用:ModelRef 运行期即名字)
25
+ * channel<T>("facts") -> __host.channel("facts")(无站点;队列在 cell 内构造)
26
+ * future(async () => {...}) -> __host.future(async () => {...})(无站点;cell 立即调用)
27
+ * hole<T>(n, p?, body?) -> __host.hole("hole#1", n, p ?? void 0, (__src) => eval(__src), body?)
28
+ * (lower-hole.ts;已补全的函数体另以文本形式进 holeBodies)
29
+ * Join(Promise.all)与 fan-out 是沙箱内的普通 promise 机制,不是 host 调用,原样保留。
30
+ *
31
+ * ————————————————————————————————————————————————————————————————
32
+ * 输出契约(harness 契约,沙箱负责 wrap):
33
+ * ————————————————————————————————————————————————————————————————
34
+ * {@link LoweredWorkflow.code} 是 lowered 脚本的 **async 函数体**:顶层 `await` 与末尾
35
+ * `return <artifact>` 都合法,因为 harness 会把它包进一个 async 函数里执行,形如
36
+ *
37
+ * const __run = async (__host) => { <code> };
38
+ *
39
+ * 也就是说 code 里唯一的自由标识符是 `__host`(见 {@link HOST_BINDING})——facade 的
40
+ * `agent` / `log` / `files` / `phase` 都已改写掉,沙箱 vm 的 globals
41
+ * 只需提供 ES intrinsics 加一个 `__host` 即可。
42
+ * schema 从不跨沙箱边界:引擎按 site id 从编译产物里查 schema,code 里不含任何 schema。
43
+ *
44
+ * {@link LoweredWorkflow.siteIds} 是被打桩的全部 facade site id,按源码顺序排列(asks /
45
+ * actors / world-reads / reports / artifacts;`log`/`phase` 不占 site id,故不在其中)——供
46
+ * harness 与测试断言"每个 site id 恰好出现一次"。
47
+ *
48
+ * 确定性:printer + transpile 都是纯函数,同一份输入 → 逐字节相同的输出。
49
+ */
50
+ /** harness 必须为 lowered code 绑定的自由标识符(Boundary A 的 host 句柄)。 */
51
+ export declare const HOST_BINDING = "__host";
52
+ /** lowering 的产物:sandbox 输入的 JS 体 + 打桩到的 site id 清单。 */
53
+ export interface LoweredWorkflow {
54
+ /** lowered 脚本的 async 函数体(顶层 await / 末尾 return 合法;自由标识符仅 `__host`)。 */
55
+ code: string;
56
+ /** 被打桩的 facade site id,按源码顺序(不含 log,它无 site id;留白与其函数体内的站点在内)。 */
57
+ siteIds: string[];
58
+ /**
59
+ * 每个**已补全**留白的函数体文本 `(async () => {\n…\n})`,按站点 id:与主体同一趟 transform
60
+ * 打印、同一套参数擦除(execution-engine.md「The text that runs」)。开放的留白不在其中。
61
+ */
62
+ holeBodies: Record<string, string>;
63
+ }
64
+ /** {@link lowerWorkflowScript} 的结果:与 analyze 同构——脏脚本不降级,`lowered` 仅在 `ok` 时给出。 */
65
+ export interface LowerResult {
66
+ diagnostics: CompileDiagnostic[];
67
+ ok: boolean;
68
+ lowered?: LoweredWorkflow;
69
+ }
70
+ /**
71
+ * 便捷入口:编译 + facade-siting 校验 + 收集站点表 + 降级,与 `analyzeWorkflowScript` 同构。
72
+ * 脏脚本(typecheck 或 facade-siting 报错)不降级——降级只在干净程序上运行。
73
+ */
74
+ export declare function lowerWorkflowScript(scriptText: string): LowerResult;
75
+ /**
76
+ * 核心:把一个已分析干净的 workflow 降级为 {@link LoweredWorkflow}。
77
+ * 站点调用(ask/actor/world-read)一律按 **ts.Node 身份**(站点表持有的 raw call 引用)匹配,
78
+ * 绝不按名字/形状重新识别——那会制造第二份真相。`log` 不入站点表,按 checker 的
79
+ * 签名解析(解析进 facade .d.ts,与 sites.ts 同一机制)识别,属于身份判定而非名字启发。
80
+ */
81
+ export declare function lowerWorkflow(workflow: WorkflowProgram, table: SiteTable): LoweredWorkflow;
82
+ //# sourceMappingURL=lower.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.d.ts","sourceRoot":"","sources":["../../src/lowering/lower.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAI9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,YAAY,WAAW,CAAC;AASrC,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAcD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAenE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,eAAe,CAsL1F"}
@@ -0,0 +1,333 @@
1
+ import ts from "typescript";
2
+ import { collectDiagnostics, createWorkflowProgram, WORKFLOW_FUNCTION_NAME, } from "../compiler/compile.js";
3
+ import { FACADE_FILE_NAME } from "../facade/dts.js";
4
+ import { isArtifactPresetOp } from "../facade/registry.js";
5
+ import { collectFacadeMisuse } from "../analysis/facade-misuse.js";
6
+ import { collectSites, isFacadeDeclared, resolveSymbol, } from "../analysis/sites.js";
7
+ import { collectHoleDiagnostics } from "../analysis/hole-sites.js";
8
+ import { lowerHoleCall, printHoleBodies, TRANSPILE_OPTIONS } from "./lower-hole.js";
9
+ /**
10
+ * Lowering(instrumentation emit step):把已 typecheck + analyze 干净的 workflow 脚本降级为沙箱可跑的
11
+ * **JavaScript**。两件事:
12
+ *
13
+ * 1. 剥离类型——程序已经 typecheck 过,这里是对同一份源码做 transpile 级别的类型擦除。
14
+ * 2. 用站点表里的**静态 site id** 给每个 facade 调用打桩,改写成 Boundary A 的 `__host.*`:
15
+ * agent(name, persona) -> __host.createActor("actor#2", name, persona)
16
+ * planner.ask<Plan>(text) -> __host.ask("ask#3", planner, text)
17
+ * maybe?.ask<Plan>(text) -> maybe === null || maybe === undefined
18
+ * ? undefined : __host.ask("ask#3", maybe, text)
19
+ * (可选链的短路保留:receiver 为 nullish 时跳过 ask、
20
+ * 实参不求值;非标识符 receiver 经临时变量求值一次)
21
+ * files.glob(p) / files.read(p)
22
+ * -> __host.worldRead("world-read#1", "glob", [p])
23
+ * __host.worldRead("world-read#2", "read", [p])
24
+ * report(x) -> __host.report("report#1", x)
25
+ * report(x, "perf") -> __host.report("report#1", x, "perf")
26
+ * artifact.file(id, p, o) -> __host.publishArtifact("artifact#1", "file", [id, p, o])
27
+ * artifact.chart(id, spec) -> __host.declareArtifact("artifact#2", "chart", [id, spec])
28
+ * log(msg) -> __host.log(msg)
29
+ * phase("gate") -> __host.enterPhase("gate")(无站点;引擎只发一条事件)
30
+ * model("GLM-5.3-Flash") -> "GLM-5.3-Flash"(无站点、无 host 调用:ModelRef 运行期即名字)
31
+ * channel<T>("facts") -> __host.channel("facts")(无站点;队列在 cell 内构造)
32
+ * future(async () => {...}) -> __host.future(async () => {...})(无站点;cell 立即调用)
33
+ * hole<T>(n, p?, body?) -> __host.hole("hole#1", n, p ?? void 0, (__src) => eval(__src), body?)
34
+ * (lower-hole.ts;已补全的函数体另以文本形式进 holeBodies)
35
+ * Join(Promise.all)与 fan-out 是沙箱内的普通 promise 机制,不是 host 调用,原样保留。
36
+ *
37
+ * ————————————————————————————————————————————————————————————————
38
+ * 输出契约(harness 契约,沙箱负责 wrap):
39
+ * ————————————————————————————————————————————————————————————————
40
+ * {@link LoweredWorkflow.code} 是 lowered 脚本的 **async 函数体**:顶层 `await` 与末尾
41
+ * `return <artifact>` 都合法,因为 harness 会把它包进一个 async 函数里执行,形如
42
+ *
43
+ * const __run = async (__host) => { <code> };
44
+ *
45
+ * 也就是说 code 里唯一的自由标识符是 `__host`(见 {@link HOST_BINDING})——facade 的
46
+ * `agent` / `log` / `files` / `phase` 都已改写掉,沙箱 vm 的 globals
47
+ * 只需提供 ES intrinsics 加一个 `__host` 即可。
48
+ * schema 从不跨沙箱边界:引擎按 site id 从编译产物里查 schema,code 里不含任何 schema。
49
+ *
50
+ * {@link LoweredWorkflow.siteIds} 是被打桩的全部 facade site id,按源码顺序排列(asks /
51
+ * actors / world-reads / reports / artifacts;`log`/`phase` 不占 site id,故不在其中)——供
52
+ * harness 与测试断言"每个 site id 恰好出现一次"。
53
+ *
54
+ * 确定性:printer + transpile 都是纯函数,同一份输入 → 逐字节相同的输出。
55
+ */
56
+ /** harness 必须为 lowered code 绑定的自由标识符(Boundary A 的 host 句柄)。 */
57
+ export const HOST_BINDING = "__host";
58
+ /**
59
+ * 无站点、按名字原样透传到 `__host.<name>(...)` 的顶层 facade 函数:`log`(进度叙事)、
60
+ * `channel` / `future`(沙箱内的流水线原语,docs/dynamic-workflow/authoring.md「Streams」)。
61
+ * 它们都没有 journal 键,所以不进站点表;身份仍按 checker 解析到 facade 声明判定。
62
+ */
63
+ const HOST_PASSTHROUGH_FUNCTIONS = new Set(["log", "channel", "future"]);
64
+ /**
65
+ * 便捷入口:编译 + facade-siting 校验 + 收集站点表 + 降级,与 `analyzeWorkflowScript` 同构。
66
+ * 脏脚本(typecheck 或 facade-siting 报错)不降级——降级只在干净程序上运行。
67
+ */
68
+ export function lowerWorkflowScript(scriptText) {
69
+ const workflow = createWorkflowProgram(scriptText);
70
+ const diagnostics = collectDiagnostics(workflow.program);
71
+ if (diagnostics.length > 0)
72
+ return { diagnostics, ok: false };
73
+ const table = collectSites(workflow);
74
+ // 留白规则(9012)与 facade-siting 同席:一个没等值、或落在 fan-out 里的留白降级出去就是
75
+ // 运行期的错,与 analyzeWorkflowScript 同一道门。
76
+ const misuse = [
77
+ ...collectFacadeMisuse(workflow, table),
78
+ ...collectHoleDiagnostics(workflow, table),
79
+ ];
80
+ if (misuse.length > 0)
81
+ return { diagnostics: misuse, ok: false };
82
+ return { diagnostics, lowered: lowerWorkflow(workflow, table), ok: true };
83
+ }
84
+ /**
85
+ * 核心:把一个已分析干净的 workflow 降级为 {@link LoweredWorkflow}。
86
+ * 站点调用(ask/actor/world-read)一律按 **ts.Node 身份**(站点表持有的 raw call 引用)匹配,
87
+ * 绝不按名字/形状重新识别——那会制造第二份真相。`log` 不入站点表,按 checker 的
88
+ * 签名解析(解析进 facade .d.ts,与 sites.ts 同一机制)识别,属于身份判定而非名字启发。
89
+ */
90
+ export function lowerWorkflow(workflow, table) {
91
+ const checker = workflow.program.getTypeChecker();
92
+ const siteMap = buildSiteMap(table);
93
+ // 已补全留白的函数体(改写后的节点),transform 结束后打印成 holeBodies。
94
+ const holeBodyNodes = new Map();
95
+ // 第一趟:instrumentation。在同一份 scriptFile(站点表引用的正是它的节点)上做 transform,
96
+ // 从而能按节点身份命中站点表;此时类型尚未擦除。
97
+ const transformer = (context) => {
98
+ const { factory } = context;
99
+ const hostMember = (name) => factory.createPropertyAccessExpression(factory.createIdentifier(HOST_BINDING), name);
100
+ const siteArg = (id) => factory.createStringLiteral(id);
101
+ const visit = (node) => {
102
+ // `args` 是 facade 里唯一一个**值**而不是可调用物,所以它是唯一走标识符级改写的
103
+ // 符号:读它不是一个等待点,没有站点、不进因果图。判定按 checker 解析结果(与站点
104
+ // 身份同一机制),所以脚本自己声明的局部 `args` 解析到脚本文件的符号,原样保留。
105
+ //
106
+ // 刻意**不**改用「在包装函数体里注入 `const args = ...`」:用户脚本里再声明一个
107
+ // `args` 会变成重复声明的运行期 SyntaxError,而编译期完全看不出来。
108
+ if (ts.isIdentifier(node) && node.text === "args" && isFacadeArgsRead(node, checker)) {
109
+ return hostMember("args");
110
+ }
111
+ if (ts.isCallExpression(node)) {
112
+ const emit = siteMap.get(node);
113
+ if (emit !== undefined)
114
+ return lowerSited(node, emit);
115
+ // 非站点的 facade 调用:log、channel、future(agent/ask/glob/read 必定成站点、已在 siteMap)。
116
+ // 三者同规:按 checker 解析到 facade 声明的名字识别,改写成同名的 `__host.*`,丢弃类型
117
+ // 实参(`channel<Fact>(...)`),实参原样递进。channel / future 是沙箱内的纯 promise 机制
118
+ // (docs/dynamic-workflow/authoring.md「Streams」),不过线、无 journal 行,所以不需要站点 id。
119
+ const name = facadeCalleeName(node, checker);
120
+ // model("x") -> "x":`ModelRef` 只活在类型系统里,运行期它就是名字字符串本身
121
+ // (docs/dynamic-workflow/authoring.md「Choosing a model per subagent」),宿主按这个
122
+ // 字符串查 launch 时解析好的绑定表。无站点、不过 host;实参缺席(9010 先挡)退回 `void 0`。
123
+ if (name === "model") {
124
+ const arg = node.arguments[0];
125
+ return arg === undefined ? factory.createVoidZero() : visitExpr(arg);
126
+ }
127
+ if (name !== undefined && HOST_PASSTHROUGH_FUNCTIONS.has(name)) {
128
+ return factory.createCallExpression(hostMember(name), undefined, node.arguments.map(visitExpr));
129
+ }
130
+ }
131
+ return ts.visitEachChild(node, visit, context);
132
+ };
133
+ const visitExpr = (expr) => ts.visitNode(expr, visit);
134
+ const lowerSited = (call, emit) => {
135
+ if (emit.kind === "phase") {
136
+ // phase("gate") -> __host.enterPhase("gate")。标记仍然**无站点、无 journal 行**——它不是一步工作;但控制流经过
137
+ // 它这件事要让引擎看见(一条 `phase-entered` 事件),否则一个没有节点的阶段在时间线
138
+ // 上永远是空圈。名字去两端空白,与分析器铸造阶段 id 的键同一;名字缺席(非字面量,
139
+ // 9004 诊断本该先拦下)退回 `void 0`——沙箱里绝不能残留自由标识符 `phase`。
140
+ const name = emit.name?.trim();
141
+ if (name === undefined || name.length === 0)
142
+ return factory.createVoidZero();
143
+ return factory.createCallExpression(hostMember("enterPhase"), undefined, [
144
+ factory.createStringLiteral(name),
145
+ ]);
146
+ }
147
+ if (emit.kind === "hole") {
148
+ return lowerHoleCall(call, emit.site, factory, hostMember, siteArg, visitExpr, holeBodyNodes);
149
+ }
150
+ if (emit.kind === "actor") {
151
+ // agent(name?, persona?) -> __host.createActor(siteId, name?, persona?)
152
+ return factory.createCallExpression(hostMember("createActor"), undefined, [
153
+ siteArg(emit.siteId),
154
+ ...call.arguments.map(visitExpr),
155
+ ]);
156
+ }
157
+ if (emit.kind === "ask") {
158
+ // receiver.ask<T>(instr) -> __host.ask(siteId, receiver, instr)(丢弃类型实参 <T>)。
159
+ // facade-siting 保证 ask 一定是 `receiver.ask(...)` 直接调用,故 callee 必为属性访问。
160
+ const access = call.expression;
161
+ const receiver = visitExpr(access.expression);
162
+ const loweredAsk = (recv) => factory.createCallExpression(hostMember("ask"), undefined, [
163
+ siteArg(emit.siteId),
164
+ recv,
165
+ ...call.arguments.map(visitExpr),
166
+ ]);
167
+ if (!ts.isOptionalChain(call))
168
+ return loweredAsk(receiver);
169
+ // 可选链上的 ask(`p?.ask(x)`、`wrap?.p.ask(x)`)不能被无条件改写成
170
+ // `__host.ask(siteId, <receiver>, x)`——`?.` 的短路被丢弃。receiver 为 nullish 时
171
+ // 作者程序的语义是「跳过这次 ask,整条链结果 undefined」,而降级产物带着 undefined
172
+ // 调进引擎,被判 UnknownActor **失败整个 run**——且只在可选分支真为空时发作,
173
+ // 可能烧掉一整段长跑之后才炸。改写为 nullish 守卫三目:守卫命中时实参不求值,
174
+ // 与可选链原语义一致;标识符 receiver 直接复读(无副作用),其余表达式经 hoisted
175
+ // 临时变量恰好求值一次——与 tsc 自身降级可选链的做法同构。
176
+ const once = ts.isIdentifier(receiver)
177
+ ? receiver
178
+ : factory.createTempVariable(context.hoistVariableDeclaration);
179
+ const evaluated = once === receiver ? receiver : factory.createAssignment(once, receiver);
180
+ const isNullish = factory.createBinaryExpression(factory.createBinaryExpression(evaluated, factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), factory.createNull()), factory.createToken(ts.SyntaxKind.BarBarToken), factory.createBinaryExpression(once, factory.createToken(ts.SyntaxKind.EqualsEqualsEqualsToken), factory.createIdentifier("undefined")));
181
+ return factory.createConditionalExpression(isNullish, factory.createToken(ts.SyntaxKind.QuestionToken), factory.createIdentifier("undefined"), factory.createToken(ts.SyntaxKind.ColonToken), loweredAsk(once));
182
+ }
183
+ if (emit.kind === "artifact") {
184
+ // artifact.file(id, path, opts) -> __host.publishArtifact(siteId, "file", [id, path, opts])
185
+ // artifact.chart(id, spec) -> __host.declareArtifact(siteId, "chart", [id, spec])
186
+ // 两族**同形不同名**:名字不同是因为两条路的返回类型不同(promise vs void),而
187
+ // 引擎按方法名而不是按 op 分派——一个把声明当成效应去 await 的脚本,应该在类型层
188
+ // 就被挡住,而不是在运行期拿到一个 undefined。实参与 world-read 同规:原样按位置
189
+ // 打包进数组,lowering 不看 op、不校验元数(校验归引擎与 driver)。
190
+ const member = isArtifactPresetOp(emit.op) ? "declareArtifact" : "publishArtifact";
191
+ return factory.createCallExpression(hostMember(member), undefined, [
192
+ siteArg(emit.siteId),
193
+ factory.createStringLiteral(emit.op),
194
+ factory.createArrayLiteralExpression(call.arguments.map(visitExpr)),
195
+ ]);
196
+ }
197
+ if (emit.kind === "report") {
198
+ // report(item, artifactId?) -> __host.report(siteId, item, artifactId?)
199
+ // report 走**站点映射**而不是下面那条按 checker 名字识别的 log 路径:它是
200
+ // 有站点的(journal 按 site × ordinal 去重 replay),而站点身份只在站点表里。
201
+ return factory.createCallExpression(hostMember("report"), undefined, [
202
+ siteArg(emit.siteId),
203
+ ...call.arguments.map(visitExpr),
204
+ ]);
205
+ }
206
+ // files.glob(arg)/files.read(arg) -> __host.worldRead(siteId, op, [arg])
207
+ // 实参**原样按位置**打包进数组字面量:lowering 不看 op、不看元数、不做任何校验。每个 op 的元数与实参校验归 driver,
208
+ // 所以加一个 world-read 原语在这一趟里是零改动。
209
+ return factory.createCallExpression(hostMember("worldRead"), undefined, [
210
+ siteArg(emit.siteId),
211
+ factory.createStringLiteral(emit.op),
212
+ factory.createArrayLiteralExpression(call.arguments.map(visitExpr)),
213
+ ]);
214
+ };
215
+ return (sourceFile) => ts.visitNode(sourceFile, visit);
216
+ };
217
+ const result = ts.transform(workflow.scriptFile, [transformer]);
218
+ const transformed = result.transformed[0];
219
+ if (transformed === undefined)
220
+ throw new Error("lowering: transform produced no source file");
221
+ // 只取 __workflowScript__ 的函数体语句(wrapper/facade/export 都不进 lowered code)。
222
+ const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed, removeComments: false });
223
+ const instrumented = workflowBody(transformed)
224
+ .map((statement) => printer.printNode(ts.EmitHint.Unspecified, statement, transformed))
225
+ .join("\n");
226
+ const holeBodies = printHoleBodies(holeBodyNodes, printer, transformed);
227
+ result.dispose();
228
+ // 第二趟:类型擦除。此时打桩已完成、不再需要节点身份,故对文本做 transpile-级擦除即可。
229
+ const code = ts.transpileModule(instrumented, {
230
+ compilerOptions: TRANSPILE_OPTIONS,
231
+ reportDiagnostics: false,
232
+ }).outputText;
233
+ return { code, holeBodies, siteIds: sourceOrderSiteIds(table) };
234
+ }
235
+ /**
236
+ * 站点表的四类站点调用 + phase 标记,建成 `ts.CallExpression -> SiteEmit` 映射
237
+ * (按节点身份匹配)。phase 走这张表是为了拿到节点身份与名字——它没有 site id,因此
238
+ * 也不进 {@link sourceOrderSiteIds}。
239
+ */
240
+ function buildSiteMap(table) {
241
+ const map = new Map();
242
+ for (const site of table.actors)
243
+ map.set(site.call, { kind: "actor", siteId: site.id });
244
+ for (const site of table.artifacts) {
245
+ map.set(site.call, { kind: "artifact", op: site.op, siteId: site.id });
246
+ }
247
+ for (const site of table.asks)
248
+ map.set(site.call, { kind: "ask", siteId: site.id });
249
+ for (const site of table.holes)
250
+ map.set(site.call, { kind: "hole", site });
251
+ for (const marker of table.phases)
252
+ map.set(marker.call, { kind: "phase", name: marker.name });
253
+ for (const site of table.reports)
254
+ map.set(site.call, { kind: "report", siteId: site.id });
255
+ for (const site of table.worldReads) {
256
+ map.set(site.call, { kind: "world-read", op: site.op, siteId: site.id });
257
+ }
258
+ return map;
259
+ }
260
+ /** 被打桩的 site id,按源码顺序(站点表的全局 `order` 发现序)。 */
261
+ function sourceOrderSiteIds(table) {
262
+ const sited = [
263
+ ...table.actors,
264
+ ...table.artifacts,
265
+ ...table.asks,
266
+ ...table.holes,
267
+ ...table.reports,
268
+ ...table.worldReads,
269
+ ];
270
+ return sited.sort((a, b) => a.order - b.order).map((site) => site.id);
271
+ }
272
+ /** 定位 transform 后的 __workflowScript__ 函数体语句(与 sites.ts 的 findWorkflowBody 同形)。 */
273
+ function workflowBody(sourceFile) {
274
+ for (const statement of sourceFile.statements) {
275
+ if (ts.isFunctionDeclaration(statement) &&
276
+ statement.name?.text === WORKFLOW_FUNCTION_NAME &&
277
+ statement.body !== undefined) {
278
+ return statement.body.statements;
279
+ }
280
+ }
281
+ throw new Error(`lowering: ${WORKFLOW_FUNCTION_NAME} not found in transformed source`);
282
+ }
283
+ /**
284
+ * 调用解析到的 facade callable 名字(走 resolved signature 的声明,落在 facade .d.ts 内),
285
+ * 否则 undefined。与 sites.ts 的私有 facadeCalleeName 同一思路——按签名声明的身份判定,
286
+ * 而非 callee 表达式的拼写,故计算成员访问(`files["read"](x)`)也能解析到 facade 方法。
287
+ * 本模块只用它认 log:站点类 facade 调用已先在 siteMap 命中并返回,不会走到这里。
288
+ */
289
+ /**
290
+ * True iff this `args` identifier is a READ of the facade global (not a shadowing local,
291
+ * not a property name, not a declaration site).
292
+ *
293
+ * Identity comes from the checker, exactly as facade call sites do: a script that writes
294
+ * its own `const args = ...` resolves to a symbol declared in the script file, so it is
295
+ * left alone and keeps shadowing benignly. The syntactic guards below are for positions
296
+ * where an identifier is not a value read at all — `x.args`, `{ args: 1 }`, and the name
297
+ * in `const args = ...` — where rewriting would produce nonsense like `{ __host.args: 1 }`.
298
+ */
299
+ function isFacadeArgsRead(node, checker) {
300
+ const parent = node.parent;
301
+ if (parent !== undefined) {
302
+ if (ts.isPropertyAccessExpression(parent) && parent.name === node)
303
+ return false;
304
+ if (ts.isQualifiedName(parent) && parent.right === node)
305
+ return false;
306
+ if ((ts.isPropertyAssignment(parent) || ts.isPropertySignature(parent)) &&
307
+ parent.name === node) {
308
+ return false;
309
+ }
310
+ if (ts.isShorthandPropertyAssignment(parent) && parent.name === node)
311
+ return false;
312
+ if (ts.isBindingElement(parent) && parent.propertyName === node)
313
+ return false;
314
+ // 声明位(`const args = ...`、参数名、import 名):那是在**建**一个绑定,不是读 facade。
315
+ if ((ts.isVariableDeclaration(parent) ||
316
+ ts.isParameter(parent) ||
317
+ ts.isBindingElement(parent) ||
318
+ ts.isFunctionDeclaration(parent) ||
319
+ ts.isClassDeclaration(parent)) &&
320
+ parent.name === node) {
321
+ return false;
322
+ }
323
+ }
324
+ return isFacadeDeclared(resolveSymbol(node, checker));
325
+ }
326
+ function facadeCalleeName(call, checker) {
327
+ const declaration = checker.getResolvedSignature(call)?.declaration;
328
+ if (declaration === undefined || declaration.getSourceFile().fileName !== FACADE_FILE_NAME) {
329
+ return undefined;
330
+ }
331
+ const name = declaration.name;
332
+ return name !== undefined && ts.isIdentifier(name) ? name.text : undefined;
333
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 浏览器安全的纯投影桶:
3
+ * `@zcode/dynamic-workflow/projections`。
4
+ *
5
+ * 下游浏览器端消费者把 `AnalysisCore` 冻结成 core.json,在浏览器里解码后现场重算站点图 / 因果图 /
6
+ * CFG / 交接图 / actor 图,再用 `*ToMermaid` 或 display 契约画出来。那条链上不能有
7
+ * `typescript`——它是分析器铸造 core 时才需要的编译器,几 MB 大,也不该进前端包。
8
+ *
9
+ * 因此这里**只**再导出运行时不 import `typescript` 的模块:core 的类型与规范文本、JSON
10
+ * 编解码、五个投影、归约器、mermaid 与文本序列化器、图类型。`analyzeWorkflowScript`、
11
+ * 编译器、lowering、引擎一概不在——它们走根导出。
12
+ */
13
+ export { isActorSite, serializeCore, type AnalysisCore, type CoreActorSite, type CoreAskSite, type CoreFacts, type CoreFanoutSite, type CoreHoleSite, type CoreSimpleSite, type CoreSites, type CoreTypes, } from "./analysis/core.js";
14
+ export { decodeAnalysisCore, encodeAnalysisCore, type AnalysisCoreJson, type MapEntries, } from "./analysis/core-json.js";
15
+ export type { ActorEvent, ControlFact, IssueEvent, JumpEvent, MarkEvent, OrderEvent, OrderRegion, OrderTrace, PhaseInfo, SettleEvent, } from "./analysis/causality-order.js";
16
+ export { isStructuralRegionKind, UNPHASED_ID, type JumpKind, type RegionKind, type StructuralRegionKind, type TraceRegionKind, } from "./analysis/constants.js";
17
+ export { projectSiteGraph } from "./analysis/graph.js";
18
+ export { toActorGraph, type ActorEdge, type ActorGraph, type ActorNode } from "./analysis/actor-graph.js";
19
+ export { MAIN_LANE, projectCausalityGraph, SINK_ID, UNKNOWN_LANE, WORKSPACE_LANE, type CausalityGraph, type Certainty, type Lane, type NamePattern, type OrderEdge, type OrderKind, type Phase, type Region, type Step, type StepKind, } from "./analysis/causality-graph.js";
20
+ export { reduceOrdering, type ReducibleEdge } from "./analysis/causality-reduce.js";
21
+ export { FLOW_ABORT, FLOW_ENTRY, FLOW_SINK, projectControlFlow, type ControlFlowGraph, type FlowEdge, type FlowEdgeKind, type FlowHole, type FlowNode, type FlowNodeKind, type FlowPhase, type FlowVia, } from "./analysis/flow-graph.js";
22
+ export { FANOUT_EXPAND_CAP, projectHandoffGraph, UNPHASED, type Handoff, type HandoffGraph, type HandoffParticipant, } from "./analysis/handoff-graph.js";
23
+ export { actorGraphToMermaid, causalityGraphToMermaid, controlFlowToMermaid, handoffGraphToMermaid, phaseFlowToMermaid, phaseGraphToMermaid, siteGraphToMermaid, } from "./analysis/mermaid.js";
24
+ export { serializeActorGraph, serializeCausalityGraph, serializeControlFlow, serializeGraph, serializeHandoffGraph, } from "./analysis/serialize.js";
25
+ export type { ActorSite, SiteEdge, SiteGraph, SiteKind, SiteLoc, SiteNode } from "./analysis/types.js";
26
+ //# sourceMappingURL=projections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../src/projections.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,WAAW,EACX,aAAa,EACb,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,WAAW,GACZ,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,sBAAsB,EACtB,WAAW,EACX,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,MAAM,EACX,KAAK,IAAI,EACT,KAAK,QAAQ,GACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,OAAO,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 浏览器安全的纯投影桶:
3
+ * `@zcode/dynamic-workflow/projections`。
4
+ *
5
+ * 下游浏览器端消费者把 `AnalysisCore` 冻结成 core.json,在浏览器里解码后现场重算站点图 / 因果图 /
6
+ * CFG / 交接图 / actor 图,再用 `*ToMermaid` 或 display 契约画出来。那条链上不能有
7
+ * `typescript`——它是分析器铸造 core 时才需要的编译器,几 MB 大,也不该进前端包。
8
+ *
9
+ * 因此这里**只**再导出运行时不 import `typescript` 的模块:core 的类型与规范文本、JSON
10
+ * 编解码、五个投影、归约器、mermaid 与文本序列化器、图类型。`analyzeWorkflowScript`、
11
+ * 编译器、lowering、引擎一概不在——它们走根导出。
12
+ */
13
+ export { isActorSite, serializeCore, } from "./analysis/core.js";
14
+ export { decodeAnalysisCore, encodeAnalysisCore, } from "./analysis/core-json.js";
15
+ export { isStructuralRegionKind, UNPHASED_ID, } from "./analysis/constants.js";
16
+ export { projectSiteGraph } from "./analysis/graph.js";
17
+ export { toActorGraph } from "./analysis/actor-graph.js";
18
+ export { MAIN_LANE, projectCausalityGraph, SINK_ID, UNKNOWN_LANE, WORKSPACE_LANE, } from "./analysis/causality-graph.js";
19
+ export { reduceOrdering } from "./analysis/causality-reduce.js";
20
+ export { FLOW_ABORT, FLOW_ENTRY, FLOW_SINK, projectControlFlow, } from "./analysis/flow-graph.js";
21
+ export { FANOUT_EXPAND_CAP, projectHandoffGraph, UNPHASED, } from "./analysis/handoff-graph.js";
22
+ export { actorGraphToMermaid, causalityGraphToMermaid, controlFlowToMermaid, handoffGraphToMermaid, phaseFlowToMermaid, phaseGraphToMermaid, siteGraphToMermaid, } from "./analysis/mermaid.js";
23
+ export { serializeActorGraph, serializeCausalityGraph, serializeControlFlow, serializeGraph, serializeHandoffGraph, } from "./analysis/serialize.js";
@@ -0,0 +1,49 @@
1
+ import type { SiteGraph } from "../analysis/types.js";
2
+ import type { SiteTable } from "../analysis/sites.js";
3
+ import type { WorkflowProgram } from "../compiler/compile.js";
4
+ import type { AskSpec } from "../engine/types.js";
5
+ import type { JsonSchema } from "./types.js";
6
+ /**
7
+ * 每个 actor 站点的 **submit profile**:决定该 actor 的子代理会话拿到哪一种 `submit_result` 工具。
8
+ *
9
+ * - `untyped`:能落到这个 actor 的 ask 全是 untyped(或它根本没有 ask)→ 不注册 submit_result。
10
+ * - `mono`:能落到这个 actor 的 typed ask 的 schema **全部相同**(规范 JSON 相等;untyped ask 可以
11
+ * 混在其中)→ 工具声明就是 `{ result: schema }`,对该 actor 冻结、跨 ask 不变,因此缓存中性。
12
+ * - `generic`:typed ask 的 schema 不止一种 → 今天的通用工具 + 每个 ask 的 schema 尾注。
13
+ *
14
+ * 为什么是编译期而不是运行期:工具块渲染在 prompt 最前面,一旦按 ask 换 schema 就打掉该 actor
15
+ * 的整个缓存前缀。只有「整个 actor 生命周期里 schema 不变」这件事
16
+ * 在编译期可判定时,typed 工具才是免费的;判定不了就退回 generic,行为逐字节保持等价。
17
+ */
18
+ export type ActorSubmitProfile = {
19
+ kind: "untyped";
20
+ } | {
21
+ kind: "mono";
22
+ schema: JsonSchema;
23
+ } | {
24
+ kind: "generic";
25
+ };
26
+ /** 缺席 / 无法判定时的 profile:今天的行为。 */
27
+ export declare const GENERIC_SUBMIT_PROFILE: ActorSubmitProfile;
28
+ /**
29
+ * 由站点图与 ask 规格推导每个 actor 站点的 submit profile。纯函数。
30
+ *
31
+ * **可靠性规则**:ask→actor 的绑定取站点图上的 may-set(`SiteNode.actors`)。只要有**任何一个**
32
+ * ask 站点的 actor 集为空(receiver 没解析出来),分析就说不出那个 ask 会落到谁头上——于是
33
+ * **所有** actor 都记 `generic`。这是有意的保守:一个 typed ask 若落到一个 `untyped` 子代理上,
34
+ * 它没有工具可提交,只能耗尽 nudge 失败;宁可少省一点缓存,也不能凭一个不完整的图把工具拿掉。
35
+ * 同理,一个 ask 的 actor 集有多个成员(条件分支上的 receiver)时,它的 schema 计入每一个成员。
36
+ *
37
+ * askSpecs 缺少某个 ask 站点时同样整体退回 generic:站点表与规格出自同一次编译,缺席只可能是
38
+ * 接线错误,此处不猜(引擎侧对此以 MissingAskSpec 硬失败,这里只需不放大它)。
39
+ *
40
+ * 返回表覆盖 `graph.actors` 里的每一个 actor 站点。
41
+ */
42
+ export declare function deriveActorSubmitProfiles(graph: SiteGraph, askSpecs: ReadonlyMap<string, AskSpec>): Map<string, ActorSubmitProfile>;
43
+ /**
44
+ * 「编译一次」的便捷入口:在构建站点表与合成 schema 的**同一个** {@link WorkflowProgram} 上做解释
45
+ * 与站点图投影(analyzeWorkflowScript 跑的正是这两步),然后推导 profile。供 run 提交路径调用,
46
+ * 不必自己拼装 interpret + projectSiteGraph(两者不在包的公开面上)。
47
+ */
48
+ export declare function deriveActorSubmitProfilesFor(workflow: WorkflowProgram, table: SiteTable, askSpecs: ReadonlyMap<string, AskSpec>): Map<string, ActorSubmitProfile>;
49
+ //# sourceMappingURL=actor-submit-profiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor-submit-profiles.d.ts","sourceRoot":"","sources":["../../src/schema/actor-submit-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,iCAAiC;AACjC,eAAO,MAAM,sBAAsB,EAAE,kBAAwC,CAAC;AAE9E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAsCjC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAEjC"}
@@ -0,0 +1,69 @@
1
+ import { interpret } from "../analysis/interpret.js";
2
+ import { projectSiteGraph } from "../analysis/graph.js";
3
+ import { canonicalJson } from "../engine/hash.js";
4
+ /** 缺席 / 无法判定时的 profile:今天的行为。 */
5
+ export const GENERIC_SUBMIT_PROFILE = { kind: "generic" };
6
+ /**
7
+ * 由站点图与 ask 规格推导每个 actor 站点的 submit profile。纯函数。
8
+ *
9
+ * **可靠性规则**:ask→actor 的绑定取站点图上的 may-set(`SiteNode.actors`)。只要有**任何一个**
10
+ * ask 站点的 actor 集为空(receiver 没解析出来),分析就说不出那个 ask 会落到谁头上——于是
11
+ * **所有** actor 都记 `generic`。这是有意的保守:一个 typed ask 若落到一个 `untyped` 子代理上,
12
+ * 它没有工具可提交,只能耗尽 nudge 失败;宁可少省一点缓存,也不能凭一个不完整的图把工具拿掉。
13
+ * 同理,一个 ask 的 actor 集有多个成员(条件分支上的 receiver)时,它的 schema 计入每一个成员。
14
+ *
15
+ * askSpecs 缺少某个 ask 站点时同样整体退回 generic:站点表与规格出自同一次编译,缺席只可能是
16
+ * 接线错误,此处不猜(引擎侧对此以 MissingAskSpec 硬失败,这里只需不放大它)。
17
+ *
18
+ * 返回表覆盖 `graph.actors` 里的每一个 actor 站点。
19
+ */
20
+ export function deriveActorSubmitProfiles(graph, askSpecs) {
21
+ const profiles = new Map();
22
+ const actorIds = graph.actors.map((actor) => actor.id);
23
+ // 每个 actor 收集到的 typed schema,按规范 JSON 去重(同一份 schema 对象在不同 ask 站点上各合成
24
+ // 一次,引用不同但内容相同,必须按内容比较)。
25
+ const schemasByActor = new Map();
26
+ for (const id of actorIds)
27
+ schemasByActor.set(id, new Map());
28
+ for (const node of graph.nodes) {
29
+ if (node.kind !== "ask")
30
+ continue;
31
+ const actors = node.actors ?? [];
32
+ const spec = askSpecs.get(node.id);
33
+ if (actors.length === 0 || spec === undefined) {
34
+ for (const id of actorIds)
35
+ profiles.set(id, GENERIC_SUBMIT_PROFILE);
36
+ return profiles;
37
+ }
38
+ if (!spec.typed)
39
+ continue;
40
+ const schema = spec.schema;
41
+ const key = canonicalJson(schema);
42
+ for (const actorId of actors) {
43
+ // 站点图里的 actor id 必然在 graph.actors 内;防御性地补一个桶,而不是静默跳过。
44
+ let bucket = schemasByActor.get(actorId);
45
+ if (bucket === undefined) {
46
+ bucket = new Map();
47
+ schemasByActor.set(actorId, bucket);
48
+ }
49
+ bucket.set(key, schema);
50
+ }
51
+ }
52
+ for (const [actorId, bucket] of schemasByActor) {
53
+ if (bucket.size === 0)
54
+ profiles.set(actorId, { kind: "untyped" });
55
+ else if (bucket.size === 1)
56
+ profiles.set(actorId, { kind: "mono", schema: [...bucket.values()][0] });
57
+ else
58
+ profiles.set(actorId, GENERIC_SUBMIT_PROFILE);
59
+ }
60
+ return profiles;
61
+ }
62
+ /**
63
+ * 「编译一次」的便捷入口:在构建站点表与合成 schema 的**同一个** {@link WorkflowProgram} 上做解释
64
+ * 与站点图投影(analyzeWorkflowScript 跑的正是这两步),然后推导 profile。供 run 提交路径调用,
65
+ * 不必自己拼装 interpret + projectSiteGraph(两者不在包的公开面上)。
66
+ */
67
+ export function deriveActorSubmitProfilesFor(workflow, table, askSpecs) {
68
+ return deriveActorSubmitProfiles(projectSiteGraph(interpret(workflow, table)), askSpecs);
69
+ }