minimal-agent 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +6 -5
  2. package/package.json +60 -4
  3. package/plugins/computer_use/.claude-plugin/plugin.json +1 -1
  4. package/plugins/cron-runner/src/commands.js +4 -4
  5. package/plugins/cron-runner/src/commands.ts +4 -4
  6. package/plugins/workflow-runner/.claude-plugin/plugin.json +2 -2
  7. package/plugins/workflow-runner/commands/workflow.md +57 -90
  8. package/plugins/workflow-runner/commands/workflows.md +4 -4
  9. package/plugins/workflow-runner/plugin.js +24 -13
  10. package/plugins/workflow-runner/plugin.ts +28 -13
  11. package/plugins/workflow-runner/src/discovery.js +160 -0
  12. package/plugins/workflow-runner/src/discovery.ts +194 -0
  13. package/plugins/workflow-runner/src/goalAnchor.js +53 -0
  14. package/plugins/workflow-runner/src/goalAnchor.ts +59 -0
  15. package/plugins/workflow-runner/src/index.js +197 -206
  16. package/plugins/workflow-runner/src/index.ts +248 -249
  17. package/plugins/workflow-runner/src/inputCoercion.js +40 -0
  18. package/plugins/workflow-runner/src/inputCoercion.ts +43 -0
  19. package/plugins/workflow-runner/src/journal.js +224 -0
  20. package/plugins/workflow-runner/src/journal.ts +274 -0
  21. package/plugins/workflow-runner/src/jsonSchema.js +132 -0
  22. package/plugins/workflow-runner/src/jsonSchema.ts +162 -0
  23. package/plugins/workflow-runner/src/moduleResolution.js +64 -0
  24. package/plugins/workflow-runner/src/moduleResolution.ts +71 -0
  25. package/plugins/workflow-runner/src/resourceInputs.js +220 -0
  26. package/plugins/workflow-runner/src/resourceInputs.ts +300 -0
  27. package/plugins/workflow-runner/src/runner.js +400 -489
  28. package/plugins/workflow-runner/src/runner.ts +488 -560
  29. package/plugins/workflow-runner/src/runtime/config.js +46 -0
  30. package/plugins/workflow-runner/src/runtime/config.ts +69 -0
  31. package/plugins/workflow-runner/src/runtime/context.js +1304 -0
  32. package/plugins/workflow-runner/src/runtime/context.ts +1786 -0
  33. package/plugins/workflow-runner/src/runtime/exec.js +34 -0
  34. package/plugins/workflow-runner/src/runtime/exec.ts +53 -0
  35. package/plugins/workflow-runner/src/runtime/flow.js +8 -0
  36. package/plugins/workflow-runner/src/runtime/flow.ts +12 -0
  37. package/plugins/workflow-runner/src/runtime/fs.js +27 -0
  38. package/plugins/workflow-runner/src/runtime/fs.ts +41 -0
  39. package/plugins/workflow-runner/src/runtime/model.js +6 -0
  40. package/plugins/workflow-runner/src/runtime/model.ts +8 -0
  41. package/plugins/workflow-runner/src/runtime/output.js +7 -0
  42. package/plugins/workflow-runner/src/runtime/output.ts +21 -0
  43. package/plugins/workflow-runner/src/runtime/scheduler.js +141 -0
  44. package/plugins/workflow-runner/src/runtime/scheduler.ts +166 -0
  45. package/plugins/workflow-runner/src/runtime/state.js +16 -0
  46. package/plugins/workflow-runner/src/runtime/state.ts +19 -0
  47. package/plugins/workflow-runner/src/runtime/tools.js +3 -0
  48. package/plugins/workflow-runner/src/runtime/tools.ts +6 -0
  49. package/plugins/workflow-runner/src/sandbox.js +141 -0
  50. package/plugins/workflow-runner/src/sandbox.ts +182 -0
  51. package/plugins/workflow-runner/src/scriptGuard.d.mts +38 -0
  52. package/plugins/workflow-runner/src/scriptGuard.mjs +449 -0
  53. package/plugins/workflow-runner/src/taskIdentity.js +151 -307
  54. package/plugins/workflow-runner/src/taskIdentity.ts +207 -355
  55. package/plugins/workflow-runner/src/toolRuntime.js +29 -8
  56. package/plugins/workflow-runner/src/toolRuntime.ts +36 -11
  57. package/plugins/workflow-runner/src/types.js +7 -211
  58. package/plugins/workflow-runner/src/types.ts +154 -623
  59. package/plugins/workflow-runner/src/util.js +47 -0
  60. package/plugins/workflow-runner/src/util.ts +51 -0
  61. package/plugins/workflow-runner/src/workflowContext.js +20 -0
  62. package/plugins/workflow-runner/src/workflowContext.ts +58 -0
  63. package/plugins/workflow-runner/src/workflowDependencies.js +36 -0
  64. package/plugins/workflow-runner/src/workflowDependencies.ts +59 -0
  65. package/plugins/workflow-runner/src/workflowFingerprint.js +118 -0
  66. package/plugins/workflow-runner/src/workflowFingerprint.ts +122 -0
  67. package/plugins/workflow-runner/src/workflowState.js +474 -802
  68. package/plugins/workflow-runner/src/workflowState.ts +575 -970
  69. package/plugins/workflow-runner/test/api.test.ts +223 -0
  70. package/plugins/workflow-runner/test/apiCapabilities.test.ts +614 -0
  71. package/plugins/workflow-runner/test/apiConcurrencyGate.test.ts +104 -0
  72. package/plugins/workflow-runner/test/apiEcho.test.ts +210 -0
  73. package/plugins/workflow-runner/test/apiReadText.test.ts +178 -0
  74. package/plugins/workflow-runner/test/apiResourceLedger.test.ts +184 -0
  75. package/plugins/workflow-runner/test/childWorkflow.test.ts +304 -0
  76. package/plugins/workflow-runner/test/discovery.test.ts +234 -0
  77. package/plugins/workflow-runner/test/goalAnchor.test.ts +106 -0
  78. package/plugins/workflow-runner/test/goalController.test.ts +317 -0
  79. package/plugins/workflow-runner/test/journalLanes.test.ts +198 -0
  80. package/plugins/workflow-runner/test/listResources.test.ts +106 -0
  81. package/plugins/workflow-runner/test/resourceInputs.test.ts +294 -0
  82. package/plugins/workflow-runner/test/sandbox.test.ts +126 -0
  83. package/plugins/workflow-runner/test/scheduler.test.ts +70 -0
  84. package/plugins/workflow-runner/test/scriptGuard.test.ts +276 -0
  85. package/plugins/workflow-runner/test/skillDocSync.test.ts +78 -0
  86. package/plugins/workflow-runner/test/taskIdentity.test.ts +288 -179
  87. package/plugins/workflow-runner/test/workflowFingerprint.test.ts +106 -0
  88. package/plugins/workflow-runner/test/workflowState.test.ts +429 -0
  89. package/skills/pptx/examples/assets/cover-bg.svg +23 -0
  90. package/skills/pptx/examples/assets/icon-spark.svg +5 -0
  91. package/skills/ui-design/SKILL.md +5 -2
  92. package/skills/ui-design/references/layout-composition.md +1 -1
  93. package/skills/workflow-creator/SKILL.md +344 -0
  94. package/skills/workflow-creator/assets/template/workflow.mjs +48 -0
  95. package/skills/workflow-creator/references/api.md +216 -0
  96. package/skills/workflow-creator/references/migration.md +103 -0
  97. package/skills/workflow-creator/references/patterns.md +779 -0
  98. package/skills/workflow-creator/scripts/list-resources.mjs +205 -0
  99. package/skills/workflow-creator/scripts/scaffold.mjs +148 -0
  100. package/skills/workflow-creator/scripts/validate.mjs +275 -0
  101. package/skills/workflow-creator/scripts/workflow-creator.test.mjs +82 -0
  102. package/src/advisor/advisorCoordinator.js +503 -0
  103. package/src/advisor/advisorCoordinator.ts +657 -0
  104. package/src/cli/configMenu.tsx +0 -1
  105. package/src/cli/print.js +27 -6
  106. package/src/cli/print.ts +48 -4
  107. package/src/cli/streamJson.js +5 -6
  108. package/src/cli/streamJson.ts +8 -4
  109. package/src/cli/wizards/advisorWizard.js +4 -2
  110. package/src/cli/wizards/advisorWizard.tsx +8 -2
  111. package/src/cli/wizards/contextAdvisorWizard.js +5 -4
  112. package/src/cli/wizards/contextAdvisorWizard.tsx +7 -6
  113. package/src/collaboration/taskFlow.js +115 -0
  114. package/src/collaboration/taskFlow.ts +169 -0
  115. package/src/config/configDefaults.js +41 -1
  116. package/src/config/configDefaults.ts +43 -1
  117. package/src/config/configDiagnostics.ts +2 -2
  118. package/src/config/configFile.js +40 -9
  119. package/src/config/configFile.ts +60 -11
  120. package/src/config/configService.js +419 -74
  121. package/src/config/configService.ts +703 -145
  122. package/src/config/numericLimits.js +22 -0
  123. package/src/config/numericLimits.ts +24 -0
  124. package/src/config.js +1 -0
  125. package/src/config.ts +3 -2
  126. package/src/context/budgetPlan.js +1 -1
  127. package/src/context/budgetPlan.ts +1 -1
  128. package/src/context/compact.js +7 -2
  129. package/src/context/compact.ts +9 -2
  130. package/src/context/microCompactLite.js +212 -13
  131. package/src/context/microCompactLite.ts +261 -12
  132. package/src/context/sessionRegistry.js +8 -1
  133. package/src/context/sessionRegistry.ts +18 -5
  134. package/src/context/toolResultArchive.js +72 -0
  135. package/src/context/toolResultArchive.ts +95 -0
  136. package/src/goal/errors.js +8 -0
  137. package/src/goal/errors.ts +18 -0
  138. package/src/goal/goalRuntime.js +344 -0
  139. package/src/goal/goalRuntime.ts +466 -0
  140. package/src/goal/goalStore.js +200 -0
  141. package/src/goal/goalStore.ts +219 -0
  142. package/src/goal/index.js +4 -0
  143. package/src/goal/index.ts +4 -0
  144. package/src/goal/statusMapping.js +71 -0
  145. package/src/goal/statusMapping.ts +95 -0
  146. package/src/goal/types.js +7 -0
  147. package/src/goal/types.ts +179 -0
  148. package/src/goal/workflowController.js +306 -0
  149. package/src/goal/workflowController.ts +360 -0
  150. package/src/harness/evidenceLedger.js +2 -0
  151. package/src/harness/evidenceLedger.ts +1 -0
  152. package/src/harness/stallGuard.js +9 -3
  153. package/src/harness/stallGuard.ts +7 -3
  154. package/src/images/imageResolver.js +161 -0
  155. package/src/images/imageResolver.ts +189 -0
  156. package/src/infra/verification.js +34 -5
  157. package/src/infra/verification.ts +39 -4
  158. package/src/llm/client.js +79 -21
  159. package/src/llm/client.ts +182 -35
  160. package/src/llm/gatewayClient.js +201 -0
  161. package/src/llm/gatewayClient.ts +299 -0
  162. package/src/llm/messageProvenance.js +46 -0
  163. package/src/llm/messageProvenance.ts +58 -0
  164. package/src/llm/modelProvider.js +1 -0
  165. package/src/llm/modelProvider.ts +22 -0
  166. package/src/llm/providers/anthropicFormat.js +108 -1
  167. package/src/llm/providers/anthropicFormat.ts +115 -4
  168. package/src/llm/providers/openaiFormat.js +9 -0
  169. package/src/llm/providers/openaiFormat.ts +12 -3
  170. package/src/loop.js +319 -54
  171. package/src/loop.ts +373 -57
  172. package/src/main.js +4 -1
  173. package/src/main.tsx +4 -1
  174. package/src/managedExecution/index.js +2 -0
  175. package/src/managedExecution/index.ts +2 -0
  176. package/src/managedExecution/registry.js +15 -0
  177. package/src/managedExecution/registry.ts +20 -0
  178. package/src/managedExecution/types.js +1 -0
  179. package/src/managedExecution/types.ts +86 -0
  180. package/src/modelRef.js +9 -0
  181. package/src/modelRef.ts +31 -0
  182. package/src/multimodal.js +14 -28
  183. package/src/multimodal.ts +17 -33
  184. package/src/net/lanDiscovery.js +65 -0
  185. package/src/net/lanDiscovery.ts +82 -0
  186. package/src/plugin-sdk.js +28 -3
  187. package/src/plugin-sdk.ts +39 -6
  188. package/src/plugins/pluginApi.ts +16 -1
  189. package/src/plugins/pluginLoader.js +4 -0
  190. package/src/plugins/pluginLoader.ts +6 -0
  191. package/src/plugins/pluginRunner.js +139 -7
  192. package/src/plugins/pluginRunner.ts +173 -9
  193. package/src/plugins/slashFallback.js +113 -0
  194. package/src/plugins/slashFallback.ts +137 -0
  195. package/src/prompts/policyRegistry.js +12 -32
  196. package/src/prompts/policyRegistry.ts +15 -32
  197. package/src/prompts/promptAssembly.js +103 -12
  198. package/src/prompts/promptAssembly.ts +114 -12
  199. package/src/prompts/skillList.js +21 -3
  200. package/src/prompts/skillList.ts +27 -2
  201. package/src/prompts/stableSystemPrompt.js +18 -0
  202. package/src/prompts/stableSystemPrompt.ts +33 -0
  203. package/src/runtime/agentRuntimeContext.js +8 -2
  204. package/src/runtime/agentRuntimeContext.ts +17 -4
  205. package/src/session/runAgentTurn.js +78 -12
  206. package/src/session/runAgentTurn.ts +105 -23
  207. package/src/session/runTurn.js +10 -9
  208. package/src/session/runTurn.ts +17 -8
  209. package/src/session/sessionState.ts +2 -0
  210. package/src/team/auth.js +186 -0
  211. package/src/team/auth.ts +298 -0
  212. package/src/team/cli.js +105 -0
  213. package/src/team/cli.ts +122 -0
  214. package/src/team/onlineToolContract.js +64 -0
  215. package/src/team/onlineToolContract.ts +109 -0
  216. package/src/team/toolPolicy.js +36 -0
  217. package/src/team/toolPolicy.ts +75 -0
  218. package/src/tools/advisor/advisor.js +90 -46
  219. package/src/tools/advisor/advisor.ts +100 -47
  220. package/src/tools/advisor/advisorDecision.js +71 -0
  221. package/src/tools/advisor/advisorDecision.ts +85 -0
  222. package/src/tools/agent/agent.js +18 -5
  223. package/src/tools/agent/agent.ts +21 -7
  224. package/src/tools/agent/agentControl.js +246 -0
  225. package/src/tools/agent/agentControl.ts +284 -0
  226. package/src/tools/agent/agentTaskService.js +40 -1
  227. package/src/tools/agent/agentTaskService.ts +44 -1
  228. package/src/tools/agent/agentTypes.js +14 -2
  229. package/src/tools/agent/agentTypes.ts +15 -2
  230. package/src/tools/applypatch/applyPatch.js +362 -0
  231. package/src/tools/applypatch/applyPatch.ts +428 -0
  232. package/src/tools/bash/bash.js +22 -15
  233. package/src/tools/bash/bash.ts +23 -17
  234. package/src/tools/capabilities.js +10 -5
  235. package/src/tools/capabilities.ts +10 -5
  236. package/src/tools/computeruse/computerIntent.js +32 -0
  237. package/src/tools/computeruse/computerIntent.ts +46 -0
  238. package/src/tools/computeruse/telemetryLog.js +12 -0
  239. package/src/tools/computeruse/telemetryLog.ts +16 -0
  240. package/src/tools/computeruse/vision/telemetry.js +1 -0
  241. package/src/tools/computeruse/vision/telemetry.ts +1 -0
  242. package/src/tools/effectiveToolSet.js +4 -0
  243. package/src/tools/effectiveToolSet.ts +4 -0
  244. package/src/tools/index.js +21 -2
  245. package/src/tools/index.ts +33 -2
  246. package/src/tools/presentresult/presentresult.js +6 -15
  247. package/src/tools/presentresult/presentresult.ts +6 -15
  248. package/src/tools/read/read.js +62 -9
  249. package/src/tools/read/read.ts +63 -9
  250. package/src/tools/shared/fileUtils.js +1 -2
  251. package/src/tools/shared/fileUtils.ts +1 -2
  252. package/src/tools/shared/toolOutputStore.js +23 -1
  253. package/src/tools/shared/toolOutputStore.ts +22 -1
  254. package/src/tools/skill/skill.js +9 -3
  255. package/src/tools/skill/skill.ts +8 -4
  256. package/src/tools/toolPromptGuides.js +117 -0
  257. package/src/tools/toolPromptGuides.ts +137 -0
  258. package/src/tools/webbrowser/agentBrowserPath.js +19 -9
  259. package/src/tools/webbrowser/agentBrowserPath.ts +70 -28
  260. package/src/tools/webbrowser/browser.js +27 -11
  261. package/src/tools/webbrowser/browser.ts +68 -24
  262. package/src/tools/webbrowser/browserAutomation.js +329 -0
  263. package/src/tools/webbrowser/browserAutomation.ts +467 -0
  264. package/src/tools/webbrowser/browserAxState.js +97 -0
  265. package/src/tools/webbrowser/browserAxState.ts +142 -0
  266. package/src/tools/webbrowser/browserBatch.js +1578 -0
  267. package/src/tools/webbrowser/browserBatch.ts +2382 -0
  268. package/src/tools/webbrowser/browserCdp.js +208 -0
  269. package/src/tools/webbrowser/browserCdp.ts +255 -0
  270. package/src/tools/webbrowser/browserConditions.js +24 -0
  271. package/src/tools/webbrowser/browserConditions.ts +45 -0
  272. package/src/tools/webbrowser/browserContent.js +281 -0
  273. package/src/tools/webbrowser/browserContent.ts +438 -0
  274. package/src/tools/webbrowser/browserControl.js +131 -34
  275. package/src/tools/webbrowser/browserControl.ts +210 -56
  276. package/src/tools/webbrowser/browserDaemon.js +22 -14
  277. package/src/tools/webbrowser/browserDaemon.ts +54 -21
  278. package/src/tools/webbrowser/browserFrames.js +47 -0
  279. package/src/tools/webbrowser/browserFrames.ts +54 -0
  280. package/src/tools/webbrowser/browserInteractionResolver.js +17 -0
  281. package/src/tools/webbrowser/browserInteractionResolver.ts +40 -0
  282. package/src/tools/webbrowser/browserLocator.js +140 -0
  283. package/src/tools/webbrowser/browserLocator.ts +194 -0
  284. package/src/tools/webbrowser/browserOutcome.js +10 -17
  285. package/src/tools/webbrowser/browserOutcome.ts +48 -31
  286. package/src/tools/webbrowser/browserRecovery.js +58 -0
  287. package/src/tools/webbrowser/browserRecovery.ts +83 -0
  288. package/src/tools/webbrowser/browserRunRegistry.js +35 -3
  289. package/src/tools/webbrowser/browserRunRegistry.ts +91 -15
  290. package/src/tools/webbrowser/browserService.js +28 -2
  291. package/src/tools/webbrowser/browserService.ts +49 -9
  292. package/src/tools/webbrowser/browserStream.js +132 -33
  293. package/src/tools/webbrowser/browserStream.ts +224 -50
  294. package/src/tools/webbrowser/browserTabs.js +48 -15
  295. package/src/tools/webbrowser/browserTabs.ts +178 -96
  296. package/src/tools/webbrowser/webbrowser.js +679 -144
  297. package/src/tools/webbrowser/webbrowser.ts +975 -236
  298. package/src/tools/webfetch/preapproved.js +0 -2
  299. package/src/tools/webfetch/preapproved.ts +0 -2
  300. package/src/tools/websearch/websearch.js +129 -8
  301. package/src/tools/websearch/websearch.ts +138 -6
  302. package/src/types.ts +440 -38
  303. package/src/ui/App.js +377 -58
  304. package/src/ui/App.tsx +576 -111
  305. package/src/ui/LiveArea.js +14 -8
  306. package/src/ui/LiveArea.tsx +14 -10
  307. package/src/ui/MessageList.js +63 -20
  308. package/src/ui/MessageList.tsx +101 -16
  309. package/src/ui/ModelPicker.js +7 -4
  310. package/src/ui/ModelPicker.tsx +55 -8
  311. package/src/ui/hooks/useChat.js +152 -163
  312. package/src/ui/hooks/useChat.ts +396 -334
  313. package/src/ui/loginCommand.js +56 -0
  314. package/src/ui/loginCommand.ts +63 -0
  315. package/src/ui/toolProgress.js +41 -0
  316. package/src/ui/toolProgress.ts +44 -0
  317. package/src/web/browserBridge.js +20 -2
  318. package/src/web/browserBridge.ts +20 -2
  319. package/src/web/protocol.ts +1897 -194
  320. package/workflows/adaptive-research/workflow.mjs +86 -0
  321. package/workflows/e2e-capabilities/workflow.mjs +102 -0
  322. package/workflows/e2e-llm/workflow.mjs +52 -0
  323. package/workflows/e2e-smoke/workflow.mjs +59 -0
  324. package/workflows/e2e-vision-schema/README.md +48 -0
  325. package/workflows/e2e-vision-schema/workflow.mjs +149 -0
  326. package/workflows/e2e-write-greet/workflow.mjs +37 -0
  327. package/workflows/file-census/README.md +14 -0
  328. package/workflows/file-census/scripts/.gitkeep +2 -0
  329. package/workflows/file-census/workflow.mjs +110 -0
  330. package/workflows/goal/README.md +166 -0
  331. package/workflows/goal/prompts/audit.md +57 -0
  332. package/workflows/goal/prompts/contract.md +56 -0
  333. package/workflows/goal/prompts/iterate.md +37 -0
  334. package/workflows/goal/workflow.mjs +501 -0
  335. package/workflows/illustrate/README.md +90 -0
  336. package/workflows/illustrate/assets/engines.json +20 -0
  337. package/workflows/illustrate/assets/extract-baidu.js +21 -0
  338. package/workflows/illustrate/assets/extract-bing.js +33 -0
  339. package/workflows/illustrate/assets/extract-google.js +31 -0
  340. package/workflows/illustrate/workflow.mjs +301 -0
  341. package/workflows/plan/workflow.mjs +389 -0
  342. package/workflows/question-crops/README.md +35 -0
  343. package/workflows/question-crops/prompts/inventory.md +23 -0
  344. package/workflows/question-crops/scripts/image-ops.mjs +305 -0
  345. package/workflows/question-crops/scripts/image-ops.test.mjs +95 -0
  346. package/workflows/question-crops/workflow.mjs +172 -0
  347. package/workflows/ralph-loop/workflow.mjs +162 -0
  348. package/workflows/research/README.md +74 -0
  349. package/workflows/research/prompts/s0-goal.md +43 -0
  350. package/workflows/research/prompts/s1-early-exit.md +22 -0
  351. package/workflows/research/prompts/s1-map.md +58 -0
  352. package/workflows/research/prompts/s2-options.md +53 -0
  353. package/workflows/research/prompts/s3-deep-dive.md +56 -0
  354. package/workflows/research/prompts/s4-verify.md +74 -0
  355. package/workflows/research/prompts/s5-synthesis.md +81 -0
  356. package/workflows/research/prompts/s5b-fill-gaps.md +32 -0
  357. package/workflows/research/prompts/s6-package.md +32 -0
  358. package/workflows/research/scripts/build-report.mjs +98 -0
  359. package/workflows/research/workflow.mjs +288 -0
  360. package/workflows/wechat-reading-shots/prompts/collect-params.md +16 -0
  361. package/workflows/wechat-reading-shots/prompts/evaluate.md +20 -0
  362. package/workflows/wechat-reading-shots/prompts/open-book.md +28 -0
  363. package/workflows/wechat-reading-shots/prompts/read-page.md +13 -0
  364. package/workflows/wechat-reading-shots/prompts/turn-batch.md +24 -0
  365. package/workflows/wechat-reading-shots/test/control-flow.test.ts +329 -0
  366. package/workflows/wechat-reading-shots/workflow.mjs +266 -0
  367. package/workflows/wrong-question-docx/README.md +55 -0
  368. package/workflows/wrong-question-docx/prompts/figure-qa.md +8 -0
  369. package/workflows/wrong-question-docx/prompts/transcribe.md +25 -0
  370. package/workflows/wrong-question-docx/scripts/workbook.mjs +857 -0
  371. package/workflows/wrong-question-docx/test/control-flow.test.ts +165 -0
  372. package/workflows/wrong-question-docx/test/workbook.test.mjs +303 -0
  373. package/workflows/wrong-question-docx/workflow.mjs +485 -0
  374. package/plugins/workflow-runner/src/agentCommon.js +0 -354
  375. package/plugins/workflow-runner/src/agentCommon.ts +0 -435
  376. package/plugins/workflow-runner/src/controlFlow/branch.js +0 -40
  377. package/plugins/workflow-runner/src/controlFlow/branch.ts +0 -46
  378. package/plugins/workflow-runner/src/controlFlow/loop.js +0 -211
  379. package/plugins/workflow-runner/src/controlFlow/loop.ts +0 -248
  380. package/plugins/workflow-runner/src/controlFlow/pause.js +0 -129
  381. package/plugins/workflow-runner/src/controlFlow/pause.ts +0 -141
  382. package/plugins/workflow-runner/src/controlFlow/signal.js +0 -21
  383. package/plugins/workflow-runner/src/controlFlow/signal.ts +0 -29
  384. package/plugins/workflow-runner/src/controlFlow/types.js +0 -18
  385. package/plugins/workflow-runner/src/controlFlow/types.ts +0 -63
  386. package/plugins/workflow-runner/src/dslManifest.js +0 -72
  387. package/plugins/workflow-runner/src/dslManifest.ts +0 -127
  388. package/plugins/workflow-runner/src/expressions.js +0 -639
  389. package/plugins/workflow-runner/src/expressions.ts +0 -640
  390. package/plugins/workflow-runner/src/loader.js +0 -573
  391. package/plugins/workflow-runner/src/loader.ts +0 -721
  392. package/plugins/workflow-runner/src/multimodal.js +0 -38
  393. package/plugins/workflow-runner/src/multimodal.ts +0 -64
  394. package/plugins/workflow-runner/src/recovery.js +0 -126
  395. package/plugins/workflow-runner/src/recovery.ts +0 -156
  396. package/plugins/workflow-runner/src/stepExecutors/agent.js +0 -173
  397. package/plugins/workflow-runner/src/stepExecutors/agent.ts +0 -234
  398. package/plugins/workflow-runner/src/stepExecutors/assert.js +0 -42
  399. package/plugins/workflow-runner/src/stepExecutors/assert.ts +0 -52
  400. package/plugins/workflow-runner/src/stepExecutors/echo.js +0 -31
  401. package/plugins/workflow-runner/src/stepExecutors/echo.ts +0 -38
  402. package/plugins/workflow-runner/src/stepExecutors/llm.js +0 -99
  403. package/plugins/workflow-runner/src/stepExecutors/llm.ts +0 -133
  404. package/plugins/workflow-runner/src/stepExecutors/set.js +0 -49
  405. package/plugins/workflow-runner/src/stepExecutors/set.ts +0 -56
  406. package/plugins/workflow-runner/src/stepExecutors/skill.js +0 -111
  407. package/plugins/workflow-runner/src/stepExecutors/skill.ts +0 -140
  408. package/plugins/workflow-runner/src/stepExecutors/tool.js +0 -227
  409. package/plugins/workflow-runner/src/stepExecutors/tool.ts +0 -274
  410. package/plugins/workflow-runner/src/stepExecutors/verify.js +0 -61
  411. package/plugins/workflow-runner/src/stepExecutors/verify.ts +0 -72
  412. package/plugins/workflow-runner/src/stepPipeline.js +0 -277
  413. package/plugins/workflow-runner/src/stepPipeline.ts +0 -366
  414. package/plugins/workflow-runner/test/agent.test.ts +0 -587
  415. package/plugins/workflow-runner/test/agentLlmError.test.ts +0 -373
  416. package/plugins/workflow-runner/test/bashBlacklist.sweep.test.ts +0 -65
  417. package/plugins/workflow-runner/test/captureMisbind.test.ts +0 -99
  418. package/plugins/workflow-runner/test/cli.e2e.test.ts +0 -167
  419. package/plugins/workflow-runner/test/context-files.test.ts +0 -320
  420. package/plugins/workflow-runner/test/e2e.test.ts +0 -370
  421. package/plugins/workflow-runner/test/e2eNewLayout.test.ts +0 -314
  422. package/plugins/workflow-runner/test/engineRobustness.test.ts +0 -234
  423. package/plugins/workflow-runner/test/expressions.test.ts +0 -439
  424. package/plugins/workflow-runner/test/foundation.test.ts +0 -126
  425. package/plugins/workflow-runner/test/graceful.test.ts +0 -139
  426. package/plugins/workflow-runner/test/greedyInputs.load.test.ts +0 -47
  427. package/plugins/workflow-runner/test/hostCapability.test.ts +0 -108
  428. package/plugins/workflow-runner/test/illustrate.load.test.ts +0 -183
  429. package/plugins/workflow-runner/test/jsonPayload.test.ts +0 -83
  430. package/plugins/workflow-runner/test/loader.test.ts +0 -617
  431. package/plugins/workflow-runner/test/maxTurnsRetryDelay.test.ts +0 -33
  432. package/plugins/workflow-runner/test/multimodal.test.ts +0 -342
  433. package/plugins/workflow-runner/test/output-schema.test.ts +0 -213
  434. package/plugins/workflow-runner/test/parseWorkflowArgs.test.ts +0 -106
  435. package/plugins/workflow-runner/test/pluginRunner.isolation.test.ts +0 -269
  436. package/plugins/workflow-runner/test/ppt.load.test.ts +0 -1220
  437. package/plugins/workflow-runner/test/ralphLoop.e2e.test.ts +0 -221
  438. package/plugins/workflow-runner/test/recovery.test.ts +0 -265
  439. package/plugins/workflow-runner/test/research.load.test.ts +0 -328
  440. package/plugins/workflow-runner/test/runner.test.ts +0 -911
  441. package/plugins/workflow-runner/test/runnerPreflight.test.ts +0 -436
  442. package/plugins/workflow-runner/test/skillTurnDone.test.ts +0 -71
  443. package/plugins/workflow-runner/test/stateLifecycle.test.ts +0 -198
  444. package/plugins/workflow-runner/test/stepPipeline.test.ts +0 -114
  445. package/plugins/workflow-runner/test/taskArbitration.test.ts +0 -354
  446. package/plugins/workflow-runner/test/taskLifecycle.test.ts +0 -324
  447. package/plugins/workflow-runner/test/toolArtifactOverwrite.test.ts +0 -221
  448. package/plugins/workflow-runner/test/toolCapabilityBoundary.test.ts +0 -29
  449. package/plugins/workflow-runner/test/toolRuntimeIntegration.test.ts +0 -168
  450. package/plugins/workflow-runner/test/webppt.load.test.ts +0 -250
  451. package/plugins/workflow-runner/test/word.load.test.ts +0 -208
  452. package/plugins/workflow-runner/test/workflows.smoke.test.ts +0 -76
  453. package/plugins/workflow-runner/test/yamlGuardConditions.test.ts +0 -207
  454. package/src/advisorState.js +0 -22
  455. package/src/cli/configWizard.js +0 -293
  456. package/src/tools/toolProgressBridge.js +0 -48
  457. package/workflows/adaptive-research.yaml +0 -50
  458. package/workflows/book-review-short.yaml +0 -125
  459. package/workflows/e2e-write-greet.yaml +0 -31
  460. package/workflows/illustrate.yaml +0 -227
  461. package/workflows/plan.yaml +0 -470
  462. package/workflows/ppt.yaml +0 -1670
  463. package/workflows/ralph-loop.yaml +0 -201
  464. package/workflows/research.yaml +0 -873
  465. package/workflows/schema.json +0 -176
  466. package/workflows/webppt.yaml +0 -496
  467. package/workflows/wechat-reading-shots.yaml +0 -315
  468. package/workflows/word.yaml +0 -720
  469. package/workflows/youtube-shorts.yaml +0 -202
  470. /package/workflows/{research.md → research/DESIGN.md} +0 -0
