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
package/README.md CHANGED
@@ -25,7 +25,7 @@
25
25
  - **内置工具系统**:文件与终端、网页检索、媒体生成、结果交付、长期记忆、结构化提问、顾问、Computer Use 和并行 Agent。
26
26
  - **OpenAI 兼容**:Message 形状对齐 Chat Completions,一套代码接 MiniMax / 火山 ARK / DeepSeek / OpenAI / Moonshot…
27
27
  - **Skills 系统**:放一个 `SKILL.md` 就能扩展能力,运行时实时扫描注入 prompt,改文件即生效
28
- - **插件系统**:`plugins/<id>/` drop-in,自带 `/workflow`(YAML 工作流引擎,支持 while 循环 + 验证门 + fresh_context)
28
+ - **插件系统**:`plugins/<id>/` drop-in,自带 `/workflow`(代码编排工作流引擎——工作流是一个目录,入口 `workflow.mjs` 用 JS 原生控制流编排 agent)
29
29
  - **自动上下文压缩**:接近上限时把旧对话压成摘要,保留系统提示 + 摘要 + 最近几条
30
30
  - **多 session + 归档**:同一工作目录多个并行会话,`/new` 归档、`/restore` 恢复
31
31
  - **Markdown 长期记忆**:全局人格与偏好、按工作目录隔离的项目记忆,可通过自然语言新增、更新、召回和删除
@@ -116,7 +116,7 @@ minimal-agent -p --output-format json "做点事" # 一行结构化结
116
116
  | `-v` / `--verbose` | stderr 显示工具调用、压缩等过程 |
117
117
  | `-d <dir>` / `--cwd <dir>` | 指定工作目录(不存在自动创建),隔离文件视图与会话 |
118
118
  | `--output-format <text\|json>` | `text`(默认,纯文本答案)/ `json`(一行结局契约) |
119
- | `--max-turns <n>` | 最大工具循环轮数(防失控,默认 50) |
119
+ | `--max-turns <n>` | 最大工具循环轮数(防失控,默认 200) |
120
120
  | `-V` / `--version` · `-h` / `--help` | 版本 / 帮助 |
121
121
 
122
122
  **`--output-format json` 结局契约**(供宿主程序可靠 spawn):
@@ -160,7 +160,7 @@ minimal-agent -p --output-format json "做点事" # 一行结构化结
160
160
  - **Skills**:每个 `skills/<name>/SKILL.md`(带 frontmatter)。运行时实时扫描注入 prompt,prompt 体按需懒加载。
161
161
  cwd 优先、包内 fallback,用户可在自己项目里覆盖或新增。内置 20+ 个(`/init`、`/config`、文档生成、设计等)。
162
162
  - **插件**(`plugins/<id>/`,drop-in,`src/` 一行不改):
163
- - **`/workflow` · `/workflows`**(workflow-runner)—— YAML 工作流引擎,13 种 step(tool/llm/skill/agent + assert/verify/set/branch/loop/break/continue/echo/pause),支持 while 循环 + fresh_context + 验证门。内置 `ralph-loop` 等工作流定义
163
+ - **`/workflow` · `/workflows`**(workflow-runner)—— 代码编排工作流引擎。一个工作流 = 一个目录(`workflows/<名字>/`),入口 `workflow.mjs` 是真实 ESM 模块(`export default async function run(wf)`),控制流直接用 JS 原生的 `if`/`for`/`while`/带标签 `break`/`try`,引擎提供一个分组能力对象 `wf`(`wf.model` `wf.tools` `wf.exec` `wf.fs` `wf.flow` `wf.check` `wf.state` `wf.output`)并负责断点续跑。内置 `plan` / `research` / `ralph-loop` 等工作流
164
164
  - **可视化编辑器**:`../minimal-workflow/` 子项目(与本仓库平级,Bun + Vite + React Flow)拖拽编排 workflow YAML(不属于 npm 发布物)。
165
165
 
166
166
  ---
@@ -193,12 +193,13 @@ bun run start # 运行(= bun run src/main.tsx)
193
193
  bun run dev # watch 热重载
194
194
  bun test # 跑所有测试
195
195
  bun run typecheck # tsc --noEmit
196
- bun run build # tsc --build → src/*.js + plugins/*.js(npm 发布用)
196
+ bun run build # 隔离验证 npm 编译,结束后自动清理原地产物
197
197
  bun run clean # 删除原地编译产物
