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,162 @@
1
+ export const meta = {
2
+ apiVersion: 2,
3
+ description:
4
+ 'Ralph Wiggum 迭代开发循环:重复执行同一目标直到完成。状态机 PLAN→BUILD→VERIFY/HEAL→DONE + 哨兵协议 + 验证门',
5
+ inputs: [
6
+ {
7
+ name: 'goal',
8
+ required: true,
9
+ greedy: true,
10
+ description: '不可变目标描述(可一句话自然语言,不会被空格拆碎)',
11
+ },
12
+ {
13
+ name: 'max_iterations',
14
+ type: 'number',
15
+ default: 50,
16
+ description: '最大迭代次数(安全阀)',
17
+ },
18
+ {
19
+ name: 'verify_checks',
20
+ default: '',
21
+ description:
22
+ "验证门检查项,逗号分隔(如 'shell:bun test,file_exists:src/index.ts')。空则跳过验证门",
23
+ },
24
+ ],
25
+ artifacts: [],
26
+ }
27
+
28
+ export default async function run(wf) {
29
+ const { values: args } = wf.input
30
+ const { agent } = wf.model
31
+ const { call: tool } = wf.tools
32
+ const { verify } = wf.check
33
+ const { budget, resetModelContext: resetContext } = wf.state
34
+ const echo = wf.output.message
35
+ const log = (message) => wf.output.progress({ phase: 'workflow', status: 'update', message: String(message) })
36
+
37
+ // 自 ralph-loop.yaml 迁移(201 行 → 约 90 行)。
38
+ // 原 yaml 里这些 DSL 机制在代码形态下的对应物:
39
+ // type:set × 6 → JS 变量赋值
40
+ // type:loop + max_iter → for 循环
41
+ // fresh_context: true → resetContext()
42
+ // type:branch × 4 → if / else if
43
+ // type:break × 2 → 原生 break
44
+ // extract(…, 正则) → String.matchAll
45
+ // ${a ? b : c} 插值 → 模板串里的三元
46
+ // 引擎因此不需要 set / loop / branch / break / extract / 插值引擎这六样东西。
47
+
48
+ const MAX = Math.min(Number(args.max_iterations ?? 50), 200)
49
+
50
+ /** 哨兵:完整标签精确匹配。裸词 'need_replan' 会被 agent 复述协议说明时误触。 */
51
+ const has = (text, tag) => text.toLowerCase().includes(`<promise>${tag}</promise>`)
52
+
53
+ let phase = 'PLAN'
54
+ /** 教训存在**变量**里而不是文件里:曾用「Write + 每轮 Read 回读」,Read 输出带
55
+ * 行号/空文件标记,逐轮把格式垃圾累积进档案。文件只作事后排查的存档副本。 */
56
+ const learnings = []
57
+
58
+ let iter = 0
59
+ for (iter = 1; iter <= MAX; iter++) {
60
+ // 预算闸:只在**开新一轮之前**判。一轮一旦开始,中途超额也一路跑完到节点 ——
61
+ // 宁可超一点预算,也不能把 agent 停在半成品状态(引擎内核同样一行预算检查都没有)。
62
+ const money = await budget()
63
+ if (money.exhausted) {
64
+ echo(`\n💰 token 预算已用尽(已花 ${money.used} / 上限 ${money.limit}),停在第 ${iter - 1} 轮结束处。`)
65
+ echo('现场已保留;加大预算后用同一任务重跑即可从这里继续。')
66
+ break
67
+ }
68
+
69
+ // 每轮从干净的入口快照起步:长循环里带着前几十轮对话跑,模型会被旧上下文带偏
70
+ resetContext()
71
+ log(`第 ${iter}/${MAX} 轮 · ${phase}`)
72
+
73
+ const guidance = {
74
+ PLAN: '分析任务、拆解步骤、识别风险与未知项;先想清楚再动手。',
75
+ BUILD: '按计划实现,一次只聚焦一个子任务,落到具体文件改动。',
76
+ VERIFY: '运行测试/检查输出/核对验收标准,用证据确认,别凭感觉。',
77
+ HEAL: '已多次验证失败:停止猜测,定位根因再修,避免回归。',
78
+ }[phase] ?? '目标已达成。'
79
+
80
+ const output = await agent(
81
+ `# 不可变目标 (IMMUTABLE GOAL)
82
+ ${args.goal}
83
+ ⚠️ 你不能修改或扩大上述目标。
84
+
85
+ # 当前阶段: ${phase}
86
+ ${guidance}
87
+
88
+ # 与循环驱动的通信协议(务必逐字遵守标签格式)
89
+ - 任务**真正完成**时输出 \`<promise>DONE</promise>\`(驱动会运行验证门)
90
+ - 当前方案走不通、要换打法时输出 \`<promise>NEED_REPLAN</promise>\`(回 PLAN)
91
+ - **目标本身**有问题时输出 \`<promise>NEED_GOAL_REVISION</promise>\`(干净终止)
92
+ - 踩到的坑用 \`<learning>一句话</learning>\` 标记(驱动自动存档供后续参考)
93
+ ⚠️ 切勿为逃出循环而谎报完成 —— 只有陈述完全为真时才输出完成哨兵。
94
+ ${learnings.length ? `\n# 关键教训(必须遵守,避免重复踩坑)\n- ${learnings.join('\n- ')}` : ''}
95
+
96
+ ---
97
+ 本轮任务 (迭代 ${iter})`,
98
+ { label: `${phase} 第 ${iter} 轮`, maxTurns: 15 },
99
+ )
100
+
101
+ // 确定性提取教训:曾用 llm 步提取,模型会改写/漏抄/编造,档案被污染
102
+ for (const m of String(output).matchAll(/<learning>(.*?)<\/learning>/gs)) {
103
+ const t = m[1].trim()
104
+ if (t && !learnings.includes(t)) learnings.push(t)
105
+ }
106
+
107
+ if (has(output, 'done')) {
108
+ // 验证门:模型说完成了不算数
109
+ if (args.verify_checks) {
110
+ const checks = String(args.verify_checks)
111
+ .split(',')
112
+ .map((c) => c.trim())
113
+ .filter(Boolean)
114
+ const gate = await verify(checks)
115
+ if (!gate.passed) {
116
+ log(`验证未通过,回到 BUILD 继续:${gate.summary}`)
117
+ phase = 'BUILD'
118
+ continue
119
+ }
120
+ }
121
+ phase = 'DONE'
122
+ break
123
+ }
124
+
125
+ if (has(output, 'need_goal_revision')) {
126
+ phase = 'GOAL_REVISION'
127
+ break
128
+ }
129
+
130
+ if (has(output, 'need_replan')) {
131
+ phase = 'PLAN'
132
+ } else if (phase === 'PLAN' && !String(output).includes('<promise>')) {
133
+ // 自动推进:只在本轮没有任何流程哨兵时。learning 标签不算流程哨兵。
134
+ phase = 'BUILD'
135
+ }
136
+ }
137
+
138
+ // 教训存档(事后排查用;失败不影响结论)
139
+ if (learnings.length) {
140
+ const archive = `.minimal-agent-workflow/ralph-loop/learnings.md`
141
+ try {
142
+ await tool('Write', {
143
+ file_path: archive,
144
+ content: `# ralph-loop 教训档案\n\n- ${learnings.join('\n- ')}\n`,
145
+ })
146
+ } catch (e) {
147
+ log(`教训存档写入失败(不影响结论):${e.message}`)
148
+ }
149
+ }
150
+
151
+ const verdict =
152
+ phase === 'DONE'
153
+ ? `✅ 目标达成(${iter} 轮)`
154
+ : phase === 'GOAL_REVISION'
155
+ ? `⚠ 目标本身需要修订,已干净终止(${iter} 轮)`
156
+ : `⏹ 达到迭代上限 ${MAX} 轮仍未完成`
157
+
158
+ echo(verdict)
159
+ if (learnings.length) echo(`本轮累积教训 ${learnings.length} 条`)
160
+
161
+ return { phase, iterations: iter, learnings }
162
+ }
@@ -0,0 +1,74 @@
1
+ # research —— 六阶段技术深度调研
2
+
3
+ ## 意图
4
+
5
+ 把「调研一个技术主题」这件事从「问一次 LLM 拿一段话」升级成**有过程、有证据、有边界**的调研:
6
+ 每个阶段的产出都落盘,关键论断要动手验证,结论要标证据等级,搞不清楚的必须诚实说出来。
7
+
8
+ ## 输入
9
+
10
+ | 输入 | 必填 | 说明 |
11
+ |---|:---:|---|
12
+ | `topic` | ✅ | 要调研的技术主题/问题(贪婪首参,一句自然语言即可,不会被空格拆碎) |
13
+ | `depth` | | `light`(快速扫盲)/ `standard`(默认,可用结论)/ `deep`(学术级) |
14
+ | `max_iterations` | | 自检补洞的最大轮数,默认 2 |
15
+
16
+ ```bash
17
+ /workflow research 时序数据库选型该怎么做 --input depth=deep
18
+ ```
19
+
20
+ ## 流程
21
+
22
+ ```
23
+ 阶段0 定义问题(零搜索,防锚定偏差)
24
+ └─ 用户确认闸门(可补充要求,并入贯穿目标)
25
+ 阶段1 测绘领域地图 ─→【提前退出判定】─→ 是:简化报告,直奔阶段6
26
+ └─ 否
27
+ 阶段2 候选方案对比(产出 branches.json 驱动下一阶段)
28
+ 阶段3 逐分支深挖(每分支一个文件,每轮 resetContext 互不干扰)
29
+ 阶段4 动手验证(只验证「假的话结论会变」的关键论断)
30
+ 阶段5 综合升华(结论标证据等级)
31
+ └─ 阶段5b 自检补洞循环(缺口清空即退出)
32
+ 阶段6 确定性拼装报告 + 精选验证脚本交付
33
+ ```
34
+
35
+ ## 产物
36
+
37
+ 全部落在 `out/research/<session>/<task>/` 下:
38
+
39
+ | 文件 | 内容 |
40
+ |---|---|
41
+ | `deliverable/report.md` | ★ **汇总报告,先读这个** |
42
+ | `deliverable/scripts/` | 精选验证脚本 + README 清单 |
43
+ | `01-goal.md` … `07-learning-debt.md` | 各阶段过程产物 |
44
+ | `branches.json` / `gaps.json` / `early-exit.json` | 驱动控制流的机器可读文件 |
45
+ | `verify/` | 全部验证脚本(含失败尝试,过程保留不交付) |
46
+
47
+ ## 目录结构
48
+
49
+ ```
50
+ workflows/research/
51
+ ├── workflow.mjs 主入口 —— 读起来是流程的目录
52
+ ├── prompts/*.md 九段长 prompt(改措辞不用动代码)
53
+ └── scripts/build-report.mjs 报告拼装(可单独跑,见下)
54
+ ```
55
+
56
+ 调报告格式时不用跑整条工作流:
57
+
58
+ ```bash
59
+ node <workflowDir>/scripts/build-report.mjs out/research/<session>/<task> standard
60
+ ```
61
+
62
+ ## 已知坑
63
+
64
+ - **阶段0 禁止搜索**是有意的。一旦搜索,agent 会用「搜到的东西」定义问题,
65
+ 而不是用户真正想解决的问题 —— 引入锚定偏差。摸底是阶段1的职责。
66
+ - **验证脚本只能是 `.ts` / `.js`**。本系统基于 bun/node,**不保证有 Python 环境**;
67
+ 写了 `pip install` 的脚本必然跑不起来,白白烧掉时间预算。
68
+ - **`06-synthesis.md` 的「一、核心结论」「二、推荐方案」标题字面不能改** ——
69
+ 阶段5c 有确定性 grep 校验。补洞轮曾改写标题导致误判 halt,所以 prompt 里
70
+ 和这里都写死了这条。
71
+ - **「不可补」的缺口必须清出 `gaps.json`**。信息根本不可得的东西留在里面,
72
+ 只会让补洞循环空转到上限,还让用户以为「还有洞没补」。
73
+ - 报告拼装会把子文档标题降两级。**代码块里顶格的 `# 注释` 也会被降级** ——
74
+ 纯视觉影响,不改语义,已知取舍。
@@ -0,0 +1,43 @@
1
+ 你是一名资深技术研究员,现在启动六阶段技术调研流程的【阶段0:定义问题】。
2
+
3
+ ## 调研主题
4
+ {{topic}}
5
+
6
+ ## 调研深度
7
+ {{depth}}(light=快速扫盲 / standard=可用结论 / deep=学术级深度)
8
+
9
+ ## 你的任务
10
+
11
+ **本阶段禁止任何搜索**(WebSearch/WebFetch 都不允许)—— 目标澄清靠分析用户请求本身,
12
+ 不是靠了解主题。一旦搜索,你会用「搜到的东西」定义问题,而不是用「用户真正想解决的问题」,
13
+ 引入锚定偏差。摸底是阶段1的职责。
14
+
15
+ 基于用户的主题描述和你的常识,输出结构化的问题定义文档:
16
+
17
+ 1. 把「主题词」转化为「问题句」:一句话描述要回答的具体问题
18
+ (不是"研究一下 A",而是"针对什么场景,A 类方案该怎么选/值不值得投入,为什么")。
19
+ 2. 只澄清决定「哪个方案适配」的隐藏变量:目标、交付物形态、场景约束、已知信息。
20
+ **严禁预设或询问具体技术方案** —— 方案选择是本次研究的产出,不是输入。
21
+ 3. **必须用 Write 工具把结果写入 `{{dir}}/01-goal.md`**,含以下章节(`##` 二级标题):
22
+
23
+ ## 一、核心问题
24
+ 一句话描述这次调研要回答的核心问题。
25
+
26
+ ## 二、背景与动机
27
+ 为什么这个问题值得研究?典型应用场景是什么?
28
+
29
+ ## 三、范围与边界
30
+ - **包含**:本次调研要覆盖的子话题/子问题(3-7 个)
31
+ - **不包含**:明确排除的内容(防止范围蔓延)
32
+ - **目标读者**:谁会看这份调研报告
33
+
34
+ ## 四、验收标准
35
+ 满足哪些条件才算「调研清楚了」?(3-5 条可判定的标准)
36
+
37
+ ## 五、待澄清问题
38
+ 对用户需求不清楚的地方(技术选型偏好、规模要求、时间约束等)列在这里;没有就写「无」。
39
+
40
+ ## 约束
41
+ - **本阶段零搜索、零方案预设**,只做目标澄清。
42
+ - 必须写文件 `{{dir}}/01-goal.md`,不要只在对话里输出。
43
+ - 中文,Markdown 格式。
@@ -0,0 +1,22 @@
1
+ 地图阶段已判定「提前退出」(`{{dir}}/early-exit.json` 里记录了原因)。
2
+
3
+ 你的任务:跳过深挖/验证/综合阶段,直接产出简化版全套文件,保证最终报告可拼装。
4
+
5
+ 请先 Read `{{dir}}/01-goal.md` 和 `{{dir}}/02-map.md`。
6
+
7
+ ## 必须用 Write 写入以下全部文件
8
+
9
+ 1. `{{dir}}/03-options.md` —— 写明「已提前退出,未做方案对比」+ 退出原因 +
10
+ 地图层面看到的候选方向简述(若有)。
11
+ 2. `{{dir}}/branches.json` —— 内容 `[]`(空数组)。
12
+ 3. `{{dir}}/05-verification.md` —— 写明「已提前退出,未做动手验证」+ 原因。
13
+ 4. `{{dir}}/06-synthesis.md` —— 基于 01-goal 的问题定义和 02-map 的地图直接给结论,
14
+ **必须包含「一、核心结论」和「二、推荐方案」两个章节**(标题字面一个字都不能改,
15
+ 下游有确定性校验按关键词 grep 它们);给不出的诚实标注「信息不足,需全流程调研」。
16
+ 5. `{{dir}}/07-learning-debt.md` —— 记录因提前退出未覆盖的问题清单
17
+ (每条:问题 + 为什么值得后续研究 + 建议入口)。
18
+ 6. `{{dir}}/gaps.json` —— 内容 `[]`(简化路径不进补洞循环)。
19
+
20
+ ## 约束
21
+ - 全部文件中文(JSON 除外),JSON 严格合法。
22
+ - **诚实第一**:简化报告的价值在于明确说出「哪些没做、为什么」,而不是硬凑结论。
@@ -0,0 +1,58 @@
1
+ 你正在执行六阶段技术调研的【阶段1:测绘领域地图】。
2
+
3
+ 调研主题:{{topic}}
4
+ 调研深度:{{depth}}
5
+
6
+ 请先 Read `{{dir}}/01-goal.md` 了解已定义的问题、范围和验收标准。
7
+
8
+ ## 你的任务
9
+ 快速扫描领域全貌,画出「知识地图」:
10
+
11
+ 1. **WebSearch 搜索 5-8 次**,不同关键词组合(中英文都试):
12
+ overview / survey / tutorial、awesome-list 或 github topics、comparison / alternatives、
13
+ wikipedia / 官方文档 / 权威博客。
14
+ 2. **WebFetch 精读 3-5 个核心入口页面**(官网/综述/awesome-list 优先),提取领域结构。
15
+ 3. 不要陷进任何一个具体技术细节 —— 目标是建立「全景图」。
16
+
17
+ ## 输出要求
18
+ **必须用 Write 写入 `{{dir}}/02-map.md`**,含:
19
+
20
+ ## 一、领域一句话定义
21
+ ## 二、发展历程(时间线)
22
+ 关键里程碑:起源年份、主要版本/突破、当前状态。5-10 个节点。
23
+ ## 三、核心概念与术语
24
+ 5-15 个关键术语,每个一句话解释,按重要性排序。
25
+ ## 四、生态/子领域划分
26
+ 主要分支/子方向/派系的树形分类。
27
+ ## 五、关键人物/组织/项目
28
+ 5-10 个主要推动者。
29
+ ## 六、核心资源索引
30
+ 5-10 个最值得读的资源,格式 `- [名称](URL) — 一句话说明为什么值得读`。
31
+ ## 七、初印象:主流方向与争议点
32
+ 目前主流做法是什么?有哪些主要争议/分歧/开放问题?
33
+
34
+ ## 八、提前退出判定(early-exit check)
35
+ 判断这次调研是否需要走完整六阶段:
36
+
37
+ - **硬性规则**:若「生态/子领域划分」识别出 **≥3 个候选方案/流派**,必须判定
38
+ `early=false`(领域有实质结构,值得全流程),不得以「主题简单」为由偷懒退出。
39
+ - 仅当以下情况才允许 `early=true`:
40
+ - 领域公开资料极少(可靠来源 < 3 个);
41
+ - 或主题足够简单(一份官方 quickstart 即可完整回答核心问题);
42
+ - 或地图层面已能直接给出结论。
43
+
44
+ **同时必须用 Write 写入 `{{dir}}/early-exit.json`**(严格合法 JSON):
45
+
46
+ ```json
47
+ {"early": true, "reason": "一句话理由"}
48
+ ```
49
+ 或
50
+ ```json
51
+ {"early": false}
52
+ ```
53
+
54
+ ## 约束
55
+ - WebSearch 总次数 ≤ 10,不要无止境搜索。
56
+ - 不做方案对比 —— 那是下一阶段的事。
57
+ - 关键事实/论断后附来源链接 `- [来源](URL)`(可信度要能从源头追溯)。
58
+ - 中文 Markdown。
@@ -0,0 +1,53 @@
1
+ 你正在执行六阶段技术调研的【阶段2:候选方案对比】。
2
+
3
+ 调研主题:{{topic}}
4
+ 调研深度:{{depth}}
5
+
6
+ 请先 Read:
7
+ - `{{dir}}/01-goal.md`(问题定义与验收标准)
8
+ - `{{dir}}/02-map.md`(领域地图)
9
+
10
+ ## 你的任务
11
+ 在地图基础上,识别出解决这个问题的 **3-5 个主要候选方案/技术路线**,做系统对比。
12
+
13
+ 1. 确定 3-5 个最值得比较的候选方案(light 可只列 2-3 个;standard/deep 列 3-5 个并覆盖主要分支)。
14
+ 2. 每个方案做 1-3 次针对性 WebSearch/WebFetch 补充关键事实(性能指标、成熟度、社区活跃度等)。
15
+ 3. 发现阶段1 地图遗漏了重要分支时,本阶段可补充搜索。
16
+
17
+ ## 输出要求:**两个文件缺一不可**
18
+
19
+ ### 文件1:`{{dir}}/03-options.md`(人读的对比报告)
20
+
21
+ ## 一、候选方案清单
22
+ 每个方案是什么、由谁主导/维护、定位是什么。
23
+
24
+ ## 二、对比矩阵
25
+ Markdown 表格(维度按领域特性增删):核心思路 / 成熟度·生态 / 性能·规模 / 学习曲线 /
26
+ 适用场景 / 不适用场景 / 社区活跃度 / 许可证·成本。
27
+
28
+ 关键数据格**必须标注来源**(格内 `[来源](URL)` 或表下方集中列);
29
+ 某维度缺乏公开可靠信息时明确写「信息不足」,**不要编造或用弱相关信息强行填充**。
30
+
31
+ ## 三、初步判断
32
+ 哪些方案值得在阶段3深入调研?列 2-4 个深度调研分支,每个配 1-2 句理由。
33
+
34
+ ### 文件2:`{{dir}}/branches.json`(机器读的分支列表,驱动阶段3 逐分支深挖)
35
+
36
+ ```json
37
+ [
38
+ {
39
+ "name": "分支显示名(中文,如「FFmpeg 命令行方案」)",
40
+ "safe_name": "分支短标识(只用字母/数字/短横线/下划线,如 ffmpeg-cli)",
41
+ "description": "这个分支要深挖什么?一句话"
42
+ }
43
+ ]
44
+ ```
45
+
46
+ - `safe_name` 用于生成文件名 `{{dir}}/04-deep-dive-{safe_name}.md`。
47
+ - 数组长度:light=2,standard=2-3,deep=3-4。
48
+ - **严格合法 JSON**(无 trailing comma、无注释、字符串用双引号)。
49
+
50
+ ## 约束
51
+ - 对比要客观、基于事实,不要有偏向性。
52
+ - **不下最终推荐结论** —— 那是阶段5的事。
53
+ - md 文件中文(JSON 除外)。
@@ -0,0 +1,56 @@
1
+ 你正在执行六阶段技术调研的【阶段3:深度调研】,负责深挖其中一个分支。
2
+
3
+ ## 你的分支
4
+ - **名称**:{{branchName}}
5
+ - **要深挖什么**:{{branchDesc}}
6
+
7
+ 调研主题:{{topic}}
8
+ 调研深度:{{depth}}
9
+
10
+ 请先 Read `{{dir}}/01-goal.md`、`{{dir}}/02-map.md`、`{{dir}}/03-options.md`
11
+ 了解全局定位,避免与其它分支重复。
12
+
13
+ ## 输出要求
14
+ **必须用 Write 写入 `{{dir}}/04-deep-dive-{{safeName}}.md`**,含:
15
+
16
+ ## 一、这是什么
17
+ 一句话定义 + 它在整个领域里的位置。
18
+
19
+ ## 二、工作原理 / 核心机制
20
+ 它到底怎么做到的?关键设计决策是什么?
21
+
22
+ ## 三、关键特性与能力边界
23
+ 能做什么、不能做什么。
24
+
25
+ ## 四、上手成本
26
+ 安装/配置/依赖、最小可用示例的复杂度、文档质量。
27
+
28
+ ## 五、生产就绪度
29
+ 版本稳定性、破坏性变更历史、已知重大缺陷、维护活跃度、真实生产案例。
30
+
31
+ ## 六、优劣势
32
+ **优势**(3-5 条,每条带事实/场景)
33
+ **劣势/局限/坑**(3-5 条,**必须诚实**,每条带具体问题,参考 issues / stackoverflow /
34
+ 博客里的真实负面反馈)
35
+
36
+ ## 七、适用/不适用场景
37
+ - 最适合:…
38
+ - 不适合:…
39
+
40
+ ## 八、关键资源
41
+ 3-5 个最值得读的资源:`- [名称](URL) — 说明`
42
+
43
+ ## 九、与其他分支的关系
44
+ 互补?竞争?可组合?
45
+
46
+ ## 十、未深挖问题(学习债务源头)
47
+ 调研中冒出但**超出本分支边界/深度上限**、没展开的问题,逐条记录:
48
+ 问题是什么 + 为什么值得后续研究 + 建议入口(文档/论文/代码位置)。没有则写「无」。
49
+
50
+ ## 约束
51
+ - WebSearch 总次数 ≤ 15。
52
+ - **不要动手写代码做实测**(那是阶段4)。
53
+ - **不下最终推荐结论**(那是阶段5)。
54
+ - 关键论断/数据后必须附来源链接 `[来源](URL)`;矛盾信息同时列出并注明冲突。
55
+ - 文件名严格是 `{{dir}}/04-deep-dive-{{safeName}}.md`。
56
+ - 中文 Markdown。
@@ -0,0 +1,74 @@
1
+ 你正在执行六阶段技术调研的【阶段4:动手验证】。
2
+
3
+ 调研主题:{{topic}}
4
+ 调研深度:{{depth}}
5
+
6
+ 请先 Read `{{dir}}/01-goal.md`、`{{dir}}/02-map.md`、`{{dir}}/03-options.md`
7
+ 以及所有 `{{dir}}/04-deep-dive-*.md`。
8
+
9
+ ## 你的任务
10
+ 针对前面调研出的方案做小规模动手验证(纸上得来终觉浅)。
11
+
12
+ 力度按深度:**light** 跑官方 hello-world / quickstart 即可;**standard** quickstart +
13
+ 最小功能验证,对比 2 个方案的使用体验;**deep** 对 top 1-2 个方案做小型 benchmark,
14
+ 写出可复现脚本。
15
+
16
+ ## 验证方法(按决策顺序执行)
17
+
18
+ 1. **只验证关键支撑论断**:从 03-options 和 04-deep-dive 里挑「如果它是假的,
19
+ 最终推荐会改变」的论断(通常 2-4 条)。不影响结论的细节一律跳过,
20
+ 不为了「看起来完整」去验证边角料。
21
+ 2. 对每条论断,先**改写成可证伪的具体假设**(「给定输入 X,输出应该是 Y」),
22
+ 再设计「缩小规模但保留核心逻辑」的最小实验。
23
+ 3. 用 Bash 在 `{{dir}}/verify/` 目录下做实验:安装/下载 → 写最小脚本 → 运行,
24
+ **完整记录真实输出(含报错)**。
25
+
26
+ 4. **运行时约束(最高优先级):验证脚本必须是 TypeScript / JavaScript(`.ts` / `.js`)**
27
+ - 本系统基于 bun 运行时(Node 兼容),**不保证有 Python 环境**。
28
+ - `.ts` 用 `bun run xxx.ts`;bun 不可用则写 `.js` 用 `node xxx.js`。
29
+ - **严禁写 Python 脚本、严禁 `pip install` / `python` / `python3`** ——
30
+ 脚本会因缺解释器/依赖跑不起来,白白浪费时间预算。
31
+ - Python 生态更方便时优先找等价 JS/TS 方案:直接 `fetch` 调 HTTP API、
32
+ 用对应 npm 包、或收窄到语言无关的接口行为验证。
33
+ - 确实无 JS/TS 可行路径的论断:不执行,记入「五、待人工验证」并跳过。
34
+
35
+ 5. **时限双保险**
36
+ - 每次 Bash 调用**必须显式传 `timeout: 60000`**(工具级硬中断,不依赖自觉);
37
+ - 命令同时以 `timeout 60 ` 前缀守护(进程级)。
38
+ - 运行前估算耗时;预计超时的先缩小规模,仍超时的(训练类/大规模回测类)一律不执行,
39
+ 转入「五、待人工验证」。
40
+
41
+ 6. 因网络/环境无法安装的,**诚实记录失败原因,不要假装成功**。
42
+
43
+ ## 输出要求
44
+ **必须用 Write 写入 `{{dir}}/05-verification.md`**,含:
45
+
46
+ ## 一、验证的假设清单
47
+ 本轮选的 2-4 条关键论断,每条说明:为什么它是关键支撑(假的话哪个推荐结论会动摇)。
48
+
49
+ ## 二、环境说明
50
+ 操作系统、运行时(bun/node 版本)、依赖版本,一句话。
51
+
52
+ ## 三、验证记录(逐条对应假设,禁止混写)
53
+ 每条记:
54
+ - **假设**:可证伪陈述
55
+ - **脚本**:文件名(放 `{{dir}}/verify/` 下,命名能看出验证什么,如 `verify_xxx.ts`)
56
+ - **运行方式与耗时**:`bun run xxx.ts`,实际运行 X 秒
57
+ - **真实输出**:关键输出原文(含报错;**不许只写「成功」**)
58
+ - **结论**:验证通过 / 假设被推翻
59
+ - **影响面**(被推翻时必填):动摇了 03-options / 04-deep-dive 里哪条结论?综合阶段须优先重估。
60
+
61
+ ## 四、验证总结
62
+ 验证通过的说法 / 被推翻或修正的说法(及影响面汇总)/ 新发现的问题与优势。
63
+
64
+ ## 五、待人工验证
65
+ 因超时、需特定硬件、仅有 Python 绑定等无法由本工作流验证的论断,逐条列出:
66
+ 论断内容、为什么验证不了、建议的人工验证方法、不验证对结论置信度的影响(高/中/低)。
67
+ 没有则写「无」。**这份清单是下一轮调研的输入,不是本阶段的失败项。**
68
+
69
+ ## 约束
70
+ - 脚本只写 `.ts`/`.js`,严禁 Python;Bash 一律 `timeout:60000` + `timeout 60` 前缀。
71
+ - 不装重型 IDE/桌面应用,只装 CLI 工具/库;不验证需要 GUI/账号/付费的服务。
72
+ - 必然失败的(需付费/特定硬件)诚实记录并跳过。
73
+ - **不允许出现「怕超时就完全不验证、也不记录」的空白状态。**
74
+ - 中文 Markdown。
@@ -0,0 +1,81 @@
1
+ 你正在执行六阶段技术调研的【阶段5:综合升华】。
2
+
3
+ 调研主题:{{topic}}
4
+ 调研深度:{{depth}}
5
+
6
+ 请 **Read 所有前面产出的文件**(这一步以读为主,除非发现重大缺口才补 1-2 次搜索):
7
+ `{{dir}}/01-goal.md`、`{{dir}}/02-map.md`、`{{dir}}/03-options.md`、
8
+ 所有 `{{dir}}/04-deep-dive-*.md`(用 Glob 列出来逐个 Read)、`{{dir}}/05-verification.md`。
9
+
10
+ ## 你的任务
11
+ 1. **优先重估被推翻的结论**:Read 05-verification.md 的「验证总结/影响面」,
12
+ 凡被推翻的论断,先重估 03-options / 04-deep-dive 里受影响的对比结论,再综合。
13
+ 2. 汇总所有阶段的发现,回答阶段0 定义的核心问题。
14
+ 3. 给出明确的推荐方案和使用建议。
15
+ 4. **诚实承认尚未搞清楚的问题。**
16
+ 5. 自我质检,列出仍存在的缺口(gaps),供补洞循环使用。
17
+
18
+ ## 输出要求:**三个文件缺一不可**
19
+
20
+ ### 文件1:`{{dir}}/06-synthesis.md`
21
+
22
+ ⚠️ **下面的章节标题字面一个字都不能改** —— 下游有确定性校验按关键词 grep 它们。
23
+
24
+ ## 一、核心结论
25
+ 3-5 句话直接回答阶段0 定义的核心问题。
26
+
27
+ ## 二、推荐方案
28
+ - **首选推荐**:xxx,理由(2-3 条)
29
+ - **备选方案**:xxx,适用场景
30
+ - **不推荐**:xxx,原因(如有)
31
+
32
+ ## 三、决策依据
33
+ 为什么做这个推荐?引用前面哪些发现/数据/验证结果?每条必须标注**证据等级**:
34
+ - 【已实证】阶段4动手验证过
35
+ - 【多源一致】≥2 个独立可靠来源交叉印证
36
+ - 【单源】只有一个来源支撑(注明链接)
37
+ - 【推断】基于已知信息的合理推断(说明推断链)
38
+
39
+ ## 三b、已通过脚本验证的关键结论
40
+ 逐条列出,**固定格式**(与 05-verification.md 一一对应,**不许凭记忆编**):
41
+ `结论陈述 —— 已验证(脚本:scripts/<文件名>,运行方式:bun run <文件名>,运行耗时:Xs,实际输出:<关键输出>)`
42
+ 语气肯定自信,不加「可能/理论上」模糊词 —— 不确定的内容不配进本节。
43
+
44
+ ## 三c、未附脚本的结论说明
45
+ 报告引用了但没有验证脚本支撑的关键结论,逐条按三种情况说明:
46
+ `结论陈述 —— 未验证(原因:过于简单无需验证 / 超时限难以端到端验证 / 无法验证;如需验证建议:…)`
47
+
48
+ ## 四、使用建议
49
+ 快速上手路径(第一步做什么)/ 关键注意事项与容易踩的坑 / 进阶学习资源。
50
+
51
+ ## 五、调研局限 & 未决问题
52
+ 诚实列出这次调研**没搞清楚**或**存在不确定性**的地方。
53
+ 完美调研不存在 —— 明确边界本身就是高质量的体现。
54
+
55
+ ## 六、调研缺口
56
+ (为下一轮自检补洞提供起点;没有就写「无」。)逐条写:缺什么信息?补什么能让结论更可靠?
57
+
58
+ ### 文件2:`{{dir}}/07-learning-debt.md`(学习债务清单,本阶段拥有并维护)
59
+
60
+ 汇总各 deep-dive 的「未深挖问题」小节 + 本阶段新发现的边界外问题,每条:
61
+ - **问题**:一句话描述
62
+ - **为什么值得后续研究**:与本次核心问题的关系
63
+ - **建议入口**:文档/论文/代码/关键词
64
+
65
+ 没有则写「无」。
66
+
67
+ ### 文件3:`{{dir}}/gaps.json`(机器可读缺口列表,驱动补洞循环)
68
+
69
+ JSON **字符串数组**,每元素一条缺口的一句话描述:
70
+
71
+ ```json
72
+ ["方案A的并发性能数据缺失,需要补充 benchmark 来源", "方案B在 Windows 上的兼容性未验证"]
73
+ ```
74
+
75
+ 没有缺口就写 `[]`。**严格合法 JSON。**
76
+
77
+ ## 约束
78
+ - 以综合为主,尽量不大量搜索(读完所有文件再决定是否补搜)。
79
+ - 结论要明确,**不要和稀泥**。
80
+ - **「已验证」小节绝不允许编造**:每条都必须能在 05-verification.md 找到对应的真实运行记录,
81
+ 否则降级写进「未验证」小节。
@@ -0,0 +1,32 @@
1
+ 你在执行综合阶段的【自检补洞】第 {{round}} 轮。
2
+
3
+ 调研主题:{{topic}}
4
+
5
+ 之前已完成全流程调研,综合报告在 `{{dir}}/06-synthesis.md`。
6
+ 上一轮自我质检发现这些缺口:
7
+
8
+ {{gaps}}
9
+
10
+ ## 你的任务
11
+ 1. Read 已有的所有 `{{dir}}/*.md`(避免重复调研)。
12
+ 2. 针对每条缺口用 WebSearch/WebFetch 补充调研(**每个缺口 2-5 次搜索**)。
13
+ 3. 发现新的关键信息/反例/数据时**更新** `{{dir}}/06-synthesis.md`
14
+ (Read 现有内容 → 修改 → Write 覆盖)。
15
+ 4. 重新评估缺口:已填补的删除、仍未填补的保留、新发现的加入。
16
+ 5. 把更新后的缺口列表写回 `{{dir}}/gaps.json`(JSON 字符串数组;全补完写 `[]`)。
17
+ 6. 新发现若直接影响某个 deep-dive / verification 文件,同时更新它。
18
+
19
+ ## 约束
20
+
21
+ - 每个缺口针对性搜 2-5 次即可,**不要重新全面调研**。
22
+ - **保持 06-synthesis.md 的章节标题字面不变** —— 尤其「一、核心结论」和「二、推荐方案」
23
+ 这两个标题**一个字都不能改**,下游有确定性校验按关键词 grep 它们。
24
+ 只更新章节内容,不重排结构、不改标题措辞。
25
+ - **「不可补」的缺口必须清出 gaps.json**:信息根本不可得(无公开数据/需付费/需长期实盘)
26
+ 或超出本工作流能力(需特定硬件/账号)的,本轮就把它移入 06-synthesis.md 的
27
+ 「调研局限」并**从 gaps.json 删除** —— 它不是「待补缺口」,是「已知边界」。
28
+ 留着不删只会让下一轮空转、让用户误以为还有洞没补。
29
+ - 判断标准:搜了 2-5 次仍找不到可靠来源 → 不可补;找到来源 → 填进报告。
30
+ - 不要推翻整个报告,只补充和修正。
31
+ - `gaps.json` 必须是合法 JSON 数组。
32
+ - 中文 Markdown。