minimal-agent 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/README.md +6 -5
  2. package/package.json +62 -5
  3. package/plugins/computer_use/.claude-plugin/plugin.json +1 -1
  4. package/plugins/cron-runner/src/commands.js +4 -4
  5. package/plugins/cron-runner/src/commands.ts +4 -4
  6. package/plugins/workflow-runner/.claude-plugin/plugin.json +2 -2
  7. package/plugins/workflow-runner/commands/workflow.md +57 -90
  8. package/plugins/workflow-runner/commands/workflows.md +4 -4
  9. package/plugins/workflow-runner/plugin.js +24 -13
  10. package/plugins/workflow-runner/plugin.ts +28 -13
  11. package/plugins/workflow-runner/src/discovery.js +160 -0
  12. package/plugins/workflow-runner/src/discovery.ts +194 -0
  13. package/plugins/workflow-runner/src/goalAnchor.js +53 -0
  14. package/plugins/workflow-runner/src/goalAnchor.ts +59 -0
  15. package/plugins/workflow-runner/src/index.js +204 -185
  16. package/plugins/workflow-runner/src/index.ts +249 -224
  17. package/plugins/workflow-runner/src/inputCoercion.js +40 -0
  18. package/plugins/workflow-runner/src/inputCoercion.ts +43 -0
  19. package/plugins/workflow-runner/src/journal.js +224 -0
  20. package/plugins/workflow-runner/src/journal.ts +274 -0
  21. package/plugins/workflow-runner/src/jsonSchema.js +132 -0
  22. package/plugins/workflow-runner/src/jsonSchema.ts +162 -0
  23. package/plugins/workflow-runner/src/moduleResolution.js +64 -0
  24. package/plugins/workflow-runner/src/moduleResolution.ts +71 -0
  25. package/plugins/workflow-runner/src/resourceInputs.js +220 -0
  26. package/plugins/workflow-runner/src/resourceInputs.ts +300 -0
  27. package/plugins/workflow-runner/src/runner.js +404 -467
  28. package/plugins/workflow-runner/src/runner.ts +491 -535
  29. package/plugins/workflow-runner/src/runtime/config.js +46 -0
  30. package/plugins/workflow-runner/src/runtime/config.ts +69 -0
  31. package/plugins/workflow-runner/src/runtime/context.js +1304 -0
  32. package/plugins/workflow-runner/src/runtime/context.ts +1786 -0
  33. package/plugins/workflow-runner/src/runtime/exec.js +34 -0
  34. package/plugins/workflow-runner/src/runtime/exec.ts +53 -0
  35. package/plugins/workflow-runner/src/runtime/flow.js +8 -0
  36. package/plugins/workflow-runner/src/runtime/flow.ts +12 -0
  37. package/plugins/workflow-runner/src/runtime/fs.js +27 -0
  38. package/plugins/workflow-runner/src/runtime/fs.ts +41 -0
  39. package/plugins/workflow-runner/src/runtime/model.js +6 -0
  40. package/plugins/workflow-runner/src/runtime/model.ts +8 -0
  41. package/plugins/workflow-runner/src/runtime/output.js +7 -0
  42. package/plugins/workflow-runner/src/runtime/output.ts +21 -0
  43. package/plugins/workflow-runner/src/runtime/scheduler.js +141 -0
  44. package/plugins/workflow-runner/src/runtime/scheduler.ts +166 -0
  45. package/plugins/workflow-runner/src/runtime/state.js +16 -0
  46. package/plugins/workflow-runner/src/runtime/state.ts +19 -0
  47. package/plugins/workflow-runner/src/runtime/tools.js +3 -0
  48. package/plugins/workflow-runner/src/runtime/tools.ts +6 -0
  49. package/plugins/workflow-runner/src/sandbox.js +141 -0
  50. package/plugins/workflow-runner/src/sandbox.ts +182 -0
  51. package/plugins/workflow-runner/src/scriptGuard.d.mts +38 -0
  52. package/plugins/workflow-runner/src/scriptGuard.mjs +449 -0
  53. package/plugins/workflow-runner/src/taskIdentity.js +172 -152
  54. package/plugins/workflow-runner/src/taskIdentity.ts +233 -200
  55. package/plugins/workflow-runner/src/toolRuntime.js +29 -8
  56. package/plugins/workflow-runner/src/toolRuntime.ts +36 -11
  57. package/plugins/workflow-runner/src/types.js +7 -105
  58. package/plugins/workflow-runner/src/types.ts +155 -520
  59. package/plugins/workflow-runner/src/util.js +47 -0
  60. package/plugins/workflow-runner/src/util.ts +51 -0
  61. package/plugins/workflow-runner/src/workflowContext.js +20 -0
  62. package/plugins/workflow-runner/src/workflowContext.ts +58 -0
  63. package/plugins/workflow-runner/src/workflowDependencies.js +36 -0
  64. package/plugins/workflow-runner/src/workflowDependencies.ts +59 -0
  65. package/plugins/workflow-runner/src/workflowFingerprint.js +118 -0
  66. package/plugins/workflow-runner/src/workflowFingerprint.ts +122 -0
  67. package/plugins/workflow-runner/src/workflowState.js +542 -469
  68. package/plugins/workflow-runner/src/workflowState.ts +639 -589
  69. package/plugins/workflow-runner/test/api.test.ts +223 -0
  70. package/plugins/workflow-runner/test/apiCapabilities.test.ts +614 -0
  71. package/plugins/workflow-runner/test/apiConcurrencyGate.test.ts +104 -0
  72. package/plugins/workflow-runner/test/apiEcho.test.ts +210 -0
  73. package/plugins/workflow-runner/test/apiReadText.test.ts +178 -0
  74. package/plugins/workflow-runner/test/apiResourceLedger.test.ts +184 -0
  75. package/plugins/workflow-runner/test/childWorkflow.test.ts +304 -0
  76. package/plugins/workflow-runner/test/discovery.test.ts +234 -0
  77. package/plugins/workflow-runner/test/goalAnchor.test.ts +106 -0
  78. package/plugins/workflow-runner/test/goalController.test.ts +317 -0
  79. package/plugins/workflow-runner/test/journalLanes.test.ts +198 -0
  80. package/plugins/workflow-runner/test/listResources.test.ts +106 -0
  81. package/plugins/workflow-runner/test/resourceInputs.test.ts +294 -0
  82. package/plugins/workflow-runner/test/sandbox.test.ts +126 -0
  83. package/plugins/workflow-runner/test/scheduler.test.ts +70 -0
  84. package/plugins/workflow-runner/test/scriptGuard.test.ts +276 -0
  85. package/plugins/workflow-runner/test/skillDocSync.test.ts +78 -0
  86. package/plugins/workflow-runner/test/taskIdentity.test.ts +288 -179
  87. package/plugins/workflow-runner/test/workflowFingerprint.test.ts +106 -0
  88. package/plugins/workflow-runner/test/workflowState.test.ts +429 -0
  89. package/skills/pptx/examples/assets/cover-bg.svg +23 -0
  90. package/skills/pptx/examples/assets/icon-spark.svg +5 -0
  91. package/skills/skill-creator/scripts/run_eval.py +3 -2
  92. package/skills/ui-design/SKILL.md +5 -2
  93. package/skills/ui-design/references/layout-composition.md +1 -1
  94. package/skills/workflow-creator/SKILL.md +344 -0
  95. package/skills/workflow-creator/assets/template/workflow.mjs +48 -0
  96. package/skills/workflow-creator/references/api.md +216 -0
  97. package/skills/workflow-creator/references/migration.md +103 -0
  98. package/skills/workflow-creator/references/patterns.md +779 -0
  99. package/skills/workflow-creator/scripts/list-resources.mjs +205 -0
  100. package/skills/workflow-creator/scripts/scaffold.mjs +148 -0
  101. package/skills/workflow-creator/scripts/validate.mjs +275 -0
  102. package/skills/workflow-creator/scripts/workflow-creator.test.mjs +82 -0
  103. package/src/advisor/advisorCoordinator.js +503 -0
  104. package/src/advisor/advisorCoordinator.ts +657 -0
  105. package/src/cli/configMenu.tsx +0 -1
  106. package/src/cli/print.js +44 -6
  107. package/src/cli/print.ts +73 -4
  108. package/src/cli/streamJson.js +5 -6
  109. package/src/cli/streamJson.ts +8 -4
  110. package/src/cli/wizards/advisorWizard.js +4 -2
  111. package/src/cli/wizards/advisorWizard.tsx +8 -2
  112. package/src/cli/wizards/contextAdvisorWizard.js +5 -4
  113. package/src/cli/wizards/contextAdvisorWizard.tsx +7 -6
  114. package/src/collaboration/taskFlow.js +115 -0
  115. package/src/collaboration/taskFlow.ts +169 -0
  116. package/src/config/configDefaults.js +41 -1
  117. package/src/config/configDefaults.ts +43 -1
  118. package/src/config/configDiagnostics.ts +2 -2
  119. package/src/config/configFile.js +40 -9
  120. package/src/config/configFile.ts +60 -11
  121. package/src/config/configService.js +443 -74
  122. package/src/config/configService.ts +723 -142
  123. package/src/config/numericLimits.js +22 -0
  124. package/src/config/numericLimits.ts +24 -0
  125. package/src/config.js +1 -0
  126. package/src/config.ts +3 -2
  127. package/src/context/budgetPlan.js +1 -1
  128. package/src/context/budgetPlan.ts +1 -1
  129. package/src/context/compact.js +7 -2
  130. package/src/context/compact.ts +9 -2
  131. package/src/context/microCompactLite.js +212 -13
  132. package/src/context/microCompactLite.ts +261 -12
  133. package/src/context/sessionRegistry.js +8 -1
  134. package/src/context/sessionRegistry.ts +18 -5
  135. package/src/context/toolResultArchive.js +72 -0
  136. package/src/context/toolResultArchive.ts +95 -0
  137. package/src/goal/errors.js +8 -0
  138. package/src/goal/errors.ts +18 -0
  139. package/src/goal/goalRuntime.js +344 -0
  140. package/src/goal/goalRuntime.ts +466 -0
  141. package/src/goal/goalStore.js +200 -0
  142. package/src/goal/goalStore.ts +219 -0
  143. package/src/goal/index.js +4 -0
  144. package/src/goal/index.ts +4 -0
  145. package/src/goal/statusMapping.js +71 -0
  146. package/src/goal/statusMapping.ts +95 -0
  147. package/src/goal/types.js +7 -0
  148. package/src/goal/types.ts +179 -0
  149. package/src/goal/workflowController.js +306 -0
  150. package/src/goal/workflowController.ts +360 -0
  151. package/src/harness/evidenceLedger.js +2 -0
  152. package/src/harness/evidenceLedger.ts +1 -0
  153. package/src/harness/stallGuard.js +9 -3
  154. package/src/harness/stallGuard.ts +7 -3
  155. package/src/images/imageResolver.js +161 -0
  156. package/src/images/imageResolver.ts +189 -0
  157. package/src/infra/verification.js +56 -20
  158. package/src/infra/verification.ts +87 -20
  159. package/src/llm/client.js +79 -21
  160. package/src/llm/client.ts +182 -35
  161. package/src/llm/gatewayClient.js +201 -0
  162. package/src/llm/gatewayClient.ts +299 -0
  163. package/src/llm/messageProvenance.js +46 -0
  164. package/src/llm/messageProvenance.ts +58 -0
  165. package/src/llm/modelProvider.js +1 -0
  166. package/src/llm/modelProvider.ts +22 -0
  167. package/src/llm/providers/anthropicFormat.js +108 -1
  168. package/src/llm/providers/anthropicFormat.ts +115 -4
  169. package/src/llm/providers/openaiFormat.js +9 -0
  170. package/src/llm/providers/openaiFormat.ts +12 -3
  171. package/src/loop.js +319 -54
  172. package/src/loop.ts +373 -57
  173. package/src/main.js +4 -1
  174. package/src/main.tsx +4 -1
  175. package/src/managedExecution/index.js +2 -0
  176. package/src/managedExecution/index.ts +2 -0
  177. package/src/managedExecution/registry.js +15 -0
  178. package/src/managedExecution/registry.ts +20 -0
  179. package/src/managedExecution/types.js +1 -0
  180. package/src/managedExecution/types.ts +86 -0
  181. package/src/modelRef.js +9 -0
  182. package/src/modelRef.ts +31 -0
  183. package/src/multimodal.js +14 -28
  184. package/src/multimodal.ts +17 -33
  185. package/src/net/lanDiscovery.js +65 -0
  186. package/src/net/lanDiscovery.ts +82 -0
  187. package/src/plugin-sdk.js +28 -3
  188. package/src/plugin-sdk.ts +39 -6
  189. package/src/plugins/pluginApi.ts +16 -1
  190. package/src/plugins/pluginLoader.js +4 -0
  191. package/src/plugins/pluginLoader.ts +6 -0
  192. package/src/plugins/pluginRunner.js +152 -9
  193. package/src/plugins/pluginRunner.ts +186 -8
  194. package/src/plugins/slashFallback.js +113 -0
  195. package/src/plugins/slashFallback.ts +137 -0
  196. package/src/prompts/policyRegistry.js +15 -8
  197. package/src/prompts/policyRegistry.ts +18 -8
  198. package/src/prompts/promptAssembly.js +103 -12
  199. package/src/prompts/promptAssembly.ts +114 -12
  200. package/src/prompts/skillList.js +21 -3
  201. package/src/prompts/skillList.ts +27 -2
  202. package/src/prompts/stableSystemPrompt.js +18 -0
  203. package/src/prompts/stableSystemPrompt.ts +33 -0
  204. package/src/runtime/agentRuntimeContext.js +8 -2
  205. package/src/runtime/agentRuntimeContext.ts +17 -4
  206. package/src/session/runAgentTurn.js +78 -12
  207. package/src/session/runAgentTurn.ts +105 -23
  208. package/src/session/runTurn.js +10 -9
  209. package/src/session/runTurn.ts +17 -8
  210. package/src/session/sessionState.ts +2 -0
  211. package/src/team/auth.js +186 -0
  212. package/src/team/auth.ts +298 -0
  213. package/src/team/cli.js +105 -0
  214. package/src/team/cli.ts +122 -0
  215. package/src/team/onlineToolContract.js +64 -0
  216. package/src/team/onlineToolContract.ts +109 -0
  217. package/src/team/toolPolicy.js +36 -0
  218. package/src/team/toolPolicy.ts +75 -0
  219. package/src/tools/advisor/advisor.js +148 -37
  220. package/src/tools/advisor/advisor.ts +161 -38
  221. package/src/tools/advisor/advisorDecision.js +71 -0
  222. package/src/tools/advisor/advisorDecision.ts +85 -0
  223. package/src/tools/agent/agent.js +18 -5
  224. package/src/tools/agent/agent.ts +21 -7
  225. package/src/tools/agent/agentControl.js +246 -0
  226. package/src/tools/agent/agentControl.ts +284 -0
  227. package/src/tools/agent/agentTaskService.js +40 -1
  228. package/src/tools/agent/agentTaskService.ts +44 -1
  229. package/src/tools/agent/agentTypes.js +14 -2
  230. package/src/tools/agent/agentTypes.ts +15 -2
  231. package/src/tools/applypatch/applyPatch.js +362 -0
  232. package/src/tools/applypatch/applyPatch.ts +428 -0
  233. package/src/tools/bash/bash.js +70 -18
  234. package/src/tools/bash/bash.ts +75 -20
  235. package/src/tools/capabilities.js +10 -5
  236. package/src/tools/capabilities.ts +10 -5
  237. package/src/tools/computeruse/computerIntent.js +32 -0
  238. package/src/tools/computeruse/computerIntent.ts +46 -0
  239. package/src/tools/computeruse/telemetryLog.js +12 -0
  240. package/src/tools/computeruse/telemetryLog.ts +16 -0
  241. package/src/tools/computeruse/vision/telemetry.js +1 -0
  242. package/src/tools/computeruse/vision/telemetry.ts +1 -0
  243. package/src/tools/effectiveToolSet.js +4 -0
  244. package/src/tools/effectiveToolSet.ts +4 -0
  245. package/src/tools/index.js +21 -2
  246. package/src/tools/index.ts +33 -2
  247. package/src/tools/powershell/powershell.js +18 -1
  248. package/src/tools/powershell/powershell.ts +18 -2
  249. package/src/tools/presentresult/presentresult.js +6 -15
  250. package/src/tools/presentresult/presentresult.ts +6 -15
  251. package/src/tools/read/read.js +69 -11
  252. package/src/tools/read/read.ts +70 -11
  253. package/src/tools/shared/fileUtils.js +1 -2
  254. package/src/tools/shared/fileUtils.ts +1 -2
  255. package/src/tools/shared/permanentDeleteGuard.js +34 -3
  256. package/src/tools/shared/permanentDeleteGuard.ts +43 -6
  257. package/src/tools/shared/toolOutputStore.js +23 -1
  258. package/src/tools/shared/toolOutputStore.ts +22 -1
  259. package/src/tools/skill/skill.js +9 -3
  260. package/src/tools/skill/skill.ts +8 -4
  261. package/src/tools/toolPromptGuides.js +117 -0
  262. package/src/tools/toolPromptGuides.ts +137 -0
  263. package/src/tools/webbrowser/agentBrowserPath.js +19 -9
  264. package/src/tools/webbrowser/agentBrowserPath.ts +70 -28
  265. package/src/tools/webbrowser/browser.js +27 -11
  266. package/src/tools/webbrowser/browser.ts +68 -24
  267. package/src/tools/webbrowser/browserAutomation.js +329 -0
  268. package/src/tools/webbrowser/browserAutomation.ts +467 -0
  269. package/src/tools/webbrowser/browserAxState.js +97 -0
  270. package/src/tools/webbrowser/browserAxState.ts +142 -0
  271. package/src/tools/webbrowser/browserBatch.js +1578 -0
  272. package/src/tools/webbrowser/browserBatch.ts +2382 -0
  273. package/src/tools/webbrowser/browserCdp.js +208 -0
  274. package/src/tools/webbrowser/browserCdp.ts +255 -0
  275. package/src/tools/webbrowser/browserConditions.js +24 -0
  276. package/src/tools/webbrowser/browserConditions.ts +45 -0
  277. package/src/tools/webbrowser/browserContent.js +281 -0
  278. package/src/tools/webbrowser/browserContent.ts +438 -0
  279. package/src/tools/webbrowser/browserControl.js +131 -30
  280. package/src/tools/webbrowser/browserControl.ts +210 -50
  281. package/src/tools/webbrowser/browserDaemon.js +22 -14
  282. package/src/tools/webbrowser/browserDaemon.ts +54 -21
  283. package/src/tools/webbrowser/browserFrames.js +47 -0
  284. package/src/tools/webbrowser/browserFrames.ts +54 -0
  285. package/src/tools/webbrowser/browserInteractionResolver.js +17 -0
  286. package/src/tools/webbrowser/browserInteractionResolver.ts +40 -0
  287. package/src/tools/webbrowser/browserLocator.js +140 -0
  288. package/src/tools/webbrowser/browserLocator.ts +194 -0
  289. package/src/tools/webbrowser/browserOutcome.js +10 -17
  290. package/src/tools/webbrowser/browserOutcome.ts +48 -31
  291. package/src/tools/webbrowser/browserRecovery.js +58 -0
  292. package/src/tools/webbrowser/browserRecovery.ts +83 -0
  293. package/src/tools/webbrowser/browserRunRegistry.js +35 -3
  294. package/src/tools/webbrowser/browserRunRegistry.ts +91 -15
  295. package/src/tools/webbrowser/browserService.js +28 -2
  296. package/src/tools/webbrowser/browserService.ts +49 -9
  297. package/src/tools/webbrowser/browserStream.js +132 -33
  298. package/src/tools/webbrowser/browserStream.ts +224 -50
  299. package/src/tools/webbrowser/browserTabs.js +48 -15
  300. package/src/tools/webbrowser/browserTabs.ts +178 -96
  301. package/src/tools/webbrowser/webbrowser.js +683 -144
  302. package/src/tools/webbrowser/webbrowser.ts +979 -236
  303. package/src/tools/webfetch/preapproved.js +0 -2
  304. package/src/tools/webfetch/preapproved.ts +0 -2
  305. package/src/tools/websearch/websearch.js +129 -8
  306. package/src/tools/websearch/websearch.ts +138 -6
  307. package/src/types.ts +450 -42
  308. package/src/ui/App.js +377 -58
  309. package/src/ui/App.tsx +576 -111
  310. package/src/ui/LiveArea.js +14 -8
  311. package/src/ui/LiveArea.tsx +14 -10
  312. package/src/ui/MessageList.js +63 -20
  313. package/src/ui/MessageList.tsx +101 -16
  314. package/src/ui/ModelPicker.js +7 -4
  315. package/src/ui/ModelPicker.tsx +55 -8
  316. package/src/ui/hooks/useChat.js +152 -163
  317. package/src/ui/hooks/useChat.ts +396 -334
  318. package/src/ui/loginCommand.js +56 -0
  319. package/src/ui/loginCommand.ts +63 -0
  320. package/src/ui/toolProgress.js +41 -0
  321. package/src/ui/toolProgress.ts +44 -0
  322. package/src/web/browserBridge.js +20 -2
  323. package/src/web/browserBridge.ts +20 -2
  324. package/src/web/protocol.ts +1897 -194
  325. package/workflows/adaptive-research/workflow.mjs +86 -0
  326. package/workflows/e2e-capabilities/workflow.mjs +102 -0
  327. package/workflows/e2e-llm/workflow.mjs +52 -0
  328. package/workflows/e2e-smoke/workflow.mjs +59 -0
  329. package/workflows/e2e-vision-schema/README.md +48 -0
  330. package/workflows/e2e-vision-schema/workflow.mjs +149 -0
  331. package/workflows/e2e-write-greet/workflow.mjs +37 -0
  332. package/workflows/file-census/README.md +14 -0
  333. package/workflows/file-census/scripts/.gitkeep +2 -0
  334. package/workflows/file-census/workflow.mjs +110 -0
  335. package/workflows/goal/README.md +166 -0
  336. package/workflows/goal/prompts/audit.md +57 -0
  337. package/workflows/goal/prompts/contract.md +56 -0
  338. package/workflows/goal/prompts/iterate.md +37 -0
  339. package/workflows/goal/workflow.mjs +501 -0
  340. package/workflows/illustrate/README.md +90 -0
  341. package/workflows/illustrate/assets/engines.json +20 -0
  342. package/workflows/illustrate/assets/extract-baidu.js +21 -0
  343. package/workflows/illustrate/assets/extract-bing.js +33 -0
  344. package/workflows/illustrate/assets/extract-google.js +31 -0
  345. package/workflows/illustrate/workflow.mjs +301 -0
  346. package/workflows/plan/workflow.mjs +389 -0
  347. package/workflows/question-crops/README.md +35 -0
  348. package/workflows/question-crops/prompts/inventory.md +23 -0
  349. package/workflows/question-crops/scripts/image-ops.mjs +305 -0
  350. package/workflows/question-crops/scripts/image-ops.test.mjs +95 -0
  351. package/workflows/question-crops/workflow.mjs +172 -0
  352. package/workflows/ralph-loop/workflow.mjs +162 -0
  353. package/workflows/research/DESIGN.md +449 -0
  354. package/workflows/research/README.md +74 -0
  355. package/workflows/research/prompts/s0-goal.md +43 -0
  356. package/workflows/research/prompts/s1-early-exit.md +22 -0
  357. package/workflows/research/prompts/s1-map.md +58 -0
  358. package/workflows/research/prompts/s2-options.md +53 -0
  359. package/workflows/research/prompts/s3-deep-dive.md +56 -0
  360. package/workflows/research/prompts/s4-verify.md +74 -0
  361. package/workflows/research/prompts/s5-synthesis.md +81 -0
  362. package/workflows/research/prompts/s5b-fill-gaps.md +32 -0
  363. package/workflows/research/prompts/s6-package.md +32 -0
  364. package/workflows/research/scripts/build-report.mjs +98 -0
  365. package/workflows/research/workflow.mjs +288 -0
  366. package/workflows/wechat-reading-shots/prompts/collect-params.md +16 -0
  367. package/workflows/wechat-reading-shots/prompts/evaluate.md +20 -0
  368. package/workflows/wechat-reading-shots/prompts/open-book.md +28 -0
  369. package/workflows/wechat-reading-shots/prompts/read-page.md +13 -0
  370. package/workflows/wechat-reading-shots/prompts/turn-batch.md +24 -0
  371. package/workflows/wechat-reading-shots/test/control-flow.test.ts +329 -0
  372. package/workflows/wechat-reading-shots/workflow.mjs +266 -0
  373. package/workflows/wrong-question-docx/README.md +55 -0
  374. package/workflows/wrong-question-docx/prompts/figure-qa.md +8 -0
  375. package/workflows/wrong-question-docx/prompts/transcribe.md +25 -0
  376. package/workflows/wrong-question-docx/scripts/workbook.mjs +857 -0
  377. package/workflows/wrong-question-docx/test/control-flow.test.ts +165 -0
  378. package/workflows/wrong-question-docx/test/workbook.test.mjs +303 -0
  379. package/workflows/wrong-question-docx/workflow.mjs +485 -0
  380. package/plugins/workflow-runner/src/agentCommon.js +0 -354
  381. package/plugins/workflow-runner/src/agentCommon.ts +0 -435
  382. package/plugins/workflow-runner/src/controlFlow/branch.js +0 -40
  383. package/plugins/workflow-runner/src/controlFlow/branch.ts +0 -46
  384. package/plugins/workflow-runner/src/controlFlow/loop.js +0 -211
  385. package/plugins/workflow-runner/src/controlFlow/loop.ts +0 -248
  386. package/plugins/workflow-runner/src/controlFlow/pause.js +0 -129
  387. package/plugins/workflow-runner/src/controlFlow/pause.ts +0 -141
  388. package/plugins/workflow-runner/src/controlFlow/signal.js +0 -21
  389. package/plugins/workflow-runner/src/controlFlow/signal.ts +0 -29
  390. package/plugins/workflow-runner/src/controlFlow/types.js +0 -18
  391. package/plugins/workflow-runner/src/controlFlow/types.ts +0 -63
  392. package/plugins/workflow-runner/src/dslManifest.js +0 -72
  393. package/plugins/workflow-runner/src/dslManifest.ts +0 -127
  394. package/plugins/workflow-runner/src/expressions.js +0 -618
  395. package/plugins/workflow-runner/src/expressions.ts +0 -622
  396. package/plugins/workflow-runner/src/loader.js +0 -573
  397. package/plugins/workflow-runner/src/loader.ts +0 -721
  398. package/plugins/workflow-runner/src/multimodal.js +0 -38
  399. package/plugins/workflow-runner/src/multimodal.ts +0 -64
  400. package/plugins/workflow-runner/src/recovery.js +0 -119
  401. package/plugins/workflow-runner/src/recovery.ts +0 -149
  402. package/plugins/workflow-runner/src/stepExecutors/agent.js +0 -173
  403. package/plugins/workflow-runner/src/stepExecutors/agent.ts +0 -234
  404. package/plugins/workflow-runner/src/stepExecutors/assert.js +0 -41
  405. package/plugins/workflow-runner/src/stepExecutors/assert.ts +0 -50
  406. package/plugins/workflow-runner/src/stepExecutors/echo.js +0 -31
  407. package/plugins/workflow-runner/src/stepExecutors/echo.ts +0 -38
  408. package/plugins/workflow-runner/src/stepExecutors/llm.js +0 -99
  409. package/plugins/workflow-runner/src/stepExecutors/llm.ts +0 -133
  410. package/plugins/workflow-runner/src/stepExecutors/set.js +0 -49
  411. package/plugins/workflow-runner/src/stepExecutors/set.ts +0 -56
  412. package/plugins/workflow-runner/src/stepExecutors/skill.js +0 -111
  413. package/plugins/workflow-runner/src/stepExecutors/skill.ts +0 -140
  414. package/plugins/workflow-runner/src/stepExecutors/tool.js +0 -208
  415. package/plugins/workflow-runner/src/stepExecutors/tool.ts +0 -256
  416. package/plugins/workflow-runner/src/stepExecutors/verify.js +0 -58
  417. package/plugins/workflow-runner/src/stepExecutors/verify.ts +0 -68
  418. package/plugins/workflow-runner/src/stepPipeline.js +0 -277
  419. package/plugins/workflow-runner/src/stepPipeline.ts +0 -366
  420. package/plugins/workflow-runner/test/agent.test.ts +0 -587
  421. package/plugins/workflow-runner/test/agentLlmError.test.ts +0 -373
  422. package/plugins/workflow-runner/test/bashBlacklist.sweep.test.ts +0 -65
  423. package/plugins/workflow-runner/test/captureMisbind.test.ts +0 -99
  424. package/plugins/workflow-runner/test/cli.e2e.test.ts +0 -147
  425. package/plugins/workflow-runner/test/context-files.test.ts +0 -320
  426. package/plugins/workflow-runner/test/e2e.test.ts +0 -370
  427. package/plugins/workflow-runner/test/engineRobustness.test.ts +0 -226
  428. package/plugins/workflow-runner/test/expressions.test.ts +0 -397
  429. package/plugins/workflow-runner/test/foundation.test.ts +0 -126
  430. package/plugins/workflow-runner/test/graceful.test.ts +0 -139
  431. package/plugins/workflow-runner/test/greedyInputs.load.test.ts +0 -47
  432. package/plugins/workflow-runner/test/hostCapability.test.ts +0 -108
  433. package/plugins/workflow-runner/test/illustrate.load.test.ts +0 -183
  434. package/plugins/workflow-runner/test/jsonPayload.test.ts +0 -83
  435. package/plugins/workflow-runner/test/loader.test.ts +0 -617
  436. package/plugins/workflow-runner/test/maxTurnsRetryDelay.test.ts +0 -33
  437. package/plugins/workflow-runner/test/multimodal.test.ts +0 -342
  438. package/plugins/workflow-runner/test/output-schema.test.ts +0 -213
  439. package/plugins/workflow-runner/test/parseWorkflowArgs.test.ts +0 -87
  440. package/plugins/workflow-runner/test/pluginRunner.isolation.test.ts +0 -269
  441. package/plugins/workflow-runner/test/ppt.load.test.ts +0 -1220
  442. package/plugins/workflow-runner/test/ralphLoop.e2e.test.ts +0 -220
  443. package/plugins/workflow-runner/test/recovery.test.ts +0 -265
  444. package/plugins/workflow-runner/test/runner.test.ts +0 -911
  445. package/plugins/workflow-runner/test/runnerPreflight.test.ts +0 -379
  446. package/plugins/workflow-runner/test/skillTurnDone.test.ts +0 -71
  447. package/plugins/workflow-runner/test/stateLifecycle.test.ts +0 -150
  448. package/plugins/workflow-runner/test/stepPipeline.test.ts +0 -114
  449. package/plugins/workflow-runner/test/taskArbitration.test.ts +0 -338
  450. package/plugins/workflow-runner/test/taskLifecycle.test.ts +0 -270
  451. package/plugins/workflow-runner/test/toolArtifactOverwrite.test.ts +0 -221
  452. package/plugins/workflow-runner/test/toolCapabilityBoundary.test.ts +0 -29
  453. package/plugins/workflow-runner/test/toolRuntimeIntegration.test.ts +0 -168
  454. package/plugins/workflow-runner/test/webppt.load.test.ts +0 -250
  455. package/plugins/workflow-runner/test/word.load.test.ts +0 -208
  456. package/plugins/workflow-runner/test/workflows.smoke.test.ts +0 -76
  457. package/plugins/workflow-runner/test/yamlGuardConditions.test.ts +0 -207
  458. package/src/advisorState.js +0 -22
  459. package/src/cli/configWizard.js +0 -293
  460. package/src/tools/toolProgressBridge.js +0 -48
  461. package/workflows/adaptive-research.yaml +0 -50
  462. package/workflows/book-review-short.yaml +0 -125
  463. package/workflows/e2e-write-greet.yaml +0 -31
  464. package/workflows/illustrate.yaml +0 -227
  465. package/workflows/plan.yaml +0 -470
  466. package/workflows/ppt.yaml +0 -1670
  467. package/workflows/ralph-loop.yaml +0 -199
  468. package/workflows/schema.json +0 -176
  469. package/workflows/webppt.yaml +0 -496
  470. package/workflows/wechat-reading-shots.yaml +0 -315
  471. package/workflows/word.yaml +0 -720
  472. package/workflows/youtube-shorts.yaml +0 -202