198
198
  ```
199
199
 
200
200
  格式/检查用 **Biome**(2 空格缩进、单引号、80 列)。模块解析 NodeNext:源码 import 统一写 `.js` 后缀,
201
- dev 下 Bun 透明回退到 `.ts` 兄弟,发布前 `tsc --build` 原地产出 `.js`。
201
+ dev 下 Bun 透明回退到 `.ts` 兄弟;`prepack` 临时原地产出 `.js`,
202
+ `postpack` 随即清理,避免生成文件遮蔽后续源码修改。
202
203
 
203
204
  ## 架构速览
204
205
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "minimal-agent",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Bun-first 的本地 Agent 内核,支持工具、插件、工作流、上下文压缩、长期记忆与 OpenAI 兼容接口;Tauri 桌面宿主和 Node.js npm 发布可复用同一内核",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Bill Wang <leiwang0359@gmail.com>",
@@ -30,6 +30,14 @@
30
30
  "minimal-agent": "src/main.js"
31
31
  },
32
32
  "exports": {
33
+ "./lan-discovery": {
34
+ "types": "./src/net/lanDiscovery.ts",
35
+ "default": "./src/net/lanDiscovery.ts"
36
+ },
37
+ "./task-flow": {
38
+ "types": "./src/collaboration/taskFlow.ts",
39
+ "default": "./src/collaboration/taskFlow.ts"
40
+ },
33
41
  "./protocol": {
34
42
  "types": "./src/web/protocol.ts",
35
43
  "bun": "./src/web/protocol.ts",
@@ -55,6 +63,21 @@
55
63
  "bun": "./src/config/configDiagnostics.ts",
56
64
  "default": "./src/config/configDiagnostics.js"
57
65
  },
66
+ "./config-defaults": {
67
+ "types": "./src/config/configDefaults.ts",
68
+ "bun": "./src/config/configDefaults.ts",
69
+ "default": "./src/config/configDefaults.js"
70
+ },
71
+ "./model-ref": {
72
+ "types": "./src/modelRef.ts",
73
+ "bun": "./src/modelRef.ts",
74
+ "default": "./src/modelRef.js"
75
+ },
76
+ "./online-tool-contract": {
77
+ "types": "./src/team/onlineToolContract.ts",
78
+ "bun": "./src/team/onlineToolContract.ts",
79
+ "default": "./src/team/onlineToolContract.js"
80
+ },
58
81
  "./memory-service": {
59
82
  "types": "./src/memory/memoryService.ts",
60
83
  "bun": "./src/memory/memoryService.ts",
@@ -75,6 +98,26 @@
75
98
  "bun": "./src/runtime/agentRuntimeContext.ts",
76
99
  "default": "./src/runtime/agentRuntimeContext.js"
77
100
  },
101
+ "./image-resolver": {
102
+ "types": "./src/images/imageResolver.ts",
103
+ "bun": "./src/images/imageResolver.ts",
104
+ "default": "./src/images/imageResolver.js"
105
+ },
106
+ "./computer-intent": {
107
+ "types": "./src/tools/computeruse/computerIntent.ts",
108
+ "bun": "./src/tools/computeruse/computerIntent.ts",
109
+ "default": "./src/tools/computeruse/computerIntent.js"
110
+ },
111
+ "./goal-runtime": {
112
+ "types": "./src/goal/index.ts",
113
+ "bun": "./src/goal/index.ts",
114
+ "default": "./src/goal/index.js"
115
+ },
116
+ "./goal-status": {
117
+ "types": "./src/goal/statusMapping.ts",
118
+ "bun": "./src/goal/statusMapping.ts",
119
+ "default": "./src/goal/statusMapping.js"
120
+ },
78
121
  "./provider-presets": {
79
122
  "types": "./src/cli/wizards/providerPresets.ts",
80
123
  "bun": "./src/cli/wizards/providerPresets.ts",
@@ -99,7 +142,9 @@
99
142
  "src/**/*.d.ts",
100
143
  "plugins/**/*.ts",
101
144
  "plugins/**/*.js",
145
+ "plugins/**/*.mjs",
102
146
  "plugins/**/*.d.ts",
147
+ "plugins/**/*.d.mts",
103
148
  "plugins/**/.claude-plugin/**",
104
149
  "plugins/**/commands/**",
105
150
  "plugins/**/hooks/**",
@@ -118,26 +163,36 @@
118
163
  "scripts": {
119
164
  "start": "bun run clean && bun run src/main.tsx",
120
165
  "dev": "bun run clean && bun --watch src/main.tsx",
121
- "build": "tsc --build",
166
+ "build": "bun scripts/build-npm.ts",
167
+ "build:emit": "tsc --build",
122
168
  "clean": "bun scripts/clean-build.ts",
123
169
  "check:build-artifacts": "bun scripts/check-build-artifacts.ts",
124
- "test": "bun run clean && bun test",
170
+ "test": "bun run clean && bun run test:unit && bun run test:bench",
171
+ "test:unit": "bun test '--path-ignore-patterns=**/browserBench*'",
172
+ "test:bench": "bun test test/browserBench.test.ts",
125
173
  "typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
126
174
  "verify-all": "bun scripts/verify-all.ts",
127
175
  "eval:harness": "bun scripts/eval-harness.ts",
128
176
  "compile:green": "bun scripts/build-green.ts",
129
177
  "compile:green:host": "bun scripts/build-green.ts --host",
130
178
  "doc:gen": "node doc/scripts/gen-pptx.mjs",
131
- "prepublishOnly": "bun run clean && bun run build"
179
+ "prepack": "bun scripts/build-npm.ts --for-pack",
180
+ "postpack": "bun run clean",
181
+ "prepublishOnly": "bun run typecheck"
132
182
  },
133
183
  "dependencies": {
184
+ "@xmldom/xmldom": "^0.9.12",
134
185
  "ccxt": "^4.5.58",
135
186
  "diff": "^8.0.2",
187
+ "docx": "^9.7.1",
136
188
  "fast-glob": "^3.3.2",
189
+ "fflate": "^0.8.3",
190
+ "heic-convert": "^2.1.0",
137
191
  "ink": "^5.0.1",
138
192
  "marked": "^18.0.6",
139
193
  "pdfjs-dist": "^6.2.108",
140
194
  "react": "^18.3.1",
195
+ "sharp": "^0.34.5",
141
196
  "turndown": "^7.2.4",
142
197
  "vscode-jsonrpc": "^8.2.1",
143
198
  "yaml": "^2.9.0",
@@ -145,6 +200,7 @@
145
200
  "zod-to-json-schema": "^3.25.2"
146
201
  },
147
202
  "devDependencies": {
203
+ "@types/heic-convert": "^2.1.1",
148
204
  "@types/node": "^20.14.0",
149
205
  "@types/react": "^18.3.0",
150
206
  "bun-types": "^1.3.13",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "computer-use",
3
3
  "version": "0.1.0",
4
- "description": "桌面操作的应用说明书与诊断命令面。说明书住在 app/,由内核 ComputerUse 工具强制注入;本插件提供 /computeruse 与 /cu 的确定性命令(状态、体检、说明书、采集、遥测、审计、观测)。",
4
+ "description": "桌面操作的应用说明书与诊断命令面。说明书位于 app/,配合宿主按需提供的桌面操作能力;本插件提供 /computeruse 与 /cu 的确定性命令(状态、体检、说明书、采集、遥测、审计、观测)。",
5
5
  "appManuals": "app"
6
6
  }
@@ -273,16 +273,16 @@ function helpText() {
273
273
  return [
274
274
  '用法:',
275
275
  '/cron 120m 整理最近 AI 新闻',
276
- '/cron 1d 整理每日国际新闻 /workflow daily-news.yaml 生成中文新闻稿',
277
- '/cron 1m 检查学生作业 workflow inspect-homework.yaml 摄像头画面在 camera.jpg',
276
+ '/cron 1d 整理每日国际新闻 /workflow research 今天的国际 AI 大事',
277
+ '/cron 1m 检查学生作业 workflow plan 摄像头画面在 camera.jpg',
278
278
  '/cron 每天 6:07 写国际 AI 晨间简报',
279
279
  '/cron 工作日 6:07 写过去 48 小时国际 AI 大事',
280
280
  '/cron 每周一 6:07 整理国际 AI 超级个体创业案例',
281
281
  '/cron create --name "晨间简报" --cron "7 6 * * 2-6,0" --prompt "写国际 AI 简报"',
282
282
  '/cron create --name "提醒" --cron "5 13 * * *" --prompt "执行提醒" --once',
283
283
  '/cron create --name "周报" --cron "7 6 * * 1" --workflow "plan \\"整理周报\\"" --permanent',
284
- '/cron create --name "定时PPT" --cron "0 */2 * * *" --workflow "ppt.yaml 做个X方案" --max-runs 5',
285
- '/cron create --name "独立日报" --cron "7 6 * * *" --workflow "daily-news.yaml" --fresh-session',
284
+ '/cron create --name "定时调研" --cron "0 */2 * * *" --workflow "research 竞品动态" --max-runs 5',
285
+ '/cron create --name "独立日报" --cron "7 6 * * *" --workflow "research 今日要闻" --fresh-session',
286
286
  '/cron list',
287
287
  '/cron pause <id>',
288
288
  '/cron resume <id>',
@@ -299,16 +299,16 @@ function helpText(): string {
299
299
  return [
300
300
  '用法:',
301
301
  '/cron 120m 整理最近 AI 新闻',
302
- '/cron 1d 整理每日国际新闻 /workflow daily-news.yaml 生成中文新闻稿',
303
- '/cron 1m 检查学生作业 workflow inspect-homework.yaml 摄像头画面在 camera.jpg',
302
+ '/cron 1d 整理每日国际新闻 /workflow research 今天的国际 AI 大事',
303
+ '/cron 1m 检查学生作业 workflow plan 摄像头画面在 camera.jpg',
304
304
  '/cron 每天 6:07 写国际 AI 晨间简报',
305
305
  '/cron 工作日 6:07 写过去 48 小时国际 AI 大事',
306
306
  '/cron 每周一 6:07 整理国际 AI 超级个体创业案例',
307
307
  '/cron create --name "晨间简报" --cron "7 6 * * 2-6,0" --prompt "写国际 AI 简报"',
308
308
  '/cron create --name "提醒" --cron "5 13 * * *" --prompt "执行提醒" --once',
309
309
  '/cron create --name "周报" --cron "7 6 * * 1" --workflow "plan \\"整理周报\\"" --permanent',
310
- '/cron create --name "定时PPT" --cron "0 */2 * * *" --workflow "ppt.yaml 做个X方案" --max-runs 5',
311
- '/cron create --name "独立日报" --cron "7 6 * * *" --workflow "daily-news.yaml" --fresh-session',
310
+ '/cron create --name "定时调研" --cron "0 */2 * * *" --workflow "research 竞品动态" --max-runs 5',
311
+ '/cron create --name "独立日报" --cron "7 6 * * *" --workflow "research 今日要闻" --fresh-session',
312
312
  '/cron list',
313
313
  '/cron pause <id>',
314
314
  '/cron resume <id>',
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "workflow-runner",
3
- "version": "0.1.0",
4
- "description": "YAML workflow DAG executor for minimal-agent. Provides /workflow and /workflows commands."
3
+ "version": "1.0.0",
4
+ "description": "Code-orchestration workflow engine for minimal-agent. Each workflow is a directory with a workflow.mjs script. Provides /workflow and /workflows."
5
5
  }
@@ -1,105 +1,72 @@
1
1
  ---
2
- description: 运行 YAML 工作流(DAG 执行器)。位置参数按 inputs 声明顺序映射,或用 --input k=v 显式传参
3
- argument-hint: <name> [val ...] [--input key=value ...]
2
+ description: 运行一个受信任 ESM 工作流。位置参数按 meta.inputs 声明顺序映射,或用 --input k=v 显式传参
3
+ argument-hint: <name> [值 ...] [--input key=value ...]
4
4
  ---
5
5
 
6
6
  # /workflow
7
7
 
8
- 本命令由 workflow-runner 插件接管(plugin.ts.runCommand),不会把 prompt 喂给 LLM。
9
- 直接调用插件内置的 YAML DAG 执行器,按 steps 顺序运行 tool / llm / skill / agent / assert / branch / loop 等节点。
8
+ 由 workflow-runner 插件直接执行 `workflows/<name>/workflow.mjs`,不会把命令本身交给
9
+ LLM。设计原则是“轻引擎、重工作流”:Runner 只提供通用执行、流控、恢复、资源、组合
10
+ 和观测能力;阶段划分、领域判断、重试策略与产物组织全部留在工作流目录。
10
11
 
11
- 用法示例:
12
+ 工作流是受信任的本地 ESM 代码,不是安全沙箱。
12
13
 
13
- /workflow hello-workflow alice 位置参数:直接传 inputs 声明里第一个 input
14
- /workflow hello-workflow alice zh 多个位置参数:按 inputs 顺序填
15
- /workflow hello-workflow.yaml alice .yaml 后缀可省(带也认)
16
- /workflow hello-workflow --input name=alice --input lang=zh 显式 KV
17
- /workflow hello-workflow alice --input lang=zh 混用:位置填 name,--input 填 lang
18
-
19
- 规则:
20
- - 位置参数按 yaml 文件 `inputs:` 数组的**声明顺序**映射(不是字段名顺序)。多 input workflow 推荐 `--input key=value` 显式 KV,不易出错
21
- - `--input k=v` 显式 KV 优先级高于位置参数;位置参数对应的 input 已被 KV 占位时,位置参数被丢弃并 stderr 打 warning
22
- - 多余的位置参数(超过 inputs 声明数量)被丢弃并 stderr 打 warning,不影响 workflow 执行
23
- - 值含空格时用引号:`/workflow xxx "AI 教程 进阶"`
24
-
25
- ## agent 节点:把一步交给会随机应变的子 agent
26
-
27
- 大多数 step 是确定性的(`tool` 调一个原子工具、`llm` 单轮生成)。但有些步骤本质是开放式的——
28
- 「把 ./data 下最新的 csv 整理成 summary.md」这种,怎么做得看现场。这时用 `agent:` 节点:inline 写一句
29
- 任务描述,工作流就地起一个**有界 TAOR 子 agent**(思考 → 用工具 → 观察 → 反思 → 再来),让它随机应变
30
- 把这一步要的结果做出来,产出经验证后 `capture` 给下游。这就是「受工作流指导的 TAOR」——happy path 仍是
31
- 确定性骨架,只在你显式声明的节点上注入完整 agency。
32
-
33
- ```yaml
34
- steps:
35
- - id: summarize
36
- agent: "把 ./data 下最新的 csv 读出来,整理成一份 markdown 摘要写到 summary.md"
37
- capture: { content: summary } # agent 的最终产出存进变量 summary
38
- - id: gate
39
- type: assert
40
- condition: "fileExists('summary.md')"
14
+ ```text
15
+ /workflow my-flow "一句话需求"
16
+ /workflow my-flow --input topic=AI --input pages=12
17
+ /workflows
41
18
  ```
