dsh-plugin
DayuanJiang/next-ai-draw-iodsh 的 draw.io 绘图插件:通过 next-ai-drawio MCP 服务器作图,点回复里的链接在右侧栏打开实时预览,可以手动修改图,AI 的每次修改都是可以恢复的版本。需 Node.js 18+,首次使用由 npx 下载 MCP 服务器。
DeepSeek Harness 网络代理插件:让 agent 自己发起的网络请求(web_search / web_fetch / 外部 API)走你配置的 HTTP / HTTPS-CONNECT / SOCKS5 代理,配置持久化、启动即自动生效,并提供可视化设置页。
dsh plugin --profile web add github:mafeis/dsh-net-proxy
安装后重启 dsh web,在 设置 → 网络代理 里启用并填写代理地址(如 127.0.0.1:7890)。
也可手动在 profile 的 cordis.patch.yml 加入:
- insert:
- id: net-proxy
name: 'dsh-net-proxy'
| DSH 运行时 | 状态 |
|---|---|
| 0.1 线(如 0.1.7-rc.2) | 兼容 |
| 0.2 线(0.2.0-rc.1 / 0.2.0-rc.2 / 0.2.x) | 兼容(0.8.0 起) |
双通道代理生效:包装 agent 进程的全局 fetch(手写 HTTP/SOCKS5 转发,零第三方依赖),同时把生效策略同步安装进 web_fetch 实际使用的 harness 代理层——两类请求全覆盖,停用/卸载完整还原。
Desktop 侧边栏浏览器不在管辖内(issue #6):DeepSeek Harness Desktop 右侧的「浏览器」页面由 Electron <webview> guest 实现,代理策略在 Electron 主进程的 session 上;插件宿主是主进程拉起的子 Node 进程,够不到 session——在插件里做的任何配置(启停、改端口、改协议)对侧边栏浏览器都不生效。侧边栏始终跟随 Windows 系统代理(Chromium 默认行为),其流量不经过插件,请求日志里也不会有侧边栏的记录。因此:跟随系统代理时(插件读的也是系统配置)两者出口一致,表现正常;一旦插件配置偏离系统代理(如只改插件端口、系统代理关闭后插件回退手填地址),侧边栏仍按系统代理走。这是 DSH 的架构限制,单侧无法修复,需主进程侧提供桥接(见 issue #6)。
跟随系统代理:每 3 秒读取系统代理设置,自动启停、自动跟随端口变化(v2rayN / Clash 切换无需改配置);系统关闭时自动直连;Windows ProxyOverride 绕过列表自动并入 NO_PROXY。
请求日志:经插件代理的每条请求一条记录——方法、URL、状态码、耗时、上下行流量、发送/返回内容预览;全部内存环形缓冲(最近 500 条),不落盘、不外发,占用有硬上限(< 1MB,可熔断)。
本地中继:web_fetch 流量经本地回环中继过插件之手——可观测、可统计,同时解除 harness 层的 SOCKS5 限制(socks5 配置现在全覆盖)。
流量图表:请求日志实时聚合为时间线 / 状态分布 / 耗时分布 / 通道分布 / 目标主机 TOP 10 五张自绘图表,前端纯函数聚合、零新增存储、5 秒刷新。
JSON 详情:日志点条目展开关键信息,「详情」弹窗内查看完整请求/响应内容;JSON 体自动渲染为可折叠树视图(键左对齐、缩进网格、长字符串点击展开全文),完整内容按需加载(单条 ≤256KB / 总池 ≤4MB 硬上限)。
设置页:一个一级菜单 + 页内二级标签(代理设置 / 请求日志 / 流量图表),连通性探测、地址过滤、渐进加载;配色全部走宿主主题变量,视觉与宿主一致。
web_fetch 全断。已修复并新增生命周期回归测试。| 字段 | 默认 | 含义 |
|---|---|---|
enabled | false | 是否启用代理 |
followSystem | false | 跟随系统代理 |
protocol | http | http(含 CONNECT 隧道)或 socks5 |
host / port | 127.0.0.1 / 7890 | 代理地址 |
username / password | 空 | 可选认证 |
noProxy | ["127.0.0.1","localhost","::1"] | 命中则直连 |
logEnabled | true | 请求日志开关(关闭后不再记录新条目) |
logPreviewBytes | 512 | 每侧内容预览的最大字节数(0–8192,0 = 不记内容) |
web_fetch 的出口不经过 globalThis.fetch,由 harness 的代理策略模块 @deepseek-ai/dsh-http-proxy 决定走向(#5)。插件定位 harness 已加载的同一模块实例(桌面端命中 app.asar 内实例,CLI 布局按 argv/bare 顺序回退)同步安装策略,停用与卸载还原到安装前状态。<webview> guest 实现,始终跟随 Windows 系统代理(Chromium 默认行为),不经过插件、日志无记录;插件配置对它不生效(插件宿主是主进程拉起的子 Node 进程,够不到 Electron session,#6)。跟随系统代理时两者出口一致;插件配置偏离系统代理时以系统代理为准。lib/desktop-session.js 保留为桥接就绪桩,未来主进程内加载插件宿主时自动激活。http:// 代理 URL。协议选 socks5 时由本地中继桥接(v0.5.0 起),socks5 配置两层全覆盖;PAC 模式暂不支持自动跟随,回退手动配置并提示。node tools/dsh-compat-probe.mjs <含 node_modules/@deepseek-ai 的目录>
(通常是 ~/.dsh/profiles)用真实的 cordis + dsh-host-webserver 挂载本插件,
再直接请求 /_dsh/net-proxy 与 /_dsh/net-proxy/log,把激活期与请求期的每一条错误打出来。
排查「换了 DSH 版本后插件还灵不灵」时先跑它;退出码非 0 即存在硬错误。MIT