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.
- package/README.md +6 -5
- package/package.json +62 -5
- 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 +204 -185
- package/plugins/workflow-runner/src/index.ts +249 -224
- 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 +404 -467
- package/plugins/workflow-runner/src/runner.ts +491 -535
- 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 +172 -152
- package/plugins/workflow-runner/src/taskIdentity.ts +233 -200
- 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 -105
- package/plugins/workflow-runner/src/types.ts +155 -520
- 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 +542 -469
- package/plugins/workflow-runner/src/workflowState.ts +639 -589
- 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/skill-creator/scripts/run_eval.py +3 -2
- 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 +44 -6
- package/src/cli/print.ts +73 -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 +443 -74
- package/src/config/configService.ts +723 -142
- 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 +56 -20
- package/src/infra/verification.ts +87 -20
- 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 +152 -9
- package/src/plugins/pluginRunner.ts +186 -8
- package/src/plugins/slashFallback.js +113 -0
- package/src/plugins/slashFallback.ts +137 -0
- package/src/prompts/policyRegistry.js +15 -8
- package/src/prompts/policyRegistry.ts +18 -8
- 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 +148 -37
- package/src/tools/advisor/advisor.ts +161 -38
- 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 +70 -18
- package/src/tools/bash/bash.ts +75 -20
- 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/powershell/powershell.js +18 -1
- package/src/tools/powershell/powershell.ts +18 -2
- package/src/tools/presentresult/presentresult.js +6 -15
- package/src/tools/presentresult/presentresult.ts +6 -15
- package/src/tools/read/read.js +69 -11
- package/src/tools/read/read.ts +70 -11
- package/src/tools/shared/fileUtils.js +1 -2
- package/src/tools/shared/fileUtils.ts +1 -2
- package/src/tools/shared/permanentDeleteGuard.js +34 -3
- package/src/tools/shared/permanentDeleteGuard.ts +43 -6
- 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 -30
- package/src/tools/webbrowser/browserControl.ts +210 -50
- 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 +683 -144
- package/src/tools/webbrowser/webbrowser.ts +979 -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 +450 -42
- 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/DESIGN.md +449 -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 -618
- package/plugins/workflow-runner/src/expressions.ts +0 -622
- 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 -119
- package/plugins/workflow-runner/src/recovery.ts +0 -149
- 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 -41
- package/plugins/workflow-runner/src/stepExecutors/assert.ts +0 -50
- 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 -208
- package/plugins/workflow-runner/src/stepExecutors/tool.ts +0 -256
- package/plugins/workflow-runner/src/stepExecutors/verify.js +0 -58
- package/plugins/workflow-runner/src/stepExecutors/verify.ts +0 -68
- 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 -147
- 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/engineRobustness.test.ts +0 -226
- package/plugins/workflow-runner/test/expressions.test.ts +0 -397
- 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 -87
- 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 -220
- package/plugins/workflow-runner/test/recovery.test.ts +0 -265
- package/plugins/workflow-runner/test/runner.test.ts +0 -911
- package/plugins/workflow-runner/test/runnerPreflight.test.ts +0 -379
- package/plugins/workflow-runner/test/skillTurnDone.test.ts +0 -71
- package/plugins/workflow-runner/test/stateLifecycle.test.ts +0 -150
- package/plugins/workflow-runner/test/stepPipeline.test.ts +0 -114
- package/plugins/workflow-runner/test/taskArbitration.test.ts +0 -338
- package/plugins/workflow-runner/test/taskLifecycle.test.ts +0 -270
- 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 -199
- 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
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* ============================================================
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
import type { ChatContentPart, LlmStreamEvent, Message, PromptCacheUsage,
|
|
22
|
+
import type { CacheEditsState, ChatContentPart, LlmStreamEvent, LocalProvider, Message, PromptCacheUsage, Tool } from '../../types.js';
|
|
23
23
|
|
|
24
24
|
const ANTHROPIC_VERSION = '2023-06-01';
|
|
25
25
|
|
|
@@ -128,7 +128,7 @@ function looksLikeVersionedBase(url: string): boolean {
|
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
export function buildAnthropicUrl(provider:
|
|
131
|
+
export function buildAnthropicUrl(provider: LocalProvider): string {
|
|
132
132
|
// baseURL 是完整端点 URL(以 /v1/messages 结尾)。
|
|
133
133
|
// 向后兼容:旧格式 baseURL(根域名或版本化基础路径)自动补全 /v1/messages 后缀。
|
|
134
134
|
const url = provider.baseURL.trim().replace(/\/+$/, '');
|
|
@@ -145,15 +145,21 @@ export function buildAnthropicUrl(provider: Provider): string {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
export interface AnthropicRequestArgs {
|
|
148
|
-
provider:
|
|
148
|
+
provider: LocalProvider;
|
|
149
149
|
cleanedMessages: readonly Message[];
|
|
150
150
|
tools: Tool[];
|
|
151
|
+
/**
|
|
152
|
+
* cache_edits 回收状态(provider.cacheEdits 开启时由 loop 传入)。
|
|
153
|
+
* 传入即进入协议组装:pinned 重发 + pendingNew 发送并 pin + cache_reference 标注。
|
|
154
|
+
*/
|
|
155
|
+
cacheEdits?: CacheEditsState;
|
|
151
156
|
}
|
|
152
157
|
|
|
153
158
|
export function buildAnthropicRequest(args: AnthropicRequestArgs): { url: string; headers: Record<string, string>; body: string } {
|
|
154
|
-
const { provider, cleanedMessages, tools } = args;
|
|
159
|
+
const { provider, cleanedMessages, tools, cacheEdits } = args;
|
|
155
160
|
const { system, messages } = toAnthropicMessages(cleanedMessages);
|
|
156
161
|
const anthropicTools = toAnthropicTools(tools);
|
|
162
|
+
if (cacheEdits) applyCacheEdits(messages, cacheEdits);
|
|
157
163
|
const body: Record<string, unknown> = {
|
|
158
164
|
model: provider.model,
|
|
159
165
|
...(system ? { system } : {}),
|
|
@@ -177,6 +183,101 @@ export function buildAnthropicRequest(args: AnthropicRequestArgs): { url: string
|
|
|
177
183
|
};
|
|
178
184
|
}
|
|
179
185
|
|
|
186
|
+
// ==================== cache_edits 式回收(对齐 kakadeai Cached MC) ====================
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* 把 cache_edits 回收决策落到请求体上(原地修改翻译后的 messages)。
|
|
190
|
+
*
|
|
191
|
+
* 处理顺序(顺序即正确性,调整会破坏协议约束):
|
|
192
|
+
* 1. 最后一条消息的最后一个 block 打 cache_control 标记——这是 Anthropic 公开的
|
|
193
|
+
* prompt caching 前提:没有缓存前缀,"在缓存内删除"无从谈起。
|
|
194
|
+
* 2. pinned 批次原位重发:服务端无状态,删除指令必须随每个请求重申;且必须
|
|
195
|
+
* 重发在**原 userMessageIndex**——cache_edits block 自身也是前缀的一部分,
|
|
196
|
+
* 挪位 = 前缀变化 = 它本要保护的缓存被它自己破坏。
|
|
197
|
+
* 3. pendingNew 作为新批次插入当前最后一条 user message,然后 pin 住该下标。
|
|
198
|
+
* 4. 给「严格早于 cache_control 标记消息」的 tool_result 加 cache_reference
|
|
199
|
+
* (协议要求 cache_reference 出现在最后 cache_control 之前;用严格早于规避
|
|
200
|
+
* cache_edits 插入改变 content 数组长度带来的下标边界问题)。
|
|
201
|
+
*
|
|
202
|
+
* 下标稳定性依赖:history append-only + toAnthropicMessages 纯函数。compact 后
|
|
203
|
+
* 必须 resetCacheEdits(loop.ts 已挂钩),否则 pin 的下标指向错误消息。
|
|
204
|
+
*
|
|
205
|
+
* dedup:同一 tool_use_id 全请求只允许出现一次删除指令(跨 pinned 批次去重)。
|
|
206
|
+
*/
|
|
207
|
+
function applyCacheEdits(messages: AnthropicMessage[], edits: CacheEditsState): void {
|
|
208
|
+
if (messages.length === 0) return;
|
|
209
|
+
|
|
210
|
+
// 1. 基础 prompt caching:最后一条消息的最后一个 block 打标记
|
|
211
|
+
const lastMsg = messages[messages.length - 1];
|
|
212
|
+
if (lastMsg.content.length > 0) {
|
|
213
|
+
const lastBlock = lastMsg.content[lastMsg.content.length - 1] as Record<string, unknown>;
|
|
214
|
+
lastBlock.cache_control = { type: 'ephemeral' };
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// 跨批次去重集:同一 cache_reference 不重复删
|
|
218
|
+
const seenDeleteRefs = new Set<string>();
|
|
219
|
+
// wire 形状:整个 {type:'cache_edits', edits:[...]} 作为 user message 里的一个
|
|
220
|
+
// content block 追加(对齐 kakadeai addCacheBreakpoints 的 insertBlockAfterToolResults)。
|
|
221
|
+
const appendEditsBlock = (msg: AnthropicMessage, toolUseIds: string[]): void => {
|
|
222
|
+
msg.content.push({
|
|
223
|
+
type: 'cache_edits',
|
|
224
|
+
edits: toolUseIds.map((id) => ({ type: 'delete', cache_reference: id })),
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
const dedupe = (ids: string[]): string[] => {
|
|
228
|
+
const unique: string[] = [];
|
|
229
|
+
for (const id of ids) {
|
|
230
|
+
if (seenDeleteRefs.has(id)) continue;
|
|
231
|
+
seenDeleteRefs.add(id);
|
|
232
|
+
unique.push(id);
|
|
233
|
+
}
|
|
234
|
+
return unique;
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
// 2. pinned 批次原位重发
|
|
238
|
+
for (const pinned of edits.pinned) {
|
|
239
|
+
const msg = messages[pinned.userMessageIndex];
|
|
240
|
+
if (!msg || msg.role !== 'user') continue; // 下标失位(compact 后未 reset)→ 跳过该批,fail-safe
|
|
241
|
+
const unique = dedupe(pinned.toolUseIds);
|
|
242
|
+
if (unique.length > 0) appendEditsBlock(msg, unique);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// 3. pendingNew:插入当前最后一条 user message 并 pin
|
|
246
|
+
if (edits.pendingNew.length > 0) {
|
|
247
|
+
const unique = dedupe(edits.pendingNew);
|
|
248
|
+
if (unique.length > 0) {
|
|
249
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
250
|
+
if (messages[i].role !== 'user') continue;
|
|
251
|
+
appendEditsBlock(messages[i], unique);
|
|
252
|
+
edits.pinned.push({ userMessageIndex: i, toolUseIds: unique });
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
edits.pendingNew.length = 0; // 已消费(无论是否成功插入,都清空防止下轮重复插入)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// 4. cache_reference 标注:找最后含 cache_control 的消息,给它**严格之前**的 tool_result 加引用
|
|
260
|
+
let lastCCMsgIndex = -1;
|
|
261
|
+
for (let i = 0; i < messages.length; i++) {
|
|
262
|
+
for (const block of messages[i].content) {
|
|
263
|
+
if (block && typeof block === 'object' && 'cache_control' in block) {
|
|
264
|
+
lastCCMsgIndex = i;
|
|
265
|
+
break;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (lastCCMsgIndex < 0) return;
|
|
270
|
+
for (let i = 0; i < lastCCMsgIndex; i++) {
|
|
271
|
+
const msg = messages[i];
|
|
272
|
+
if (msg.role !== 'user') continue;
|
|
273
|
+
for (const block of msg.content) {
|
|
274
|
+
if (block.type === 'tool_result' && typeof block.tool_use_id === 'string') {
|
|
275
|
+
block.cache_reference = block.tool_use_id;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
180
281
|
/**
|
|
181
282
|
* 每个请求一个新实例;把逐条 SSE `data:` 行的内容转换成 LlmStreamEvent(0..N 个)。
|
|
182
283
|
*
|
|
@@ -192,6 +293,7 @@ export function createAnthropicSSEParser(): {
|
|
|
192
293
|
} {
|
|
193
294
|
let stopReason: 'stop' | 'tool_calls' | 'length' | 'unknown' = 'unknown';
|
|
194
295
|
let usagePromptTokens: number | undefined;
|
|
296
|
+
let usageOutputTokens: number | undefined;
|
|
195
297
|
let usageCachedTokens: number | undefined;
|
|
196
298
|
let usageCacheWriteTokens: number | undefined;
|
|
197
299
|
let promptCacheUsage: PromptCacheUsage = { reported: false };
|
|
@@ -199,6 +301,7 @@ export function createAnthropicSSEParser(): {
|
|
|
199
301
|
type: 'done',
|
|
200
302
|
stopReason,
|
|
201
303
|
promptTokens: usagePromptTokens,
|
|
304
|
+
outputTokens: usageOutputTokens,
|
|
202
305
|
...(promptCacheUsage.reported
|
|
203
306
|
? {
|
|
204
307
|
...(usageCachedTokens !== undefined ? { cachedPromptTokens: usageCachedTokens } : {}),
|
|
@@ -267,6 +370,14 @@ export function createAnthropicSSEParser(): {
|
|
|
267
370
|
return [];
|
|
268
371
|
}
|
|
269
372
|
case 'message_delta': {
|
|
373
|
+
// 输出侧计量:Anthropic 把 output_tokens 放在 message_delta 的**顶层 usage** 下
|
|
374
|
+
// (不在 delta 里),且给的是**到目前为止的累计值** —— 直接覆盖即可,不要累加。
|
|
375
|
+
// 与 input_tokens 不同:那个要把缓存三段相加(见 message_start 分支)。
|
|
376
|
+
// ⚠️ 非有限值/负数一律当「没报」,绝不退化成 0(0 会让预算闸永不触发)。
|
|
377
|
+
const out = data.usage?.output_tokens;
|
|
378
|
+
if (typeof out === 'number' && Number.isFinite(out) && out >= 0) {
|
|
379
|
+
usageOutputTokens = out;
|
|
380
|
+
}
|
|
270
381
|
// ⚠️ stop_reason 嵌套在 delta.stop_reason 下,不是 message_delta 顶层。
|
|
271
382
|
const sr = data.delta?.stop_reason;
|
|
272
383
|
if (sr === 'end_turn' || sr === 'stop_sequence') stopReason = 'stop';
|
|
@@ -280,6 +280,7 @@ export function extractCachedPromptTokens(usage) {
|
|
|
280
280
|
export function createOpenAISSEParser() {
|
|
281
281
|
let stopReason = 'unknown';
|
|
282
282
|
let usagePromptTokens;
|
|
283
|
+
let usageOutputTokens;
|
|
283
284
|
let usageCachedTokens;
|
|
284
285
|
let usageCacheMissTokens;
|
|
285
286
|
let promptCacheUsage = { reported: false };
|
|
@@ -289,6 +290,7 @@ export function createOpenAISSEParser() {
|
|
|
289
290
|
type: 'done',
|
|
290
291
|
stopReason,
|
|
291
292
|
promptTokens: usagePromptTokens,
|
|
293
|
+
outputTokens: usageOutputTokens,
|
|
292
294
|
cachedPromptTokens: usageCachedTokens,
|
|
293
295
|
cacheMissTokens: usageCacheMissTokens,
|
|
294
296
|
promptCacheUsage,
|
|
@@ -300,6 +302,7 @@ export function createOpenAISSEParser() {
|
|
|
300
302
|
type: 'done',
|
|
301
303
|
stopReason,
|
|
302
304
|
promptTokens: usagePromptTokens,
|
|
305
|
+
outputTokens: usageOutputTokens,
|
|
303
306
|
cachedPromptTokens: usageCachedTokens,
|
|
304
307
|
cacheMissTokens: usageCacheMissTokens,
|
|
305
308
|
promptCacheUsage,
|
|
@@ -326,6 +329,12 @@ export function createOpenAISSEParser() {
|
|
|
326
329
|
usageCachedTokens = cacheUsage.cacheReadTokens;
|
|
327
330
|
if (cacheUsage.cacheMissTokens !== undefined)
|
|
328
331
|
usageCacheMissTokens = cacheUsage.cacheMissTokens;
|
|
332
|
+
// 输出侧计量。⚠️ 非有限值/负数一律当「没报」,不能退化成 0 ——
|
|
333
|
+
// 0 会被预算刻度读成「这轮没花钱」,预算闸从此永不触发。
|
|
334
|
+
const completion = chunk.usage.completion_tokens;
|
|
335
|
+
if (typeof completion === 'number' && Number.isFinite(completion) && completion >= 0) {
|
|
336
|
+
usageOutputTokens = completion;
|
|
337
|
+
}
|
|
329
338
|
}
|
|
330
339
|
const delta = chunk.choices?.[0]?.delta;
|
|
331
340
|
const finish = chunk.choices?.[0]?.finish_reason;
|
|
@@ -12,7 +12,7 @@ import type {
|
|
|
12
12
|
Message,
|
|
13
13
|
PromptCacheContext,
|
|
14
14
|
PromptCacheUsage,
|
|
15
|
-
|
|
15
|
+
LocalProvider,
|
|
16
16
|
Tool,
|
|
17
17
|
} from '../../types.js';
|
|
18
18
|
|
|
@@ -112,7 +112,7 @@ export function isPromptCacheKeyRejected(status: number, errText: string): boole
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
export interface OpenAIRequestArgs {
|
|
115
|
-
provider:
|
|
115
|
+
provider: LocalProvider;
|
|
116
116
|
cleanedMessages: unknown[];
|
|
117
117
|
tools: Tool[];
|
|
118
118
|
withResponseFormat: boolean;
|
|
@@ -211,7 +211,7 @@ function looksLikeVersionedBase(url: string): boolean {
|
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
export function buildOpenAIUrl(provider:
|
|
214
|
+
export function buildOpenAIUrl(provider: LocalProvider): string {
|
|
215
215
|
// baseURL 是完整端点 URL(以 /chat/completions 结尾)。
|
|
216
216
|
// 向后兼容:旧格式 baseURL(版本化基础路径,如 /v1)自动补全后缀,并打 warning。
|
|
217
217
|
const url = provider.baseURL.trim().replace(/\/+$/, '');
|
|
@@ -344,6 +344,7 @@ export function createOpenAISSEParser(): {
|
|
|
344
344
|
} {
|
|
345
345
|
let stopReason: 'stop' | 'tool_calls' | 'length' | 'unknown' = 'unknown';
|
|
346
346
|
let usagePromptTokens: number | undefined;
|
|
347
|
+
let usageOutputTokens: number | undefined;
|
|
347
348
|
let usageCachedTokens: number | undefined;
|
|
348
349
|
let usageCacheMissTokens: number | undefined;
|
|
349
350
|
let promptCacheUsage: PromptCacheUsage = { reported: false };
|
|
@@ -353,6 +354,7 @@ export function createOpenAISSEParser(): {
|
|
|
353
354
|
type: 'done',
|
|
354
355
|
stopReason,
|
|
355
356
|
promptTokens: usagePromptTokens,
|
|
357
|
+
outputTokens: usageOutputTokens,
|
|
356
358
|
cachedPromptTokens: usageCachedTokens,
|
|
357
359
|
cacheMissTokens: usageCacheMissTokens,
|
|
358
360
|
promptCacheUsage,
|
|
@@ -364,6 +366,7 @@ export function createOpenAISSEParser(): {
|
|
|
364
366
|
type: 'done',
|
|
365
367
|
stopReason,
|
|
366
368
|
promptTokens: usagePromptTokens,
|
|
369
|
+
outputTokens: usageOutputTokens,
|
|
367
370
|
cachedPromptTokens: usageCachedTokens,
|
|
368
371
|
cacheMissTokens: usageCacheMissTokens,
|
|
369
372
|
promptCacheUsage,
|
|
@@ -386,6 +389,12 @@ export function createOpenAISSEParser(): {
|
|
|
386
389
|
if (cacheUsage.promptTokens !== undefined) usagePromptTokens = cacheUsage.promptTokens;
|
|
387
390
|
if (cacheUsage.cacheReadTokens !== undefined) usageCachedTokens = cacheUsage.cacheReadTokens;
|
|
388
391
|
if (cacheUsage.cacheMissTokens !== undefined) usageCacheMissTokens = cacheUsage.cacheMissTokens;
|
|
392
|
+
// 输出侧计量。⚠️ 非有限值/负数一律当「没报」,不能退化成 0 ——
|
|
393
|
+
// 0 会被预算刻度读成「这轮没花钱」,预算闸从此永不触发。
|
|
394
|
+
const completion = (chunk.usage as Record<string, unknown>).completion_tokens;
|
|
395
|
+
if (typeof completion === 'number' && Number.isFinite(completion) && completion >= 0) {
|
|
396
|
+
usageOutputTokens = completion;
|
|
397
|
+
}
|
|
389
398
|
}
|
|
390
399
|
const delta = chunk.choices?.[0]?.delta;
|
|
391
400
|
const finish = chunk.choices?.[0]?.finish_reason;
|