@@ -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。
@@ -0,0 +1,32 @@
1
+ 你在执行最后的「精选交付」步骤:把值得交付的验证脚本从 `{{dir}}/verify/` 精选、
2
+ 清理后复制进 `{{dir}}/deliverable/scripts/`。
3
+
4
+ `{{dir}}/verify/` 里的失败/废弃/探索性脚本是**过程记录,一律不进入交付目录**。
5
+
6
+ 请先 Read:
7
+ - `{{dir}}/05-verification.md`(哪些脚本验证通过、对应什么结论)
8
+ - `{{dir}}/06-synthesis.md` 的「三b、已通过脚本验证的关键结论」小节(哪些结论被最终引用)
9
+ - Glob `{{dir}}/verify/*`(现有脚本清单)
10
+
11
+ ## 筛选规则(**三条同时满足**才复制)
12
+ 1. 该脚本对应的验证记录是「验证通过」;
13
+ 2. 对应结论被 06-synthesis.md 引用了;
14
+ 3. 脚本能独立用 `bun run` / `node` 运行。
15
+
16
+ ## 复制时做最小整理
17
+ - 去掉纯调试用的打印;
18
+ - 文件头补 2-3 行注释:这个脚本验证什么结论、怎么运行、预期输出;
19
+ - 文件名要能看出验证内容(如 `verify_binance_kline_fetch.ts`,不要 `test3_v2.ts`)。
20
+
21
+ ## 必须写 `{{dir}}/deliverable/scripts/README.md`(脚本清单表)
22
+
23
+ | 脚本文件名 | 对应结论(简述) | 运行方式 | 预期输出说明 |
24
+ |---|---|---|---|
25
+
26
+ 交付目录里每个脚本都必须在表里有一行。
27
+ 若没有可交付脚本(提前退出路径 / 全部验证失败 / 全部待人工验证),
28
+ README 直接写明原因(例:「本次调研提前退出,未产生验证脚本」),**不要硬凑**。
29
+
30
+ ## 约束
31
+ - 只准往 `{{dir}}/deliverable/scripts/` 写,**不改 `{{dir}}/verify/` 里的原件**。
32
+ - 不确定某脚本是否该交付时,**宁可不交付**、在 README 里说明。
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * workflows/research/scripts/build-report.mjs —— 把各阶段产物拼装成最终报告
4
+ *
5
+ * 用法:node workflows/research/scripts/build-report.mjs <研究目录> <depth>
6
+ *
7
+ * 自 research.yaml 的 s6_build_report 迁移。原来是一大段 bash:
8
+ * sec() { sed -E 's/^(#+) /\1## /' "$1"; }
9
+ * 改写成 node 的三个理由(不是为了好看):
10
+ * ① **可移植**:原版依赖 `sed -E`、`set -euo pipefail`、`basename`,Windows 上要靠
11
+ * Git Bash 才有;宿主回落 cmd 时整段直接不可用(本项目为此踩过坑)。
12
+ * ② **可单独跑**:拼装出问题时 `node scripts/build-report.mjs out/research/x standard`
13
+ * 一条命令复现,不用启动整条工作流等前面五个阶段跑完。
14
+ * ③ **注入面为零**:原版把 depth 内插进 shell 命令体(虽是 enum 白名单所以当时安全),
15
+ * 这里根本不经过 shell。
16
+ *
17
+ * 标题降级的取舍与原版一致:子文档的 `#` 降两级成 `###`,落在章节 `##` 之下。
18
+ * 已知副作用:代码块里顶格的 `# 注释` 也会被降级 —— 纯视觉影响,不改语义。
19
+ */
20
+
21
+ import { existsSync, readFileSync, readdirSync, writeFileSync, mkdirSync } from 'node:fs';
22
+ import { basename, join } from 'node:path';
23
+
24
+ const [dir, depth = 'standard'] = process.argv.slice(2);
25
+ if (!dir) {
26
+ console.error('用法:build-report.mjs <研究目录> [depth]');
27
+ process.exit(1);
28
+ }
29
+
30
+ /** 读文件并把所有标题降两级;文件不存在返回占位说明而不是空串。 */
31
+ function section(file) {
32
+ if (!existsSync(file)) {
33
+ return `> ⚠️ 缺少 \`${basename(file)}\` —— 该阶段可能被跳过或失败,详见 progress.md。`;
34
+ }
35
+ return readFileSync(file, 'utf8').replace(/^(#+) /gm, '$1## ');
36
+ }
37
+
38
+ const out = [];
39
+ const push = (...lines) => out.push(...lines);
40
+ const rule = () => push('', '---', '');
41
+
42
+ push('# 技术研究报告', '');
43
+ push(`_调研深度:${depth} | 由 minimal-agent research 工作流自动生成_`);
44
+ rule();
45
+
46
+ push('## 1. 目标与边界', '');
47
+ push(section(join(dir, '01-goal.md')));
48
+ rule();
49
+
50
+ push('## 2. 领域地图', '');
51
+ push(section(join(dir, '02-map.md')));
52
+ rule();
53
+
54
+ push('## 3. 候选方案对比', '');
55
+ push(section(join(dir, '03-options.md')));
56
+ rule();
57
+
58
+ push('## 4. 深度调研', '');
59
+ let dives = [];
60
+ try {
61
+ dives = readdirSync(dir)
62
+ .filter((f) => f.startsWith('04-deep-dive-') && f.endsWith('.md'))
63
+ .sort();
64
+ } catch {
65
+ /* 目录读不到就当没有深挖文件 */
66
+ }
67
+ if (dives.length === 0) {
68
+ push('> 本次调研未产生深度调研分支(可能走了提前退出路径)。', '');
69
+ } else {
70
+ for (const f of dives) {
71
+ push(`### ${f.replace(/^04-deep-dive-/, '').replace(/\.md$/, '')}`, '');
72
+ push(section(join(dir, f)), '');
73
+ }
74
+ }
75
+ rule();
76
+
77
+ push('## 5. 动手验证', '');
78
+ push(section(join(dir, '05-verification.md')));
79
+ rule();
80
+
81
+ push('## 6. 综合结论与建议', '');
82
+ push(section(join(dir, '06-synthesis.md')));
83
+
84
+ if (existsSync(join(dir, '07-learning-debt.md'))) {
85
+ rule();
86
+ push('## 7. 学习债务与后续研究方向', '');
87
+ push(section(join(dir, '07-learning-debt.md')));
88
+ }
89
+
90
+ rule();
91
+ push('_本报告由 minimal-agent research 工作流自动生成。验证脚本见 deliverable/scripts/ 及其 README。_');
92
+
93
+ const target = join(dir, 'deliverable', 'report.md');
94
+ mkdirSync(join(dir, 'deliverable', 'scripts'), { recursive: true });
95
+ writeFileSync(target, `${out.join('\n')}\n`, 'utf8');
96
+
97
+ // 输出给调用方解析:路径 + 拼进去了几个深挖分支
98
+ console.log(JSON.stringify({ ok: true, path: target, dives: dives.length }));