42
19
 
43
- `agent:` 的配套字段(全部复用现有字段,都可选):
44
-
45
- - `allowed_tools: [Read, Write]` —— 收窄它能用的工具;**缺省给全量工具**(要真 agency)。
46
- - `output_schema: {...}` —— 要求结构化产出(provider-native JSON Schema),按字段 `capture`。
47
- - `context_files: [{ path, hint }]` —— 列出可读文件让它按需 Read(不 inline 内容)。
48
- - `maxTurns: <n>` —— 子循环最大轮数,默认 25。
49
- - `capture` / `when` / `onError` —— 与其它动作 step 一致(agent 节点也能 `onError: recover` 被再救一次)。
50
-
51
- `agent` vs `skill`:`agent` 是 **inline、一次性**的有界 TAOR 子循环(委托 runQuery,轻、收敛快、产出受验证闸门把关);
52
- `skill` 是跑一个**外部 SKILL.md 定义、可复用**的完整 agent(runQuery)。需要复用同一套能力用 `skill`,
53
- 临时让某步「自己想办法」用 `agent`。
54
-
55
- **信任边界 / 不伪造**:agent 节点与 `onError: recover` 共用同一套系统提示词纪律——内置安全护栏(最小动作、
56
- 优先可逆、不碰工作目录外、不删无关数据)、收尾前自我验证、**严禁伪造产出**;做不成就诚实放弃(抛错走 `onError`)。
57
- 默认握全量工具,信任边界同 `skill:`——「运行一条 workflow 即信任它」。
20
+ ## 目录与入口
58
21
 
