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.
- package/README.md +6 -5
- package/package.json +60 -4
- package/plugins/computer_use/.claude-plugin/plugin.json +1 -1
- package/plugins/cron-runner/src/commands.js +4 -4
- package/plugins/cron-runner/src/commands.ts +4 -4
- package/plugins/workflow-runner/.claude-plugin/plugin.json +2 -2
- package/plugins/workflow-runner/commands/workflow.md +57 -90
- package/plugins/workflow-runner/commands/workflows.md +4 -4
- package/plugins/workflow-runner/plugin.js +24 -13
- package/plugins/workflow-runner/plugin.ts +28 -13
- package/plugins/workflow-runner/src/discovery.js +160 -0
- package/plugins/workflow-runner/src/discovery.ts +194 -0
- package/plugins/workflow-runner/src/goalAnchor.js +53 -0
- package/plugins/workflow-runner/src/goalAnchor.ts +59 -0
- package/plugins/workflow-runner/src/index.js +197 -206
- package/plugins/workflow-runner/src/index.ts +248 -249
- package/plugins/workflow-runner/src/inputCoercion.js +40 -0
- package/plugins/workflow-runner/src/inputCoercion.ts +43 -0
- package/plugins/workflow-runner/src/journal.js +224 -0
- package/plugins/workflow-runner/src/journal.ts +274 -0
- package/plugins/workflow-runner/src/jsonSchema.js +132 -0
- package/plugins/workflow-runner/src/jsonSchema.ts +162 -0
- package/plugins/workflow-runner/src/moduleResolution.js +64 -0
- package/plugins/workflow-runner/src/moduleResolution.ts +71 -0
- package/plugins/workflow-runner/src/resourceInputs.js +220 -0
- package/plugins/workflow-runner/src/resourceInputs.ts +300 -0
- package/plugins/workflow-runner/src/runner.js +400 -489
- package/plugins/workflow-runner/src/runner.ts +488 -560
- package/plugins/workflow-runner/src/runtime/config.js +46 -0
- package/plugins/workflow-runner/src/runtime/config.ts +69 -0
- package/plugins/workflow-runner/src/runtime/context.js +1304 -0
- package/plugins/workflow-runner/src/runtime/context.ts +1786 -0
- package/plugins/workflow-runner/src/runtime/exec.js +34 -0
- package/plugins/workflow-runner/src/runtime/exec.ts +53 -0
- package/plugins/workflow-runner/src/runtime/flow.js +8 -0
- package/plugins/workflow-runner/src/runtime/flow.ts +12 -0
- package/plugins/workflow-runner/src/runtime/fs.js +27 -0
- package/plugins/workflow-runner/src/runtime/fs.ts +41 -0
- package/plugins/workflow-runner/src/runtime/model.js +6 -0
- package/plugins/workflow-runner/src/runtime/model.ts +8 -0
- package/plugins/workflow-runner/src/runtime/output.js +7 -0
- package/plugins/workflow-runner/src/runtime/output.ts +21 -0
- package/plugins/workflow-runner/src/runtime/scheduler.js +141 -0
- package/plugins/workflow-runner/src/runtime/scheduler.ts +166 -0
- package/plugins/workflow-runner/src/runtime/state.js +16 -0
- package/plugins/workflow-runner/src/runtime/state.ts +19 -0
- package/plugins/workflow-runner/src/runtime/tools.js +3 -0
- package/plugins/workflow-runner/src/runtime/tools.ts +6 -0
- package/plugins/workflow-runner/src/sandbox.js +141 -0
- package/plugins/workflow-runner/src/sandbox.ts +182 -0
- package/plugins/workflow-runner/src/scriptGuard.d.mts +38 -0
- package/plugins/workflow-runner/src/scriptGuard.mjs +449 -0
- package/plugins/workflow-runner/src/taskIdentity.js +151 -307
- package/plugins/workflow-runner/src/taskIdentity.ts +207 -355
- package/plugins/workflow-runner/src/toolRuntime.js +29 -8
- package/plugins/workflow-runner/src/toolRuntime.ts +36 -11
- package/plugins/workflow-runner/src/types.js +7 -211
- package/plugins/workflow-runner/src/types.ts +154 -623
- package/plugins/workflow-runner/src/util.js +47 -0
- package/plugins/workflow-runner/src/util.ts +51 -0
- package/plugins/workflow-runner/src/workflowContext.js +20 -0
- package/plugins/workflow-runner/src/workflowContext.ts +58 -0
- package/plugins/workflow-runner/src/workflowDependencies.js +36 -0
- package/plugins/workflow-runner/src/workflowDependencies.ts +59 -0
- package/plugins/workflow-runner/src/workflowFingerprint.js +118 -0
- package/plugins/workflow-runner/src/workflowFingerprint.ts +122 -0
- package/plugins/workflow-runner/src/workflowState.js +474 -802
- package/plugins/workflow-runner/src/workflowState.ts +575 -970
- package/plugins/workflow-runner/test/api.test.ts +223 -0
- package/plugins/workflow-runner/test/apiCapabilities.test.ts +614 -0
- package/plugins/workflow-runner/test/apiConcurrencyGate.test.ts +104 -0
- package/plugins/workflow-runner/test/apiEcho.test.ts +210 -0
- package/plugins/workflow-runner/test/apiReadText.test.ts +178 -0
- package/plugins/workflow-runner/test/apiResourceLedger.test.ts +184 -0
- package/plugins/workflow-runner/test/childWorkflow.test.ts +304 -0
- package/plugins/workflow-runner/test/discovery.test.ts +234 -0
- package/plugins/workflow-runner/test/goalAnchor.test.ts +106 -0
- package/plugins/workflow-runner/test/goalController.test.ts +317 -0
- package/plugins/workflow-runner/test/journalLanes.test.ts +198 -0
- package/plugins/workflow-runner/test/listResources.test.ts +106 -0
- package/plugins/workflow-runner/test/resourceInputs.test.ts +294 -0
- package/plugins/workflow-runner/test/sandbox.test.ts +126 -0
- package/plugins/workflow-runner/test/scheduler.test.ts +70 -0
- package/plugins/workflow-runner/test/scriptGuard.test.ts +276 -0
- package/plugins/workflow-runner/test/skillDocSync.test.ts +78 -0
- package/plugins/workflow-runner/test/taskIdentity.test.ts +288 -179
- package/plugins/workflow-runner/test/workflowFingerprint.test.ts +106 -0
- package/plugins/workflow-runner/test/workflowState.test.ts +429 -0
- package/skills/pptx/examples/assets/cover-bg.svg +23 -0
- package/skills/pptx/examples/assets/icon-spark.svg +5 -0
- package/skills/ui-design/SKILL.md +5 -2
- package/skills/ui-design/references/layout-composition.md +1 -1
- package/skills/workflow-creator/SKILL.md +344 -0
- package/skills/workflow-creator/assets/template/workflow.mjs +48 -0
- package/skills/workflow-creator/references/api.md +216 -0
- package/skills/workflow-creator/references/migration.md +103 -0
- package/skills/workflow-creator/references/patterns.md +779 -0
- package/skills/workflow-creator/scripts/list-resources.mjs +205 -0
- package/skills/workflow-creator/scripts/scaffold.mjs +148 -0
- package/skills/workflow-creator/scripts/validate.mjs +275 -0
- package/skills/workflow-creator/scripts/workflow-creator.test.mjs +82 -0
- package/src/advisor/advisorCoordinator.js +503 -0
- package/src/advisor/advisorCoordinator.ts +657 -0
- package/src/cli/configMenu.tsx +0 -1
- package/src/cli/print.js +27 -6
- package/src/cli/print.ts +48 -4
- package/src/cli/streamJson.js +5 -6
- package/src/cli/streamJson.ts +8 -4
- package/src/cli/wizards/advisorWizard.js +4 -2
- package/src/cli/wizards/advisorWizard.tsx +8 -2
- package/src/cli/wizards/contextAdvisorWizard.js +5 -4
- package/src/cli/wizards/contextAdvisorWizard.tsx +7 -6
- package/src/collaboration/taskFlow.js +115 -0
- package/src/collaboration/taskFlow.ts +169 -0
- package/src/config/configDefaults.js +41 -1
- package/src/config/configDefaults.ts +43 -1
- package/src/config/configDiagnostics.ts +2 -2
- package/src/config/configFile.js +40 -9
- package/src/config/configFile.ts +60 -11
- package/src/config/configService.js +419 -74
- package/src/config/configService.ts +703 -145
- package/src/config/numericLimits.js +22 -0
- package/src/config/numericLimits.ts +24 -0
- package/src/config.js +1 -0
- package/src/config.ts +3 -2
- package/src/context/budgetPlan.js +1 -1
- package/src/context/budgetPlan.ts +1 -1
- package/src/context/compact.js +7 -2
- package/src/context/compact.ts +9 -2
- package/src/context/microCompactLite.js +212 -13
- package/src/context/microCompactLite.ts +261 -12
- package/src/context/sessionRegistry.js +8 -1
- package/src/context/sessionRegistry.ts +18 -5
- package/src/context/toolResultArchive.js +72 -0
- package/src/context/toolResultArchive.ts +95 -0
- package/src/goal/errors.js +8 -0
- package/src/goal/errors.ts +18 -0
- package/src/goal/goalRuntime.js +344 -0
- package/src/goal/goalRuntime.ts +466 -0
- package/src/goal/goalStore.js +200 -0
- package/src/goal/goalStore.ts +219 -0
- package/src/goal/index.js +4 -0
- package/src/goal/index.ts +4 -0
- package/src/goal/statusMapping.js +71 -0
- package/src/goal/statusMapping.ts +95 -0
- package/src/goal/types.js +7 -0
- package/src/goal/types.ts +179 -0
- package/src/goal/workflowController.js +306 -0
- package/src/goal/workflowController.ts +360 -0
- package/src/harness/evidenceLedger.js +2 -0
- package/src/harness/evidenceLedger.ts +1 -0
- package/src/harness/stallGuard.js +9 -3
- package/src/harness/stallGuard.ts +7 -3
- package/src/images/imageResolver.js +161 -0
- package/src/images/imageResolver.ts +189 -0
- package/src/infra/verification.js +34 -5
- package/src/infra/verification.ts +39 -4
- package/src/llm/client.js +79 -21
- package/src/llm/client.ts +182 -35
- package/src/llm/gatewayClient.js +201 -0
- package/src/llm/gatewayClient.ts +299 -0
- package/src/llm/messageProvenance.js +46 -0
- package/src/llm/messageProvenance.ts +58 -0
- package/src/llm/modelProvider.js +1 -0
- package/src/llm/modelProvider.ts +22 -0
- package/src/llm/providers/anthropicFormat.js +108 -1
- package/src/llm/providers/anthropicFormat.ts +115 -4
- package/src/llm/providers/openaiFormat.js +9 -0
- package/src/llm/providers/openaiFormat.ts +12 -3
- package/src/loop.js +319 -54
- package/src/loop.ts +373 -57
- package/src/main.js +4 -1
- package/src/main.tsx +4 -1
- package/src/managedExecution/index.js +2 -0
- package/src/managedExecution/index.ts +2 -0
- package/src/managedExecution/registry.js +15 -0
- package/src/managedExecution/registry.ts +20 -0
- package/src/managedExecution/types.js +1 -0
- package/src/managedExecution/types.ts +86 -0
- package/src/modelRef.js +9 -0
- package/src/modelRef.ts +31 -0
- package/src/multimodal.js +14 -28
- package/src/multimodal.ts +17 -33
- package/src/net/lanDiscovery.js +65 -0
- package/src/net/lanDiscovery.ts +82 -0
- package/src/plugin-sdk.js +28 -3
- package/src/plugin-sdk.ts +39 -6
- package/src/plugins/pluginApi.ts +16 -1
- package/src/plugins/pluginLoader.js +4 -0
- package/src/plugins/pluginLoader.ts +6 -0
- package/src/plugins/pluginRunner.js +139 -7
- package/src/plugins/pluginRunner.ts +173 -9
- package/src/plugins/slashFallback.js +113 -0
- package/src/plugins/slashFallback.ts +137 -0
- package/src/prompts/policyRegistry.js +12 -32
- package/src/prompts/policyRegistry.ts +15 -32
- package/src/prompts/promptAssembly.js +103 -12
- package/src/prompts/promptAssembly.ts +114 -12
- package/src/prompts/skillList.js +21 -3
- package/src/prompts/skillList.ts +27 -2
- package/src/prompts/stableSystemPrompt.js +18 -0
- package/src/prompts/stableSystemPrompt.ts +33 -0
- package/src/runtime/agentRuntimeContext.js +8 -2
- package/src/runtime/agentRuntimeContext.ts +17 -4
- package/src/session/runAgentTurn.js +78 -12
- package/src/session/runAgentTurn.ts +105 -23
- package/src/session/runTurn.js +10 -9
- package/src/session/runTurn.ts +17 -8
- package/src/session/sessionState.ts +2 -0
- package/src/team/auth.js +186 -0
- package/src/team/auth.ts +298 -0
- package/src/team/cli.js +105 -0
- package/src/team/cli.ts +122 -0
- package/src/team/onlineToolContract.js +64 -0
- package/src/team/onlineToolContract.ts +109 -0
- package/src/team/toolPolicy.js +36 -0
- package/src/team/toolPolicy.ts +75 -0
- package/src/tools/advisor/advisor.js +90 -46
- package/src/tools/advisor/advisor.ts +100 -47
- package/src/tools/advisor/advisorDecision.js +71 -0
- package/src/tools/advisor/advisorDecision.ts +85 -0
- package/src/tools/agent/agent.js +18 -5
- package/src/tools/agent/agent.ts +21 -7
- package/src/tools/agent/agentControl.js +246 -0
- package/src/tools/agent/agentControl.ts +284 -0
- package/src/tools/agent/agentTaskService.js +40 -1
- package/src/tools/agent/agentTaskService.ts +44 -1
- package/src/tools/agent/agentTypes.js +14 -2
- package/src/tools/agent/agentTypes.ts +15 -2
- package/src/tools/applypatch/applyPatch.js +362 -0
- package/src/tools/applypatch/applyPatch.ts +428 -0
- package/src/tools/bash/bash.js +22 -15
- package/src/tools/bash/bash.ts +23 -17
- package/src/tools/capabilities.js +10 -5
- package/src/tools/capabilities.ts +10 -5
- package/src/tools/computeruse/computerIntent.js +32 -0
- package/src/tools/computeruse/computerIntent.ts +46 -0
- package/src/tools/computeruse/telemetryLog.js +12 -0
- package/src/tools/computeruse/telemetryLog.ts +16 -0
- package/src/tools/computeruse/vision/telemetry.js +1 -0
- package/src/tools/computeruse/vision/telemetry.ts +1 -0
- package/src/tools/effectiveToolSet.js +4 -0
- package/src/tools/effectiveToolSet.ts +4 -0
- package/src/tools/index.js +21 -2
- package/src/tools/index.ts +33 -2
- package/src/tools/presentresult/presentresult.js +6 -15
- package/src/tools/presentresult/presentresult.ts +6 -15
- package/src/tools/read/read.js +62 -9
- package/src/tools/read/read.ts +63 -9
- package/src/tools/shared/fileUtils.js +1 -2
- package/src/tools/shared/fileUtils.ts +1 -2
- package/src/tools/shared/toolOutputStore.js +23 -1
- package/src/tools/shared/toolOutputStore.ts +22 -1
- package/src/tools/skill/skill.js +9 -3
- package/src/tools/skill/skill.ts +8 -4
- package/src/tools/toolPromptGuides.js +117 -0
- package/src/tools/toolPromptGuides.ts +137 -0
- package/src/tools/webbrowser/agentBrowserPath.js +19 -9
- package/src/tools/webbrowser/agentBrowserPath.ts +70 -28
- package/src/tools/webbrowser/browser.js +27 -11
- package/src/tools/webbrowser/browser.ts +68 -24
- package/src/tools/webbrowser/browserAutomation.js +329 -0
- package/src/tools/webbrowser/browserAutomation.ts +467 -0
- package/src/tools/webbrowser/browserAxState.js +97 -0
- package/src/tools/webbrowser/browserAxState.ts +142 -0
- package/src/tools/webbrowser/browserBatch.js +1578 -0
- package/src/tools/webbrowser/browserBatch.ts +2382 -0
- package/src/tools/webbrowser/browserCdp.js +208 -0
- package/src/tools/webbrowser/browserCdp.ts +255 -0
- package/src/tools/webbrowser/browserConditions.js +24 -0
- package/src/tools/webbrowser/browserConditions.ts +45 -0
- package/src/tools/webbrowser/browserContent.js +281 -0
- package/src/tools/webbrowser/browserContent.ts +438 -0
- package/src/tools/webbrowser/browserControl.js +131 -34
- package/src/tools/webbrowser/browserControl.ts +210 -56
- package/src/tools/webbrowser/browserDaemon.js +22 -14
- package/src/tools/webbrowser/browserDaemon.ts +54 -21
- package/src/tools/webbrowser/browserFrames.js +47 -0
- package/src/tools/webbrowser/browserFrames.ts +54 -0
- package/src/tools/webbrowser/browserInteractionResolver.js +17 -0
- package/src/tools/webbrowser/browserInteractionResolver.ts +40 -0
- package/src/tools/webbrowser/browserLocator.js +140 -0
- package/src/tools/webbrowser/browserLocator.ts +194 -0
- package/src/tools/webbrowser/browserOutcome.js +10 -17
- package/src/tools/webbrowser/browserOutcome.ts +48 -31
- package/src/tools/webbrowser/browserRecovery.js +58 -0
- package/src/tools/webbrowser/browserRecovery.ts +83 -0
- package/src/tools/webbrowser/browserRunRegistry.js +35 -3
- package/src/tools/webbrowser/browserRunRegistry.ts +91 -15
- package/src/tools/webbrowser/browserService.js +28 -2
- package/src/tools/webbrowser/browserService.ts +49 -9
- package/src/tools/webbrowser/browserStream.js +132 -33
- package/src/tools/webbrowser/browserStream.ts +224 -50
- package/src/tools/webbrowser/browserTabs.js +48 -15
- package/src/tools/webbrowser/browserTabs.ts +178 -96
- package/src/tools/webbrowser/webbrowser.js +679 -144
- package/src/tools/webbrowser/webbrowser.ts +975 -236
- package/src/tools/webfetch/preapproved.js +0 -2
- package/src/tools/webfetch/preapproved.ts +0 -2
- package/src/tools/websearch/websearch.js +129 -8
- package/src/tools/websearch/websearch.ts +138 -6
- package/src/types.ts +440 -38
- package/src/ui/App.js +377 -58
- package/src/ui/App.tsx +576 -111
- package/src/ui/LiveArea.js +14 -8
- package/src/ui/LiveArea.tsx +14 -10
- package/src/ui/MessageList.js +63 -20
- package/src/ui/MessageList.tsx +101 -16
- package/src/ui/ModelPicker.js +7 -4
- package/src/ui/ModelPicker.tsx +55 -8
- package/src/ui/hooks/useChat.js +152 -163
- package/src/ui/hooks/useChat.ts +396 -334
- package/src/ui/loginCommand.js +56 -0
- package/src/ui/loginCommand.ts +63 -0
- package/src/ui/toolProgress.js +41 -0
- package/src/ui/toolProgress.ts +44 -0
- package/src/web/browserBridge.js +20 -2
- package/src/web/browserBridge.ts +20 -2
- package/src/web/protocol.ts +1897 -194
- package/workflows/adaptive-research/workflow.mjs +86 -0
- package/workflows/e2e-capabilities/workflow.mjs +102 -0
- package/workflows/e2e-llm/workflow.mjs +52 -0
- package/workflows/e2e-smoke/workflow.mjs +59 -0
- package/workflows/e2e-vision-schema/README.md +48 -0
- package/workflows/e2e-vision-schema/workflow.mjs +149 -0
- package/workflows/e2e-write-greet/workflow.mjs +37 -0
- package/workflows/file-census/README.md +14 -0
- package/workflows/file-census/scripts/.gitkeep +2 -0
- package/workflows/file-census/workflow.mjs +110 -0
- package/workflows/goal/README.md +166 -0
- package/workflows/goal/prompts/audit.md +57 -0
- package/workflows/goal/prompts/contract.md +56 -0
- package/workflows/goal/prompts/iterate.md +37 -0
- package/workflows/goal/workflow.mjs +501 -0
- package/workflows/illustrate/README.md +90 -0
- package/workflows/illustrate/assets/engines.json +20 -0
- package/workflows/illustrate/assets/extract-baidu.js +21 -0
- package/workflows/illustrate/assets/extract-bing.js +33 -0
- package/workflows/illustrate/assets/extract-google.js +31 -0
- package/workflows/illustrate/workflow.mjs +301 -0
- package/workflows/plan/workflow.mjs +389 -0
- package/workflows/question-crops/README.md +35 -0
- package/workflows/question-crops/prompts/inventory.md +23 -0
- package/workflows/question-crops/scripts/image-ops.mjs +305 -0
- package/workflows/question-crops/scripts/image-ops.test.mjs +95 -0
- package/workflows/question-crops/workflow.mjs +172 -0
- package/workflows/ralph-loop/workflow.mjs +162 -0
- package/workflows/research/README.md +74 -0
- package/workflows/research/prompts/s0-goal.md +43 -0
- package/workflows/research/prompts/s1-early-exit.md +22 -0
- package/workflows/research/prompts/s1-map.md +58 -0
- package/workflows/research/prompts/s2-options.md +53 -0
- package/workflows/research/prompts/s3-deep-dive.md +56 -0
- package/workflows/research/prompts/s4-verify.md +74 -0
- package/workflows/research/prompts/s5-synthesis.md +81 -0
- package/workflows/research/prompts/s5b-fill-gaps.md +32 -0
- package/workflows/research/prompts/s6-package.md +32 -0
- package/workflows/research/scripts/build-report.mjs +98 -0
- package/workflows/research/workflow.mjs +288 -0
- package/workflows/wechat-reading-shots/prompts/collect-params.md +16 -0
- package/workflows/wechat-reading-shots/prompts/evaluate.md +20 -0
- package/workflows/wechat-reading-shots/prompts/open-book.md +28 -0
- package/workflows/wechat-reading-shots/prompts/read-page.md +13 -0
- package/workflows/wechat-reading-shots/prompts/turn-batch.md +24 -0
- package/workflows/wechat-reading-shots/test/control-flow.test.ts +329 -0
- package/workflows/wechat-reading-shots/workflow.mjs +266 -0
- package/workflows/wrong-question-docx/README.md +55 -0
- package/workflows/wrong-question-docx/prompts/figure-qa.md +8 -0
- package/workflows/wrong-question-docx/prompts/transcribe.md +25 -0
- package/workflows/wrong-question-docx/scripts/workbook.mjs +857 -0
- package/workflows/wrong-question-docx/test/control-flow.test.ts +165 -0
- package/workflows/wrong-question-docx/test/workbook.test.mjs +303 -0
- package/workflows/wrong-question-docx/workflow.mjs +485 -0
- package/plugins/workflow-runner/src/agentCommon.js +0 -354
- package/plugins/workflow-runner/src/agentCommon.ts +0 -435
- package/plugins/workflow-runner/src/controlFlow/branch.js +0 -40
- package/plugins/workflow-runner/src/controlFlow/branch.ts +0 -46
- package/plugins/workflow-runner/src/controlFlow/loop.js +0 -211
- package/plugins/workflow-runner/src/controlFlow/loop.ts +0 -248
- package/plugins/workflow-runner/src/controlFlow/pause.js +0 -129
- package/plugins/workflow-runner/src/controlFlow/pause.ts +0 -141
- package/plugins/workflow-runner/src/controlFlow/signal.js +0 -21
- package/plugins/workflow-runner/src/controlFlow/signal.ts +0 -29
- package/plugins/workflow-runner/src/controlFlow/types.js +0 -18
- package/plugins/workflow-runner/src/controlFlow/types.ts +0 -63
- package/plugins/workflow-runner/src/dslManifest.js +0 -72
- package/plugins/workflow-runner/src/dslManifest.ts +0 -127
- package/plugins/workflow-runner/src/expressions.js +0 -639
- package/plugins/workflow-runner/src/expressions.ts +0 -640
- package/plugins/workflow-runner/src/loader.js +0 -573
- package/plugins/workflow-runner/src/loader.ts +0 -721
- package/plugins/workflow-runner/src/multimodal.js +0 -38
- package/plugins/workflow-runner/src/multimodal.ts +0 -64
- package/plugins/workflow-runner/src/recovery.js +0 -126
- package/plugins/workflow-runner/src/recovery.ts +0 -156
- package/plugins/workflow-runner/src/stepExecutors/agent.js +0 -173
- package/plugins/workflow-runner/src/stepExecutors/agent.ts +0 -234
- package/plugins/workflow-runner/src/stepExecutors/assert.js +0 -42
- package/plugins/workflow-runner/src/stepExecutors/assert.ts +0 -52
- package/plugins/workflow-runner/src/stepExecutors/echo.js +0 -31
- package/plugins/workflow-runner/src/stepExecutors/echo.ts +0 -38
- package/plugins/workflow-runner/src/stepExecutors/llm.js +0 -99
- package/plugins/workflow-runner/src/stepExecutors/llm.ts +0 -133
- package/plugins/workflow-runner/src/stepExecutors/set.js +0 -49
- package/plugins/workflow-runner/src/stepExecutors/set.ts +0 -56
- package/plugins/workflow-runner/src/stepExecutors/skill.js +0 -111
- package/plugins/workflow-runner/src/stepExecutors/skill.ts +0 -140
- package/plugins/workflow-runner/src/stepExecutors/tool.js +0 -227
- package/plugins/workflow-runner/src/stepExecutors/tool.ts +0 -274
- package/plugins/workflow-runner/src/stepExecutors/verify.js +0 -61
- package/plugins/workflow-runner/src/stepExecutors/verify.ts +0 -72
- package/plugins/workflow-runner/src/stepPipeline.js +0 -277
- package/plugins/workflow-runner/src/stepPipeline.ts +0 -366
- package/plugins/workflow-runner/test/agent.test.ts +0 -587
- package/plugins/workflow-runner/test/agentLlmError.test.ts +0 -373
- package/plugins/workflow-runner/test/bashBlacklist.sweep.test.ts +0 -65
- package/plugins/workflow-runner/test/captureMisbind.test.ts +0 -99
- package/plugins/workflow-runner/test/cli.e2e.test.ts +0 -167
- package/plugins/workflow-runner/test/context-files.test.ts +0 -320
- package/plugins/workflow-runner/test/e2e.test.ts +0 -370
- package/plugins/workflow-runner/test/e2eNewLayout.test.ts +0 -314
- package/plugins/workflow-runner/test/engineRobustness.test.ts +0 -234
- package/plugins/workflow-runner/test/expressions.test.ts +0 -439
- package/plugins/workflow-runner/test/foundation.test.ts +0 -126
- package/plugins/workflow-runner/test/graceful.test.ts +0 -139
- package/plugins/workflow-runner/test/greedyInputs.load.test.ts +0 -47
- package/plugins/workflow-runner/test/hostCapability.test.ts +0 -108
- package/plugins/workflow-runner/test/illustrate.load.test.ts +0 -183
- package/plugins/workflow-runner/test/jsonPayload.test.ts +0 -83
- package/plugins/workflow-runner/test/loader.test.ts +0 -617
- package/plugins/workflow-runner/test/maxTurnsRetryDelay.test.ts +0 -33
- package/plugins/workflow-runner/test/multimodal.test.ts +0 -342
- package/plugins/workflow-runner/test/output-schema.test.ts +0 -213
- package/plugins/workflow-runner/test/parseWorkflowArgs.test.ts +0 -106
- package/plugins/workflow-runner/test/pluginRunner.isolation.test.ts +0 -269
- package/plugins/workflow-runner/test/ppt.load.test.ts +0 -1220
- package/plugins/workflow-runner/test/ralphLoop.e2e.test.ts +0 -221
- package/plugins/workflow-runner/test/recovery.test.ts +0 -265
- package/plugins/workflow-runner/test/research.load.test.ts +0 -328
- package/plugins/workflow-runner/test/runner.test.ts +0 -911
- package/plugins/workflow-runner/test/runnerPreflight.test.ts +0 -436
- package/plugins/workflow-runner/test/skillTurnDone.test.ts +0 -71
- package/plugins/workflow-runner/test/stateLifecycle.test.ts +0 -198
- package/plugins/workflow-runner/test/stepPipeline.test.ts +0 -114
- package/plugins/workflow-runner/test/taskArbitration.test.ts +0 -354
- package/plugins/workflow-runner/test/taskLifecycle.test.ts +0 -324
- package/plugins/workflow-runner/test/toolArtifactOverwrite.test.ts +0 -221
- package/plugins/workflow-runner/test/toolCapabilityBoundary.test.ts +0 -29
- package/plugins/workflow-runner/test/toolRuntimeIntegration.test.ts +0 -168
- package/plugins/workflow-runner/test/webppt.load.test.ts +0 -250
- package/plugins/workflow-runner/test/word.load.test.ts +0 -208
- package/plugins/workflow-runner/test/workflows.smoke.test.ts +0 -76
- package/plugins/workflow-runner/test/yamlGuardConditions.test.ts +0 -207
- package/src/advisorState.js +0 -22
- package/src/cli/configWizard.js +0 -293
- package/src/tools/toolProgressBridge.js +0 -48
- package/workflows/adaptive-research.yaml +0 -50
- package/workflows/book-review-short.yaml +0 -125
- package/workflows/e2e-write-greet.yaml +0 -31
- package/workflows/illustrate.yaml +0 -227
- package/workflows/plan.yaml +0 -470
- package/workflows/ppt.yaml +0 -1670
- package/workflows/ralph-loop.yaml +0 -201
- package/workflows/research.yaml +0 -873
- package/workflows/schema.json +0 -176
- package/workflows/webppt.yaml +0 -496
- package/workflows/wechat-reading-shots.yaml +0 -315
- package/workflows/word.yaml +0 -720
- package/workflows/youtube-shorts.yaml +0 -202
- /package/workflows/{research.md → research/DESIGN.md} +0 -0
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
- **内置工具系统**:文件与终端、网页检索、媒体生成、结果交付、长期记忆、结构化提问、顾问、Computer Use 和并行 Agent。
|
|
26
26
|
- **OpenAI 兼容**:Message 形状对齐 Chat Completions,一套代码接 MiniMax / 火山 ARK / DeepSeek / OpenAI / Moonshot…
|
|
27
27
|
- **Skills 系统**:放一个 `SKILL.md` 就能扩展能力,运行时实时扫描注入 prompt,改文件即生效
|
|
28
|
-
- **插件系统**:`plugins/<id>/` drop-in,自带 `/workflow
|
|
28
|
+
- **插件系统**:`plugins/<id>/` drop-in,自带 `/workflow`(代码编排工作流引擎——工作流是一个目录,入口 `workflow.mjs` 用 JS 原生控制流编排 agent)
|
|
29
29
|
- **自动上下文压缩**:接近上限时把旧对话压成摘要,保留系统提示 + 摘要 + 最近几条
|
|
30
30
|
- **多 session + 归档**:同一工作目录多个并行会话,`/new` 归档、`/restore` 恢复
|
|
31
31
|
- **Markdown 长期记忆**:全局人格与偏好、按工作目录隔离的项目记忆,可通过自然语言新增、更新、召回和删除
|
|
@@ -116,7 +116,7 @@ minimal-agent -p --output-format json "做点事" # 一行结构化结
|
|
|
116
116
|
| `-v` / `--verbose` | stderr 显示工具调用、压缩等过程 |
|
|
117
117
|
| `-d <dir>` / `--cwd <dir>` | 指定工作目录(不存在自动创建),隔离文件视图与会话 |
|
|
118
118
|
| `--output-format <text\|json>` | `text`(默认,纯文本答案)/ `json`(一行结局契约) |
|
|
119
|
-
| `--max-turns <n>` | 最大工具循环轮数(防失控,默认
|
|
119
|
+
| `--max-turns <n>` | 最大工具循环轮数(防失控,默认 200) |
|
|
120
120
|
| `-V` / `--version` · `-h` / `--help` | 版本 / 帮助 |
|
|
121
121
|
|
|
122
122
|
**`--output-format json` 结局契约**(供宿主程序可靠 spawn):
|
|
@@ -160,7 +160,7 @@ minimal-agent -p --output-format json "做点事" # 一行结构化结
|
|
|
160
160
|
- **Skills**:每个 `skills/<name>/SKILL.md`(带 frontmatter)。运行时实时扫描注入 prompt,prompt 体按需懒加载。
|
|
161
161
|
cwd 优先、包内 fallback,用户可在自己项目里覆盖或新增。内置 20+ 个(`/init`、`/config`、文档生成、设计等)。
|
|
162
162
|
- **插件**(`plugins/<id>/`,drop-in,`src/` 一行不改):
|
|
163
|
-
- **`/workflow` · `/workflows`**(workflow-runner)——
|
|
163
|
+
- **`/workflow` · `/workflows`**(workflow-runner)—— 代码编排工作流引擎。一个工作流 = 一个目录(`workflows/<名字>/`),入口 `workflow.mjs` 是真实 ESM 模块(`export default async function run(wf)`),控制流直接用 JS 原生的 `if`/`for`/`while`/带标签 `break`/`try`,引擎提供一个分组能力对象 `wf`(`wf.model` `wf.tools` `wf.exec` `wf.fs` `wf.flow` `wf.check` `wf.state` `wf.output`)并负责断点续跑。内置 `plan` / `research` / `ralph-loop` 等工作流
|
|
164
164
|
- **可视化编辑器**:`../minimal-workflow/` 子项目(与本仓库平级,Bun + Vite + React Flow)拖拽编排 workflow YAML(不属于 npm 发布物)。
|
|
165
165
|
|
|
166
166
|
---
|
|
@@ -193,12 +193,13 @@ bun run start # 运行(= bun run src/main.tsx)
|
|
|
193
193
|
bun run dev # watch 热重载
|
|
194
194
|
bun test # 跑所有测试
|
|
195
195
|
bun run typecheck # tsc --noEmit
|
|
196
|
-
bun run build #
|
|
196
|
+
bun run build # 隔离验证 npm 编译,结束后自动清理原地产物
|
|
197
197
|
bun run clean # 删除原地编译产物
|
|
198
198
|
```
|
|
199
199
|
|
|
200
200
|
格式/检查用 **Biome**(2 空格缩进、单引号、80 列)。模块解析 NodeNext:源码 import 统一写 `.js` 后缀,
|
|
201
|
-
dev 下 Bun 透明回退到 `.ts`
|
|
201
|
+
dev 下 Bun 透明回退到 `.ts` 兄弟;`prepack` 临时原地产出 `.js`,
|
|
202
|
+
`postpack` 随即清理,避免生成文件遮蔽后续源码修改。
|
|
202
203
|
|
|
203
204
|
## 架构速览
|
|
204
205
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "minimal-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Bun-first 的本地 Agent 内核,支持工具、插件、工作流、上下文压缩、长期记忆与 OpenAI 兼容接口;Tauri 桌面宿主和 Node.js npm 发布可复用同一内核",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"author": "Bill Wang <leiwang0359@gmail.com>",
|
|
@@ -30,6 +30,14 @@
|
|
|
30
30
|
"minimal-agent": "src/main.js"
|
|
31
31
|
},
|
|
32
32
|
"exports": {
|
|
33
|
+
"./lan-discovery": {
|
|
34
|
+
"types": "./src/net/lanDiscovery.ts",
|
|
35
|
+
"default": "./src/net/lanDiscovery.ts"
|
|
36
|
+
},
|
|
37
|
+
"./task-flow": {
|
|
38
|
+
"types": "./src/collaboration/taskFlow.ts",
|
|
39
|
+
"default": "./src/collaboration/taskFlow.ts"
|
|
40
|
+
},
|
|
33
41
|
"./protocol": {
|
|
34
42
|
"types": "./src/web/protocol.ts",
|
|
35
43
|
"bun": "./src/web/protocol.ts",
|
|
@@ -55,6 +63,21 @@
|
|
|
55
63
|
"bun": "./src/config/configDiagnostics.ts",
|
|
56
64
|
"default": "./src/config/configDiagnostics.js"
|
|
57
65
|
},
|
|
66
|
+
"./config-defaults": {
|
|
67
|
+
"types": "./src/config/configDefaults.ts",
|
|
68
|
+
"bun": "./src/config/configDefaults.ts",
|
|
69
|
+
"default": "./src/config/configDefaults.js"
|
|
70
|
+
},
|
|
71
|
+
"./model-ref": {
|
|
72
|
+
"types": "./src/modelRef.ts",
|
|
73
|
+
"bun": "./src/modelRef.ts",
|
|
74
|
+
"default": "./src/modelRef.js"
|
|
75
|
+
},
|
|
76
|
+
"./online-tool-contract": {
|
|
77
|
+
"types": "./src/team/onlineToolContract.ts",
|
|
78
|
+
"bun": "./src/team/onlineToolContract.ts",
|
|
79
|
+
"default": "./src/team/onlineToolContract.js"
|
|
80
|
+
},
|
|
58
81
|
"./memory-service": {
|
|
59
82
|
"types": "./src/memory/memoryService.ts",
|
|
60
83
|
"bun": "./src/memory/memoryService.ts",
|
|
@@ -75,6 +98,26 @@
|
|
|
75
98
|
"bun": "./src/runtime/agentRuntimeContext.ts",
|
|
76
99
|
"default": "./src/runtime/agentRuntimeContext.js"
|
|
77
100
|
},
|
|
101
|
+
"./image-resolver": {
|
|
102
|
+
"types": "./src/images/imageResolver.ts",
|
|
103
|
+
"bun": "./src/images/imageResolver.ts",
|
|
104
|
+
"default": "./src/images/imageResolver.js"
|
|
105
|
+
},
|
|
106
|
+
"./computer-intent": {
|
|
107
|
+
"types": "./src/tools/computeruse/computerIntent.ts",
|
|
108
|
+
"bun": "./src/tools/computeruse/computerIntent.ts",
|
|
109
|
+
"default": "./src/tools/computeruse/computerIntent.js"
|
|
110
|
+
},
|
|
111
|
+
"./goal-runtime": {
|
|
112
|
+
"types": "./src/goal/index.ts",
|
|
113
|
+
"bun": "./src/goal/index.ts",
|
|
114
|
+
"default": "./src/goal/index.js"
|
|
115
|
+
},
|
|
116
|
+
"./goal-status": {
|
|
117
|
+
"types": "./src/goal/statusMapping.ts",
|
|
118
|
+
"bun": "./src/goal/statusMapping.ts",
|
|
119
|
+
"default": "./src/goal/statusMapping.js"
|
|
120
|
+
},
|
|
78
121
|
"./provider-presets": {
|
|
79
122
|
"types": "./src/cli/wizards/providerPresets.ts",
|
|
80
123
|
"bun": "./src/cli/wizards/providerPresets.ts",
|
|
@@ -99,7 +142,9 @@
|
|
|
99
142
|
"src/**/*.d.ts",
|
|
100
143
|
"plugins/**/*.ts",
|
|
101
144
|
"plugins/**/*.js",
|
|
145
|
+
"plugins/**/*.mjs",
|
|
102
146
|
"plugins/**/*.d.ts",
|
|
147
|
+
"plugins/**/*.d.mts",
|
|
103
148
|
"plugins/**/.claude-plugin/**",
|
|
104
149
|
"plugins/**/commands/**",
|
|
105
150
|
"plugins/**/hooks/**",
|
|
@@ -118,26 +163,36 @@
|
|
|
118
163
|
"scripts": {
|
|
119
164
|
"start": "bun run clean && bun run src/main.tsx",
|
|
120
165
|
"dev": "bun run clean && bun --watch src/main.tsx",
|
|
121
|
-
"build": "
|
|
166
|
+
"build": "bun scripts/build-npm.ts",
|
|
167
|
+
"build:emit": "tsc --build",
|
|
122
168
|
"clean": "bun scripts/clean-build.ts",
|
|
123
169
|
"check:build-artifacts": "bun scripts/check-build-artifacts.ts",
|
|
124
|
-
"test": "bun run clean && bun test",
|
|
170
|
+
"test": "bun run clean && bun run test:unit && bun run test:bench",
|
|
171
|
+
"test:unit": "bun test '--path-ignore-patterns=**/browserBench*'",
|
|
172
|
+
"test:bench": "bun test test/browserBench.test.ts",
|
|
125
173
|
"typecheck": "tsc --noEmit -p tsconfig.typecheck.json",
|
|
126
174
|
"verify-all": "bun scripts/verify-all.ts",
|
|
127
175
|
"eval:harness": "bun scripts/eval-harness.ts",
|
|
128
176
|
"compile:green": "bun scripts/build-green.ts",
|
|
129
177
|
"compile:green:host": "bun scripts/build-green.ts --host",
|
|
130
178
|
"doc:gen": "node doc/scripts/gen-pptx.mjs",
|
|
131
|
-
"
|
|
179
|
+
"prepack": "bun scripts/build-npm.ts --for-pack",
|
|
180
|
+
"postpack": "bun run clean",
|
|
181
|
+
"prepublishOnly": "bun run typecheck"
|
|
132
182
|
},
|
|
133
183
|
"dependencies": {
|
|
184
|
+
"@xmldom/xmldom": "^0.9.12",
|
|
134
185
|
"ccxt": "^4.5.58",
|
|
135
186
|
"diff": "^8.0.2",
|
|
187
|
+
"docx": "^9.7.1",
|
|
136
188
|
"fast-glob": "^3.3.2",
|
|
189
|
+
"fflate": "^0.8.3",
|
|
190
|
+
"heic-convert": "^2.1.0",
|
|
137
191
|
"ink": "^5.0.1",
|
|
138
192
|
"marked": "^18.0.6",
|
|
139
193
|
"pdfjs-dist": "^6.2.108",
|
|
140
194
|
"react": "^18.3.1",
|
|
195
|
+
"sharp": "^0.34.5",
|
|
141
196
|
"turndown": "^7.2.4",
|
|
142
197
|
"vscode-jsonrpc": "^8.2.1",
|
|
143
198
|
"yaml": "^2.9.0",
|
|
@@ -145,6 +200,7 @@
|
|
|
145
200
|
"zod-to-json-schema": "^3.25.2"
|
|
146
201
|
},
|
|
147
202
|
"devDependencies": {
|
|
203
|
+
"@types/heic-convert": "^2.1.1",
|
|
148
204
|
"@types/node": "^20.14.0",
|
|
149
205
|
"@types/react": "^18.3.0",
|
|
150
206
|
"bun-types": "^1.3.13",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "computer-use",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "桌面操作的应用说明书与诊断命令面。说明书位于 app/,配合宿主按需提供的桌面操作能力;本插件提供 /computeruse 与 /cu 的确定性命令(状态、体检、说明书、采集、遥测、审计、观测)。",
|
|
5
5
|
"appManuals": "app"
|
|
6
6
|
}
|
|
@@ -273,16 +273,16 @@ function helpText() {
|
|
|
273
273
|
return [
|
|
274
274
|
'用法:',
|
|
275
275
|
'/cron 120m 整理最近 AI 新闻',
|
|
276
|
-
'/cron 1d 整理每日国际新闻 /workflow
|
|
277
|
-
'/cron 1m 检查学生作业 workflow
|
|
276
|
+
'/cron 1d 整理每日国际新闻 /workflow research 今天的国际 AI 大事',
|
|
277
|
+
'/cron 1m 检查学生作业 workflow plan 摄像头画面在 camera.jpg',
|
|
278
278
|
'/cron 每天 6:07 写国际 AI 晨间简报',
|
|
279
279
|
'/cron 工作日 6:07 写过去 48 小时国际 AI 大事',
|
|
280
280
|
'/cron 每周一 6:07 整理国际 AI 超级个体创业案例',
|
|
281
281
|
'/cron create --name "晨间简报" --cron "7 6 * * 2-6,0" --prompt "写国际 AI 简报"',
|
|
282
282
|
'/cron create --name "提醒" --cron "5 13 * * *" --prompt "执行提醒" --once',
|
|
283
283
|
'/cron create --name "周报" --cron "7 6 * * 1" --workflow "plan \\"整理周报\\"" --permanent',
|
|
284
|
-
'/cron create --name "
|
|
285
|
-
'/cron create --name "独立日报" --cron "7 6 * * *" --workflow "
|
|
284
|
+
'/cron create --name "定时调研" --cron "0 */2 * * *" --workflow "research 竞品动态" --max-runs 5',
|
|
285
|
+
'/cron create --name "独立日报" --cron "7 6 * * *" --workflow "research 今日要闻" --fresh-session',
|
|
286
286
|
'/cron list',
|
|
287
287
|
'/cron pause <id>',
|
|
288
288
|
'/cron resume <id>',
|
|
@@ -299,16 +299,16 @@ function helpText(): string {
|
|
|
299
299
|
return [
|
|
300
300
|
'用法:',
|
|
301
301
|
'/cron 120m 整理最近 AI 新闻',
|
|
302
|
-
'/cron 1d 整理每日国际新闻 /workflow
|
|
303
|
-
'/cron 1m 检查学生作业 workflow
|
|
302
|
+
'/cron 1d 整理每日国际新闻 /workflow research 今天的国际 AI 大事',
|
|
303
|
+
'/cron 1m 检查学生作业 workflow plan 摄像头画面在 camera.jpg',
|
|
304
304
|
'/cron 每天 6:07 写国际 AI 晨间简报',
|
|
305
305
|
'/cron 工作日 6:07 写过去 48 小时国际 AI 大事',
|
|
306
306
|
'/cron 每周一 6:07 整理国际 AI 超级个体创业案例',
|
|
307
307
|
'/cron create --name "晨间简报" --cron "7 6 * * 2-6,0" --prompt "写国际 AI 简报"',
|
|
308
308
|
'/cron create --name "提醒" --cron "5 13 * * *" --prompt "执行提醒" --once',
|
|
309
309
|
'/cron create --name "周报" --cron "7 6 * * 1" --workflow "plan \\"整理周报\\"" --permanent',
|
|
310
|
-
'/cron create --name "
|
|
311
|
-
'/cron create --name "独立日报" --cron "7 6 * * *" --workflow "
|
|
310
|
+
'/cron create --name "定时调研" --cron "0 */2 * * *" --workflow "research 竞品动态" --max-runs 5',
|
|
311
|
+
'/cron create --name "独立日报" --cron "7 6 * * *" --workflow "research 今日要闻" --fresh-session',
|
|
312
312
|
'/cron list',
|
|
313
313
|
'/cron pause <id>',
|
|
314
314
|
'/cron resume <id>',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workflow-runner",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Code-orchestration workflow engine for minimal-agent. Each workflow is a directory with a workflow.mjs script. Provides /workflow and /workflows."
|
|
5
5
|
}
|
|
@@ -1,105 +1,72 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
3
|
-
argument-hint: <name> [
|
|
2
|
+
description: 运行一个受信任 ESM 工作流。位置参数按 meta.inputs 声明顺序映射,或用 --input k=v 显式传参
|
|
3
|
+
argument-hint: <name> [值 ...] [--input key=value ...]
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# /workflow
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
由 workflow-runner 插件直接执行 `workflows/<name>/workflow.mjs`,不会把命令本身交给
|
|
9
|
+
LLM。设计原则是“轻引擎、重工作流”:Runner 只提供通用执行、流控、恢复、资源、组合
|
|
10
|
+
和观测能力;阶段划分、领域判断、重试策略与产物组织全部留在工作流目录。
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
工作流是受信任的本地 ESM 代码,不是安全沙箱。
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/workflow hello-workflow alice --input lang=zh 混用:位置填 name,--input 填 lang
|
|
18
|
-
|
|
19
|
-
规则:
|
|
20
|
-
- 位置参数按 yaml 文件 `inputs:` 数组的**声明顺序**映射(不是字段名顺序)。多 input workflow 推荐 `--input key=value` 显式 KV,不易出错
|
|
21
|
-
- `--input k=v` 显式 KV 优先级高于位置参数;位置参数对应的 input 已被 KV 占位时,位置参数被丢弃并 stderr 打 warning
|
|
22
|
-
- 多余的位置参数(超过 inputs 声明数量)被丢弃并 stderr 打 warning,不影响 workflow 执行
|
|
23
|
-
- 值含空格时用引号:`/workflow xxx "AI 教程 进阶"`
|
|
24
|
-
|
|
25
|
-
## agent 节点:把一步交给会随机应变的子 agent
|
|
26
|
-
|
|
27
|
-
大多数 step 是确定性的(`tool` 调一个原子工具、`llm` 单轮生成)。但有些步骤本质是开放式的——
|
|
28
|
-
「把 ./data 下最新的 csv 整理成 summary.md」这种,怎么做得看现场。这时用 `agent:` 节点:inline 写一句
|
|
29
|
-
任务描述,工作流就地起一个**有界 TAOR 子 agent**(思考 → 用工具 → 观察 → 反思 → 再来),让它随机应变
|
|
30
|
-
把这一步要的结果做出来,产出经验证后 `capture` 给下游。这就是「受工作流指导的 TAOR」——happy path 仍是
|
|
31
|
-
确定性骨架,只在你显式声明的节点上注入完整 agency。
|
|
32
|
-
|
|
33
|
-
```yaml
|
|
34
|
-
steps:
|
|
35
|
-
- id: summarize
|
|
36
|
-
agent: "把 ./data 下最新的 csv 读出来,整理成一份 markdown 摘要写到 summary.md"
|
|
37
|
-
capture: { content: summary } # agent 的最终产出存进变量 summary
|
|
38
|
-
- id: gate
|
|
39
|
-
type: assert
|
|
40
|
-
condition: "fileExists('summary.md')"
|
|
14
|
+
```text
|
|
15
|
+
/workflow my-flow "一句话需求"
|
|
16
|
+
/workflow my-flow --input topic=AI --input pages=12
|
|
17
|
+
/workflows
|
|
41
18
|
```
|
|
42
19
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- `allowed_tools: [Read, Write]` —— 收窄它能用的工具;**缺省给全量工具**(要真 agency)。
|
|
46
|
-
- `output_schema: {...}` —— 要求结构化产出(provider-native JSON Schema),按字段 `capture`。
|
|
47
|
-
- `context_files: [{ path, hint }]` —— 列出可读文件让它按需 Read(不 inline 内容)。
|
|
48
|
-
- `maxTurns: <n>` —— 子循环最大轮数,默认 25。
|
|
49
|
-
- `capture` / `when` / `onError` —— 与其它动作 step 一致(agent 节点也能 `onError: recover` 被再救一次)。
|
|
50
|
-
|
|
51
|
-
`agent` vs `skill`:`agent` 是 **inline、一次性**的有界 TAOR 子循环(委托 runQuery,轻、收敛快、产出受验证闸门把关);
|
|
52
|
-
`skill` 是跑一个**外部 SKILL.md 定义、可复用**的完整 agent(runQuery)。需要复用同一套能力用 `skill`,
|
|
53
|
-
临时让某步「自己想办法」用 `agent`。
|
|
54
|
-
|
|
55
|
-
**信任边界 / 不伪造**:agent 节点与 `onError: recover` 共用同一套系统提示词纪律——内置安全护栏(最小动作、
|
|
56
|
-
优先可逆、不碰工作目录外、不删无关数据)、收尾前自我验证、**严禁伪造产出**;做不成就诚实放弃(抛错走 `onError`)。
|
|
57
|
-
默认握全量工具,信任边界同 `skill:`——「运行一条 workflow 即信任它」。
|
|
20
|
+
## 目录与入口
|
|
58
21
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- `recover`(**自适应恢复**):失败时**不立刻停**,而是临时起一个**有界 agent**,带着
|
|
68
|
-
「工作流目标 + 这个节点本来要做什么 + 错在哪 + 当前已知变量 + 下游 capture 契约」去**随机应变**——
|
|
69
|
-
它会先诊断根因,再换路径 / 换命令 / 先读后写 / 补齐前置条件,**并在收尾前自我验证**产出确实满足意图,
|
|
70
|
-
想办法把这一步要的**结果**做出来。
|
|
71
|
-
**救回** → 用同一个 `capture` 绑定结果、继续走正常流程;**救不回** → 它会**诚实放弃**(绝不伪造假结果),
|
|
72
|
-
工作流带原因报错停止(错误信息形如「自适应恢复未成功:<原因>」)。这是「确定性工作流 × 会随机应变的 agent」的结合点。
|
|
73
|
-
|
|
74
|
-
`recover` 的配套字段(都可选):
|
|
75
|
-
|
|
76
|
-
- `recover_hint: "<提示>"` —— 给恢复 agent 的提示(支持 `${var}` 插值),如 `"端口被占就换 3001 重试"`。
|
|
77
|
-
- `allowed_tools: [Read, Bash]` —— 收窄恢复 agent 能用的工具;**缺省给全量工具**。
|
|
78
|
-
- `maxTurns: <n>` —— 恢复子循环最大轮数,默认 25(够「诊断 + 探查 + 动手 + 验证」一圈)。
|
|
79
|
-
|
|
80
|
-
示例:
|
|
22
|
+
```text
|
|
23
|
+
workflows/<名字>/
|
|
24
|
+
├── workflow.mjs
|
|
25
|
+
├── scripts/*.mjs
|
|
26
|
+
├── prompts/
|
|
27
|
+
├── assets/
|
|
28
|
+
└── README.md
|
|
29
|
+
```
|
|
81
30
|
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
31
|
+
```js
|
|
32
|
+
export const meta = {
|
|
33
|
+
apiVersion: 2,
|
|
34
|
+
description: '审计路由的鉴权缺失',
|
|
35
|
+
inputs: [{ name: 'dir', required: true }],
|
|
36
|
+
dependencies: [],
|
|
37
|
+
artifacts: ['out/audit.json'],
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default async function run(wf) {
|
|
41
|
+
const files = JSON.parse(await wf.tools.call('Glob', {
|
|
42
|
+
pattern: `${wf.input.values.dir}/**/*.ts`,
|
|
43
|
+
}));
|
|
44
|
+
const batch = await wf.flow.pipeline(files, {
|
|
45
|
+
label: '逐文件审计',
|
|
46
|
+
concurrency: 4,
|
|
47
|
+
errorMode: 'collect',
|
|
48
|
+
stages: [async (_value, file) => wf.model.agent(`审计 ${file} 的鉴权检查`)],
|
|
49
|
+
});
|
|
50
|
+
await wf.fs.writeJson('out/audit.json', batch);
|
|
51
|
+
wf.output.artifact('out/audit.json');
|
|
52
|
+
wf.output.message('审计完成');
|
|
53
|
+
return batch;
|
|
54
|
+
}
|
|
90
55
|
```
|
|
91
56
|
|
|
92
|
-
|
|
57
|
+
工作流可原生导入相对模块和 `node:` 内置模块。确定性纯计算直接 `import`;需要独立
|
|
58
|
+
进程或第三方运行时的脚本使用 `wf.exec.file()`。并行扇出使用
|
|
59
|
+
`wf.flow.pipeline()`,不要用无界 `Promise.all()` 绕过运行时调度。
|
|
60
|
+
|
|
61
|
+
公开能力按 `wf.input/runtime/model/tools/exec/fs/flow/check/state/output` 分组;完整签名
|
|
62
|
+
以 `skills/workflow-creator/references/api.md` 为准。
|
|
93
63
|
|
|
94
|
-
|
|
95
|
-
以及 `when` 表达式错误)**始终 halt** —— 那类是「作者写错了」,不是「运行期意外」,不走恢复。
|
|
96
|
-
- `continue` vs `recover`:前者「放弃这步、盲目往下」,后者「想办法把这步做成、保住下游」。
|
|
97
|
-
要扛住「预料之外」的情况,用 `recover`。
|
|
98
|
-
- **信任边界**:恢复 agent 默认握有全量工具,与 `skill:` 节点一致——「运行一条 workflow 即信任它」。
|
|
99
|
-
不信任来源的 yaml 本就不该跑。
|
|
100
|
-
- **不伪造 / 诚实失败**:恢复 agent 的系统提示词内置安全护栏(只做最小必要动作、优先可逆、不碰工作目录外、
|
|
101
|
-
不删无关数据)并**严禁编造假结果**——它要么交付经自我验证的真产出,要么显式放弃让工作流诚实 halt。
|
|
102
|
-
框架侧另有验证闸门:空产出 / 显式放弃一律**不绑 `capture`、不放行下游**,杜绝把脏值喂给后续步骤。
|
|
103
|
-
- `recover` 是 opt-in 的:确定性 / 可审计正是工作流的价值,不默认抹掉;由作者按节点决定授予多少「自主权」。
|
|
64
|
+
## 约束与恢复
|
|
104
65
|
|
|
105
|
-
|
|
66
|
+
- `meta` 必须是纯字面量,且包含 `apiVersion: 2`;入口必须默认导出 `run(wf)`。
|
|
67
|
+
- 模块级不得保存可变的每次运行状态;并发实例的状态全部放在 `run()` 内或 `wf` 中。
|
|
68
|
+
- 模型、工具、进程、询问和子工作流进入 journal;文件系统读写每次观察真实磁盘并
|
|
69
|
+
采用原子、幂等操作。
|
|
70
|
+
- 运行时产物用 `wf.output.artifact(path)` 动态登记。
|
|
71
|
+
- 子工作流必须静态列在 `meta.dependencies`,通过 `wf.flow.child()` 调用。
|
|
72
|
+
- 工作流 bundle 或 API 版本变化会归档旧断点,不重放旧执行结果。
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: 列出可用工作流(代码形态),并报出写错未能载入的那些
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# /workflows
|
|
6
6
|
|
|
7
|
-
由 workflow-runner
|
|
8
|
-
packageRoot/workflows/(getResourceSearchPaths 双源,cwd 优先)下的 *.yaml,把名称 + 一行描述列出来。
|
|
7
|
+
由 workflow-runner 插件接管,直接扫描 `workflows/*/workflow.mjs` 并列出,不喂给 LLM。
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
写错的工作流会被**如实报出**而不是从列表里消失——「我的工作流不见了」和
|
|
10
|
+
「我的工作流写错了」排查成本差一个数量级。
|
|
@@ -1,34 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ============================================================
|
|
3
|
-
* plugins/workflow-runner/plugin.ts
|
|
3
|
+
* plugins/workflow-runner/plugin.ts —— 代码编排引擎的插件入口
|
|
4
4
|
* ------------------------------------------------------------
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 接管 /workflow 与 /workflows:不走声明式 markdown→LLM 通道,直接执行
|
|
6
|
+
* `workflows/<name>/workflow.mjs`。
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* 插件只通过 src/plugin-sdk.ts 取框架运行时(runQuery / chat / executeTool 等)。
|
|
10
|
-
*
|
|
11
|
-
* 契约:default export 一个 PluginApi 对象。框架 pluginLoader 会按 pluginRoot
|
|
12
|
-
* 缓存这次 import,所以 cold start 后 dynamic import 只跑一次。
|
|
8
|
+
* 契约:default export 一个 PluginApi。框架按 pluginRoot 缓存这次 import。
|
|
13
9
|
* ============================================================
|
|
14
10
|
*/
|
|
15
11
|
import { ALL_TOOLS, buildTransientPromptBundle, createAgentRuntimeContext, derivePromptCacheContext, filterToolsForRuntime, getWorkingDir, } from '../../src/plugin-sdk.js';
|
|
12
|
+
import { discoverWorkflows } from './src/discovery.js';
|
|
16
13
|
import { runWorkflowFromCommand, runWorkflowsList } from './src/index.js';
|
|
17
14
|
const api = {
|
|
15
|
+
async resolveSlashFallback(commandName, args, { cwd }) {
|
|
16
|
+
const { workflows } = await discoverWorkflows(cwd);
|
|
17
|
+
const exact = workflows.find((workflow) => workflow.name === commandName);
|
|
18
|
+
const matched = exact ??
|
|
19
|
+
workflows.find((workflow) => workflow.name.toLowerCase() === commandName.toLowerCase());
|
|
20
|
+
if (!matched)
|
|
21
|
+
return null;
|
|
22
|
+
return {
|
|
23
|
+
commandName: 'workflow',
|
|
24
|
+
args: `${matched.name}${args ? ` ${args}` : ''}`,
|
|
25
|
+
message: `▸ /${commandName} → 工作流「${matched.name}」`,
|
|
26
|
+
};
|
|
27
|
+
},
|
|
18
28
|
async *runCommand(commandName, args, ctx) {
|
|
29
|
+
const cwd = getWorkingDir();
|
|
19
30
|
if (commandName === 'workflows') {
|
|
20
|
-
yield* runWorkflowsList();
|
|
31
|
+
yield* runWorkflowsList(cwd);
|
|
21
32
|
return;
|
|
22
33
|
}
|
|
23
34
|
if (commandName === 'workflow') {
|
|
24
|
-
const cwd = getWorkingDir();
|
|
25
35
|
const workflowRuntime = createAgentRuntimeContext({
|
|
26
36
|
...(ctx.runtimeContext ?? {
|
|
27
37
|
profile: 'main',
|
|
28
38
|
interactiveAsk: false,
|
|
29
39
|
}),
|
|
30
|
-
//
|
|
31
|
-
//
|
|
40
|
+
// 命令跑在工作流自己的 async 作用域里;父级 Desktop/CLI runtime 可能是
|
|
41
|
+
// 在那个作用域建立之前创建的,cwd 要以这里为准。
|
|
32
42
|
cwd,
|
|
33
43
|
surface: 'workflow',
|
|
34
44
|
owner: ctx.runtimeContext?.owner ?? 'untrusted',
|
|
@@ -78,8 +88,9 @@ const api = {
|
|
|
78
88
|
sessionId: workflowRuntime.sessionId,
|
|
79
89
|
memoryAccess: workflowRuntime.memoryAccess,
|
|
80
90
|
},
|
|
81
|
-
//
|
|
91
|
+
// 宿主授权上下文原样带上;由调用点按显式声明切片后才转给工具。
|
|
82
92
|
host: ctx.host,
|
|
93
|
+
inputResources: ctx.inputResources,
|
|
83
94
|
transientContext: ctx.transientContext,
|
|
84
95
|
transientBundle,
|
|
85
96
|
promptCache: derivePromptCacheContext(ctx.promptCache, `workflow:${args.trim() || 'interactive'}`),
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ============================================================
|
|
3
|
-
* plugins/workflow-runner/plugin.ts
|
|
3
|
+
* plugins/workflow-runner/plugin.ts —— 代码编排引擎的插件入口
|
|
4
4
|
* ------------------------------------------------------------
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* 接管 /workflow 与 /workflows:不走声明式 markdown→LLM 通道,直接执行
|
|
6
|
+
* `workflows/<name>/workflow.mjs`。
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* 插件只通过 src/plugin-sdk.ts 取框架运行时(runQuery / chat / executeTool 等)。
|
|
10
|
-
*
|
|
11
|
-
* 契约:default export 一个 PluginApi 对象。框架 pluginLoader 会按 pluginRoot
|
|
12
|
-
* 缓存这次 import,所以 cold start 后 dynamic import 只跑一次。
|
|
8
|
+
* 契约:default export 一个 PluginApi。框架按 pluginRoot 缓存这次 import。
|
|
13
9
|
* ============================================================
|
|
14
10
|
*/
|
|
15
11
|
|
|
@@ -22,24 +18,41 @@ import {
|
|
|
22
18
|
filterToolsForRuntime,
|
|
23
19
|
getWorkingDir,
|
|
24
20
|
} from '../../src/plugin-sdk.js';
|
|
21
|
+
import { discoverWorkflows } from './src/discovery.js';
|
|
25
22
|
import { runWorkflowFromCommand, runWorkflowsList } from './src/index.js';
|
|
26
23
|
|
|
27
24
|
const api: PluginApi = {
|
|
25
|
+
async resolveSlashFallback(commandName, args, { cwd }) {
|
|
26
|
+
const { workflows } = await discoverWorkflows(cwd);
|
|
27
|
+
const exact = workflows.find((workflow) => workflow.name === commandName);
|
|
28
|
+
const matched =
|
|
29
|
+
exact ??
|
|
30
|
+
workflows.find(
|
|
31
|
+
(workflow) => workflow.name.toLowerCase() === commandName.toLowerCase(),
|
|
32
|
+
);
|
|
33
|
+
if (!matched) return null;
|
|
34
|
+
return {
|
|
35
|
+
commandName: 'workflow',
|
|
36
|
+
args: `${matched.name}${args ? ` ${args}` : ''}`,
|
|
37
|
+
message: `▸ /${commandName} → 工作流「${matched.name}」`,
|
|
38
|
+
};
|
|
39
|
+
},
|
|
28
40
|
async *runCommand(commandName, args, ctx) {
|
|
41
|
+
const cwd = getWorkingDir();
|
|
42
|
+
|
|
29
43
|
if (commandName === 'workflows') {
|
|
30
|
-
yield* runWorkflowsList();
|
|
44
|
+
yield* runWorkflowsList(cwd);
|
|
31
45
|
return;
|
|
32
46
|
}
|
|
33
47
|
|
|
34
48
|
if (commandName === 'workflow') {
|
|
35
|
-
const cwd = getWorkingDir();
|
|
36
49
|
const workflowRuntime = createAgentRuntimeContext({
|
|
37
50
|
...(ctx.runtimeContext ?? {
|
|
38
51
|
profile: 'main' as const,
|
|
39
52
|
interactiveAsk: false,
|
|
40
53
|
}),
|
|
41
|
-
//
|
|
42
|
-
//
|
|
54
|
+
// 命令跑在工作流自己的 async 作用域里;父级 Desktop/CLI runtime 可能是
|
|
55
|
+
// 在那个作用域建立之前创建的,cwd 要以这里为准。
|
|
43
56
|
cwd,
|
|
44
57
|
surface: 'workflow',
|
|
45
58
|
owner: ctx.runtimeContext?.owner ?? 'untrusted',
|
|
@@ -72,6 +85,7 @@ const api: PluginApi = {
|
|
|
72
85
|
currentUserInput: args,
|
|
73
86
|
},
|
|
74
87
|
}).catch(() => undefined));
|
|
88
|
+
|
|
75
89
|
yield* runWorkflowFromCommand(args, {
|
|
76
90
|
provider: ctx.provider,
|
|
77
91
|
history: ctx.history,
|
|
@@ -91,8 +105,9 @@ const api: PluginApi = {
|
|
|
91
105
|
sessionId: workflowRuntime.sessionId,
|
|
92
106
|
memoryAccess: workflowRuntime.memoryAccess,
|
|
93
107
|
},
|
|
94
|
-
//
|
|
108
|
+
// 宿主授权上下文原样带上;由调用点按显式声明切片后才转给工具。
|
|
95
109
|
host: ctx.host,
|
|
110
|
+
inputResources: ctx.inputResources,
|
|
96
111
|
transientContext: ctx.transientContext,
|
|
97
112
|
transientBundle,
|
|
98
113
|
promptCache: derivePromptCacheContext(
|