elk-9527/dsh-vscode--packages-dsh-door ↗★ 0

dsh-acp-door

DSH 内核的本地 ACP 接入点插件 适合需要将 VS Code 面板等外部程序安全连接到本地 DSH 内核的用户。

包名
dsh-acp-door
兼容性
待验证
版本
0.0.13
许可证
MIT
最近更新
2026年9月20日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:elk-9527/dsh-vscode#71d8ccc4990518b63940b69aa622e36ea94d9c10&path:packages/dsh-door

配置

字段默认说明
host127.0.0.1固定监听地址。其它值会被忽略,接入点不会暴露到局域网。
port47821监听端口;传 0 由系统分配空闲端口。
provider—新会话的初始模型服务商。必须填写,见下文警告。
model—新会话的初始模型名。必须填写。
presetstandard新会话挂载的 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 会自动生效)。

卸载

  1. 删除上述 insert 记录(或将 dsh-acp-door 从 bundles 中移除);
  2. dsh plugin --profile remove dsh-acp-door。

已知限制

  • 没有鉴权:本机上的任何程序均可连接该端口。这是本机使用的明确边界:该插件固定 监听 127.0.0.1,不支持通过改地址、端口转发或隧道把接入点提供给其它设备。
  • 硬依赖 agentPresets:不提供预设机制的 profile(例如纯 base 的 acp profile) 不会加载该插件。该限制属刻意设计 —— 见上文第 1 项约束。
  • 需重启 DSH 后才会加载(profile 的 patchReload 为 live 时,配置改动可以热生效, 但新装一个包仍需重启)。
  • 依赖三个内部接缝:@deepseek-ai/dsh-acp 的 config.stream、 agentPresets.select() 的签名、以及 agent/created 事件。 它们在 DSH 升级中若变动,该插件需要同步调整。
  • 仅能挂载预设,不能中途切换:内核只允许「尚未产出任何内容」的会话切换预设。