🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

按命令代理 joinsnow-star/dsh-agentic-proxy

DeepSeek Harnessv0.1.4
joinsnow-star53 天前有提交已提供中文文档扫描:含敏感能力

让 Agent 按需为单条 shell 命令挂代理并托管内核

30.1/100
综合分
1
GitHub 星标
54
npm 周下载
—/5
用户评分

数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-agentic-proxy
npm 源 · dsh-agentic-proxy 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/10/29·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 53 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-agentic-proxy @ 0.1.4
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/7 14:41:45

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 42 处,展示前 39 条)
  • 写入本地文件
    lib/index.js:163
    await writeFile(
  • 发起网络请求
    client/client.js:42
    return fetch(RPC, {
  • 读取本地文件
    lib/kernel.js:112
    const raw = (await readFile(this.pidFile, 'utf8')).trim()
  • 删除本地文件
    lib/kernel.js:152
    await rm(this.pidFile, { force: true })
  • 执行外部命令来自配置/变量
    lib/kernel.js:193
    const child = spawn(this.binary, ['-d', this.workDir, '-f', this.configPath], {
  • 写入本地文件
    lib/kernel.js:224
    await writeFile(this.pidFile, `${child.pid}\n`, 'utf8')
  • 删除本地文件
    lib/kernel.js:241
    await rm(this.pidFile, { force: true })
  • 删除本地文件
    lib/kernel.js:265
    await rm(this.pidFile, { force: true })
  • 删除本地文件递归
    lib/kernel.js:300
    await rm(staging, { recursive: true, force: true })
  • 执行外部命令固定命令
    lib/kernel.js:304
    const tar = spawn('tar', ['-xf', zipPath, '-C', staging], { windowsHide: true })
  • 删除本地文件递归
    lib/kernel.js:318
    await rm(staging, { recursive: true, force: true })
  • 删除本地文件
    lib/kernel.js:319
    await rm(zipPath, { force: true })
  • 写入本地文件
    lib/paths.js:43
    await mkdir(dirs.root, { recursive: true })
  • 写入本地文件
    lib/state.js:24
    await writeFile(file, `${value}\n`, 'utf8')
  • 读取本地文件
    lib/state.js:29
    const text = await readFile(file, 'utf8')
  • 读取本地文件
    lib/shim.js:74
    return (await readFile(file, 'utf8')).includes(MARKER)
  • 写入本地文件
    lib/shim.js:87
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    lib/shim.js:91
    await writeFile(target, body, 'utf8')
  • 读取本地文件
    lib/shim.js:119
    await readFile(file)
  • 删除本地文件
    lib/shim.js:132
    await rm(target, { force: true })
  • 发起网络请求
    lib/api.js:41
    const res = await fetch(`${this.base}${path}`, init)
  • 发起网络请求
    lib/download.js:63
    const response = await fetch(mirror.wrap(VERSION_URL), { signal: signalFor(mirror, signal), redirect: 'follow' })
  • 读取本地文件
    lib/download.js:89
    const head = await readFile(file)
  • 发起网络请求
    lib/download.js:99
    const response = await fetch(url, {
  • 发起网络请求
    lib/download.js:122
    async function download(url, target, { expectedBytes, signal, onProgress, mirror, expectZip = false } = {}) { const response = await fetch(url, {
  • 写入本地文件
    lib/download.js:131
    await mkdir(dirname(target), { recursive: true })
  • 写入本地文件
    lib/download.js:142
    await pipeline(body, createWriteStream(temp))
  • 删除本地文件
    lib/download.js:144
    await rm(temp, { force: true })
  • 读取本地文件
    lib/download.js:147
    const written2 = (await stat(temp)).size
  • 删除本地文件
    lib/download.js:149
    await rm(temp, { force: true })
  • 删除本地文件
    lib/download.js:155
    await rm(temp, { force: true })
  • 写入本地文件
    lib/download.js:158
    await rename(temp, target)
  • 读取本地文件
    lib/download.js:225
    const info = await stat(file)
  • 读取本地文件
    verify-package.mjs:26
    const pkg = JSON.parse(await readFile('package.json', 'utf8'))
  • 读取本地文件
    verify-package.mjs:43
    if (existsSync(entry)) ok(entry)
  • 读取本地文件
    verify-package.mjs:53
    if (mainTarget && existsSync(mainTarget)) ok('main -> ' + mainTarget)
  • 读取本地文件
    verify-package.mjs:56
    if (clientTarget && existsSync(clientTarget)) ok('client -> ' + clientTarget)
  • 读取本地文件
    verify-package.mjs:63
    const clientSrc = await readFile(clientTarget, 'utf8')
  • 读取本地文件
    verify-package.mjs:75
    const patch = await readFile(pkg.dsh.bundle.patch, 'utf8')
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按需为单条命令挂代理
  • 安装并托管代理内核
  • 不依赖本机代理软件

给 DeepSeek Harness 的 按命令代理:Agent 自己决定哪条 shell 命令走代理,插件负责安装并托管它所需要的代理内核 —— 不依赖你机器上已装的任何代理软件。

README

由 DeepSeek 最新模型翻译生成
dsh-agentic-proxy 为 DeepSeek Harness 提供的按命令代理:Agent 自己决定哪条 shell 命令走代理,插件负责安装并托管它所需要的代理内核 —— 不依赖你机器上已装的任何代理软件。 proxy npm install # 这条走代理 proxy curl https://api.github.com # 这条也走代理 curl https://registry.npmmirror.com/react # 不加前缀 = 直连 为什么是"命令前缀" Harness 无法改写一条已经发出的命令:tools/pre-execute 的决定只有 allow / deny / ask,tools/post-execute 只能接受、替换内容或阻断。唯一能在运行时改写 args 的路径(替换 tools/execute 的 exec.arguments)会导致日志显示的命令与实际执行的命令不一致,因此不采用。 proxy 是一个真实存在于 PATH 上的 proxy.cmd,所以: - 命令是什么,日志里就是什么; - 命令仍运行在 Agent 自己的 shell 与文件沙箱内; - 不需要任何 harness 内部行为,升级不易失效。
展开完整文档(README 剩余 1 节)
dsh-agentic-proxy

为 DeepSeek Harness 提供的按命令代理:Agent 自己决定哪条 shell 命令走代理,插件负责安装并托管它所需要的代理内核 —— 不依赖你机器上已装的任何代理软件。

proxy npm install # 这条走代理 proxy curl https://api.github.com # 这条也走代理
curl https://registry.npmmirror.com/react # 不加前缀 = 直连

为什么是"命令前缀"

Harness 无法改写一条已经发出的命令:tools/pre-execute 的决定只有 allow / deny / ask,tools/post-execute 只能接受、替换内容或阻断。唯一能在运行时改写 args 的路径(替换 tools/execute 的 exec.arguments)会导致日志显示的命令与实际执行的命令不一致,因此不采用。

proxy 是一个真实存在于 PATH 上的 proxy.cmd,所以:

- 命令是什么,日志里就是什么;
- 命令仍运行在 Agent 自己的 shell 与文件沙箱内;
- 不需要任何 harness 内部行为,升级不易失效。

安装

dsh plugin --profile web add dsh-agentic-proxy

也可以直接从 GitHub 安装(内容与 npm 版本一致):

dsh plugin --profile web add github:joinsnow-star/dsh-agentic-proxy

从本地源码目录安装(开发用;pnpm 会建一个目录链接,改完代码重启 DSH 即生效):

dsh plugin --profile web add D:\path\to\dsh-agentic-proxy

dsh plugin add 只是把参数原样转发给 profile 目录下的 pnpm,并且只有以 ./..
开头的相对路径会被锚定到你当前所在目录,绝对路径原样透传 —— 这正是路径规格区别于包名的原因。

dsh plugin 在 Windows 上以 shell: true 转发给 cmd.exe,而 ^ 在 cmd 里是转义字符,
会被吃掉。所以 add dsh-agentic-proxy@^0.1.0 实际装成的是精确版本。想要范围就写进 profile 的 package.json,别指望命令行能传进去。

CLI 会自动把包名写入 profile 的 dsh.profile.bundles,无需手改任何 profile 文件。

装完必须重启 DSH:bundle 层列表只在启动时解析一次,运行中的进程不会热加载新插件(patchReload: live 只热重载 profile 目录下的用户 patch 文件,不含 bundle 列表)。

使用

1. 打开 设置 → 代理管家,填入你的订阅链接(Clash / mihomo 格式)。
2. 点 安装命令前缀,再点 启动内核。
3. 之后在 shell 里用 proxy 即可。

设计要点

| 关注点 | 做法 |
| 内核 | mihomo,首次使用时自动下载 |
| 订阅 | 交给内核的 proxy-providers,插件不解析订阅 |
| 选节点 | 内核的 url-test 组自动测速与故障转移,插件不排序节点 |
| 分流 | GEOIP,CN,DIRECT + MATCH,插件不维护国内域名表 |
| 生命周期 | 懒启动;DSH 退出即停止;用 pid 文件识别并清理孤儿进程 |
| 端口 | 默认 17890(避开 Clash for Windows 常用的 7890) |
| Agent 如何知道这个能力 | 注册运行时技能(不是模型工具),描述里直接写明 proxy 语法;仅在 shim 已安装时注册 |

单一事实来源 = 内核。 插件只生成一份很薄的配置骨架,其余全部委托给 mihomo。

已知限制

- 首次需要能访问 GitHub。 npm 与 npmmirror 都没有 mihomo 二进制,所以下载源是 GitHub 直连 + gh-proxy.com + ghproxy.net。若三者都不可达,请手动下载内核并在设置里填入路径。(实测数据见仓库中的 FINDINGS.md。)
- 无官方 sha256。 上游不提供校验文件,因此只做了长度比对与 zip 头校验这类弱校验。
- 仅 Windows 已实测。 内核获取、解压(tar.exe)与 shim(.cmd)目前是 Windows 路径。
- proxy 会进入 PATH。 插件停止时会按标记清理;若你手动删过文件,残留的 proxy.cmd 也可以直接删除,插件下次启动会重新生成。
- Agent 需要被告知才有这个能力。 插件不注册模型工具(那会成为与 shell 命令并列的第二条执行路径),而是注册一个运行时技能 agentic-proxy:它的名称与描述常驻在技能目录里,正文按需加载。因此技能只在 proxy 命令确实存在于 PATH 上时才注册——否则等于让模型去执行一条不存在的命令。未点过「安装命令前缀」时不会有这个技能。
- 模型仍可能选择不用。 知道能力存在不等于每次都会用;直连失败时它更可能直接报告"网络不通"。
- 受限沙箱里 Schannel 可能拿不到证书凭据。 curl.exe(以及 git 在 Schannel 模式下)会报 schannel: AcquireCredentialsHandle failed: SEC_E_NO_CREDENTIALS (0x8009030E)。
这不是代理不通(通道已经建立),而是 TLS 后端取不到 Windows 证书库。对该条命令加 -c http.sslBackend=openssl 即可(proxy git -c http.sslBackend=openssl clone …); Node 与 Python 自带 OpenSSL,不受影响。不要把它写进全局 git 配置——Schannel 用的是 Windows 证书库,某些环境(企业 MITM 代理)的根证书只在系统库里,强制 OpenSSL 会因无法验证证书而失败。这一条已写进技能正文,Agent 遇到时可自行恢复。

开发

无构建步骤:客户端半是手写的 classic script,直接由 __ModuleLoader__.load 注册。

lib/paths.js 目录布局 lib/download.js 内核与 GeoIP 数据获取(多镜像) lib/kernel.js 内核进程生命周期 lib/config.js 生成 mihomo 配置 lib/shim.js 生成 proxy.cmd lib/rpc.js 设置页的 HTTP RPC 端点 lib/index.js 插件入口 client/client.js 设置页(零构建)

POLICY.md 是全部策略的说明书(各种情况下插件会怎么做、已知局限清单),随包发布。

以下三份是工程记录,只在 GitHub 仓库里,不随 npm 包分发: DESIGN.md(设计决策与取舍)、FAILOVER.md(故障转移机制与实测数字)、 FINDINGS.md(实测事实与出处)。

License

MIT。注意 mihomo 本身是 GPL-3.0 且不随本包分发 —— 它是由用户按需下载的独立程序。
预览分享卡片长什么样 ↓joinsnow-star/dsh-agentic-proxy
分享 · DeepSeek Harness Hub
joinsnow-star/dsh-agentic-proxy

让 Agent 按需为单条 shell 命令挂代理并托管内核

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部