59
- ## 节点失败怎么办:onError(指导 ↔ 自主 旋钮)
60
-
61
- 传统工作流的痛点:某个节点一失败、或撞上预料之外的情况,整条流程就崩、停摆。
62
- 每个**动作 step**(tool / llm / skill / agent / assert)可声明 `onError`,决定失败时的行为,
63
- 让一条工作流在「刚性确定」和「随机应变」之间按节点滑动:
64
-
65
- - `halt`(**默认**):节点失败 → 整条工作流停、报错。最刚性、最可审计。
66
- - `continue`:跳过该节点、继续往下。⚠️ 下游若用 `capture` 依赖它会拿到空值,慎用。
67
- - `recover`(**自适应恢复**):失败时**不立刻停**,而是临时起一个**有界 agent**,带着
68
- 「工作流目标 + 这个节点本来要做什么 + 错在哪 + 当前已知变量 + 下游 capture 契约」去**随机应变**——
69
- 它会先诊断根因,再换路径 / 换命令 / 先读后写 / 补齐前置条件,**并在收尾前自我验证**产出确实满足意图,
70
- 想办法把这一步要的**结果**做出来。
71
- **救回** → 用同一个 `capture` 绑定结果、继续走正常流程;**救不回** → 它会**诚实放弃**(绝不伪造假结果),
72
- 工作流带原因报错停止(错误信息形如「自适应恢复未成功:<原因>」)。这是「确定性工作流 × 会随机应变的 agent」的结合点。
73
-
74
- `recover` 的配套字段(都可选):
75
-
76
- - `recover_hint: "<提示>"` —— 给恢复 agent 的提示(支持 `${var}` 插值),如 `"端口被占就换 3001 重试"`。
77
- - `allowed_tools: [Read, Bash]` —— 收窄恢复 agent 能用的工具;**缺省给全量工具**。
78
- - `maxTurns: <n>` —— 恢复子循环最大轮数,默认 25(够「诊断 + 探查 + 动手 + 验证」一圈)。
79
-
80
- 示例:
22
+ ```text
23
+ workflows/<名字>/
24
+ ├── workflow.mjs
25
+ ├── scripts/*.mjs
26
+ ├── prompts/
27
+ ├── assets/
28
+ └── README.md
29
+ ```
81
30
 
