Replies: 1 comment
|
Your source trace matches what we see: What we can offer is a different subagent runtime that carries reasoning effort per child. dsh plugin --profile <your-profile> add pi2dsh
dsh plugin --profile <your-profile> add @tintinweb/pi-subagents
# restart dshEvery child it spawns is a real DSH session created through
So for The honest boundary: this does not repair DSH's native Evidence, run on a real DSH loop: examples/subagents · acceptance report. |
Uh oh!
There was an error while loading. Please reload this page.
"## Environment\n\n- dsh: 0.1.0-rc.6 (core), DSH Desktop 2.0.0 (Electron shell)\n- macOS 26 (Apple Silicon)\n- Provider: OpenRouter custom provider (
llm-pi-ai), modelstealth/ox-alpha(thinking-required model)\n- Parent session configured withreasoningEffort: high(works fine for the parent)\n\n## Symptom\n\nEvery subagent spawn from a parent session usingstealth/ox-alphafails immediately. The parent session log receives:\n\n\nBackground subagent <id> failed before it finished. It left no closing message.\n\n\nThe child session's log ends with:\n\n\nturn/end: {\"turn\": 1, \"reason\": {\"kind\": \"error\", \"error\": {\"message\": \"400: {\\\"message\\\":\\\"Reasoning is mandatory for this endpoint and cannot be disabled.\\\",\\\"code\\\":400,\\\"metadata\\\":{\\\"provider_name\\\":null}}\", \"code\": \"INVALID_REQUEST\"}}}\n\n\n## Root cause (traced in source)\n\nThree independent findings in the unpacked app:\n\n1.dsh-subagentresolveChildAgentOptions()only forwardsprovider,model, andmaxTokensfrom the parent to the child \u2014reasoningEffortis silently dropped:\n\njs\nfunction resolveChildAgentOptions(parent, requested, childDepth) {\n const parentProvider = parent.options.provider;\n const parentModel = parent.options.model;\n const parentMaxTokens = parent.options.maxTokens;\n return {\n ...parentProvider !== void 0 ? { provider: parentProvider } : {},\n ...parentModel !== void 0 ? { model: parentModel } : {},\n ...parentMaxTokens !== void 0 ? { maxTokens: parentMaxTokens } : {},\n ...requested,\n subagentDepth: childDepth\n };\n}\n\n\n2.dsh-tool-subagentagentOptionsschema also has noreasoningEffortfield, so callers cannot pass one explicitly:\n\njs\nagentOptions: z.object({\n provider: z.string(),\n model: z.string(),\n maxTokens: z.number().step(1).min(1).max(Number.MAX_SAFE_INTEGER)\n}).default(void 0),\n\n\n3.dsh-llm-pi-airesolveModel()tries to derive a default effort from the child's own profile (describableReasoningLevel(resolvedModel, profile.reasoning)), but a spawned child's profile carries no reasoning level \u2014 sodefaultEffortis undefined and the outgoing request has noreasoning_effortat all.\n\nResult: the child request goes to OpenRouter withoutreasoning_effort; for a thinking-required model like Ox Alpha that is a hard 400, so every child dies on its very first turn. Any parent model that mandates thinking (reasoning-required models on OpenRouter, etc.) makes thesubagenttool 100% unusable.\n\n## Expected behavior\n\n- Children should inherit the parent'sreasoningEffort(or a sensible per-model default) so thinking-required models work in delegation, OR\n-agentOptionsshould accept areasoningEffortso callers can pin it, OR\n- The model declaration should support adefaultEffortfor third-partyllm-pi-aiproviders (currentlyreasoningEffortslist exists but there is no default), so children get a valid effort automatically.\n\n## Workarounds used\n\n- Switching the parent session to a model that tolerates a missing effort (e.g. SiliconFlow DeepSeek V4 Flash) makes subagents work.\n- Community pluginfoxfasf/dsh-delegate-effortappears to target exactly this gap (not yet tested).\n\n## Related\n\n-dsh-reasoning-settingsplugin (independent reasoning-effort page forllm-pi-aiproviders) \u2014 shows effort config for third-party providers is currently limited."All reactions