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
@@ -1,141 +0,0 @@
1
- /**
2
- * ============================================================
3
- * controlFlow/pause.ts —— 真 HITL 审批闸门
4
- * ------------------------------------------------------------
5
- * 经 AskUserQuestion/askBridge 实现**真停等**:TUI 弹选择界面、用户拍板后继续;
6
- * 非交互宿主(-p / gateway / 测试)askBridge 自动选推荐项(继续执行)且 stderr
7
- * 注记,**绝不挂起** —— 与 `-p` 单行 JSON 契约兼容。「等用户」骑在既有
8
- * tool_call→tool_result 回路上(同 AskUserQuestion 工具),引擎零新通道。
9
- *
10
- * 两条踩过坑的判定规则,改动前先读:
11
- * ① **只解析【答案行】(`A1: …`)**。回执里 Q 行带着问题原文,而工作流的 pause
12
- * 提示语常含「停止」字样(如 plan.yaml 的说明文字)—— 看整个 content 会把
13
- * 用户选的「继续」误判成停止。**曾是真事故。**
14
- * ② **审批门上的含糊 = 不批准**。明确选「继续」才放行;选「停止」、取消提问(ESC)、
15
- * 或自由输入其它内容(= 用户想先改点什么)一律不放行。只有**桥本身异常**才
16
- * 兜底放行(保持可用性)并响亮警告。
17
- * ============================================================
18
- */
19
-
20
- import { executeTool, type LoopEvent } from '../../../../src/plugin-sdk.js';
21
- import { truncate } from '../agentCommon.js';
22
- import { interpolate } from '../expressions.js';
23
- import { commitStep } from '../stepPipeline.js';
24
- import type { StepDef, StepResult, VarStack, WorkflowEvent } from '../types.js';
25
- import type { ControlDeps, ControlOutcome } from './types.js';
26
-
27
- const WF_PLUGIN_ID = 'workflow-runner';
28
-
29
- export async function* execPauseStep(
30
- step: StepDef,
31
- vars: VarStack,
32
- deps: ControlDeps,
33
- ): AsyncGenerator<WorkflowEvent | LoopEvent, ControlOutcome, void> {
34
- const { ctx, state, cp } = deps;
35
- const msg = step.prompt
36
- ? interpolate(step.prompt, vars)
37
- : '工作流暂停点:请确认是否继续执行后续步骤。';
38
- await state.appendProgress(`- ${step.id} pause: 等待用户确认`);
39
- // pause 会驻留状态行很久(等用户),title 步同样不带块内序号防误读。
40
- if (step.title) {
41
- yield {
42
- type: 'plugin_progress',
43
- pluginId: WF_PLUGIN_ID,
44
- message: `⏸ ${interpolate(step.title, vars)}:等待用户确认…`,
45
- };
46
- } else {
47
- yield {
48
- type: 'plugin_progress',
49
- pluginId: WF_PLUGIN_ID,
50
- current: deps.index + 1,
51
- max: deps.total,
52
- message: `⏸ 审批闸门 ${step.id}:等待用户确认…`,
53
- };
54
- }
55
-
56
- const exec = ctx.executeTool ?? executeTool;
57
- let approved = true;
58
- let askFailed = false;
59
- let freeText = '';
60
- const freeTextMode = step.free_text ?? 'halt';
61
- try {
62
- const r = await exec(
63
- 'AskUserQuestion',
64
- JSON.stringify({
65
- questions: [
66
- {
67
- question: truncate(msg, 400),
68
- header: '审批闸门',
69
- options: [
70
- { label: '继续执行 (推荐)', description: '放行后续步骤' },
71
- {
72
- label: '停止(保留现场)',
73
- description: '中止本次运行;同任务重跑可从断点 resume',
74
- },
75
- ],
76
- },
77
- ],
78
- }),
79
- ctx.signal,
80
- );
81
- // ⚠️ 只解析【答案行】——见文件头注规则 ①。
82
- const answerText = r.ok
83
- ? r.content
84
- .split('\n')
85
- .map((l) => l.trim())
86
- .filter((l) => /^A\d+[::]/.test(l))
87
- .join('\n')
88
- : '';
89
- if (!r.ok || answerText.includes('停止')) {
90
- approved = false;
91
- } else if (answerText.includes('继续')) {
92
- approved = true;
93
- } else {
94
- // 自由输入(「其他」逃生项):用户想先调整 → 不放行,把原话带进 halt 文案
95
- freeText = answerText.replace(/^A\d+[::]\s*/, '');
96
- approved = freeTextMode === 'approve';
97
- }
98
- } catch {
99
- askFailed = true; // 桥不可用 → 放行 + 响亮警告(保持旧"不挂起"行为)
100
- }
101
-
102
- if (askFailed) {
103
- yield {
104
- type: 'warning',
105
- message: `⚠ pause "${step.id}" 审批闸门不可用(提问桥异常),已自动放行。提示:${msg}`,
106
- };
107
- }
108
-
109
- if (!approved) {
110
- const why = freeText
111
- ? `用户在审批闸门 "${step.id}" 给出指示「${truncate(freeText, 120)}」——未放行(现场已保留,按指示调整后重跑同目标可从断点续跑)`
112
- : `用户在审批闸门 "${step.id}" 选择停止(现场已保留,重跑同目标可从断点续跑)`;
113
- await state.appendProgress(`■ ${step.id}: ${why}`);
114
- if (cp) await state.recordFailure(step.id, why);
115
- yield { type: 'workflow_step_end', id: step.id, ok: false, error: why };
116
- yield { type: 'error', error: `Workflow halted at step "${step.id}": ${why}` };
117
- return { kind: 'halted' };
118
- }
119
-
120
- // 带补充要求的放行:自由输入并入贯穿目标(后续每步都看到,不止 capture 变量)
121
- if (freeText) await deps.addGoalSupplement(freeText);
122
-
123
- const pauseResult: StepResult = {
124
- raw: { result: freeText, text: freeText, approved: true, free_text: freeText },
125
- preview: freeText
126
- ? `审批通过:继续执行;补充要求:${truncate(freeText, 120)}`
127
- : '审批通过:继续执行',
128
- };
129
- yield* commitStep({
130
- step,
131
- result: pauseResult,
132
- kind: 'pause',
133
- vars,
134
- ctx,
135
- state,
136
- ...(cp ? { cp } : {}),
137
- progressLine: `✓ ${step.id} (pause: 已确认继续)`,
138
- addGoalSupplement: deps.addGoalSupplement,
139
- });
140
- return { kind: 'next' };
141
- }
@@ -1,21 +0,0 @@
1
- /**
2
- * controlFlow/signal.ts —— break / continue
3
- *
4
- * `target:<loopId>` 让信号**穿透中间层循环**直达指定 loop ——
5
- * 审批反馈是方向性变化时,从审批小循环打回外层规划循环靠的就是它。
6
- *
7
- * ⚠️ 这里**不再重复评估 `step.when`**。重构前这个块里有一份自己的 when 求值,
8
- * 而 `runSteps` 的通用 when 守卫在它之前就跑过了:when=false 时早已
9
- * `workflow_step_skipped` 并跳过本步,根本到不了这里。也就是说那份求值
10
- * `shouldFire` 恒为真、它的 catch 分支永不可达 —— 纯死代码,随本次重构删掉。
11
- */
12
- export async function* execSignalStep(step, deps) {
13
- const signal = step.type === 'continue' ? 'continue' : 'break';
14
- const label = `${signal}${step.target ? ` → ${step.target}` : ''}`;
15
- await deps.state.appendProgress(`↵ ${step.id}: ${label}`);
16
- yield { type: 'workflow_step_end', id: step.id, ok: true, output: label };
17
- return {
18
- kind: 'flow',
19
- signal: { signal, ...(step.target ? { target: step.target } : {}) },
20
- };
21
- }
@@ -1,29 +0,0 @@
1
- /**
2
- * controlFlow/signal.ts —— break / continue
3
- *
4
- * `target:<loopId>` 让信号**穿透中间层循环**直达指定 loop ——
5
- * 审批反馈是方向性变化时,从审批小循环打回外层规划循环靠的就是它。
6
- *
7
- * ⚠️ 这里**不再重复评估 `step.when`**。重构前这个块里有一份自己的 when 求值,
8
- * 而 `runSteps` 的通用 when 守卫在它之前就跑过了:when=false 时早已
9
- * `workflow_step_skipped` 并跳过本步,根本到不了这里。也就是说那份求值
10
- * `shouldFire` 恒为真、它的 catch 分支永不可达 —— 纯死代码,随本次重构删掉。
11
- */
12
-
13
- import type { LoopEvent } from '../../../../src/plugin-sdk.js';
14
- import type { StepDef, WorkflowEvent } from '../types.js';
15
- import type { ControlDeps, ControlOutcome } from './types.js';
16
-
17
- export async function* execSignalStep(
18
- step: StepDef,
19
- deps: ControlDeps,
20
- ): AsyncGenerator<WorkflowEvent | LoopEvent, ControlOutcome, void> {
21
- const signal = step.type === 'continue' ? 'continue' : 'break';
22
- const label = `${signal}${step.target ? ` → ${step.target}` : ''}`;
23
- await deps.state.appendProgress(`↵ ${step.id}: ${label}`);
24
- yield { type: 'workflow_step_end', id: step.id, ok: true, output: label };
25
- return {
26
- kind: 'flow',
27
- signal: { signal, ...(step.target ? { target: step.target } : {}) },
28
- };
29
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * ============================================================
3
- * controlFlow/types.ts —— 控制流模块的统一契约
4
- * ------------------------------------------------------------
5
- * 控制流 step(branch / loop / break / continue / pause)与动作 step 的区别是
6
- * **它们影响的是迭代本身**,不是产出一个 StepResult。所以它们不能塞进
7
- * `stepExecutors/` 那套 `(step, vars, ctx) → StepResult` 的形状里 ——
8
- * 硬塞的结果是「执行器返回值里带一个谁都看不懂的控制信号」。
9
- *
10
- * 这里给它们一个自己的出口形状,让 `runSteps` 只需要一个 switch。
11
- *
12
- * ⚠️ **循环依赖的解法**:loop / branch 需要递归执行子块,而子块执行在
13
- * `runner.ts::runSteps` 里。**不要互相 import** —— 把它作为依赖注入进来
14
- * (`ControlDeps.runBlock`)。这同时让控制流模块能脱离 runner 单测:
15
- * 喂一个假的 runBlock 就能验 break 的 target 穿透。
16
- * ============================================================
17
- */
18
- export {};
@@ -1,63 +0,0 @@
1
- /**
2
- * ============================================================
3
- * controlFlow/types.ts —— 控制流模块的统一契约
4
- * ------------------------------------------------------------
5
- * 控制流 step(branch / loop / break / continue / pause)与动作 step 的区别是
6
- * **它们影响的是迭代本身**,不是产出一个 StepResult。所以它们不能塞进
7
- * `stepExecutors/` 那套 `(step, vars, ctx) → StepResult` 的形状里 ——
8
- * 硬塞的结果是「执行器返回值里带一个谁都看不懂的控制信号」。
9
- *
10
- * 这里给它们一个自己的出口形状,让 `runSteps` 只需要一个 switch。
11
- *
12
- * ⚠️ **循环依赖的解法**:loop / branch 需要递归执行子块,而子块执行在
13
- * `runner.ts::runSteps` 里。**不要互相 import** —— 把它作为依赖注入进来
14
- * (`ControlDeps.runBlock`)。这同时让控制流模块能脱离 runner 单测:
15
- * 喂一个假的 runBlock 就能验 break 的 target 穿透。
16
- * ============================================================
17
- */
18
-
19
- import type { LoopEvent } from '../../../../src/plugin-sdk.js';
20
- import type { CpScope } from '../stepPipeline.js';
21
- import type {
22
- RunContext,
23
- StepDef,
24
- VarStack,
25
- WorkflowEvent,
26
- } from '../types.js';
27
- import type { LoopResumeInfo, WorkflowState } from '../workflowState.js';
28
-
29
- /** break / continue 向上传播的信号(含 `target:` 标签,用于穿透中间层循环)。 */
30
- export interface FlowSignal {
31
- signal: 'break' | 'continue';
32
- target?: string;
33
- }
34
-
35
- /** 一段 steps 的执行结局。 */
36
- export type StepFlow = 'completed' | 'halted' | FlowSignal;
37
-
38
- /** 控制流处理器的出口。 */
39
- export type ControlOutcome =
40
- | { kind: 'next' } // 本步处理完,继续下一步
41
- | { kind: 'flow'; signal: FlowSignal } // 向上传播给最近的循环 / 顶层
42
- | { kind: 'halted' };
43
-
44
- /** 递归执行子块的能力,由 runner 注入(见文件头注:避免循环依赖)。 */
45
- export type RunBlock = (
46
- steps: StepDef[],
47
- vars: VarStack,
48
- cp?: CpScope,
49
- startFrom?: number,
50
- loopResume?: LoopResumeInfo,
51
- ) => AsyncGenerator<WorkflowEvent | LoopEvent, StepFlow, void>;
52
-
53
- export interface ControlDeps {
54
- ctx: RunContext;
55
- state: WorkflowState;
56
- cp?: CpScope;
57
- runBlock: RunBlock;
58
- /** 本步在当前 block 中的位置,仅用于 plugin_progress 的 current/max。 */
59
- index: number;
60
- total: number;
61
- /** 累加用户补充要求(pause 的自由输入走它)。由 runner 注入,避免反向依赖。 */
62
- addGoalSupplement: (text: string) => Promise<void>;
63
- }
@@ -1,72 +0,0 @@
1
- import { ACTION_KINDS, CONTROL_FLOW_TYPES, ON_ERROR_VALUES, VALID_STEP_TYPES } from './loader.js';
2
- const llmAgentOnly = ['llm', 'agent'];
3
- const llmAgentSkillOnly = ['llm', 'agent', 'skill'];
4
- export const WORKFLOW_DSL_MANIFEST = {
5
- version: '1.0.0',
6
- actionKinds: [...ACTION_KINDS],
7
- controlFlowTypes: [...CONTROL_FLOW_TYPES],
8
- validStepTypes: [...VALID_STEP_TYPES],
9
- onErrorValues: [...ON_ERROR_VALUES],
10
- exclusiveActionFields: [...ACTION_KINDS, 'type'],
11
- stepKinds: [
12
- { kind: 'tool', group: 'action', label: 'Tool', description: 'Call one deterministic tool.', primaryFields: ['tool', 'args'] },
13
- { kind: 'llm', group: 'action', label: 'LLM', description: 'Single LLM step.', primaryFields: ['llm', 'output_schema', 'context_files', 'allowed_tools'] },
14
- { kind: 'skill', group: 'action', label: 'Skill', description: 'Run one SKILL.md workflow agent.', primaryFields: ['skill', 'input', 'maxTurns'] },
15
- { kind: 'agent', group: 'action', label: 'Agent', description: 'Run an inline bounded TAOR agent.', primaryFields: ['agent', 'maxTurns', 'done_when', 'output_schema', 'context_files', 'allowed_tools'] },
16
- { kind: 'assert', group: 'quality', label: 'Assert', description: 'Halt when a condition is false.', primaryFields: ['condition', 'onFail'] },
17
- { kind: 'verify', group: 'quality', label: 'Verify', description: 'Run deterministic checks before continuing.', primaryFields: ['checks', 'onFail'] },
18
- { kind: 'set', group: 'control', label: 'Set', description: 'Set workflow variables deterministically.', primaryFields: ['set'] },
19
- { kind: 'branch', group: 'control', label: 'Branch', description: 'Route into then/else child steps.', primaryFields: ['condition'], childCollections: ['then', 'else'] },
20
- { kind: 'loop', group: 'control', label: 'Loop', description: 'For-each or bounded while loop.', primaryFields: ['over', 'as', 'max_iterations', 'fresh_context'], childCollections: ['do'] },
21
- { kind: 'break', group: 'control', label: 'Break', description: 'Exit the nearest (or target) loop.', primaryFields: ['when', 'target'] },
22
- { kind: 'continue', group: 'control', label: 'Continue', description: 'Skip to the next iteration of the nearest (or target) loop.', primaryFields: ['when', 'target'] },
23
- { kind: 'echo', group: 'control', label: 'Echo', description: 'Deterministically print an interpolated message (no LLM).', primaryFields: ['message'] },
24
- { kind: 'pause', group: 'control', label: 'Pause', description: 'Human approval gate.', primaryFields: ['prompt', 'free_text'] },
25
- ],
26
- commonStepFields: [
27
- { name: 'id', type: 'string', ui: 'text', required: true, label: 'id' },
28
- { name: 'title', type: 'string', ui: 'text', label: 'title', description: 'Human-readable progress label (supports ${} interpolation); when set, the status line shows it instead of block-relative step numbers.' },
29
- { name: 'when', type: 'string', ui: 'text', label: 'when', description: 'Optional execution condition.' },
30
- { name: 'onError', type: 'enum', ui: 'select', enum: [...ON_ERROR_VALUES], label: 'onError' },
31
- { name: 'recover_hint', type: 'string', ui: 'text', label: 'recover_hint', description: 'Hint for onError=recover.' },
32
- ],
33
- stepFields: [
34
- { name: 'tool', type: 'string', ui: 'text', appliesTo: ['tool'] },
35
- { name: 'args', type: 'object', ui: 'json', appliesTo: ['tool'] },
36
- { name: 'llm', type: 'string', ui: 'textarea', appliesTo: ['llm'] },
37
- { name: 'skill', type: 'string', ui: 'text', appliesTo: ['skill'] },
38
- { name: 'agent', type: 'string', ui: 'textarea', appliesTo: ['agent'] },
39
- { name: 'input', type: 'string', ui: 'textarea', appliesTo: ['skill'] },
40
- { name: 'capture', type: 'object', ui: 'json' },
41
- { name: 'maxTurns', type: 'number', ui: 'number', appliesTo: ['llm', 'skill', 'agent'] },
42
- { name: 'max_retries', type: 'number', ui: 'number' },
43
- { name: 'artifacts', type: 'string[]', ui: 'string[]' },
44
- { name: 'condition', type: 'string', ui: 'text', appliesTo: ['assert', 'branch'] },
45
- { name: 'onFail', type: 'string', ui: 'textarea', appliesTo: ['assert', 'verify'] },
46
- { name: 'set', type: 'object', ui: 'json', required: true, appliesTo: ['set'] },
47
- { name: 'checks', type: 'string[]', ui: 'string[]', required: true, appliesTo: ['verify'] },
48
- { name: 'over', type: 'string', ui: 'text', appliesTo: ['loop'] },
49
- { name: 'as', type: 'string', ui: 'text', appliesTo: ['loop'] },
50
- { name: 'max_iterations', type: 'number', ui: 'number', appliesTo: ['loop'] },
51
- { name: 'fresh_context', type: 'boolean', ui: 'boolean', appliesTo: ['loop'] },
52
- { name: 'prompt', type: 'string', ui: 'textarea', appliesTo: ['pause'] },
53
- { name: 'free_text', type: 'enum', ui: 'select', enum: ['halt', 'approve'], appliesTo: ['pause'] },
54
- { name: 'target', type: 'string', ui: 'text', appliesTo: ['break', 'continue'], description: 'Target loop id (label semantics; default = nearest loop).' },
55
- { name: 'message', type: 'string', ui: 'textarea', required: true, appliesTo: ['echo'] },
56
- { name: 'goal_supplement', type: 'boolean', ui: 'boolean', appliesTo: ['tool', 'skill', 'agent', 'llm', 'pause'], description: 'Append this step output to the goal anchor as a user supplement.' },
57
- { name: 'done_when', type: 'string', ui: 'text', appliesTo: ['agent'], description: 'Deterministic completion condition (whitelist expression, e.g. fileExists(...)); engine nudges the agent to keep working until it holds.' },
58
- { name: 'output_schema', type: 'object', ui: 'json', appliesTo: llmAgentOnly },
59
- { name: 'context_files', type: 'object[]', ui: 'object[]', appliesTo: llmAgentOnly },
60
- { name: 'allowed_tools', type: 'string[]', ui: 'string[]', appliesTo: llmAgentOnly },
61
- { name: 'history_mode', type: 'enum', ui: 'select', enum: ['shared', 'isolated'], appliesTo: llmAgentSkillOnly, description: 'Use shared workflow history or run this llm/agent/skill step in an isolated history (system prompt + current step only).' },
62
- // 多模态(视觉):仅 llm/agent 生效。images 喂图给模型识图/打分(如 illustrate 配图工作流)。
63
- { name: 'images', type: 'array', ui: 'json', appliesTo: llmAgentOnly, description: 'Multimodal image inputs (paths/URLs, supports ${} interpolation). Array of strings or { source, detail, max_long_side_pixel }.' },
64
- { name: 'image_detail', type: 'enum', ui: 'select', enum: ['low', 'high', 'auto'], appliesTo: llmAgentOnly, description: 'Default vision detail for this step (per-image override allowed inside images[]).' },
65
- { name: 'image_max_long_side_pixel', type: 'number', ui: 'number', appliesTo: llmAgentOnly, description: 'Default max long-side pixels for downscaling images before sending.' },
66
- { name: 'parse_inline_images', type: 'boolean', ui: 'boolean', appliesTo: llmAgentOnly, description: 'Parse @./img.png or image URLs found in the prompt text.' },
67
- ],
68
- workflowFields: [
69
- { name: 'artifacts', type: 'string[]', ui: 'string[]', label: 'workflow artifacts' },
70
- { name: 'self_heal', type: 'object', ui: 'json', label: 'self_heal' },
71
- ],
72
- };
@@ -1,127 +0,0 @@
1
- import { ACTION_KINDS, CONTROL_FLOW_TYPES, ON_ERROR_VALUES, VALID_STEP_TYPES } from './loader.js';
2
-
3
- export type DslFieldUi =
4
- | 'text'
5
- | 'textarea'
6
- | 'number'
7
- | 'boolean'
8
- | 'select'
9
- | 'json'
10
- | 'string[]'
11
- | 'object[]';
12
-
13
- export interface WorkflowDslField {
14
- name: string;
15
- type:
16
- | 'string'
17
- | 'number'
18
- | 'boolean'
19
- | 'enum'
20
- | 'object'
21
- | 'array'
22
- | 'string[]'
23
- | 'object[]';
24
- ui: DslFieldUi;
25
- label?: string;
26
- description?: string;
27
- required?: boolean;
28
- default?: unknown;
29
- enum?: string[];
30
- appliesTo?: string[];
31
- disallowedOn?: string[];
32
- }
33
-
34
- export interface WorkflowDslStepKind {
35
- kind: string;
36
- group: 'action' | 'control' | 'quality';
37
- label: string;
38
- description: string;
39
- primaryFields: string[];
40
- childCollections?: string[];
41
- }
42
-
43
- export interface WorkflowDslManifest {
44
- version: string;
45
- actionKinds: string[];
46
- controlFlowTypes: string[];
47
- validStepTypes: string[];
48
- onErrorValues: string[];
49
- exclusiveActionFields: string[];
50
- stepKinds: WorkflowDslStepKind[];
51
- commonStepFields: WorkflowDslField[];
52
- stepFields: WorkflowDslField[];
53
- workflowFields: WorkflowDslField[];
54
- }
55
-
56
- const llmAgentOnly = ['llm', 'agent'];
57
- const llmAgentSkillOnly = ['llm', 'agent', 'skill'];
58
-
59
- export const WORKFLOW_DSL_MANIFEST: WorkflowDslManifest = {
60
- version: '1.0.0',
61
- actionKinds: [...ACTION_KINDS],
62
- controlFlowTypes: [...CONTROL_FLOW_TYPES],
63
- validStepTypes: [...VALID_STEP_TYPES],
64
- onErrorValues: [...ON_ERROR_VALUES],
65
- exclusiveActionFields: [...ACTION_KINDS, 'type'],
66
- stepKinds: [
67
- { kind: 'tool', group: 'action', label: 'Tool', description: 'Call one deterministic tool.', primaryFields: ['tool', 'args'] },
68
- { kind: 'llm', group: 'action', label: 'LLM', description: 'Single LLM step.', primaryFields: ['llm', 'output_schema', 'context_files', 'allowed_tools'] },
69
- { kind: 'skill', group: 'action', label: 'Skill', description: 'Run one SKILL.md workflow agent.', primaryFields: ['skill', 'input', 'maxTurns'] },
70
- { kind: 'agent', group: 'action', label: 'Agent', description: 'Run an inline bounded TAOR agent.', primaryFields: ['agent', 'maxTurns', 'done_when', 'output_schema', 'context_files', 'allowed_tools'] },
71
- { kind: 'assert', group: 'quality', label: 'Assert', description: 'Halt when a condition is false.', primaryFields: ['condition', 'onFail'] },
72
- { kind: 'verify', group: 'quality', label: 'Verify', description: 'Run deterministic checks before continuing.', primaryFields: ['checks', 'onFail'] },
73
- { kind: 'set', group: 'control', label: 'Set', description: 'Set workflow variables deterministically.', primaryFields: ['set'] },
74
- { kind: 'branch', group: 'control', label: 'Branch', description: 'Route into then/else child steps.', primaryFields: ['condition'], childCollections: ['then', 'else'] },
75
- { kind: 'loop', group: 'control', label: 'Loop', description: 'For-each or bounded while loop.', primaryFields: ['over', 'as', 'max_iterations', 'fresh_context'], childCollections: ['do'] },
76
- { kind: 'break', group: 'control', label: 'Break', description: 'Exit the nearest (or target) loop.', primaryFields: ['when', 'target'] },
77
- { kind: 'continue', group: 'control', label: 'Continue', description: 'Skip to the next iteration of the nearest (or target) loop.', primaryFields: ['when', 'target'] },
78
- { kind: 'echo', group: 'control', label: 'Echo', description: 'Deterministically print an interpolated message (no LLM).', primaryFields: ['message'] },
79
- { kind: 'pause', group: 'control', label: 'Pause', description: 'Human approval gate.', primaryFields: ['prompt', 'free_text'] },
80
- ],
81
- commonStepFields: [
82
- { name: 'id', type: 'string', ui: 'text', required: true, label: 'id' },
83
- { name: 'title', type: 'string', ui: 'text', label: 'title', description: 'Human-readable progress label (supports ${} interpolation); when set, the status line shows it instead of block-relative step numbers.' },
84
- { name: 'when', type: 'string', ui: 'text', label: 'when', description: 'Optional execution condition.' },
85
- { name: 'onError', type: 'enum', ui: 'select', enum: [...ON_ERROR_VALUES], label: 'onError' },
86
- { name: 'recover_hint', type: 'string', ui: 'text', label: 'recover_hint', description: 'Hint for onError=recover.' },
87
- ],
88
- stepFields: [
89
- { name: 'tool', type: 'string', ui: 'text', appliesTo: ['tool'] },
90
- { name: 'args', type: 'object', ui: 'json', appliesTo: ['tool'] },
91
- { name: 'llm', type: 'string', ui: 'textarea', appliesTo: ['llm'] },
92
- { name: 'skill', type: 'string', ui: 'text', appliesTo: ['skill'] },
93
- { name: 'agent', type: 'string', ui: 'textarea', appliesTo: ['agent'] },
94
- { name: 'input', type: 'string', ui: 'textarea', appliesTo: ['skill'] },
95
- { name: 'capture', type: 'object', ui: 'json' },
96
- { name: 'maxTurns', type: 'number', ui: 'number', appliesTo: ['llm', 'skill', 'agent'] },
97
- { name: 'max_retries', type: 'number', ui: 'number' },
98
- { name: 'artifacts', type: 'string[]', ui: 'string[]' },
99
- { name: 'condition', type: 'string', ui: 'text', appliesTo: ['assert', 'branch'] },
100
- { name: 'onFail', type: 'string', ui: 'textarea', appliesTo: ['assert', 'verify'] },
101
- { name: 'set', type: 'object', ui: 'json', required: true, appliesTo: ['set'] },
102
- { name: 'checks', type: 'string[]', ui: 'string[]', required: true, appliesTo: ['verify'] },
103
- { name: 'over', type: 'string', ui: 'text', appliesTo: ['loop'] },
104
- { name: 'as', type: 'string', ui: 'text', appliesTo: ['loop'] },
105
- { name: 'max_iterations', type: 'number', ui: 'number', appliesTo: ['loop'] },
106
- { name: 'fresh_context', type: 'boolean', ui: 'boolean', appliesTo: ['loop'] },
107
- { name: 'prompt', type: 'string', ui: 'textarea', appliesTo: ['pause'] },
108
- { name: 'free_text', type: 'enum', ui: 'select', enum: ['halt', 'approve'], appliesTo: ['pause'] },
109
- { name: 'target', type: 'string', ui: 'text', appliesTo: ['break', 'continue'], description: 'Target loop id (label semantics; default = nearest loop).' },
110
- { name: 'message', type: 'string', ui: 'textarea', required: true, appliesTo: ['echo'] },
111
- { name: 'goal_supplement', type: 'boolean', ui: 'boolean', appliesTo: ['tool', 'skill', 'agent', 'llm', 'pause'], description: 'Append this step output to the goal anchor as a user supplement.' },
112
- { name: 'done_when', type: 'string', ui: 'text', appliesTo: ['agent'], description: 'Deterministic completion condition (whitelist expression, e.g. fileExists(...)); engine nudges the agent to keep working until it holds.' },
113
- { name: 'output_schema', type: 'object', ui: 'json', appliesTo: llmAgentOnly },
114
- { name: 'context_files', type: 'object[]', ui: 'object[]', appliesTo: llmAgentOnly },
115
- { name: 'allowed_tools', type: 'string[]', ui: 'string[]', appliesTo: llmAgentOnly },
116
- { name: 'history_mode', type: 'enum', ui: 'select', enum: ['shared', 'isolated'], appliesTo: llmAgentSkillOnly, description: 'Use shared workflow history or run this llm/agent/skill step in an isolated history (system prompt + current step only).' },
117
- // 多模态(视觉):仅 llm/agent 生效。images 喂图给模型识图/打分(如 illustrate 配图工作流)。
118
- { name: 'images', type: 'array', ui: 'json', appliesTo: llmAgentOnly, description: 'Multimodal image inputs (paths/URLs, supports ${} interpolation). Array of strings or { source, detail, max_long_side_pixel }.' },
119
- { name: 'image_detail', type: 'enum', ui: 'select', enum: ['low', 'high', 'auto'], appliesTo: llmAgentOnly, description: 'Default vision detail for this step (per-image override allowed inside images[]).' },
120
- { name: 'image_max_long_side_pixel', type: 'number', ui: 'number', appliesTo: llmAgentOnly, description: 'Default max long-side pixels for downscaling images before sending.' },
121
- { name: 'parse_inline_images', type: 'boolean', ui: 'boolean', appliesTo: llmAgentOnly, description: 'Parse @./img.png or image URLs found in the prompt text.' },
122
- ],
123
- workflowFields: [
124
- { name: 'artifacts', type: 'string[]', ui: 'string[]', label: 'workflow artifacts' },
125
- { name: 'self_heal', type: 'object', ui: 'json', label: 'self_heal' },
126
- ],
127
- };