82
- ```yaml
83
- steps:
84
- - id: start_server
85
- tool: Bash
86
- args: { command: "node server.js" }
87
- onError: recover
88
- recover_hint: "端口被占就换一个端口重试"
89
- capture: { content: server_log }
31
+ ```js
32
+ export const meta = {
33
+ apiVersion: 2,
34
+ description: '审计路由的鉴权缺失',
35
+ inputs: [{ name: 'dir', required: true }],
36
+ dependencies: [],
37
+ artifacts: ['out/audit.json'],
38
+ };
39
+
40
+ export default async function run(wf) {
41
+ const files = JSON.parse(await wf.tools.call('Glob', {
42
+ pattern: `${wf.input.values.dir}/**/*.ts`,
43
+ }));
44
+ const batch = await wf.flow.pipeline(files, {
45
+ label: '逐文件审计',
46
+ concurrency: 4,
47
+ errorMode: 'collect',
48
+ stages: [async (_value, file) => wf.model.agent(`审计 ${file} 的鉴权检查`)],
49
+ });
50
+ await wf.fs.writeJson('out/audit.json', batch);
51
+ wf.output.artifact('out/audit.json');
52
+ wf.output.message('审计完成');
53
+ return batch;
54
+ }
90
55
  ```
91
56
 
92
- 注意事项:
57
+ 工作流可原生导入相对模块和 `node:` 内置模块。确定性纯计算直接 `import`;需要独立
58
+ 进程或第三方运行时的脚本使用 `wf.exec.file()`。并行扇出使用
59
+ `wf.flow.pipeline()`,不要用无界 `Promise.all()` 绕过运行时调度。
60
+
61
+ 公开能力按 `wf.input/runtime/model/tools/exec/fs/flow/check/state/output` 分组;完整签名
62
+ 以 `skills/workflow-creator/references/api.md` 为准。
93
63
 
94
- - `onError` **只作用于动作 step**。控制流节点(branch / loop 的条件或结构错误、
95
- 以及 `when` 表达式错误)**始终 halt** —— 那类是「作者写错了」,不是「运行期意外」,不走恢复。
96
- - `continue` vs `recover`:前者「放弃这步、盲目往下」,后者「想办法把这步做成、保住下游」。
97
- 要扛住「预料之外」的情况,用 `recover`。
98
- - **信任边界**:恢复 agent 默认握有全量工具,与 `skill:` 节点一致——「运行一条 workflow 即信任它」。
99
- 不信任来源的 yaml 本就不该跑。
100
- - **不伪造 / 诚实失败**:恢复 agent 的系统提示词内置安全护栏(只做最小必要动作、优先可逆、不碰工作目录外、
101
- 不删无关数据)并**严禁编造假结果**——它要么交付经自我验证的真产出,要么显式放弃让工作流诚实 halt。
102
- 框架侧另有验证闸门:空产出 / 显式放弃一律**不绑 `capture`、不放行下游**,杜绝把脏值喂给后续步骤。
103
- - `recover` 是 opt-in 的:确定性 / 可审计正是工作流的价值,不默认抹掉;由作者按节点决定授予多少「自主权」。
64
+ ## 约束与恢复
104
65
 
105
- 输入 /workflows 查看可用工作流列表。
66
+ - `meta` 必须是纯字面量,且包含 `apiVersion: 2`;入口必须默认导出 `run(wf)`。
67
+ - 模块级不得保存可变的每次运行状态;并发实例的状态全部放在 `run()` 内或 `wf` 中。
68
+ - 模型、工具、进程、询问和子工作流进入 journal;文件系统读写每次观察真实磁盘并
69
+ 采用原子、幂等操作。
70
+ - 运行时产物用 `wf.output.artifact(path)` 动态登记。
71
+ - 子工作流必须静态列在 `meta.dependencies`,通过 `wf.flow.child()` 调用。
72
+ - 工作流 bundle 或 API 版本变化会归档旧断点,不重放旧执行结果。
@@ -1,10 +1,10 @@
1
1
  ---
2
- description: 列出当前 cwd 与插件包内可用的 YAML 工作流
2
+ description: 列出可用工作流(代码形态),并报出写错未能载入的那些
3
3
  ---
4
4
 
5
5
  # /workflows
6
6
 
7
- 由 workflow-runner 插件接管(plugin.ts.runCommand),扫描 cwd/workflows/ 与
8
- packageRoot/workflows/(getResourceSearchPaths 双源,cwd 优先)下的 *.yaml,把名称 + 一行描述列出来。
7
+ 由 workflow-runner 插件接管,直接扫描 `workflows/*/workflow.mjs` 并列出,不喂给 LLM。
9
8
 
10
- 提示:用 `agent:` 节点可把开放式的一步交给有界 TAOR 子 agent 随机应变完成;用 `onError: recover` 可让失败节点交给恢复 agent 自适应救回(而非整条崩停)。二者共用同一套「自我验证 / 不伪造」纪律——详见 `/workflow` 命令说明。
9
+ 写错的工作流会被**如实报出**而不是从列表里消失——「我的工作流不见了」和
10
+ 「我的工作流写错了」排查成本差一个数量级。
@@ -1,34 +1,44 @@
1
1
  /**
2
2
  * ============================================================
3
- * plugins/workflow-runner/plugin.ts
3
+ * plugins/workflow-runner/plugin.ts —— 代码编排引擎的插件入口
4
4
  * ------------------------------------------------------------
5
- * workflow-runner 插件入口。接管 /workflow 与 /workflows 两个命令的执行:
6
- * 不走声明式 markdown→LLM 通道,而是直接调插件内置的 YAML DAG 执行器。
5
+ * 接管 /workflow 与 /workflows:不走声明式 markdown→LLM 通道,直接执行
6
+ * `workflows/<name>/workflow.mjs`。
7
7
  *
8
- * 执行器与全部依赖都住在本插件目录 ./src/,外部 src/ 一行不改。
9
- * 插件只通过 src/plugin-sdk.ts 取框架运行时(runQuery / chat / executeTool 等)。
10
- *
11
- * 契约:default export 一个 PluginApi 对象。框架 pluginLoader 会按 pluginRoot
12
- * 缓存这次 import,所以 cold start 后 dynamic import 只跑一次。
8
+ * 契约:default export 一个 PluginApi。框架按 pluginRoot 缓存这次 import。
13
9
  * ============================================================
14
10
  */
