khiqwq/dsh-system-proxy1

dsh-system-proxy

DSH 宿主出站 HTTP(S) 智能代理路由插件

AI 分析

核心用途是提供具名代理配置、基于主机/提供商/插件的路由规则,以及健康度记忆的直连回退。适合需要精细控制 DSH 网络出站流量、解决 API 访问网络受限问题的用户。

包名
dsh-system-proxy
版本
0.3.0
许可证
MIT
最近更新
2026年8月14日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:khiqwq/dsh-system-proxy

配置

交互式配置

安装到带有 Settings 服务的 DSH profile 后,插件会以 system-proxy 命名空间注册交互式配置。可在 DSH 的 Settings → 插件页面编辑 enabled、代理来源、具名代理、路由规则和默认策略;保存后插件会串行停止旧传输包装并按最新配置热重装,无需手工编辑 patch 或重启主进程。loader entry 中的 config 作为 base 层:没有用户设置时保持原行为,清除用户覆盖后也会回落到该 base。

代理密码必须优先使用 passwordRef:插件配置页中的密码框是只写输入,保存后仅显示“已配置”,不会回填、显示首尾或提供 reveal API;实际值由 ctx.credentials 解析。配套的 dsh-credentials-system 使用 Windows 当前用户绑定的 DPAPI 密文存储,并替换默认的明文 dsh-credentials-localrole("secret") 只负责页面/API 脱敏,本身不等于磁盘加密。

仍可直接使用下面的 cordis.patch.yml 配置;交互式用户层优先于 entry base。

配置位于 profile 的 cordis.patch.yml。以下示例与当前 package schema 一致:proxies 是对象,rules数组,默认策略位于 default 对象中。

- id: system-proxy
  config:
    enabled: true
    mode: auto                 # auto | env | system | manual
    url: ''                    # 旧配置兼容:隐式 default 代理
    patchNodeHttp: true
    protectPrivate: true         # 默认直连私网、链路本地和 metadata
    healthMaxEntries: 10000      # 每主机健康表上限(LRU 淘汰)

    noProxy:
      - localhost
      - '127.0.0.1'
      - '::1'
      - api.deepseek.com
    only: []                   # 旧配置兼容:非空时只代理这里的主机

    proxies:
      clash-http: http://127.0.0.1:7890
      v2ray-socks: socks5h://127.0.0.1:10808
      legacy-socks: socks4a://127.0.0.1:1080
      os-proxy: { source: system }
      # 推荐用 passwordRef 从 DSH credentials 服务解析密码;不能与 password 同时设置
      authenticated: { url: http://proxy.example:8080, username: user, passwordRef: DSH_PROXY_OFFICE_PASSWORD }

    rules:
      - host: [api.deepseek.com]
        action: direct
      - host: [api.openai.com]
        provider: [openai]
        action: proxy
        proxy: v2ray-socks
      - plugin: [some-unreachable-plugin]
        action: fallback
        proxy: clash-http
        directTimeoutMs: 2000
      - host: [api.blocked.example]
        action: block

    default:
      strategy: fallback       # direct | proxy | fallback
      proxy: clash-http
      directTimeoutMs: 3000
      latencyThresholdMs: 1500
      cooldownMs: 60000
      methods: [GET, HEAD, OPTIONS, TRACE]

    trustRouteHeaders: false
    routeHeaderPrefix: x-dsh-route

Loader 配置是整体替换

Cordis loader 只在 EntryOptions 顶层合并。config 一旦出现在后续 patch 中,就会整体替换原 config;rulesproxies 使用数组/对象不会产生跨层深合并。

因此,在 profile patch 中增加一条规则时,必须重述要保留的完整 config,包括全部 proxiesrulesdefault 和兼容键。只写增量字段会丢失其他配置。

交互式配置

安装到带有 Settings 服务的 DSH profile 后,插件会以 system-proxy 命名空间注册交互式配置。可在 DSH 的 Settings → 插件页面编辑 enabled、代理来源、具名代理、路由规则和默认策略;保存后插件会串行停止旧传输包装并按最新配置热重装,无需手工编辑 patch 或重启主进程。loader entry 中的 config 作为 base 层:没有用户设置时保持原行为,清除用户覆盖后也会回落到该 base。

代理密码必须优先使用 passwordRef:插件配置页中的密码框是只写输入,保存后仅显示“已配置”,不会回填、显示首尾或提供 reveal API;实际值由 ctx.credentials 解析。配套的 dsh-credentials-system 使用 Windows 当前用户绑定的 DPAPI 密文存储,并替换默认的明文 dsh-credentials-localrole("secret") 只负责页面/API 脱敏,本身不等于磁盘加密。

仍可直接使用下面的 cordis.patch.yml 配置;交互式用户层优先于 entry base。

配置位于 profile 的 cordis.patch.yml。以下示例与当前 package schema 一致:proxies 是对象,rules数组,默认策略位于 default 对象中。

- id: system-proxy
  config:
    enabled: true
    mode: auto                 # auto | env | system | manual
    url: ''                    # 旧配置兼容:隐式 default 代理
    patchNodeHttp: true
    protectPrivate: true         # 默认直连私网、链路本地和 metadata
    healthMaxEntries: 10000      # 每主机健康表上限(LRU 淘汰)

    noProxy:
      - localhost
      - '127.0.0.1'
      - '::1'
      - api.deepseek.com
    only: []                   # 旧配置兼容:非空时只代理这里的主机

    proxies:
      clash-http: http://127.0.0.1:7890
      v2ray-socks: socks5h://127.0.0.1:10808
      legacy-socks: socks4a://127.0.0.1:1080
      os-proxy: { source: system }
      # 推荐用 passwordRef 从 DSH credentials 服务解析密码;不能与 password 同时设置
      authenticated: { url: http://proxy.example:8080, username: user, passwordRef: DSH_PROXY_OFFICE_PASSWORD }

    rules:
      - host: [api.deepseek.com]
        action: direct
      - host: [api.openai.com]
        provider: [openai]
        action: proxy
        proxy: v2ray-socks
      - plugin: [some-unreachable-plugin]
        action: fallback
        proxy: clash-http
        directTimeoutMs: 2000
      - host: [api.blocked.example]
        action: block

    default:
      strategy: fallback       # direct | proxy | fallback
      proxy: clash-http
      directTimeoutMs: 3000
      latencyThresholdMs: 1500
      cooldownMs: 60000
      methods: [GET, HEAD, OPTIONS, TRACE]

    trustRouteHeaders: false
    routeHeaderPrefix: x-dsh-route

Loader 配置是整体替换

Cordis loader 只在 EntryOptions 顶层合并。config 一旦出现在后续 patch 中,就会整体替换原 config;rulesproxies 使用数组/对象不会产生跨层深合并。

因此,在 profile patch 中增加一条规则时,必须重述要保留的完整 config,包括全部 proxiesrulesdefault 和兼容键。只写增量字段会丢失其他配置。