@@ -0,0 +1,31 @@
1
+ JSON.stringify(
2
+ Array.from(
3
+ new Set(
4
+ [].concat(
5
+ Array.from(document.querySelectorAll('a')).map((anchor) => {
6
+ try {
7
+ const url = new URL(anchor.href)
8
+ return (
9
+ url.searchParams.get('imgurl') ||
10
+ url.searchParams.get('mediaurl') ||
11
+ url.searchParams.get('objurl') ||
12
+ ''
13
+ )
14
+ } catch {
15
+ return ''
16
+ }
17
+ }),
18
+ Array.from(document.querySelectorAll('img')).map(
19
+ (image) => image.currentSrc || image.src || image.getAttribute('data-src') || '',
20
+ ),
21
+ ),
22
+ ),
23
+ )
24
+ .filter(
25
+ (url) =>
26
+ /^https?:\/\//.test(url) &&
27
+ !/\.svg($|\?)/i.test(url) &&
28
+ !/gstatic\.com|google\.com\/images\/branding|w3\.org/i.test(url),
29
+ )
30
+ .slice(0, 24),
31
+ )
@@ -0,0 +1,301 @@
1
+ export const meta = {
2
+ apiVersion: 2,
3
+ description:
4
+ '网上抓图配图:Google→Bing→百度有序降级搜索,下载候选图,用 LLM 逐张识图打分(相关度/质量/识别广告),选出最合适的若干张落 illustrations.json,供 PPT/文章工作流消费',
5
+ inputs: [
6
+ {
7
+ name: 'topic',
8
+ required: true,
9
+ greedy: true,
10
+ description: '配图主题/关键词(如「太空探索 科技感 蓝色」)',
11
+ },
12
+ { name: 'count', type: 'number', default: 3, description: '最终选出的张数' },
13
+ {
14
+ name: 'min_candidates',
15
+ type: 'number',
16
+ default: 6,
17
+ description: '候选下限:某家抓到的少于这个数就降级到下一家',
18
+ },
19
+ ],
20
+ artifacts: [],
21
+ }
22
+
23
+ export default async function run(wf) {
24
+ const { values: args } = wf.input
25
+ const { sessionId: session, taskId: task, workflowDir } = wf.runtime
26
+ const { generate: llm } = wf.model
27
+ const { call: tool } = wf.tools
28
+ const { shell: sh } = wf.exec
29
+ const { readText, readJson, exists } = wf.fs
30
+ const echo = wf.output.message
31
+ const declareArtifact = wf.output.artifact
32
+ const log = (message) => wf.output.progress({ phase: 'workflow', status: 'update', message: String(message) })
33
+ const parseJson = (value) => {
34
+ if (value !== null && typeof value === 'object') return value
35
+ const text = String(value ?? '').trim().replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/, '')
36
+ try { return JSON.parse(text) } catch { return null }
37
+ }
38
+
39
+ // ============================================================
40
+ // 自 illustrate.yaml 迁移。两处架构改进(不是为了短,是为了可维护 + 更可靠):
41
+ //
42
+ // ① **三家引擎从 9 个重复 step 变成一个循环**。yaml 里 Google/Bing/百度 各占
43
+ // 3 个 step(navigate / eval / set),改一处逻辑要改三遍。这里引擎是数据
44
+ // (assets/engines.json),抽取器是数据(assets/extract-*.js),
45
+ // 加一家搜索引擎 = 加一个 json 条目 + 一个 js 文件,**主脚本一行不动**。
46
+ // 抽取 JS 随页面改版必然失效,独立成文件后改它不用碰编排逻辑。
47
+ //
48
+ // ② **聚合选优改成确定性排序**。yaml 里这步是 `agent:` —— 让模型去 Glob、
49
+ // Read 十几个 score 文件、心算 relevance×quality 再排序。那是因为 DSL 里
50
+ // 没法对数组排序,不是因为该让模型做。它完全确定性,模型反而可能算错乘积
51
+ // 或漏剔广告图。JS 里 filter+sort 三行,且结果可复现。
52
+ // ============================================================
53
+
54
+ const DIR = `out/illustrate/${session}/${task}`
55
+ const IMG_DIR = `${DIR}/build/illustrations`
56
+ const RESULT = `${DIR}/build/illustrations.json`
57
+ const ASSETS = typeof workflowDir === 'string' && workflowDir ? `${workflowDir}/assets` : 'workflows/illustrate/assets'
58
+
59
+ /** 读 assets 下的文本文件。用 readText:tool('Read') 返回的是给模型看的
60
+ * 格式(每行带「行号+TAB」),拿它当 JS 代码求值会直接语法错。 */
61
+ async function asset(name) {
62
+ const text = await readText(`${ASSETS}/${name}`)
63
+ if (text === null) throw new Error(`读不到抽取器:${ASSETS}/${name}`)
64
+ return text
65
+ }
66
+
67
+ /**
68
+ * WebBrowser eval 的结果要 **parseJson 两层**才拿得到数组。
69
+ *
70
+ * 抽取器里用 `JSON.stringify(...)` 返回字符串,agent-browser 把结果显示出来时
71
+ * 又 JSON 编码了一次 —— 于是我们收到的是「带外层引号的双编码串」。
72
+ * 这条是实测确认的,不是猜的;少套一层会静默拿到字符串而不是数组,
73
+ * 后面 `.length` 变成字符数,降级判断全错。
74
+ */
75
+ function decodeEvalResult(raw) {
76
+ const once = parseJson(raw)
77
+ if (Array.isArray(once)) return once
78
+ const twice = parseJson(once)
79
+ return Array.isArray(twice) ? twice : []
80
+ }
81
+
82
+ await sh(`mkdir -p ${IMG_DIR}`)
83
+
84
+ // ── 阶段 1-3:有序降级抓候选图 URL ──────────────────────────────────
85
+ const engines = await readJson(`${ASSETS}/engines.json`)
86
+ if (!Array.isArray(engines) || engines.length === 0) {
87
+ throw new Error(`${ASSETS}/engines.json 读不到或不是数组`)
88
+ }
89
+
90
+ const minCandidates = Number(args.min_candidates ?? 6)
91
+ let urls = []
92
+ let engineUsed = ''
93
+ /** 每家失败的**真实原因**。三家都空时要报出来,别让用户去猜。 */
94
+ const failures = []
95
+
96
+ for (const engine of engines) {
97
+ if (urls.length >= minCandidates) break
98
+
99
+ log(`${engine.label}:抓候选图…`)
100
+ try {
101
+ await tool('WebBrowser', {
102
+ action: 'navigate',
103
+ url: engine.url.replace('{{query}}', encodeURIComponent(args.topic)),
104
+ })
105
+ const raw = await tool('WebBrowser', {
106
+ action: 'eval',
107
+ js: await asset(engine.extractor),
108
+ })
109
+ const found = decodeEvalResult(raw)
110
+ log(`${engine.label}:抓到 ${found.length} 个候选`)
111
+ // 只在**抓得更多**时才换源,避免用一个更差的结果覆盖已有的
112
+ if (found.length > urls.length) {
113
+ urls = found
114
+ engineUsed = engine.id
115
+ }
116
+ } catch (e) {
117
+ // 某家被墙/反爬/超时都不该阻断 —— 这正是有序降级存在的理由
118
+ log(`${engine.label} 失败(降级到下一家):${e.message}`)
119
+ failures.push(`${engine.label}:${e.message}`)
120
+ }
121
+ }
122
+
123
+ if (urls.length === 0) {
124
+ // ⚠️ **必须带上每家的真实报错**。第一版这里只写「可能全被墙/反爬,或抽取规则
125
+ // 需随页面改版调整」——纯猜测。真实端到端里三家全挂的原因其实是
126
+ // 「WebBrowser eval 需要 Developer Mode 授权」,照着那句猜测去查抽取规则
127
+ // 会白费很多时间。报真实错误,让用户看一眼就知道该干什么。
128
+ const detail = failures.length
129
+ ? `\n\n各家的真实报错:\n${failures.map((f) => ` · ${f}`).join('\n')}`
130
+ : ''
131
+ throw new Error(
132
+ `${engines.map((e) => e.label).join(' / ')} 都没抓到候选图。${detail}\n\n` +
133
+ '常见原因:① WebBrowser 的 eval 需要「设置 → 浏览器」里开启 Developer Mode ' +
134
+ '并把这三个站点加进白名单(本工作流靠 eval 从结果页抽图 URL);' +
135
+ '② 站点被墙或反爬;③ 页面改版导致抽取规则失效 —— 那种情况改 ' +
136
+ `${ASSETS}/extract-*.js 即可,不用动编排逻辑。`,
137
+ )
138
+ }
139
+ echo(`🔍 候选图 ${urls.length} 张,来源:${engineUsed}`)
140
+
141
+ // ── 阶段 4:下载候选图(逐条,死链跳过不阻断)────────────────────────
142
+ const downloaded = []
143
+ for (const [i, url] of urls.entries()) {
144
+ const path = `${IMG_DIR}/cand_${i}.img`
145
+ try {
146
+ await tool('Download', {
147
+ url,
148
+ path,
149
+ timeout: 30000,
150
+ headers: {
151
+ 'User-Agent':
152
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36',
153
+ Referer: 'https://www.google.com/',
154
+ },
155
+ })
156
+ if (await exists(path)) downloaded.push({ index: i, url, path })
157
+ } catch {
158
+ // 死链/防盗链/超时:跳过即可,候选本来就是多抓一些备用
159
+ }
160
+ }
161
+
162
+ if (downloaded.length === 0) {
163
+ throw new Error(`抓到 ${urls.length} 个 URL 但一张都没下载成功(可能全是防盗链或死链)`)
164
+ }
165
+ log(`下载成功 ${downloaded.length}/${urls.length} 张`)
166
+
167
+ // ── 阶段 5:逐图识图打分 ────────────────────────────────────────────
168
+ // 内核的 tool 结果是纯字符串,**看图只能走 images 通道**。
169
+ //
170
+ // 这一段用满三项能力,每一项都对应一个此前真实存在的缺陷:
171
+ //
172
+ // ① **schema** —— 原来是 `parseJson` + `Number(s.relevance ?? 0)` 兜底。
173
+ // 那个兜底在**掩盖失败**:字段缺失时静默给 0 分,那张图直接排到末位被淘汰,
174
+ // 看起来像「这图不行」而不是「打分没解析出来」。schema 的 required + type
175
+ // 让不合规的输出走「逐条违规回喂 → 有界修复」,两轮修不好才抛 —— 抛出来
176
+ // 才看得见。**因此这里不再写任何 `?? 0` 兜底**,写了就是把网又拆了。
177
+ // ⚠️ 代价要知道:修复轮**仍然带图**(要模型看着图改分才有意义),所以模型
178
+ // 系统性不守 schema 时单张成本最坏是 3 倍。批量场景下这笔账值得留意 ——
179
+ // 但它换来的是「失败看得见」,比静默的 0 分便宜。
180
+ //
181
+ // ② **pipeline** —— 原来是串行 for,N 张图排队等。逐图打分之间零依赖,
182
+ // 天然该并发。⚠️ 扇出常常 > 并发上限 8(min_candidates 默认 6,实际下载
183
+ // 十几张很正常),**必须用 pipeline 而不是裸 Promise.all** —— 后者会让
184
+ // 同一条账本车道并发记账,序号取决于谁先返回,断点续跑随之静默失效。
185
+ //
186
+ // ③ **isolated** —— 这条是**质量问题不只是性能问题**。原来共享主线 history,
187
+ // 第 10 张图打分时上下文里堆着前 9 张的评语,模型会被自己先前的判断锚定
188
+ // (「前面几张都给了 7 分」)。逐图打分本就该互不相干。
189
+ //
190
+ // 失败语义与改造前一致(单张失败跳过、不阻断),但 pipeline 的失败会发
191
+ // `warning` 事件而不是低调的 `log` —— 一张图没打上分是该看见的事。
192
+ const SCORE = {
193
+ type: 'object',
194
+ required: ['relevance', 'quality', 'is_ad', 'reason'],
195
+ properties: {
196
+ relevance: { type: 'number', minimum: 0, maximum: 10 },
197
+ quality: { type: 'number', minimum: 0, maximum: 10 },
198
+ is_ad: { type: 'boolean' },
199
+ reason: { type: 'string' },
200
+ },
201
+ }
202
+
203
+ const scoreBatch = await wf.flow.pipeline(downloaded, {
204
+ label: '候选配图打分',
205
+ errorMode: 'collect',
206
+ stages: [
207
+
208
+ // 阶段 5a:识图打分。拿到的是**校验过的对象**,不是待解析的字符串。
209
+ (cand) =>
210
+ llm(
211
+ `下方附上一张候选配图(用于主题:「${args.topic}」)。请**只看这张图**给出客观评估。
212
+ - relevance:0-10,图片内容与主题的契合度(画的东西是否切题)
213
+ - quality:0-10,作为 PPT/文章配图的观感质量(清晰、构图、专业、无明显水印/拼接)
214
+ - is_ad:true/false —— 这是不是广告/促销/带营销文案或店铺水印/比价图等不适合当配图的图
215
+ - reason:一句话理由(中文)
216
+
217
+ 只输出 JSON 对象本身,不要 markdown 代码块、不要解释。`,
218
+ {
219
+ label: `识图打分 #${cand.index}`,
220
+ images: [{ source: cand.path, detail: 'high' }],
221
+ schema: SCORE,
222
+ isolated: true,
223
+ },
224
+ ),
225
+
226
+ // 阶段 5b:与候选元信息合并(纯 JS,不烧 token)
227
+ (s, cand) => ({
228
+ ...cand,
229
+ relevance: s.relevance,
230
+ quality: s.quality,
231
+ is_ad: s.is_ad,
232
+ reason: s.reason,
233
+ }),
234
+ ]})
235
+ const scored = scoreBatch.results
236
+ .filter((entry) => entry.ok)
237
+ .map((entry) => entry.value)
238
+
239
+ if (scored.length === 0) {
240
+ throw new Error(
241
+ `下载了 ${downloaded.length} 张但一张都没打分成功。` +
242
+ '可能原因:① 识图通道不可用(provider 不支持视觉,或图片格式无法解码);' +
243
+ '② 结构化输出两轮修复后仍不合 schema(上面的 warning 里有逐条违规)。',
244
+ )
245
+ }
246
+
247
+ // ── 阶段 6:确定性选优(剔广告 → relevance×quality 降序 → 取前 count)──
248
+ const wanted = Number(args.count ?? 3)
249
+ const ads = scored.filter((s) => s.is_ad)
250
+ const picks = scored
251
+ .filter((s) => !s.is_ad)
252
+ .sort((a, b) => b.relevance * b.quality - a.relevance * a.quality)
253
+ .slice(0, wanted)
254
+
255
+ if (picks.length === 0) {
256
+ throw new Error(
257
+ `${scored.length} 张候选全被判定为广告/促销图,没有可用配图。` +
258
+ '换个更具体的主题词,或提高 min_candidates 多抓一些。',
259
+ )
260
+ }
261
+
262
+ await tool('Write', {
263
+ file_path: RESULT,
264
+ content: `${JSON.stringify(
265
+ {
266
+ topic: args.topic,
267
+ engine_used: engineUsed,
268
+ count: picks.length,
269
+ picks: picks.map((p) => ({
270
+ path: p.path,
271
+ url: p.url,
272
+ engine: engineUsed,
273
+ relevance: p.relevance,
274
+ quality: p.quality,
275
+ reason: p.reason,
276
+ })),
277
+ },
278
+ null,
279
+ 2,
280
+ )}\n`,
281
+ })
282
+ declareArtifact(RESULT)
283
+ for (const p of picks) declareArtifact(p.path)
284
+
285
+ if (!(await exists(RESULT))) {
286
+ throw new Error(`${RESULT} 写入后不存在`)
287
+ }
288
+
289
+ // ── 完成报告(确定性输出,不烧 LLM)────────────────────────────────
290
+ echo(
291
+ `✅ 配图完成(主题:${args.topic},来源:${engineUsed})\n` +
292
+ ` 候选 ${urls.length} → 下载 ${downloaded.length} → 打分 ${scored.length} → ` +
293
+ `剔广告 ${ads.length} → 选中 ${picks.length}`,
294
+ )
295
+ for (const p of picks) {
296
+ echo(` · ${p.path}(相关 ${p.relevance} × 质量 ${p.quality})${p.reason}`)
297
+ }
298
+ echo(` 清单:${RESULT}(下游工作流读它取图)`)
299
+
300
+ return { result: RESULT, engine: engineUsed, picks: picks.length }
301
+ }