DjangoAILab/dsh-plugins--plugins-manual-dsh-external-agents ↗★ 1
dsh-external-agents
把外部 CLI Agent(Codex / Claude Code)注册成 DSH subagent provider:codex 升级为「单工具 + model 参数」+ 内部 route provider + 原生 ctx.jobs 异步(完成自动通知 / job_output(wait:true) 带上限等待);claude 为自写单工具。彻底移除 dsh-tool-subagent 依赖。v2.2 新增 argsProfiles 权限档位;v2.3 固化后台收数最佳实践文案(不新增 sleep 工具,见 DESIGN.md §8)。v2.4 新增 codex session 连续性:--json 强制捕获 session id(成功必有 id,否则按失败上报)+ session_id 参数续接历史会话(resume argv 从零构建,resumeArgs 为唯一旗标旋钮)。v2.5 claude 同样支持 session 连续性(--session-id 新会话/--resume 续接,工具层预生成 UUID)。 适合已用 Codex 或 Claude Code 并想接入为子智能体的用户。
Other repositories with this package name
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:DjangoAILab/dsh-plugins#18ae7e5df085d28e7a573d1e3ef0286bda1ea793&path:plugins/manual/dsh-external-agentsREADME
Read the full README ↗2.2 配置(v2 schema,见 cordis.patch.yml)
codex:
enabled: true
command: codex
args: ['exec', '--skip-git-repo-check', '-s', 'workspace-write'] # normal 基线档(刻意不内置 bypass)
defaultModel: fast
providers:
builtin: { type: builtin } # codex 内置 OpenAI(走 codex 自身 auth)
gateway: # OpenAI-compatible provider
baseUrl: 'https://api.example.com/v1'
wireApi: responses
envKey: THIRD_PARTY_API_KEY
apiKey: '${ENV:THIRD_PARTY_API_KEY}'
models: ['provider-model-fast', 'provider-model-pro']
models: # 模型可见别名 -> { provider, model }
fast: { provider: gateway, model: provider-model-fast }
pro: { provider: gateway, model: provider-model-pro }
gpt-5.6-sol: { provider: builtin, model: gpt-5.6-sol }
gpt-5.6-terra: { provider: builtin, model: gpt-5.6-terra }
claude:
enabled: true
command: claude
args: ['--print', '--output-format', 'text']
# model: 'provider-model-fast' # 置空=默认;置串=--model
# provider: gateway # 自定义 Anthropic 端点(ANTHROPIC_BASE_URL/AUTH_TOKEN)
每 agent 可选 cwd / env;claude 默认走 scrubbedParentEnv() 时靠 ~/.claude/settings.json 自加载 env,
或在此显式转发。全局 graceMs(取消 SIGTERM→SIGKILL 宽限)与 maxOutputBytes(缓冲上限)同 v1。
2.4 使用
-
codex(prompt=..., model=? )同步阻塞;codex(prompt=..., model=?, run_in_background=true)返回 jobId (省略model用默认)。后台收数最佳实践(同样适用于claude_code):- 拿到 jobId 后优先继续做与该任务无关的独立工作——job 完成时父会话会自动收到 completion notice(不用轮询,通知会找你)。
- 确实没有独立工作、下一步又强依赖结果时,才
job_output(job_id, wait: true, timeout_ms: N)阻塞等待: 完成即提前返回;到时返回[status: running],job 继续存活,可再次等待。timeout_ms默认 30s、 上限 600s(tool-jobs的waitTimeoutMs/maxWaitTimeoutMs配置可调;若需要 1 小时上限, 可使用本仓库的示例 preset——注意 web 面该配置只能落在 agent preset 的行上, 见plugins/manual/code-longwait-preset;用户补丁层的宿主面 tool-jobs 行被 web-app disabled,写在那里不生效)。 - 不要 sleep、不要定时轮询——等待语义
wait:true已内置,空转轮询只会白烧上下文与轮次。 - 废弃不用的 job 用
job_kill回收。
-
codex_models拉当前有效模型集合;claude_code(prompt=...)同理(其 description 会带出当前权限档位)。