前言¶
DeepSeek Harness(DSH)里,主会话可以把子任务交给子智能体(subagent)执行,再收回最终结果。若你已经在本机安装并登录 JetBrains Junie CLI,又希望按 Agent Client Protocol(ACP)走一条独立进程、单次收束的委托路径,而不是自己拼 spawn 与 session 生命周期,就需要一个把 Junie 挂到 dsh-tool-subagent 上的插件。
下面介绍社区插件 @zumikua/dsh-junie-subagent:它通过 ACP 启动 Junie CLI,把 Junie 的最终回答作为子智能体结果返回,并在 DSH 设置里提供模型与思考深度(thinking depth)的配置页。维护者为 ZumiKua,在插件目录中归类为「工作流」。
这是什么¶
插件 @zumikua/dsh-junie-subagent(当前 package 版本 0.1.4,MIT 许可证)在 bundle 中插入一个 provider 与一个名为 junie 的 dsh-tool-subagent 实例。每次调用对应一次 Junie 进程与会话:子智能体接缝对外不提供进程外子任务的续聊 surface,因而不接受跟进消息。
依赖 DSH >= 0.2.1-rc.2,以及已安装并完成登录的 JetBrains Junie CLI。
环境与 Junie 可执行文件¶
Junie 路径按以下顺序解析:
- 配置项
command; - 环境变量
JUNIE_PATH; - 托管安装指针
~/.local/share/junie/current(Windows 为<version>/junie/junie.exe,其他系统为<version>/bin/junie); PATH上的junie.exe/junie(跳过.batshim)。
若均无法解析,运行会失败并列出尝试过的路径;设置页也不会展示空的模型列表。
单次运行流程¶
一次委托的大致 ACP 步骤如下:
spawn <junie.exe> --acp=true --skip-update-check
→ initialize
→ session/new { cwd, mcpServers: [] }
→ session/set_config_option (model / effort / brave_mode, when configured)
→ session/prompt { prompt: [{ type: "text", text }] }
← session/update … agent_message_chunk text …
← result { stopReason }
→ dispose (session/cancel, stdin EOF, terminate, wait for exit)
每次运行独占进程与会话;--acp=true 与 --skip-update-check 始终会被保证加入参数(默认 args 含 ["--acp=true"],并可追加其它参数)。
核心功能¶
- ACP 子智能体 provider:注册名为
junie的 provider 与面向模型的工具junie,委托任务给 Junie CLI 并返回最终答案。 - 设置页:DSH 设置面板中的 Junie 区块,用于选择模型、思考深度,以及 Junie 的 brave mode(
auto/on/off)。模型列表来自 Junie ACPsession/new的configOptions(按组展示,缓存 10 分钟,不消耗 credits)。 - 持久化配置:通过 Host 注册的同源路由
GET/PUT /junie-subagent/config读写,存储于~/.dsh/junie-settings.json。思考深度与模型绑定;保存时用临时 Junie 会话校验组合,不支持的搭配返回400并给出该模型接受的取值,页面选项列表不会被擅自改写。 - 权限与 brave mode:provider 通过
permission自动应答session/request_permission(默认reject)。设置页说明:brave-auto允许安全类操作并拒绝其余需审批项;off拒绝一切需审批的操作;on则全部放行。provider 本身不会弹窗询问用户。 - 模型选择方式:模型与思考深度在设置页选择并由 Host 存储;bundle 配置里的
model/effort仅在尚未写入 Host 存储时作为回退。共享工具字段provider/model/reasoning_effort的按次选型不可用——dsh-tool-subagent会用 Host 的 LLM 目录校验,而 Junie 模型 id 不是 LLM 路由。
安装与启用¶
在 DSH Web UI 打开 Plugins 页,从目录安装 @zumikua/dsh-junie-subagent;插件管理器会安装包并一步选中其 bundle。
安装后需重启 DSH 一次:浏览器侧 client.js 在启动时进入页面的 module 表。随后打开 Settings → Junie,选择模型与 thinking depth。
配置项(bundle / provider)¶
| Key | Default | Meaning |
|---|---|---|
providerName |
junie |
在 ctx.subagents 上的名称 |
command |
auto-detected | 显式启动路径;文件缺失时会报错,不会静默回退 |
args |
["--acp=true"] |
额外参数;--acp=true 与 --skip-update-check 始终保证 |
model |
mix.normal |
设置页未存任何值时的回退模型 |
effort |
high |
设置页未存任何值时的回退 effort |
braveMode |
brave-auto |
brave-auto / on / off |
permission |
reject |
对 session/request_permission 自动应答:默认 reject,或选第一个 allow 选项 |
timeoutMs |
900000 |
整次运行超时 |
graceMs |
3000 |
子进程 teardown 宽限 |
设置页的变更从下一次委托起生效。
隔离与权限边界¶
子进程通过 ctx.subprocess 启动,未附加 sandbox 策略,因此以当前登录用户身份运行,具备该用户完整的文件访问能力(Junie 可在 ~/.junie 下持久化会话)。更细的约束来自 Junie 自身:brave_mode、动作 allowlist 与 session/request_permission,本 provider 按 permission 与设置页 brave mode 策略应答。
适用场景与注意¶
适合已在 DSH >= 0.2.1-rc.2 环境中工作、本机已配置 Junie CLI,并希望在主 Harness 工作流里把单次、不可续聊的任务交给 Junie 的开发者。
安装与启用前建议阅读仓库源码与 MIT 许可证,确认子进程权限与 Junie 审批策略符合你的环境要求。社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
参考链接¶
- 插件目录页:https://www.skillhub.cn/plugins/ZumiKua/dsh-junie-subagent
- GitHub:https://github.com/ZumiKua/dsh-junie-subagent