15
11
  import { ALL_TOOLS, buildTransientPromptBundle, createAgentRuntimeContext, derivePromptCacheContext, filterToolsForRuntime, getWorkingDir, } from '../../src/plugin-sdk.js';
12
+ import { discoverWorkflows } from './src/discovery.js';
16
13
  import { runWorkflowFromCommand, runWorkflowsList } from './src/index.js';
17
14
  const api = {
15
+ async resolveSlashFallback(commandName, args, { cwd }) {
16
+ const { workflows } = await discoverWorkflows(cwd);
17
+ const exact = workflows.find((workflow) => workflow.name === commandName);
18
+ const matched = exact ??
19
+ workflows.find((workflow) => workflow.name.toLowerCase() === commandName.toLowerCase());
20
+ if (!matched)
21
+ return null;
22
+ return {
23
+ commandName: 'workflow',
24
+ args: `${matched.name}${args ? ` ${args}` : ''}`,
25
+ message: `▸ /${commandName} → 工作流「${matched.name}」`,
26
+ };
27
+ },
18
28
  async *runCommand(commandName, args, ctx) {
29
+ const cwd = getWorkingDir();
19
30
  if (commandName === 'workflows') {
20
- yield* runWorkflowsList();
31
+ yield* runWorkflowsList(cwd);
21
32
  return;
22
33
  }
23
34
  if (commandName === 'workflow') {
24
- const cwd = getWorkingDir();
25
35
  const workflowRuntime = createAgentRuntimeContext({
26
36
  ...(ctx.runtimeContext ?? {
27
37
  profile: 'main',
28
38
  interactiveAsk: false,
29
39
  }),
30
- // The command runs inside the workflow's async-scoped workspace. A
31
- // parent Desktop/CLI runtime may have been created before that scope.
40
+ // 命令跑在工作流自己的 async 作用域里;父级 Desktop/CLI runtime 可能是
41
+ // 在那个作用域建立之前创建的,cwd 要以这里为准。
32
42
  cwd,
33
43
  surface: 'workflow',
34
44
  owner: ctx.runtimeContext?.owner ?? 'untrusted',
@@ -78,8 +88,9 @@ const api = {
78
88
  sessionId: workflowRuntime.sessionId,
79
89
  memoryAccess: workflowRuntime.memoryAccess,
80
90
  },
81
- // 宿主授权上下文原样带上;引擎按各步 `uses:` 切片后才转给工具,不整份下发。
91
+ // 宿主授权上下文原样带上;由调用点按显式声明切片后才转给工具。
82
92
  host: ctx.host,
93
+ inputResources: ctx.inputResources,
83
94
  transientContext: ctx.transientContext,
84
95
  transientBundle,
85
96
  promptCache: derivePromptCacheContext(ctx.promptCache, `workflow:${args.trim() || 'interactive'}`),
@@ -1,15 +1,11 @@
1
1
  /**
2
2
  * ============================================================
3
- * plugins/workflow-runner/plugin.ts
3
+ * plugins/workflow-runner/plugin.ts —— 代码编排引擎的插件入口
4
4
  * ------------------------------------------------------------
5
- * workflow-runner 插件入口。接管 /workflow 与 /workflows 两个命令的执行:
6
- * 不走声明式 markdown→LLM 通道,而是直接调插件内置的 YAML DAG 执行器。
5
+ * 接管 /workflow 与 /workflows:不走声明式 markdown→LLM 通道,直接执行
6
+ * `workflows/<name>/workflow.mjs`。
7
7
  *
8
- * 执行器与全部依赖都住在本插件目录 ./src/,外部 src/ 一行不改。
9
- * 插件只通过 src/plugin-sdk.ts 取框架运行时(runQuery / chat / executeTool 等)。
10
- *
11
- * 契约:default export 一个 PluginApi 对象。框架 pluginLoader 会按 pluginRoot
12
- * 缓存这次 import,所以 cold start 后 dynamic import 只跑一次。
8
+ * 契约:default export 一个 PluginApi。框架按 pluginRoot 缓存这次 import。
13
9
  * ============================================================
14
10
  */
15
11
 
@@ -22,24 +18,41 @@ import {
22
18
  filterToolsForRuntime,
23
19
  getWorkingDir,
24
20
  } from '../../src/plugin-sdk.js';
21
+ import { discoverWorkflows } from './src/discovery.js';
25
22
  import { runWorkflowFromCommand, runWorkflowsList } from './src/index.js';
26
23
 
27
24
  const api: PluginApi = {
25
+ async resolveSlashFallback(commandName, args, { cwd }) {
26
+ const { workflows } = await discoverWorkflows(cwd);
27
+ const exact = workflows.find((workflow) => workflow.name === commandName);
28
+ const matched =
29
+ exact ??
30
+ workflows.find(
31
+ (workflow) => workflow.name.toLowerCase() === commandName.toLowerCase(),
32
+ );
33
+ if (!matched) return null;
34
+ return {
35
+ commandName: 'workflow',
36
+ args: `${matched.name}${args ? ` ${args}` : ''}`,
37
+ message: `▸ /${commandName} → 工作流「${matched.name}」`,
38
+ };
39
+ },
28
40
  async *runCommand(commandName, args, ctx) {
41
+ const cwd = getWorkingDir();
42
+
29
43
  if (commandName === 'workflows') {
30
- yield* runWorkflowsList();
44
+ yield* runWorkflowsList(cwd);
31
45
  return;
32
46
  }
33
47
 
34
48
  if (commandName === 'workflow') {
35
- const cwd = getWorkingDir();
36
49
  const workflowRuntime = createAgentRuntimeContext({
37
50
  ...(ctx.runtimeContext ?? {
38
51
  profile: 'main' as const,
39
52
  interactiveAsk: false,
40
53
  }),
41
- // The command runs inside the workflow's async-scoped workspace. A
42
- // parent Desktop/CLI runtime may have been created before that scope.
54
+ // 命令跑在工作流自己的 async 作用域里;父级 Desktop/CLI runtime 可能是
55
+ // 在那个作用域建立之前创建的,cwd 要以这里为准。
43
56
  cwd,
44
57
  surface: 'workflow',
45
58
  owner: ctx.runtimeContext?.owner ?? 'untrusted',
@@ -72,6 +85,7 @@ const api: PluginApi = {
72
85
  currentUserInput: args,
73
86
  },
74
87
  }).catch(() => undefined));
88
+
75
89
  yield* runWorkflowFromCommand(args, {
76
90
  provider: ctx.provider,
77
91
  history: ctx.history,
@@ -91,8 +105,9 @@ const api: PluginApi = {
91
105
  sessionId: workflowRuntime.sessionId,
92
106
  memoryAccess: workflowRuntime.memoryAccess,
93
107
  },
94
- // 宿主授权上下文原样带上;引擎按各步 `uses:` 切片后才转给工具,不整份下发。
108
+ // 宿主授权上下文原样带上;由调用点按显式声明切片后才转给工具。
95
109
  host: ctx.host,
110
+ inputResources: ctx.inputResources,
96
111
  transientContext: ctx.transientContext,
97
112
  transientBundle,
98
113
  promptCache: derivePromptCacheContext(