elk-9527/dsh-vscode--packages-dsh-door ↗★ 0
dsh-acp-door
在正在运行的 DeepSeek Harness 内核上新增一个仅监听本机回环地址的 ACP 接入点,供 VS Code 面板等外部程序连接。 适合需要将 VS Code 面板等外部程序安全连接到本地 DSH 内核的用户。
설치
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:elk-9527/dsh-vscode#71d8ccc4990518b63940b69aa622e36ea94d9c10&path:packages/dsh-door配置
| 字段 | 默认 | 说明 |
|---|---|---|
host | 127.0.0.1 | 固定监听地址。其它值会被忽略,接入点不会暴露到局域网。 |
port | 47821 | 监听端口;传 0 由系统分配空闲端口。 |
provider | — | 新会话的初始模型服务商。必须填写,见下文警告。 |
model | — | 新会话的初始模型名。必须填写。 |
preset | standard | 新会话挂载的 agent preset:standard(标准)/ ptc / cordis(创造)/ minimal(极简)。 |
diagLog | 关 | 诊断日志文件路径;也可用环境变量 DSH_ACP_DOOR_DIAG。用于排查时序问题,未配置时不写任何文件。 |
警告:缺少 provider / model 时静默失败
缺少这两项时,会话仍可建立,接入点仍正常监听,但第一个回合直接失败:
agent "…" has no provider/model: set AgentOptions.provider and AgentOptions.model
该问题易于触发,因为按 id 定向的 --patch 覆盖是整体替换这份配置(并非合并)——
仅修改 port 而未写全其它键,会同时覆盖 provider/model。因此该插件在启动时
检查这两项,缺失时在内核日志中记录一次警告,无需等待用户发送消息才发现。
(packages/vscode-extension/test/presets.js 也校验 cordis.patch.yml 中必须包含这两项。)
A) 指向源码目录:开发用,安装后即可使用(pnpm 会将其复制进 profile)
dsh plugin --profile add "file:"
B) 使用 npm pack 的 tgz:接近用户实际获取的产物
cd ; npm pack dsh plugin --profile add "file:\dsh-acp-door-.tgz"
**不应使用 `link:`。** 该方式会建立真实符号链接,Node 解析依赖时按**真实路径**向上查找,
因此 `import '@deepseek-ai/dsh-acp'` 无法解析(该包不在源码树中,而在 profile/DSH 安装目录中),
导致该插件无法启动。更严重的是,删除该链接时 pnpm 可能**同时清空源码目录** ——
该情况已实际发生一次,依靠 profile 中的那份副本才得以恢复。
**修改源码后必须重新执行一次 `add`。** `file:` 是**拷贝**而非链接,且 pnpm 存在缓存,
源码变更后有时直接报告 `added 0`(内容未替换)。`packages/vscode-extension/test/helpers/door.js`
的 `syncDoor()` 在每次运行测试前逐字节比对源码与已安装的那份,不一致时自动重装 ——
避免测试实际验证旧代码。
然后在该 profile 的用户自定义层 `cordis.patch.yml` 里插入一行:
```yaml
- insert:
- id: acp-door
name: dsh-acp-door
config:
provider:
model:
preset: standard
或者将该包名 dsh-acp-door 加入该 profile package.json 的
dsh.profile.bundles 数组(本包自带的 cordis.patch.yml 会自动生效)。
卸载
- 删除上述
insert记录(或将dsh-acp-door从bundles中移除); dsh plugin --profile remove dsh-acp-door。
已知限制
- 没有鉴权:本机上的任何程序均可连接该端口。这是本机使用的明确边界:该插件固定
监听
127.0.0.1,不支持通过改地址、端口转发或隧道把接入点提供给其它设备。 - 硬依赖
agentPresets:不提供预设机制的 profile(例如纯 base 的acpprofile) 不会加载该插件。该限制属刻意设计 —— 见上文第 1 项约束。 - 需重启 DSH 后才会加载(profile 的
patchReload为live时,配置改动可以热生效, 但新装一个包仍需重启)。 - 依赖三个内部接缝:
@deepseek-ai/dsh-acp的config.stream、agentPresets.select()的签名、以及agent/created事件。 它们在 DSH 升级中若变动,该插件需要同步调整。 - 仅能挂载预设,不能中途切换:内核只允许「尚未产出任何内容」的会话切换预设。