minimal-agent 0.12.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 (472) hide show
  1. package/README.md +6 -5
  2. package/package.json +62 -5
  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 +204 -185
  16. package/plugins/workflow-runner/src/index.ts +249 -224
  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 +404 -467
  28. package/plugins/workflow-runner/src/runner.ts +491 -535
  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 +172 -152
  54. package/plugins/workflow-runner/src/taskIdentity.ts +233 -200
  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 -105
  58. package/plugins/workflow-runner/src/types.ts +155 -520
  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 +542 -469
  68. package/plugins/workflow-runner/src/workflowState.ts +639 -589
  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/skill-creator/scripts/run_eval.py +3 -2
  92. package/skills/ui-design/SKILL.md +5 -2
  93. package/skills/ui-design/references/layout-composition.md +1 -1
  94. package/skills/workflow-creator/SKILL.md +344 -0
  95. package/skills/workflow-creator/assets/template/workflow.mjs +48 -0
  96. package/skills/workflow-creator/references/api.md +216 -0
  97. package/skills/workflow-creator/references/migration.md +103 -0
  98. package/skills/workflow-creator/references/patterns.md +779 -0
  99. package/skills/workflow-creator/scripts/list-resources.mjs +205 -0
  100. package/skills/workflow-creator/scripts/scaffold.mjs +148 -0
  101. package/skills/workflow-creator/scripts/validate.mjs +275 -0
  102. package/skills/workflow-creator/scripts/workflow-creator.test.mjs +82 -0
  103. package/src/advisor/advisorCoordinator.js +503 -0
  104. package/src/advisor/advisorCoordinator.ts +657 -0
  105. package/src/cli/configMenu.tsx +0 -1
  106. package/src/cli/print.js +44 -6
  107. package/src/cli/print.ts +73 -4
  108. package/src/cli/streamJson.js +5 -6
  109. package/src/cli/streamJson.ts +8 -4
  110. package/src/cli/wizards/advisorWizard.js +4 -2
  111. package/src/cli/wizards/advisorWizard.tsx +8 -2
  112. package/src/cli/wizards/contextAdvisorWizard.js +5 -4
  113. package/src/cli/wizards/contextAdvisorWizard.tsx +7 -6
  114. package/src/collaboration/taskFlow.js +115 -0
  115. package/src/collaboration/taskFlow.ts +169 -0
  116. package/src/config/configDefaults.js +41 -1
  117. package/src/config/configDefaults.ts +43 -1
  118. package/src/config/configDiagnostics.ts +2 -2
  119. package/src/config/configFile.js +40 -9
  120. package/src/config/configFile.ts +60 -11
  121. package/src/config/configService.js +443 -74
  122. package/src/config/configService.ts +723 -142
  123. package/src/config/numericLimits.js +22 -0
  124. package/src/config/numericLimits.ts +24 -0
  125. package/src/config.js +1 -0
  126. package/src/config.ts +3 -2
  127. package/src/context/budgetPlan.js +1 -1
  128. package/src/context/budgetPlan.ts +1 -1
  129. package/src/context/compact.js +7 -2
  130. package/src/context/compact.ts +9 -2
  131. package/src/context/microCompactLite.js +212 -13
  132. package/src/context/microCompactLite.ts +261 -12
  133. package/src/context/sessionRegistry.js +8 -1
  134. package/src/context/sessionRegistry.ts +18 -5
  135. package/src/context/toolResultArchive.js +72 -0
  136. package/src/context/toolResultArchive.ts +95 -0
  137. package/src/goal/errors.js +8 -0
  138. package/src/goal/errors.ts +18 -0
  139. package/src/goal/goalRuntime.js +344 -0
  140. package/src/goal/goalRuntime.ts +466 -0
  141. package/src/goal/goalStore.js +200 -0
  142. package/src/goal/goalStore.ts +219 -0
  143. package/src/goal/index.js +4 -0
  144. package/src/goal/index.ts +4 -0
  145. package/src/goal/statusMapping.js +71 -0
  146. package/src/goal/statusMapping.ts +95 -0
  147. package/src/goal/types.js +7 -0
  148. package/src/goal/types.ts +179 -0
  149. package/src/goal/workflowController.js +306 -0
  150. package/src/goal/workflowController.ts +360 -0
  151. package/src/harness/evidenceLedger.js +2 -0
  152. package/src/harness/evidenceLedger.ts +1 -0
  153. package/src/harness/stallGuard.js +9 -3
  154. package/src/harness/stallGuard.ts +7 -3
  155. package/src/images/imageResolver.js +161 -0
  156. package/src/images/imageResolver.ts +189 -0
  157. package/src/infra/verification.js +56 -20
  158. package/src/infra/verification.ts +87 -20
  159. package/src/llm/client.js +79 -21
  160. package/src/llm/client.ts +182 -35
  161. package/src/llm/gatewayClient.js +201 -0
  162. package/src/llm/gatewayClient.ts +299 -0
  163. package/src/llm/messageProvenance.js +46 -0
  164. package/src/llm/messageProvenance.ts +58 -0
  165. package/src/llm/modelProvider.js +1 -0
  166. package/src/llm/modelProvider.ts +22 -0
  167. package/src/llm/providers/anthropicFormat.js +108 -1
  168. package/src/llm/providers/anthropicFormat.ts +115 -4
  169. package/src/llm/providers/openaiFormat.js +9 -0
  170. package/src/llm/providers/openaiFormat.ts +12 -3
  171. package/src/loop.js +319 -54
  172. package/src/loop.ts +373 -57
  173. package/src/main.js +4 -1
  174. package/src/main.tsx +4 -1
  175. package/src/managedExecution/index.js +2 -0
  176. package/src/managedExecution/index.ts +2 -0
  177. package/src/managedExecution/registry.js +15 -0
  178. package/src/managedExecution/registry.ts +20 -0
  179. package/src/managedExecution/types.js +1 -0
  180. package/src/managedExecution/types.ts +86 -0
  181. package/src/modelRef.js +9 -0
  182. package/src/modelRef.ts +31 -0
  183. package/src/multimodal.js +14 -28
  184. package/src/multimodal.ts +17 -33
  185. package/src/net/lanDiscovery.js +65 -0
  186. package/src/net/lanDiscovery.ts +82 -0
  187. package/src/plugin-sdk.js +28 -3
  188. package/src/plugin-sdk.ts +39 -6
  189. package/src/plugins/pluginApi.ts +16 -1
  190. package/src/plugins/pluginLoader.js +4 -0
  191. package/src/plugins/pluginLoader.ts +6 -0
  192. package/src/plugins/pluginRunner.js +152 -9
  193. package/src/plugins/pluginRunner.ts +186 -8
  194. package/src/plugins/slashFallback.js +113 -0
  195. package/src/plugins/slashFallback.ts +137 -0
  196. package/src/prompts/policyRegistry.js +15 -8
  197. package/src/prompts/policyRegistry.ts +18 -8
  198. package/src/prompts/promptAssembly.js +103 -12
  199. package/src/prompts/promptAssembly.ts +114 -12
  200. package/src/prompts/skillList.js +21 -3
  201. package/src/prompts/skillList.ts +27 -2
  202. package/src/prompts/stableSystemPrompt.js +18 -0
  203. package/src/prompts/stableSystemPrompt.ts +33 -0
  204. package/src/runtime/agentRuntimeContext.js +8 -2
  205. package/src/runtime/agentRuntimeContext.ts +17 -4
  206. package/src/session/runAgentTurn.js +78 -12
  207. package/src/session/runAgentTurn.ts +105 -23
  208. package/src/session/runTurn.js +10 -9
  209. package/src/session/runTurn.ts +17 -8
  210. package/src/session/sessionState.ts +2 -0
  211. package/src/team/auth.js +186 -0
  212. package/src/team/auth.ts +298 -0
  213. package/src/team/cli.js +105 -0
  214. package/src/team/cli.ts +122 -0
  215. package/src/team/onlineToolContract.js +64 -0
  216. package/src/team/onlineToolContract.ts +109 -0
  217. package/src/team/toolPolicy.js +36 -0
  218. package/src/team/toolPolicy.ts +75 -0
  219. package/src/tools/advisor/advisor.js +148 -37
  220. package/src/tools/advisor/advisor.ts +161 -38
  221. package/src/tools/advisor/advisorDecision.js +71 -0
  222. package/src/tools/advisor/advisorDecision.ts +85 -0
  223. package/src/tools/agent/agent.js +18 -5
  224. package/src/tools/agent/agent.ts +21 -7
  225. package/src/tools/agent/agentControl.js +246 -0
  226. package/src/tools/agent/agentControl.ts +284 -0
  227. package/src/tools/agent/agentTaskService.js +40 -1
  228. package/src/tools/agent/agentTaskService.ts +44 -1
  229. package/src/tools/agent/agentTypes.js +14 -2
  230. package/src/tools/agent/agentTypes.ts +15 -2
  231. package/src/tools/applypatch/applyPatch.js +362 -0
  232. package/src/tools/applypatch/applyPatch.ts +428 -0
  233. package/src/tools/bash/bash.js +70 -18
  234. package/src/tools/bash/bash.ts +75 -20
  235. package/src/tools/capabilities.js +10 -5
  236. package/src/tools/capabilities.ts +10 -5
  237. package/src/tools/computeruse/computerIntent.js +32 -0
  238. package/src/tools/computeruse/computerIntent.ts +46 -0
  239. package/src/tools/computeruse/telemetryLog.js +12 -0
  240. package/src/tools/computeruse/telemetryLog.ts +16 -0
  241. package/src/tools/computeruse/vision/telemetry.js +1 -0
  242. package/src/tools/computeruse/vision/telemetry.ts +1 -0
  243. package/src/tools/effectiveToolSet.js +4 -0
  244. package/src/tools/effectiveToolSet.ts +4 -0
  245. package/src/tools/index.js +21 -2
  246. package/src/tools/index.ts +33 -2
  247. package/src/tools/powershell/powershell.js +18 -1
  248. package/src/tools/powershell/powershell.ts +18 -2
  249. package/src/tools/presentresult/presentresult.js +6 -15
  250. package/src/tools/presentresult/presentresult.ts +6 -15
  251. package/src/tools/read/read.js +69 -11
  252. package/src/tools/read/read.ts +70 -11
  253. package/src/tools/shared/fileUtils.js +1 -2
  254. package/src/tools/shared/fileUtils.ts +1 -2
  255. package/src/tools/shared/permanentDeleteGuard.js +34 -3
  256. package/src/tools/shared/permanentDeleteGuard.ts +43 -6
  257. package/src/tools/shared/toolOutputStore.js +23 -1
  258. package/src/tools/shared/toolOutputStore.ts +22 -1
  259. package/src/tools/skill/skill.js +9 -3
  260. package/src/tools/skill/skill.ts +8 -4
  261. package/src/tools/toolPromptGuides.js +117 -0
  262. package/src/tools/toolPromptGuides.ts +137 -0
  263. package/src/tools/webbrowser/agentBrowserPath.js +19 -9
  264. package/src/tools/webbrowser/agentBrowserPath.ts +70 -28
  265. package/src/tools/webbrowser/browser.js +27 -11
  266. package/src/tools/webbrowser/browser.ts +68 -24
  267. package/src/tools/webbrowser/browserAutomation.js +329 -0
  268. package/src/tools/webbrowser/browserAutomation.ts +467 -0
  269. package/src/tools/webbrowser/browserAxState.js +97 -0
  270. package/src/tools/webbrowser/browserAxState.ts +142 -0
  271. package/src/tools/webbrowser/browserBatch.js +1578 -0
  272. package/src/tools/webbrowser/browserBatch.ts +2382 -0
  273. package/src/tools/webbrowser/browserCdp.js +208 -0
  274. package/src/tools/webbrowser/browserCdp.ts +255 -0
  275. package/src/tools/webbrowser/browserConditions.js +24 -0
  276. package/src/tools/webbrowser/browserConditions.ts +45 -0
  277. package/src/tools/webbrowser/browserContent.js +281 -0
  278. package/src/tools/webbrowser/browserContent.ts +438 -0
  279. package/src/tools/webbrowser/browserControl.js +131 -30
  280. package/src/tools/webbrowser/browserControl.ts +210 -50
  281. package/src/tools/webbrowser/browserDaemon.js +22 -14
  282. package/src/tools/webbrowser/browserDaemon.ts +54 -21
  283. package/src/tools/webbrowser/browserFrames.js +47 -0
  284. package/src/tools/webbrowser/browserFrames.ts +54 -0
  285. package/src/tools/webbrowser/browserInteractionResolver.js +17 -0
  286. package/src/tools/webbrowser/browserInteractionResolver.ts +40 -0
  287. package/src/tools/webbrowser/browserLocator.js +140 -0
  288. package/src/tools/webbrowser/browserLocator.ts +194 -0
  289. package/src/tools/webbrowser/browserOutcome.js +10 -17
  290. package/src/tools/webbrowser/browserOutcome.ts +48 -31
  291. package/src/tools/webbrowser/browserRecovery.js +58 -0
  292. package/src/tools/webbrowser/browserRecovery.ts +83 -0
  293. package/src/tools/webbrowser/browserRunRegistry.js +35 -3
  294. package/src/tools/webbrowser/browserRunRegistry.ts +91 -15
  295. package/src/tools/webbrowser/browserService.js +28 -2
  296. package/src/tools/webbrowser/browserService.ts +49 -9
  297. package/src/tools/webbrowser/browserStream.js +132 -33
  298. package/src/tools/webbrowser/browserStream.ts +224 -50
  299. package/src/tools/webbrowser/browserTabs.js +48 -15
  300. package/src/tools/webbrowser/browserTabs.ts +178 -96
  301. package/src/tools/webbrowser/webbrowser.js +683 -144
  302. package/src/tools/webbrowser/webbrowser.ts +979 -236
  303. package/src/tools/webfetch/preapproved.js +0 -2
  304. package/src/tools/webfetch/preapproved.ts +0 -2
  305. package/src/tools/websearch/websearch.js +129 -8
  306. package/src/tools/websearch/websearch.ts +138 -6
  307. package/src/types.ts +450 -42
  308. package/src/ui/App.js +377 -58
  309. package/src/ui/App.tsx +576 -111
  310. package/src/ui/LiveArea.js +14 -8
  311. package/src/ui/LiveArea.tsx +14 -10
  312. package/src/ui/MessageList.js +63 -20
  313. package/src/ui/MessageList.tsx +101 -16
  314. package/src/ui/ModelPicker.js +7 -4
  315. package/src/ui/ModelPicker.tsx +55 -8
  316. package/src/ui/hooks/useChat.js +152 -163
  317. package/src/ui/hooks/useChat.ts +396 -334
  318. package/src/ui/loginCommand.js +56 -0
  319. package/src/ui/loginCommand.ts +63 -0
  320. package/src/ui/toolProgress.js +41 -0
  321. package/src/ui/toolProgress.ts +44 -0
  322. package/src/web/browserBridge.js +20 -2
  323. package/src/web/browserBridge.ts +20 -2
  324. package/src/web/protocol.ts +1897 -194
  325. package/workflows/adaptive-research/workflow.mjs +86 -0
  326. package/workflows/e2e-capabilities/workflow.mjs +102 -0
  327. package/workflows/e2e-llm/workflow.mjs +52 -0
  328. package/workflows/e2e-smoke/workflow.mjs +59 -0
  329. package/workflows/e2e-vision-schema/README.md +48 -0
  330. package/workflows/e2e-vision-schema/workflow.mjs +149 -0
  331. package/workflows/e2e-write-greet/workflow.mjs +37 -0
  332. package/workflows/file-census/README.md +14 -0
  333. package/workflows/file-census/scripts/.gitkeep +2 -0
  334. package/workflows/file-census/workflow.mjs +110 -0
  335. package/workflows/goal/README.md +166 -0
  336. package/workflows/goal/prompts/audit.md +57 -0
  337. package/workflows/goal/prompts/contract.md +56 -0
  338. package/workflows/goal/prompts/iterate.md +37 -0
  339. package/workflows/goal/workflow.mjs +501 -0
  340. package/workflows/illustrate/README.md +90 -0
  341. package/workflows/illustrate/assets/engines.json +20 -0
  342. package/workflows/illustrate/assets/extract-baidu.js +21 -0
  343. package/workflows/illustrate/assets/extract-bing.js +33 -0
  344. package/workflows/illustrate/assets/extract-google.js +31 -0
  345. package/workflows/illustrate/workflow.mjs +301 -0
  346. package/workflows/plan/workflow.mjs +389 -0
  347. package/workflows/question-crops/README.md +35 -0
  348. package/workflows/question-crops/prompts/inventory.md +23 -0
  349. package/workflows/question-crops/scripts/image-ops.mjs +305 -0
  350. package/workflows/question-crops/scripts/image-ops.test.mjs +95 -0
  351. package/workflows/question-crops/workflow.mjs +172 -0
  352. package/workflows/ralph-loop/workflow.mjs +162 -0
  353. package/workflows/research/DESIGN.md +449 -0
  354. package/workflows/research/README.md +74 -0
  355. package/workflows/research/prompts/s0-goal.md +43 -0
  356. package/workflows/research/prompts/s1-early-exit.md +22 -0
  357. package/workflows/research/prompts/s1-map.md +58 -0
  358. package/workflows/research/prompts/s2-options.md +53 -0
  359. package/workflows/research/prompts/s3-deep-dive.md +56 -0
  360. package/workflows/research/prompts/s4-verify.md +74 -0
  361. package/workflows/research/prompts/s5-synthesis.md +81 -0
  362. package/workflows/research/prompts/s5b-fill-gaps.md +32 -0
  363. package/workflows/research/prompts/s6-package.md +32 -0
  364. package/workflows/research/scripts/build-report.mjs +98 -0
  365. package/workflows/research/workflow.mjs +288 -0
  366. package/workflows/wechat-reading-shots/prompts/collect-params.md +16 -0
  367. package/workflows/wechat-reading-shots/prompts/evaluate.md +20 -0
  368. package/workflows/wechat-reading-shots/prompts/open-book.md +28 -0
  369. package/workflows/wechat-reading-shots/prompts/read-page.md +13 -0
  370. package/workflows/wechat-reading-shots/prompts/turn-batch.md +24 -0
  371. package/workflows/wechat-reading-shots/test/control-flow.test.ts +329 -0
  372. package/workflows/wechat-reading-shots/workflow.mjs +266 -0
  373. package/workflows/wrong-question-docx/README.md +55 -0
  374. package/workflows/wrong-question-docx/prompts/figure-qa.md +8 -0
  375. package/workflows/wrong-question-docx/prompts/transcribe.md +25 -0
  376. package/workflows/wrong-question-docx/scripts/workbook.mjs +857 -0
  377. package/workflows/wrong-question-docx/test/control-flow.test.ts +165 -0
  378. package/workflows/wrong-question-docx/test/workbook.test.mjs +303 -0
  379. package/workflows/wrong-question-docx/workflow.mjs +485 -0
  380. package/plugins/workflow-runner/src/agentCommon.js +0 -354
  381. package/plugins/workflow-runner/src/agentCommon.ts +0 -435
  382. package/plugins/workflow-runner/src/controlFlow/branch.js +0 -40
  383. package/plugins/workflow-runner/src/controlFlow/branch.ts +0 -46
  384. package/plugins/workflow-runner/src/controlFlow/loop.js +0 -211
  385. package/plugins/workflow-runner/src/controlFlow/loop.ts +0 -248
  386. package/plugins/workflow-runner/src/controlFlow/pause.js +0 -129
  387. package/plugins/workflow-runner/src/controlFlow/pause.ts +0 -141
  388. package/plugins/workflow-runner/src/controlFlow/signal.js +0 -21
  389. package/plugins/workflow-runner/src/controlFlow/signal.ts +0 -29
  390. package/plugins/workflow-runner/src/controlFlow/types.js +0 -18
  391. package/plugins/workflow-runner/src/controlFlow/types.ts +0 -63
  392. package/plugins/workflow-runner/src/dslManifest.js +0 -72
  393. package/plugins/workflow-runner/src/dslManifest.ts +0 -127
  394. package/plugins/workflow-runner/src/expressions.js +0 -618
  395. package/plugins/workflow-runner/src/expressions.ts +0 -622
  396. package/plugins/workflow-runner/src/loader.js +0 -573
  397. package/plugins/workflow-runner/src/loader.ts +0 -721
  398. package/plugins/workflow-runner/src/multimodal.js +0 -38
  399. package/plugins/workflow-runner/src/multimodal.ts +0 -64
  400. package/plugins/workflow-runner/src/recovery.js +0 -119
  401. package/plugins/workflow-runner/src/recovery.ts +0 -149
  402. package/plugins/workflow-runner/src/stepExecutors/agent.js +0 -173
  403. package/plugins/workflow-runner/src/stepExecutors/agent.ts +0 -234
  404. package/plugins/workflow-runner/src/stepExecutors/assert.js +0 -41
  405. package/plugins/workflow-runner/src/stepExecutors/assert.ts +0 -50
  406. package/plugins/workflow-runner/src/stepExecutors/echo.js +0 -31
  407. package/plugins/workflow-runner/src/stepExecutors/echo.ts +0 -38
  408. package/plugins/workflow-runner/src/stepExecutors/llm.js +0 -99
  409. package/plugins/workflow-runner/src/stepExecutors/llm.ts +0 -133
  410. package/plugins/workflow-runner/src/stepExecutors/set.js +0 -49
  411. package/plugins/workflow-runner/src/stepExecutors/set.ts +0 -56
  412. package/plugins/workflow-runner/src/stepExecutors/skill.js +0 -111
  413. package/plugins/workflow-runner/src/stepExecutors/skill.ts +0 -140
  414. package/plugins/workflow-runner/src/stepExecutors/tool.js +0 -208
  415. package/plugins/workflow-runner/src/stepExecutors/tool.ts +0 -256
  416. package/plugins/workflow-runner/src/stepExecutors/verify.js +0 -58
  417. package/plugins/workflow-runner/src/stepExecutors/verify.ts +0 -68
  418. package/plugins/workflow-runner/src/stepPipeline.js +0 -277
  419. package/plugins/workflow-runner/src/stepPipeline.ts +0 -366
  420. package/plugins/workflow-runner/test/agent.test.ts +0 -587
  421. package/plugins/workflow-runner/test/agentLlmError.test.ts +0 -373
  422. package/plugins/workflow-runner/test/bashBlacklist.sweep.test.ts +0 -65
  423. package/plugins/workflow-runner/test/captureMisbind.test.ts +0 -99
  424. package/plugins/workflow-runner/test/cli.e2e.test.ts +0 -147
  425. package/plugins/workflow-runner/test/context-files.test.ts +0 -320
  426. package/plugins/workflow-runner/test/e2e.test.ts +0 -370
  427. package/plugins/workflow-runner/test/engineRobustness.test.ts +0 -226
  428. package/plugins/workflow-runner/test/expressions.test.ts +0 -397
  429. package/plugins/workflow-runner/test/foundation.test.ts +0 -126
  430. package/plugins/workflow-runner/test/graceful.test.ts +0 -139
  431. package/plugins/workflow-runner/test/greedyInputs.load.test.ts +0 -47
  432. package/plugins/workflow-runner/test/hostCapability.test.ts +0 -108
  433. package/plugins/workflow-runner/test/illustrate.load.test.ts +0 -183
  434. package/plugins/workflow-runner/test/jsonPayload.test.ts +0 -83
  435. package/plugins/workflow-runner/test/loader.test.ts +0 -617
  436. package/plugins/workflow-runner/test/maxTurnsRetryDelay.test.ts +0 -33
  437. package/plugins/workflow-runner/test/multimodal.test.ts +0 -342
  438. package/plugins/workflow-runner/test/output-schema.test.ts +0 -213
  439. package/plugins/workflow-runner/test/parseWorkflowArgs.test.ts +0 -87
  440. package/plugins/workflow-runner/test/pluginRunner.isolation.test.ts +0 -269
  441. package/plugins/workflow-runner/test/ppt.load.test.ts +0 -1220
  442. package/plugins/workflow-runner/test/ralphLoop.e2e.test.ts +0 -220
  443. package/plugins/workflow-runner/test/recovery.test.ts +0 -265
  444. package/plugins/workflow-runner/test/runner.test.ts +0 -911
  445. package/plugins/workflow-runner/test/runnerPreflight.test.ts +0 -379
  446. package/plugins/workflow-runner/test/skillTurnDone.test.ts +0 -71
  447. package/plugins/workflow-runner/test/stateLifecycle.test.ts +0 -150
  448. package/plugins/workflow-runner/test/stepPipeline.test.ts +0 -114
  449. package/plugins/workflow-runner/test/taskArbitration.test.ts +0 -338
  450. package/plugins/workflow-runner/test/taskLifecycle.test.ts +0 -270
  451. package/plugins/workflow-runner/test/toolArtifactOverwrite.test.ts +0 -221
  452. package/plugins/workflow-runner/test/toolCapabilityBoundary.test.ts +0 -29
  453. package/plugins/workflow-runner/test/toolRuntimeIntegration.test.ts +0 -168
  454. package/plugins/workflow-runner/test/webppt.load.test.ts +0 -250
  455. package/plugins/workflow-runner/test/word.load.test.ts +0 -208
  456. package/plugins/workflow-runner/test/workflows.smoke.test.ts +0 -76
  457. package/plugins/workflow-runner/test/yamlGuardConditions.test.ts +0 -207
  458. package/src/advisorState.js +0 -22
  459. package/src/cli/configWizard.js +0 -293
  460. package/src/tools/toolProgressBridge.js +0 -48
  461. package/workflows/adaptive-research.yaml +0 -50
  462. package/workflows/book-review-short.yaml +0 -125
  463. package/workflows/e2e-write-greet.yaml +0 -31
  464. package/workflows/illustrate.yaml +0 -227
  465. package/workflows/plan.yaml +0 -470
  466. package/workflows/ppt.yaml +0 -1670
  467. package/workflows/ralph-loop.yaml +0 -199
  468. package/workflows/schema.json +0 -176
  469. package/workflows/webppt.yaml +0 -496
  470. package/workflows/wechat-reading-shots.yaml +0 -315
  471. package/workflows/word.yaml +0 -720
  472. package/workflows/youtube-shorts.yaml +0 -202
@@ -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
- };