minimal-agent 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +6 -5
  2. package/package.json +60 -4
  3. package/plugins/computer_use/.claude-plugin/plugin.json +1 -1
  4. package/plugins/cron-runner/src/commands.js +4 -4
  5. package/plugins/cron-runner/src/commands.ts +4 -4
  6. package/plugins/workflow-runner/.claude-plugin/plugin.json +2 -2
  7. package/plugins/workflow-runner/commands/workflow.md +57 -90
  8. package/plugins/workflow-runner/commands/workflows.md +4 -4
  9. package/plugins/workflow-runner/plugin.js +24 -13
  10. package/plugins/workflow-runner/plugin.ts +28 -13
  11. package/plugins/workflow-runner/src/discovery.js +160 -0
  12. package/plugins/workflow-runner/src/discovery.ts +194 -0
  13. package/plugins/workflow-runner/src/goalAnchor.js +53 -0
  14. package/plugins/workflow-runner/src/goalAnchor.ts +59 -0
  15. package/plugins/workflow-runner/src/index.js +197 -206
  16. package/plugins/workflow-runner/src/index.ts +248 -249
  17. package/plugins/workflow-runner/src/inputCoercion.js +40 -0
  18. package/plugins/workflow-runner/src/inputCoercion.ts +43 -0
  19. package/plugins/workflow-runner/src/journal.js +224 -0
  20. package/plugins/workflow-runner/src/journal.ts +274 -0
  21. package/plugins/workflow-runner/src/jsonSchema.js +132 -0
  22. package/plugins/workflow-runner/src/jsonSchema.ts +162 -0
  23. package/plugins/workflow-runner/src/moduleResolution.js +64 -0
  24. package/plugins/workflow-runner/src/moduleResolution.ts +71 -0
  25. package/plugins/workflow-runner/src/resourceInputs.js +220 -0
  26. package/plugins/workflow-runner/src/resourceInputs.ts +300 -0
  27. package/plugins/workflow-runner/src/runner.js +400 -489
  28. package/plugins/workflow-runner/src/runner.ts +488 -560
  29. package/plugins/workflow-runner/src/runtime/config.js +46 -0
  30. package/plugins/workflow-runner/src/runtime/config.ts +69 -0
  31. package/plugins/workflow-runner/src/runtime/context.js +1304 -0
  32. package/plugins/workflow-runner/src/runtime/context.ts +1786 -0
  33. package/plugins/workflow-runner/src/runtime/exec.js +34 -0
  34. package/plugins/workflow-runner/src/runtime/exec.ts +53 -0
  35. package/plugins/workflow-runner/src/runtime/flow.js +8 -0
  36. package/plugins/workflow-runner/src/runtime/flow.ts +12 -0
  37. package/plugins/workflow-runner/src/runtime/fs.js +27 -0
  38. package/plugins/workflow-runner/src/runtime/fs.ts +41 -0
  39. package/plugins/workflow-runner/src/runtime/model.js +6 -0
  40. package/plugins/workflow-runner/src/runtime/model.ts +8 -0
  41. package/plugins/workflow-runner/src/runtime/output.js +7 -0
  42. package/plugins/workflow-runner/src/runtime/output.ts +21 -0
  43. package/plugins/workflow-runner/src/runtime/scheduler.js +141 -0
  44. package/plugins/workflow-runner/src/runtime/scheduler.ts +166 -0
  45. package/plugins/workflow-runner/src/runtime/state.js +16 -0
  46. package/plugins/workflow-runner/src/runtime/state.ts +19 -0
  47. package/plugins/workflow-runner/src/runtime/tools.js +3 -0
  48. package/plugins/workflow-runner/src/runtime/tools.ts +6 -0
  49. package/plugins/workflow-runner/src/sandbox.js +141 -0
  50. package/plugins/workflow-runner/src/sandbox.ts +182 -0
  51. package/plugins/workflow-runner/src/scriptGuard.d.mts +38 -0
  52. package/plugins/workflow-runner/src/scriptGuard.mjs +449 -0
  53. package/plugins/workflow-runner/src/taskIdentity.js +151 -307
  54. package/plugins/workflow-runner/src/taskIdentity.ts +207 -355
  55. package/plugins/workflow-runner/src/toolRuntime.js +29 -8
  56. package/plugins/workflow-runner/src/toolRuntime.ts +36 -11
  57. package/plugins/workflow-runner/src/types.js +7 -211
  58. package/plugins/workflow-runner/src/types.ts +154 -623
  59. package/plugins/workflow-runner/src/util.js +47 -0
  60. package/plugins/workflow-runner/src/util.ts +51 -0
  61. package/plugins/workflow-runner/src/workflowContext.js +20 -0
  62. package/plugins/workflow-runner/src/workflowContext.ts +58 -0
  63. package/plugins/workflow-runner/src/workflowDependencies.js +36 -0
  64. package/plugins/workflow-runner/src/workflowDependencies.ts +59 -0
  65. package/plugins/workflow-runner/src/workflowFingerprint.js +118 -0
  66. package/plugins/workflow-runner/src/workflowFingerprint.ts +122 -0
  67. package/plugins/workflow-runner/src/workflowState.js +474 -802
  68. package/plugins/workflow-runner/src/workflowState.ts +575 -970
  69. package/plugins/workflow-runner/test/api.test.ts +223 -0
  70. package/plugins/workflow-runner/test/apiCapabilities.test.ts +614 -0
  71. package/plugins/workflow-runner/test/apiConcurrencyGate.test.ts +104 -0
  72. package/plugins/workflow-runner/test/apiEcho.test.ts +210 -0
  73. package/plugins/workflow-runner/test/apiReadText.test.ts +178 -0
  74. package/plugins/workflow-runner/test/apiResourceLedger.test.ts +184 -0
  75. package/plugins/workflow-runner/test/childWorkflow.test.ts +304 -0
  76. package/plugins/workflow-runner/test/discovery.test.ts +234 -0
  77. package/plugins/workflow-runner/test/goalAnchor.test.ts +106 -0
  78. package/plugins/workflow-runner/test/goalController.test.ts +317 -0
  79. package/plugins/workflow-runner/test/journalLanes.test.ts +198 -0
  80. package/plugins/workflow-runner/test/listResources.test.ts +106 -0
  81. package/plugins/workflow-runner/test/resourceInputs.test.ts +294 -0
  82. package/plugins/workflow-runner/test/sandbox.test.ts +126 -0
  83. package/plugins/workflow-runner/test/scheduler.test.ts +70 -0
  84. package/plugins/workflow-runner/test/scriptGuard.test.ts +276 -0
  85. package/plugins/workflow-runner/test/skillDocSync.test.ts +78 -0
  86. package/plugins/workflow-runner/test/taskIdentity.test.ts +288 -179
  87. package/plugins/workflow-runner/test/workflowFingerprint.test.ts +106 -0
  88. package/plugins/workflow-runner/test/workflowState.test.ts +429 -0
  89. package/skills/pptx/examples/assets/cover-bg.svg +23 -0
  90. package/skills/pptx/examples/assets/icon-spark.svg +5 -0
  91. package/skills/ui-design/SKILL.md +5 -2
  92. package/skills/ui-design/references/layout-composition.md +1 -1
  93. package/skills/workflow-creator/SKILL.md +344 -0
  94. package/skills/workflow-creator/assets/template/workflow.mjs +48 -0
  95. package/skills/workflow-creator/references/api.md +216 -0
  96. package/skills/workflow-creator/references/migration.md +103 -0
  97. package/skills/workflow-creator/references/patterns.md +779 -0
  98. package/skills/workflow-creator/scripts/list-resources.mjs +205 -0
  99. package/skills/workflow-creator/scripts/scaffold.mjs +148 -0
  100. package/skills/workflow-creator/scripts/validate.mjs +275 -0
  101. package/skills/workflow-creator/scripts/workflow-creator.test.mjs +82 -0
  102. package/src/advisor/advisorCoordinator.js +503 -0
  103. package/src/advisor/advisorCoordinator.ts +657 -0
  104. package/src/cli/configMenu.tsx +0 -1
  105. package/src/cli/print.js +27 -6
  106. package/src/cli/print.ts +48 -4
  107. package/src/cli/streamJson.js +5 -6
  108. package/src/cli/streamJson.ts +8 -4
  109. package/src/cli/wizards/advisorWizard.js +4 -2
  110. package/src/cli/wizards/advisorWizard.tsx +8 -2
  111. package/src/cli/wizards/contextAdvisorWizard.js +5 -4
  112. package/src/cli/wizards/contextAdvisorWizard.tsx +7 -6
  113. package/src/collaboration/taskFlow.js +115 -0
  114. package/src/collaboration/taskFlow.ts +169 -0
  115. package/src/config/configDefaults.js +41 -1
  116. package/src/config/configDefaults.ts +43 -1
  117. package/src/config/configDiagnostics.ts +2 -2
  118. package/src/config/configFile.js +40 -9
  119. package/src/config/configFile.ts +60 -11
  120. package/src/config/configService.js +419 -74
  121. package/src/config/configService.ts +703 -145
  122. package/src/config/numericLimits.js +22 -0
  123. package/src/config/numericLimits.ts +24 -0
  124. package/src/config.js +1 -0
  125. package/src/config.ts +3 -2
  126. package/src/context/budgetPlan.js +1 -1
  127. package/src/context/budgetPlan.ts +1 -1
  128. package/src/context/compact.js +7 -2
  129. package/src/context/compact.ts +9 -2
  130. package/src/context/microCompactLite.js +212 -13
  131. package/src/context/microCompactLite.ts +261 -12
  132. package/src/context/sessionRegistry.js +8 -1
  133. package/src/context/sessionRegistry.ts +18 -5
  134. package/src/context/toolResultArchive.js +72 -0
  135. package/src/context/toolResultArchive.ts +95 -0
  136. package/src/goal/errors.js +8 -0
  137. package/src/goal/errors.ts +18 -0
  138. package/src/goal/goalRuntime.js +344 -0
  139. package/src/goal/goalRuntime.ts +466 -0
  140. package/src/goal/goalStore.js +200 -0
  141. package/src/goal/goalStore.ts +219 -0
  142. package/src/goal/index.js +4 -0
  143. package/src/goal/index.ts +4 -0
  144. package/src/goal/statusMapping.js +71 -0
  145. package/src/goal/statusMapping.ts +95 -0
  146. package/src/goal/types.js +7 -0
  147. package/src/goal/types.ts +179 -0
  148. package/src/goal/workflowController.js +306 -0
  149. package/src/goal/workflowController.ts +360 -0
  150. package/src/harness/evidenceLedger.js +2 -0
  151. package/src/harness/evidenceLedger.ts +1 -0
  152. package/src/harness/stallGuard.js +9 -3
  153. package/src/harness/stallGuard.ts +7 -3
  154. package/src/images/imageResolver.js +161 -0
  155. package/src/images/imageResolver.ts +189 -0
  156. package/src/infra/verification.js +34 -5
  157. package/src/infra/verification.ts +39 -4
  158. package/src/llm/client.js +79 -21
  159. package/src/llm/client.ts +182 -35
  160. package/src/llm/gatewayClient.js +201 -0
  161. package/src/llm/gatewayClient.ts +299 -0
  162. package/src/llm/messageProvenance.js +46 -0
  163. package/src/llm/messageProvenance.ts +58 -0
  164. package/src/llm/modelProvider.js +1 -0
  165. package/src/llm/modelProvider.ts +22 -0
  166. package/src/llm/providers/anthropicFormat.js +108 -1
  167. package/src/llm/providers/anthropicFormat.ts +115 -4
  168. package/src/llm/providers/openaiFormat.js +9 -0
  169. package/src/llm/providers/openaiFormat.ts +12 -3
  170. package/src/loop.js +319 -54
  171. package/src/loop.ts +373 -57
  172. package/src/main.js +4 -1
  173. package/src/main.tsx +4 -1
  174. package/src/managedExecution/index.js +2 -0
  175. package/src/managedExecution/index.ts +2 -0
  176. package/src/managedExecution/registry.js +15 -0
  177. package/src/managedExecution/registry.ts +20 -0
  178. package/src/managedExecution/types.js +1 -0
  179. package/src/managedExecution/types.ts +86 -0
  180. package/src/modelRef.js +9 -0
  181. package/src/modelRef.ts +31 -0
  182. package/src/multimodal.js +14 -28
  183. package/src/multimodal.ts +17 -33
  184. package/src/net/lanDiscovery.js +65 -0
  185. package/src/net/lanDiscovery.ts +82 -0
  186. package/src/plugin-sdk.js +28 -3
  187. package/src/plugin-sdk.ts +39 -6
  188. package/src/plugins/pluginApi.ts +16 -1
  189. package/src/plugins/pluginLoader.js +4 -0
  190. package/src/plugins/pluginLoader.ts +6 -0
  191. package/src/plugins/pluginRunner.js +139 -7
  192. package/src/plugins/pluginRunner.ts +173 -9
  193. package/src/plugins/slashFallback.js +113 -0
  194. package/src/plugins/slashFallback.ts +137 -0
  195. package/src/prompts/policyRegistry.js +12 -32
  196. package/src/prompts/policyRegistry.ts +15 -32
  197. package/src/prompts/promptAssembly.js +103 -12
  198. package/src/prompts/promptAssembly.ts +114 -12
  199. package/src/prompts/skillList.js +21 -3
  200. package/src/prompts/skillList.ts +27 -2
  201. package/src/prompts/stableSystemPrompt.js +18 -0
  202. package/src/prompts/stableSystemPrompt.ts +33 -0
  203. package/src/runtime/agentRuntimeContext.js +8 -2
  204. package/src/runtime/agentRuntimeContext.ts +17 -4
  205. package/src/session/runAgentTurn.js +78 -12
  206. package/src/session/runAgentTurn.ts +105 -23
  207. package/src/session/runTurn.js +10 -9
  208. package/src/session/runTurn.ts +17 -8
  209. package/src/session/sessionState.ts +2 -0
  210. package/src/team/auth.js +186 -0
  211. package/src/team/auth.ts +298 -0
  212. package/src/team/cli.js +105 -0
  213. package/src/team/cli.ts +122 -0
  214. package/src/team/onlineToolContract.js +64 -0
  215. package/src/team/onlineToolContract.ts +109 -0
  216. package/src/team/toolPolicy.js +36 -0
  217. package/src/team/toolPolicy.ts +75 -0
  218. package/src/tools/advisor/advisor.js +90 -46
  219. package/src/tools/advisor/advisor.ts +100 -47
  220. package/src/tools/advisor/advisorDecision.js +71 -0
  221. package/src/tools/advisor/advisorDecision.ts +85 -0
  222. package/src/tools/agent/agent.js +18 -5
  223. package/src/tools/agent/agent.ts +21 -7
  224. package/src/tools/agent/agentControl.js +246 -0
  225. package/src/tools/agent/agentControl.ts +284 -0
  226. package/src/tools/agent/agentTaskService.js +40 -1
  227. package/src/tools/agent/agentTaskService.ts +44 -1
  228. package/src/tools/agent/agentTypes.js +14 -2
  229. package/src/tools/agent/agentTypes.ts +15 -2
  230. package/src/tools/applypatch/applyPatch.js +362 -0
  231. package/src/tools/applypatch/applyPatch.ts +428 -0
  232. package/src/tools/bash/bash.js +22 -15
  233. package/src/tools/bash/bash.ts +23 -17
  234. package/src/tools/capabilities.js +10 -5
  235. package/src/tools/capabilities.ts +10 -5
  236. package/src/tools/computeruse/computerIntent.js +32 -0
  237. package/src/tools/computeruse/computerIntent.ts +46 -0
  238. package/src/tools/computeruse/telemetryLog.js +12 -0
  239. package/src/tools/computeruse/telemetryLog.ts +16 -0
  240. package/src/tools/computeruse/vision/telemetry.js +1 -0
  241. package/src/tools/computeruse/vision/telemetry.ts +1 -0
  242. package/src/tools/effectiveToolSet.js +4 -0
  243. package/src/tools/effectiveToolSet.ts +4 -0
  244. package/src/tools/index.js +21 -2
  245. package/src/tools/index.ts +33 -2
  246. package/src/tools/presentresult/presentresult.js +6 -15
  247. package/src/tools/presentresult/presentresult.ts +6 -15
  248. package/src/tools/read/read.js +62 -9
  249. package/src/tools/read/read.ts +63 -9
  250. package/src/tools/shared/fileUtils.js +1 -2
  251. package/src/tools/shared/fileUtils.ts +1 -2
  252. package/src/tools/shared/toolOutputStore.js +23 -1
  253. package/src/tools/shared/toolOutputStore.ts +22 -1
  254. package/src/tools/skill/skill.js +9 -3
  255. package/src/tools/skill/skill.ts +8 -4
  256. package/src/tools/toolPromptGuides.js +117 -0
  257. package/src/tools/toolPromptGuides.ts +137 -0
  258. package/src/tools/webbrowser/agentBrowserPath.js +19 -9
  259. package/src/tools/webbrowser/agentBrowserPath.ts +70 -28
  260. package/src/tools/webbrowser/browser.js +27 -11
  261. package/src/tools/webbrowser/browser.ts +68 -24
  262. package/src/tools/webbrowser/browserAutomation.js +329 -0
  263. package/src/tools/webbrowser/browserAutomation.ts +467 -0
  264. package/src/tools/webbrowser/browserAxState.js +97 -0
  265. package/src/tools/webbrowser/browserAxState.ts +142 -0
  266. package/src/tools/webbrowser/browserBatch.js +1578 -0
  267. package/src/tools/webbrowser/browserBatch.ts +2382 -0
  268. package/src/tools/webbrowser/browserCdp.js +208 -0
  269. package/src/tools/webbrowser/browserCdp.ts +255 -0
  270. package/src/tools/webbrowser/browserConditions.js +24 -0
  271. package/src/tools/webbrowser/browserConditions.ts +45 -0
  272. package/src/tools/webbrowser/browserContent.js +281 -0
  273. package/src/tools/webbrowser/browserContent.ts +438 -0
  274. package/src/tools/webbrowser/browserControl.js +131 -34
  275. package/src/tools/webbrowser/browserControl.ts +210 -56
  276. package/src/tools/webbrowser/browserDaemon.js +22 -14
  277. package/src/tools/webbrowser/browserDaemon.ts +54 -21
  278. package/src/tools/webbrowser/browserFrames.js +47 -0
  279. package/src/tools/webbrowser/browserFrames.ts +54 -0
  280. package/src/tools/webbrowser/browserInteractionResolver.js +17 -0
  281. package/src/tools/webbrowser/browserInteractionResolver.ts +40 -0
  282. package/src/tools/webbrowser/browserLocator.js +140 -0
  283. package/src/tools/webbrowser/browserLocator.ts +194 -0
  284. package/src/tools/webbrowser/browserOutcome.js +10 -17
  285. package/src/tools/webbrowser/browserOutcome.ts +48 -31
  286. package/src/tools/webbrowser/browserRecovery.js +58 -0
  287. package/src/tools/webbrowser/browserRecovery.ts +83 -0
  288. package/src/tools/webbrowser/browserRunRegistry.js +35 -3
  289. package/src/tools/webbrowser/browserRunRegistry.ts +91 -15
  290. package/src/tools/webbrowser/browserService.js +28 -2
  291. package/src/tools/webbrowser/browserService.ts +49 -9
  292. package/src/tools/webbrowser/browserStream.js +132 -33
  293. package/src/tools/webbrowser/browserStream.ts +224 -50
  294. package/src/tools/webbrowser/browserTabs.js +48 -15
  295. package/src/tools/webbrowser/browserTabs.ts +178 -96
  296. package/src/tools/webbrowser/webbrowser.js +679 -144
  297. package/src/tools/webbrowser/webbrowser.ts +975 -236
  298. package/src/tools/webfetch/preapproved.js +0 -2
  299. package/src/tools/webfetch/preapproved.ts +0 -2
  300. package/src/tools/websearch/websearch.js +129 -8
  301. package/src/tools/websearch/websearch.ts +138 -6
  302. package/src/types.ts +440 -38
  303. package/src/ui/App.js +377 -58
  304. package/src/ui/App.tsx +576 -111
  305. package/src/ui/LiveArea.js +14 -8
  306. package/src/ui/LiveArea.tsx +14 -10
  307. package/src/ui/MessageList.js +63 -20
  308. package/src/ui/MessageList.tsx +101 -16
  309. package/src/ui/ModelPicker.js +7 -4
  310. package/src/ui/ModelPicker.tsx +55 -8
  311. package/src/ui/hooks/useChat.js +152 -163
  312. package/src/ui/hooks/useChat.ts +396 -334
  313. package/src/ui/loginCommand.js +56 -0
  314. package/src/ui/loginCommand.ts +63 -0
  315. package/src/ui/toolProgress.js +41 -0
  316. package/src/ui/toolProgress.ts +44 -0
  317. package/src/web/browserBridge.js +20 -2
  318. package/src/web/browserBridge.ts +20 -2
  319. package/src/web/protocol.ts +1897 -194
  320. package/workflows/adaptive-research/workflow.mjs +86 -0
  321. package/workflows/e2e-capabilities/workflow.mjs +102 -0
  322. package/workflows/e2e-llm/workflow.mjs +52 -0
  323. package/workflows/e2e-smoke/workflow.mjs +59 -0
  324. package/workflows/e2e-vision-schema/README.md +48 -0
  325. package/workflows/e2e-vision-schema/workflow.mjs +149 -0
  326. package/workflows/e2e-write-greet/workflow.mjs +37 -0
  327. package/workflows/file-census/README.md +14 -0
  328. package/workflows/file-census/scripts/.gitkeep +2 -0
  329. package/workflows/file-census/workflow.mjs +110 -0
  330. package/workflows/goal/README.md +166 -0
  331. package/workflows/goal/prompts/audit.md +57 -0
  332. package/workflows/goal/prompts/contract.md +56 -0
  333. package/workflows/goal/prompts/iterate.md +37 -0
  334. package/workflows/goal/workflow.mjs +501 -0
  335. package/workflows/illustrate/README.md +90 -0
  336. package/workflows/illustrate/assets/engines.json +20 -0
  337. package/workflows/illustrate/assets/extract-baidu.js +21 -0
  338. package/workflows/illustrate/assets/extract-bing.js +33 -0
  339. package/workflows/illustrate/assets/extract-google.js +31 -0
  340. package/workflows/illustrate/workflow.mjs +301 -0
  341. package/workflows/plan/workflow.mjs +389 -0
  342. package/workflows/question-crops/README.md +35 -0
  343. package/workflows/question-crops/prompts/inventory.md +23 -0
  344. package/workflows/question-crops/scripts/image-ops.mjs +305 -0
  345. package/workflows/question-crops/scripts/image-ops.test.mjs +95 -0
  346. package/workflows/question-crops/workflow.mjs +172 -0
  347. package/workflows/ralph-loop/workflow.mjs +162 -0
  348. package/workflows/research/README.md +74 -0
  349. package/workflows/research/prompts/s0-goal.md +43 -0
  350. package/workflows/research/prompts/s1-early-exit.md +22 -0
  351. package/workflows/research/prompts/s1-map.md +58 -0
  352. package/workflows/research/prompts/s2-options.md +53 -0
  353. package/workflows/research/prompts/s3-deep-dive.md +56 -0
  354. package/workflows/research/prompts/s4-verify.md +74 -0
  355. package/workflows/research/prompts/s5-synthesis.md +81 -0
  356. package/workflows/research/prompts/s5b-fill-gaps.md +32 -0
  357. package/workflows/research/prompts/s6-package.md +32 -0
  358. package/workflows/research/scripts/build-report.mjs +98 -0
  359. package/workflows/research/workflow.mjs +288 -0
  360. package/workflows/wechat-reading-shots/prompts/collect-params.md +16 -0
  361. package/workflows/wechat-reading-shots/prompts/evaluate.md +20 -0
  362. package/workflows/wechat-reading-shots/prompts/open-book.md +28 -0
  363. package/workflows/wechat-reading-shots/prompts/read-page.md +13 -0
  364. package/workflows/wechat-reading-shots/prompts/turn-batch.md +24 -0
  365. package/workflows/wechat-reading-shots/test/control-flow.test.ts +329 -0
  366. package/workflows/wechat-reading-shots/workflow.mjs +266 -0
  367. package/workflows/wrong-question-docx/README.md +55 -0
  368. package/workflows/wrong-question-docx/prompts/figure-qa.md +8 -0
  369. package/workflows/wrong-question-docx/prompts/transcribe.md +25 -0
  370. package/workflows/wrong-question-docx/scripts/workbook.mjs +857 -0
  371. package/workflows/wrong-question-docx/test/control-flow.test.ts +165 -0
  372. package/workflows/wrong-question-docx/test/workbook.test.mjs +303 -0
  373. package/workflows/wrong-question-docx/workflow.mjs +485 -0
  374. package/plugins/workflow-runner/src/agentCommon.js +0 -354
  375. package/plugins/workflow-runner/src/agentCommon.ts +0 -435
  376. package/plugins/workflow-runner/src/controlFlow/branch.js +0 -40
  377. package/plugins/workflow-runner/src/controlFlow/branch.ts +0 -46
  378. package/plugins/workflow-runner/src/controlFlow/loop.js +0 -211
  379. package/plugins/workflow-runner/src/controlFlow/loop.ts +0 -248
  380. package/plugins/workflow-runner/src/controlFlow/pause.js +0 -129
  381. package/plugins/workflow-runner/src/controlFlow/pause.ts +0 -141
  382. package/plugins/workflow-runner/src/controlFlow/signal.js +0 -21
  383. package/plugins/workflow-runner/src/controlFlow/signal.ts +0 -29
  384. package/plugins/workflow-runner/src/controlFlow/types.js +0 -18
  385. package/plugins/workflow-runner/src/controlFlow/types.ts +0 -63
  386. package/plugins/workflow-runner/src/dslManifest.js +0 -72
  387. package/plugins/workflow-runner/src/dslManifest.ts +0 -127
  388. package/plugins/workflow-runner/src/expressions.js +0 -639
  389. package/plugins/workflow-runner/src/expressions.ts +0 -640
  390. package/plugins/workflow-runner/src/loader.js +0 -573
  391. package/plugins/workflow-runner/src/loader.ts +0 -721
  392. package/plugins/workflow-runner/src/multimodal.js +0 -38
  393. package/plugins/workflow-runner/src/multimodal.ts +0 -64
  394. package/plugins/workflow-runner/src/recovery.js +0 -126
  395. package/plugins/workflow-runner/src/recovery.ts +0 -156
  396. package/plugins/workflow-runner/src/stepExecutors/agent.js +0 -173
  397. package/plugins/workflow-runner/src/stepExecutors/agent.ts +0 -234
  398. package/plugins/workflow-runner/src/stepExecutors/assert.js +0 -42
  399. package/plugins/workflow-runner/src/stepExecutors/assert.ts +0 -52
  400. package/plugins/workflow-runner/src/stepExecutors/echo.js +0 -31
  401. package/plugins/workflow-runner/src/stepExecutors/echo.ts +0 -38
  402. package/plugins/workflow-runner/src/stepExecutors/llm.js +0 -99
  403. package/plugins/workflow-runner/src/stepExecutors/llm.ts +0 -133
  404. package/plugins/workflow-runner/src/stepExecutors/set.js +0 -49
  405. package/plugins/workflow-runner/src/stepExecutors/set.ts +0 -56
  406. package/plugins/workflow-runner/src/stepExecutors/skill.js +0 -111
  407. package/plugins/workflow-runner/src/stepExecutors/skill.ts +0 -140
  408. package/plugins/workflow-runner/src/stepExecutors/tool.js +0 -227
  409. package/plugins/workflow-runner/src/stepExecutors/tool.ts +0 -274
  410. package/plugins/workflow-runner/src/stepExecutors/verify.js +0 -61
  411. package/plugins/workflow-runner/src/stepExecutors/verify.ts +0 -72
  412. package/plugins/workflow-runner/src/stepPipeline.js +0 -277
  413. package/plugins/workflow-runner/src/stepPipeline.ts +0 -366
  414. package/plugins/workflow-runner/test/agent.test.ts +0 -587
  415. package/plugins/workflow-runner/test/agentLlmError.test.ts +0 -373
  416. package/plugins/workflow-runner/test/bashBlacklist.sweep.test.ts +0 -65
  417. package/plugins/workflow-runner/test/captureMisbind.test.ts +0 -99
  418. package/plugins/workflow-runner/test/cli.e2e.test.ts +0 -167
  419. package/plugins/workflow-runner/test/context-files.test.ts +0 -320
  420. package/plugins/workflow-runner/test/e2e.test.ts +0 -370
  421. package/plugins/workflow-runner/test/e2eNewLayout.test.ts +0 -314
  422. package/plugins/workflow-runner/test/engineRobustness.test.ts +0 -234
  423. package/plugins/workflow-runner/test/expressions.test.ts +0 -439
  424. package/plugins/workflow-runner/test/foundation.test.ts +0 -126
  425. package/plugins/workflow-runner/test/graceful.test.ts +0 -139
  426. package/plugins/workflow-runner/test/greedyInputs.load.test.ts +0 -47
  427. package/plugins/workflow-runner/test/hostCapability.test.ts +0 -108
  428. package/plugins/workflow-runner/test/illustrate.load.test.ts +0 -183
  429. package/plugins/workflow-runner/test/jsonPayload.test.ts +0 -83
  430. package/plugins/workflow-runner/test/loader.test.ts +0 -617
  431. package/plugins/workflow-runner/test/maxTurnsRetryDelay.test.ts +0 -33
  432. package/plugins/workflow-runner/test/multimodal.test.ts +0 -342
  433. package/plugins/workflow-runner/test/output-schema.test.ts +0 -213
  434. package/plugins/workflow-runner/test/parseWorkflowArgs.test.ts +0 -106
  435. package/plugins/workflow-runner/test/pluginRunner.isolation.test.ts +0 -269
  436. package/plugins/workflow-runner/test/ppt.load.test.ts +0 -1220
  437. package/plugins/workflow-runner/test/ralphLoop.e2e.test.ts +0 -221
  438. package/plugins/workflow-runner/test/recovery.test.ts +0 -265
  439. package/plugins/workflow-runner/test/research.load.test.ts +0 -328
  440. package/plugins/workflow-runner/test/runner.test.ts +0 -911
  441. package/plugins/workflow-runner/test/runnerPreflight.test.ts +0 -436
  442. package/plugins/workflow-runner/test/skillTurnDone.test.ts +0 -71
  443. package/plugins/workflow-runner/test/stateLifecycle.test.ts +0 -198
  444. package/plugins/workflow-runner/test/stepPipeline.test.ts +0 -114
  445. package/plugins/workflow-runner/test/taskArbitration.test.ts +0 -354
  446. package/plugins/workflow-runner/test/taskLifecycle.test.ts +0 -324
  447. package/plugins/workflow-runner/test/toolArtifactOverwrite.test.ts +0 -221
  448. package/plugins/workflow-runner/test/toolCapabilityBoundary.test.ts +0 -29
  449. package/plugins/workflow-runner/test/toolRuntimeIntegration.test.ts +0 -168
  450. package/plugins/workflow-runner/test/webppt.load.test.ts +0 -250
  451. package/plugins/workflow-runner/test/word.load.test.ts +0 -208
  452. package/plugins/workflow-runner/test/workflows.smoke.test.ts +0 -76
  453. package/plugins/workflow-runner/test/yamlGuardConditions.test.ts +0 -207
  454. package/src/advisorState.js +0 -22
  455. package/src/cli/configWizard.js +0 -293
  456. package/src/tools/toolProgressBridge.js +0 -48
  457. package/workflows/adaptive-research.yaml +0 -50
  458. package/workflows/book-review-short.yaml +0 -125
  459. package/workflows/e2e-write-greet.yaml +0 -31
  460. package/workflows/illustrate.yaml +0 -227
  461. package/workflows/plan.yaml +0 -470
  462. package/workflows/ppt.yaml +0 -1670
  463. package/workflows/ralph-loop.yaml +0 -201
  464. package/workflows/research.yaml +0 -873
  465. package/workflows/schema.json +0 -176
  466. package/workflows/webppt.yaml +0 -496
  467. package/workflows/wechat-reading-shots.yaml +0 -315
  468. package/workflows/word.yaml +0 -720
  469. package/workflows/youtube-shorts.yaml +0 -202
  470. /package/workflows/{research.md → research/DESIGN.md} +0 -0
@@ -0,0 +1,141 @@
1
+ /** Trusted ESM workflow module loader. This is an execution environment, not a security sandbox. */
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { mkdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
4
+ import { createRequire } from 'node:module';
5
+ import { tmpdir } from 'node:os';
6
+ import { dirname, extname, join, relative, resolve } from 'node:path';
7
+ import { pathToFileURL } from 'node:url';
8
+ import { pathContains } from '../../../src/plugin-sdk.js';
9
+ import { STATIC_IMPORT, resolveRelativeModule } from './moduleResolution.js';
10
+ export class WorkflowScriptError extends Error {
11
+ workflowName;
12
+ scriptPath;
13
+ cause;
14
+ workflowOutcome;
15
+ constructor(message, workflowName, scriptPath, cause, workflowOutcome) {
16
+ super(message);
17
+ this.workflowName = workflowName;
18
+ this.scriptPath = scriptPath;
19
+ this.cause = cause;
20
+ this.name = 'WorkflowScriptError';
21
+ this.workflowOutcome = workflowOutcome ?? readWorkflowOutcome(cause);
22
+ }
23
+ }
24
+ function readWorkflowOutcome(value) {
25
+ let current = value;
26
+ for (let depth = 0; depth < 8 && current && typeof current === 'object'; depth++) {
27
+ const outcome = current.workflowOutcome;
28
+ if (typeof outcome === 'string' && outcome.trim())
29
+ return outcome.trim();
30
+ current = current.cause;
31
+ }
32
+ return undefined;
33
+ }
34
+ /**
35
+ * Bun deliberately caches file modules by physical path and ignores URL query strings.
36
+ * Materialize the executable graph at a content-addressed physical path so changing a
37
+ * workflow cannot execute a stale module. Bare packages are resolved from the original
38
+ * workflow location and rewritten to file URLs; relative modules remain a native ESM graph.
39
+ *
40
+ * ⚠️ 裸包名是否声明在 `meta.packages` 里,这里**不重复校验**——那是
41
+ * `workflowFingerprint.ts` 的职责,`workflowDependencies.ts::resolveWorkflowBundle`
42
+ * 保证指纹计算总是先于本函数执行,所以未声明的包在到达这里之前就已经被拒绝。
43
+ * 这个调用顺序一旦改变,要在这里补上同样的校验,不要假设它仍然成立。
44
+ */
45
+ async function materializeModuleGraph(script, bundleHash) {
46
+ const sourceIdentity = createHash('sha256')
47
+ .update(resolve(script.dir))
48
+ .digest('hex')
49
+ .slice(0, 16);
50
+ const cacheRoot = join(tmpdir(), 'minimal-agent-workflow-esm-v2', sourceIdentity, bundleHash);
51
+ const entry = resolve(script.scriptPath);
52
+ const seen = new Set();
53
+ const requireFromEntry = createRequire(entry);
54
+ async function copyModule(path, knownSource) {
55
+ const absolute = resolve(path);
56
+ if (!pathContains(script.dir, absolute)) {
57
+ throw new Error(`工作流相对模块越出工作流目录:${absolute}`);
58
+ }
59
+ if (seen.has(absolute))
60
+ return;
61
+ seen.add(absolute);
62
+ const destination = join(cacheRoot, relative(script.dir, absolute));
63
+ await mkdir(dirname(destination), { recursive: true });
64
+ const original = knownSource ?? (await readFile(absolute, 'utf8'));
65
+ if (extname(absolute).toLowerCase() === '.json') {
66
+ const temporary = `${destination}.tmp-${process.pid}-${randomUUID()}`;
67
+ try {
68
+ await writeFile(temporary, original, 'utf8');
69
+ await rename(temporary, destination).catch(async (error) => {
70
+ const code = error.code;
71
+ // 内容寻址:目标一旦存在必然与本次要写的字节相同(同一份 knownSource/hash)。
72
+ // POSIX 覆盖式 rename 是原子操作,只会报 EEXIST;Windows 上并发 rename 到
73
+ // 同一目标可能因瞬时占用报 EPERM/EBUSY 而不是 EEXIST——都容忍,重新
74
+ // stat 一次确认目标确实已由并发的另一次调用写入,不是的话照原样抛出。
75
+ if (code !== 'EEXIST' && code !== 'EPERM' && code !== 'EBUSY')
76
+ throw error;
77
+ await stat(destination);
78
+ });
79
+ }
80
+ finally {
81
+ await rm(temporary, { force: true }).catch(() => undefined);
82
+ }
83
+ return;
84
+ }
85
+ const dependencies = [];
86
+ const rewritten = original.replace(STATIC_IMPORT, (whole, prefix, specifier, suffix) => {
87
+ if (specifier.startsWith('node:'))
88
+ return whole;
89
+ if (specifier.startsWith('.')) {
90
+ dependencies.push(resolveRelativeModule(absolute, specifier).then((dependency) => copyModule(dependency)));
91
+ return whole;
92
+ }
93
+ const resolvedPackage = requireFromEntry.resolve(specifier);
94
+ return `${prefix}${pathToFileURL(resolvedPackage).href}${suffix}`;
95
+ });
96
+ await Promise.all(dependencies);
97
+ const temporary = `${destination}.tmp-${process.pid}-${randomUUID()}`;
98
+ try {
99
+ await writeFile(temporary, rewritten, 'utf8');
100
+ await rename(temporary, destination).catch(async (error) => {
101
+ // 同上:内容寻址下并发 rename 到同一目标是无害的,只是容错码在 Windows 上
102
+ // 不是 EEXIST。re-stat 确认目标真的已经落地,不是的话照原样抛出。
103
+ const code = error.code;
104
+ if (code !== 'EEXIST' && code !== 'EPERM' && code !== 'EBUSY')
105
+ throw error;
106
+ await stat(destination);
107
+ });
108
+ }
109
+ finally {
110
+ await rm(temporary, { force: true }).catch(() => undefined);
111
+ }
112
+ }
113
+ await copyModule(entry, script.source);
114
+ return join(cacheRoot, relative(script.dir, entry));
115
+ }
116
+ export async function loadWorkflowModule(script, bundleHash) {
117
+ const materializedEntry = await materializeModuleGraph(script, bundleHash);
118
+ const url = pathToFileURL(materializedEntry);
119
+ let loaded;
120
+ try {
121
+ loaded = (await import(url.href));
122
+ }
123
+ catch (error) {
124
+ throw new WorkflowScriptError(`工作流模块加载失败:${error instanceof Error ? error.message : String(error)}`, script.name, script.scriptPath, error);
125
+ }
126
+ if (typeof loaded.default !== 'function') {
127
+ throw new WorkflowScriptError('工作流必须 `export default async function run(wf) { ... }`', script.name, script.scriptPath);
128
+ }
129
+ return loaded;
130
+ }
131
+ export async function runScript(script, context, bundleHash) {
132
+ const module = await loadWorkflowModule(script, bundleHash);
133
+ try {
134
+ return await module.default(context);
135
+ }
136
+ catch (error) {
137
+ if (error instanceof Error && error.name === 'AbortError')
138
+ throw error;
139
+ throw new WorkflowScriptError(`工作流 "${script.name}" 执行失败:${error instanceof Error ? error.message : String(error)}`, script.name, script.scriptPath, error);
140
+ }
141
+ }
@@ -0,0 +1,182 @@
1
+ /** Trusted ESM workflow module loader. This is an execution environment, not a security sandbox. */
2
+ import { createHash, randomUUID } from 'node:crypto';
3
+ import { mkdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
4
+ import { createRequire } from 'node:module';
5
+ import { tmpdir } from 'node:os';
6
+ import { dirname, extname, join, relative, resolve } from 'node:path';
7
+ import { pathToFileURL } from 'node:url';
8
+
9
+ import { pathContains } from '../../../src/plugin-sdk.js';
10
+ import { STATIC_IMPORT, resolveRelativeModule } from './moduleResolution.js';
11
+ import type { WorkflowScript } from './types.js';
12
+
13
+ export class WorkflowScriptError extends Error {
14
+ readonly workflowOutcome?: string;
15
+
16
+ constructor(
17
+ message: string,
18
+ readonly workflowName: string,
19
+ readonly scriptPath: string,
20
+ readonly cause?: unknown,
21
+ workflowOutcome?: string,
22
+ ) {
23
+ super(message);
24
+ this.name = 'WorkflowScriptError';
25
+ this.workflowOutcome = workflowOutcome ?? readWorkflowOutcome(cause);
26
+ }
27
+ }
28
+
29
+ function readWorkflowOutcome(value: unknown): string | undefined {
30
+ let current = value;
31
+ for (let depth = 0; depth < 8 && current && typeof current === 'object'; depth++) {
32
+ const outcome = (current as { workflowOutcome?: unknown }).workflowOutcome;
33
+ if (typeof outcome === 'string' && outcome.trim()) return outcome.trim();
34
+ current = (current as { cause?: unknown }).cause;
35
+ }
36
+ return undefined;
37
+ }
38
+
39
+ interface WorkflowModule {
40
+ default?: (context: unknown) => unknown | Promise<unknown>;
41
+ meta?: unknown;
42
+ }
43
+
44
+ /**
45
+ * Bun deliberately caches file modules by physical path and ignores URL query strings.
46
+ * Materialize the executable graph at a content-addressed physical path so changing a
47
+ * workflow cannot execute a stale module. Bare packages are resolved from the original
48
+ * workflow location and rewritten to file URLs; relative modules remain a native ESM graph.
49
+ *
50
+ * ⚠️ 裸包名是否声明在 `meta.packages` 里,这里**不重复校验**——那是
51
+ * `workflowFingerprint.ts` 的职责,`workflowDependencies.ts::resolveWorkflowBundle`
52
+ * 保证指纹计算总是先于本函数执行,所以未声明的包在到达这里之前就已经被拒绝。
53
+ * 这个调用顺序一旦改变,要在这里补上同样的校验,不要假设它仍然成立。
54
+ */
55
+ async function materializeModuleGraph(
56
+ script: WorkflowScript,
57
+ bundleHash: string,
58
+ ): Promise<string> {
59
+ const sourceIdentity = createHash('sha256')
60
+ .update(resolve(script.dir))
61
+ .digest('hex')
62
+ .slice(0, 16);
63
+ const cacheRoot = join(
64
+ tmpdir(),
65
+ 'minimal-agent-workflow-esm-v2',
66
+ sourceIdentity,
67
+ bundleHash,
68
+ );
69
+ const entry = resolve(script.scriptPath);
70
+ const seen = new Set<string>();
71
+ const requireFromEntry = createRequire(entry);
72
+
73
+ async function copyModule(path: string, knownSource?: string): Promise<void> {
74
+ const absolute = resolve(path);
75
+ if (!pathContains(script.dir, absolute)) {
76
+ throw new Error(`工作流相对模块越出工作流目录:${absolute}`);
77
+ }
78
+ if (seen.has(absolute)) return;
79
+ seen.add(absolute);
80
+ const destination = join(cacheRoot, relative(script.dir, absolute));
81
+ await mkdir(dirname(destination), { recursive: true });
82
+ const original = knownSource ?? (await readFile(absolute, 'utf8'));
83
+ if (extname(absolute).toLowerCase() === '.json') {
84
+ const temporary = `${destination}.tmp-${process.pid}-${randomUUID()}`;
85
+ try {
86
+ await writeFile(temporary, original, 'utf8');
87
+ await rename(temporary, destination).catch(async (error) => {
88
+ const code = (error as NodeJS.ErrnoException).code;
89
+ // 内容寻址:目标一旦存在必然与本次要写的字节相同(同一份 knownSource/hash)。
90
+ // POSIX 覆盖式 rename 是原子操作,只会报 EEXIST;Windows 上并发 rename 到
91
+ // 同一目标可能因瞬时占用报 EPERM/EBUSY 而不是 EEXIST——都容忍,重新
92
+ // stat 一次确认目标确实已由并发的另一次调用写入,不是的话照原样抛出。
93
+ if (code !== 'EEXIST' && code !== 'EPERM' && code !== 'EBUSY') throw error;
94
+ await stat(destination);
95
+ });
96
+ } finally {
97
+ await rm(temporary, { force: true }).catch(() => undefined);
98
+ }
99
+ return;
100
+ }
101
+ const dependencies: Promise<void>[] = [];
102
+ const rewritten = original.replace(
103
+ STATIC_IMPORT,
104
+ (whole, prefix: string, specifier: string, suffix: string) => {
105
+ if (specifier.startsWith('node:')) return whole;
106
+ if (specifier.startsWith('.')) {
107
+ dependencies.push(
108
+ resolveRelativeModule(absolute, specifier).then((dependency) =>
109
+ copyModule(dependency),
110
+ ),
111
+ );
112
+ return whole;
113
+ }
114
+ const resolvedPackage = requireFromEntry.resolve(specifier);
115
+ return `${prefix}${pathToFileURL(resolvedPackage).href}${suffix}`;
116
+ },
117
+ );
118
+ await Promise.all(dependencies);
119
+ const temporary = `${destination}.tmp-${process.pid}-${randomUUID()}`;
120
+ try {
121
+ await writeFile(temporary, rewritten, 'utf8');
122
+ await rename(temporary, destination).catch(async (error) => {
123
+ // 同上:内容寻址下并发 rename 到同一目标是无害的,只是容错码在 Windows 上
124
+ // 不是 EEXIST。re-stat 确认目标真的已经落地,不是的话照原样抛出。
125
+ const code = (error as NodeJS.ErrnoException).code;
126
+ if (code !== 'EEXIST' && code !== 'EPERM' && code !== 'EBUSY') throw error;
127
+ await stat(destination);
128
+ });
129
+ } finally {
130
+ await rm(temporary, { force: true }).catch(() => undefined);
131
+ }
132
+ }
133
+
134
+ await copyModule(entry, script.source);
135
+ return join(cacheRoot, relative(script.dir, entry));
136
+ }
137
+
138
+ export async function loadWorkflowModule(
139
+ script: WorkflowScript,
140
+ bundleHash: string,
141
+ ): Promise<WorkflowModule> {
142
+ const materializedEntry = await materializeModuleGraph(script, bundleHash);
143
+ const url = pathToFileURL(materializedEntry);
144
+ let loaded: WorkflowModule;
145
+ try {
146
+ loaded = (await import(url.href)) as WorkflowModule;
147
+ } catch (error) {
148
+ throw new WorkflowScriptError(
149
+ `工作流模块加载失败:${error instanceof Error ? error.message : String(error)}`,
150
+ script.name,
151
+ script.scriptPath,
152
+ error,
153
+ );
154
+ }
155
+ if (typeof loaded.default !== 'function') {
156
+ throw new WorkflowScriptError(
157
+ '工作流必须 `export default async function run(wf) { ... }`',
158
+ script.name,
159
+ script.scriptPath,
160
+ );
161
+ }
162
+ return loaded;
163
+ }
164
+
165
+ export async function runScript(
166
+ script: WorkflowScript,
167
+ context: unknown,
168
+ bundleHash: string,
169
+ ): Promise<unknown> {
170
+ const module = await loadWorkflowModule(script, bundleHash);
171
+ try {
172
+ return await module.default!(context);
173
+ } catch (error) {
174
+ if (error instanceof Error && error.name === 'AbortError') throw error;
175
+ throw new WorkflowScriptError(
176
+ `工作流 "${script.name}" 执行失败:${error instanceof Error ? error.message : String(error)}`,
177
+ script.name,
178
+ script.scriptPath,
179
+ error,
180
+ );
181
+ }
182
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * plugins/workflow-runner/src/scriptGuard.d.mts —— scriptGuard.mjs 的类型声明
3
+ *
4
+ * 实现刻意是 `.mjs`(纯 JS、零依赖),见该文件头注:它同时被 TS 引擎 import
5
+ * 和被 `node` 直接 spawn,只有 `.mjs` 两条路都走得通。这份 `.d.mts` 只是给
6
+ * TS 侧补类型,不参与运行时。
7
+ */
8
+
9
+ export interface WorkflowMetaShape {
10
+ description?: unknown;
11
+ inputs?: unknown;
12
+ artifacts?: unknown;
13
+ resumeBackoff?: unknown;
14
+ [key: string]: unknown;
15
+ }
16
+
17
+ /** 把字符串字面量与注释的内容抹成等长空格,保留换行与其余字节。 */
18
+ export function blankLiteralsAndComments(source: string): string;
19
+
20
+ export function extractMetaLiteral(
21
+ source: string,
22
+ ):
23
+ | { ok: true; literal: string; bodyOffset: number; metaStart: number }
24
+ | { ok: false; error: string };
25
+
26
+ export function evaluateMetaLiteral(
27
+ literal: string,
28
+ ): { ok: true; value: WorkflowMetaShape } | { ok: false; error: string };
29
+
30
+ export function validateScript(
31
+ source: string,
32
+ opts?: { filename?: string },
33
+ ): {
34
+ ok: boolean;
35
+ errors: string[];
36
+ meta?: WorkflowMetaShape;
37
+ bodyOffset?: number;
38
+ };