Skip to content
This repository was archived by the owner on Oct 21, 2026. It is now read-only.

Releases

v0.1.0 — Provider 架构与 DSH 0.2.1 适配

Choose a tag to compare

@Yurzi Yurzi released this 19 Oct 03:30

v0.1.0

0.1.0 把插件改造成可扩展的 provider 架构,并适配 DeepSeek Harness 0.2.1。这是一个破坏性版本,升级前请阅读下面的「升级」一节。

重点

  • 修复 DSH 0.2.1 上 web_search 报 WEB_PROVIDER_AMBIGUOUS。 0.0.12 的 bundle patch 改写共享的 web 行时丢掉了 searchProvider。新版改为以原生 provider 的 id http 注册,只停用 web-fetch-http,完全不动 web 行。
  • 官方「启用新版 Web 搜索 API」开关可以正常切换:打开时 web_fetch 改用 DeepSeek Fetch API,关闭后回到本插件。
  • 传输层直接使用官方 HttpFetchProvider,插件只注入自己的白名单 DNS 解析器;跳转、代理、连接固定、超时和大小上限随上游一起维护。
  • 为多 provider 做好准备:插件只占 ctx.web 的一个席位,按请求委托给后端,后续可加入 Jina、Firecrawl、官方 http、DeepSeek Fetch API 等,见 Provider 与路线图。
  • 全新的设置页:一个保存按钮、逐行检查与一键修正、风险提示(云元数据、回环、过宽网段)、Fake-IP 一键加入、可编辑的上限,以及 web_fetch 被切走时的提示。插件页显示中文标题、描述和图标。
  • 安全修复:白名单外的非公网 IP 字面量在交给官方 transport 前就被拒绝,配置了出站代理时 [::7f00:1] 这类地址不再能经代理到达本机;::1/128 现在能正确放行 IPv6 回环。
  • 给模型的白名单说明改为运行时上下文,且只在本插件确实提供 web_fetch 时出现。

升级

  • 需要 DSH >=0.2.1-rc.2 <0.3.0-0。仍在 0.2.0-rc.2 的用户请继续使用 0.0.12。
  • 在插件页点「更新」,或先 dsh plugin --profile web remove dsh-web-fetch-enhanced,再 dsh plugin --profile web add dsh-web-fetch-enhanced@0.1.0。
  • 默认 provider id 由 http-enhanced 改为 http。如果你曾手动写过 web.fetchProvider: http-enhanced,删掉这项覆盖;需要与原生 provider 并存时参考 共存示例。
  • 白名单、User-Agent 和上限的现有配置继续有效;上限字段只接受整数。
  • 完整步骤见 CHANGELOG。

验证

  • 类型检查、type-aware lint、构建、73 个单元测试和 publint 在 Node 22.19 与 Node 26 下通过。
  • 新增端到端测试 pnpm run test:e2e:在隔离环境中用插件管理器安装打包产物,真实启动 DSH 0.2.1-rc.2 的 Host 和 Web,验证组合、抓取、模型说明和设置页(9 个用例)。
  • npm 上的已发布包已在隔离环境中从 registry 安装并检查组合结果。

English

0.1.0 rebuilds the plugin as a provider architecture for DeepSeek Harness 0.2.1 and is a breaking release. It fixes WEB_PROVIDER_AMBIGUOUS for web_search on DSH 0.2.1 by registering under the native provider id http and no longer patching the shared web row; the official "Use the new Web Search API" switch now works both ways. Transport is the official HttpFetchProvider with this plugin's allowlist-aware resolver injected. The settings page is rebuilt with one Save, per-line checks and fixes, risk warnings, a fake-IP preset, editable limits, and a routing notice. Disallowed IP literals are refused before reaching a configured proxy, and ::1/128 now allows IPv6 loopback. Requires DSH >=0.2.1-rc.2 <0.3.0-0; if you pinned web.fetchProvider: http-enhanced, remove it. See the CHANGELOG for upgrade steps.

v0.0.12 — 自定义 User-Agent

Choose a tag to compare

@Yurzi Yurzi released this 10 Oct 05:27

v0.0.12

自定义 User-Agent

  • 插件详情页新增独立的 User-Agent 编辑区,支持保存、放弃修改和重置为继承值;UA 操作只修改当前 Profile 的 userAgent,不改变 CIDR 或域名白名单。
  • 默认 UA 与官方 DSH HTTP provider 对齐:deepseek-harness/0.0.1 (+https://github.com/deepseek-ai),不默认使用 Chromium 或其他浏览器 UA。
  • 复用 Loader volatile 热更新:保存成功后下一次 web_fetch 生效,无需重启。正在执行的请求保留原配置快照;直连、代理和同源重定向每一跳使用同一配置 UA。
  • 独立表单保留 Profile revision 冲突保护;保存失败或连接错误不清除草稿、不显示为成功,支持只读状态与放弃重试。

校验与兼容性

  • 浏览器与 Host 共用请求头字符校验,拒绝 CR/LF、其他非法控制字符及非 Latin-1 字符;补齐直接创建 provider 的 UA 校验,并修复末尾换行可能通过正则校验的问题。
  • 未显式配置 UA 的用户改用官方默认值;已有 UA 覆盖(包括旧产品 UA 与空字符串)不被自动改写。
  • 空字符串仍表示显式发送空 UA 请求头,不等于恢复默认值。重置操作移除当前 UA 覆盖,恢复底层 Profile 值;没有继承值时使用官方默认。
  • 配置格式不变,schemaVersion 仍为 1;DSH 支持范围仍为 >=0.2.0-rc.2 <0.3.0-0,依赖基线不变。
  • 不增加模型侧工具参数、不发送 Cookie 或 Authorization、不改变地址授权与重定向安全边界。修改 UA 不提供浏览器 TLS 指纹、JavaScript 执行或验证码处理,也不保证绕过反爬。

升级

按现有插件管理流程升级到 dsh-web-fetch-enhanced@0.0.12。升级前备份 Profile 配置,升级后按部署方式重新加载 Host 和客户端;之后修改 UA 不需要重启。入口为 插件 → dsh-web-fetch-enhanced → User-Agent。

详细用法见自定义 UA 说明。

验证

  • 类型检查、type-aware lint、Host / Client 构建、全部 15 个测试文件的 156 项测试、覆盖率门槛与发布包检查通过。
  • 新增 30 项回归测试,覆盖默认值、非法字符、表单保存/重置/冲突/只读、Loader 热更新,以及直连和代理的重定向请求头。
  • 本地 pnpm 缓存数据库不可用,等价检查使用本地工具执行;发布包检查使用 publint --pack npm。
  • 没有修改运行中的用户 Profile;本地测试不等同于浏览器端到端验收。

English

v0.0.12 adds a Profile-scoped User-Agent editor with independent save, discard, and restore-inherited actions. The default now matches official DSH: deepseek-harness/0.0.1 (+https://github.com/deepseek-ai), not a browser UA. Existing explicit overrides, including empty strings, are preserved. Live changes apply to the next fetch without restarting; direct requests, proxy requests, and same-origin redirects use the configured UA. Shared browser/Host validation rejects invalid header characters and trailing newlines. UA actions never modify address allowlists, and stale writes remain revision-fenced. Configuration schema version remains 1 and DSH compatibility remains >=0.2.0-rc.2 <0.3.0-0. All 156 tests across 15 files, coverage thresholds, builds, and package checks pass. Changing UA does not guarantee bypassing bot detection.

v0.0.11 — 配置版本与运行时迁移

Choose a tag to compare

@Yurzi Yurzi released this 04 Oct 13:33

v0.0.11

配置版本与自动迁移

  • 新增插件局部的 schemaVersion,当前格式版本为 1,独立于 npm 包版本、DSH 版本及表单 revision。
  • 现有无版本配置和显式 v0 配置读取时自动迁移到 v1,无需手动补字段;v1 只引入版本标识,不改变白名单授权及现有字段语义。
  • 新增逐版本迁移入口,覆盖直接 Config(raw)、Cordis Standard Schema 校验和 createProvider(raw)。迁移深克隆输入,保留未知字段及显式空数组,完整校验后才用于运行时配置。
  • 非法版本和高于当前支持范围的配置明确报错,不静默降级或回退默认配置。
  • 保留对象 schema 元数据、浏览器表单序列化和 Loader volatile 热更新行为;版本字段不作为白名单表单可编辑字段。
  • 更新中英文说明、配置示例及配置迁移设计。

升级与边界

DSH 支持范围仍为 >=0.2.0-rc.2 <0.3.0-0,依赖基线不变。按照现有插件管理流程升级到 dsh-web-fetch-enhanced@0.0.11,升级前备份 Profile 配置,按部署方式重新加载 Host。旧配置可直接读取,无需手动设置 schemaVersion。

本版本只做运行时内存迁移,不自动改写用户文件,不向其他 Profile 复制授权,也不读取旧全局设置。后续字段改名须同步设计表单写入与分层持久化迁移,不能仅靠读取转换;需要改变授权范围的歧义配置不应无感自动处理。

验证

  • pnpm run check:类型检查、lint、Host / Client 构建、测试及 publint 发布包校验通过。
  • 14 个测试文件、126 项测试通过,包含 21 项迁移测试及无版本 / v0 / v1 的 Loader 启动与热更新回归。
  • 没有修改运行中的用户 Profile;本地测试不等同于浏览器端到端验收。

English

v0.0.11 introduces plugin-owned configuration schema version 1 and immutable, sequential runtime migrations. Unversioned and explicit v0 configurations are automatically normalized before validation; invalid or future versions are rejected. Existing authorization semantics, explicit empty overrides, browser forms, and Loader live updates are preserved. Migration runs in memory only and does not rewrite user files. Future field renames must also address form writes and layered persistence. DSH compatibility remains >=0.2.0-rc.2 <0.3.0-0. All 126 tests across 14 files and the full package checks pass.

v0.0.10 — DSH 0.2.0-rc.2 兼容性更新

Choose a tag to compare

@Yurzi Yurzi released this 30 Sep 14:54

v0.0.10

兼容性与依赖基线

  • 最低支持 DeepSeek Harness 0.2.0-rc.2(上游标准 SemVer 写法),插件由 0.0.9 升至 0.0.10。
  • engines.dsh 与全部 9 个 DSH peer 范围统一为 >=0.2.0-rc.2 <0.3.0-0;不再支持 rc.1 或更早版本。上界同时排除未经评估的 0.3.0 预发布 / 正式版。
  • DSH 直接开发依赖固定为 0.2.0-rc.2,同步更新 pnpm 锁文件及精确版本的 minimumReleaseAgeExclude,避免不同代 DSH 包混装。
  • 与 rc.2 上游一致的其他最低版本保持不变:Cordis 4.0.4、Cordis Loader 1.0.5、Schemastery 3.18.4、ipaddr.js 2.5.0、Undici 8.10.0。不顺带升级无关工具链。

上游 rc.1 → rc.2 影响核对

结合两份升级评估报告,独立核对上游 dsh-v0.2.0-rc.1 → dsh-v0.2.0-rc.2(目标提交 639ed015397290b3745d163aafe02ffee4aa3f84)以及本插件的实际调用点。

集成点 / 上游变化 本插件影响
Fetch、代理、超时、系统提示词 对应公开接口源码未变,无需修改 provider 或安全传输逻辑。默认拒绝、DNS 全答案校验 / 连接固定、同源重定向复核和资源限制保持不变。
插件管理与配置表单 plugins.bundle.config、ConfigForms、locale 和 slots 契约未变。上游安装提示和页面样式变化不要求迁移白名单表单。
Renderer 上游将 factory 祖先集合改为 memoized 值;本插件不替换 renderer 内部实现,保留现有 ModuleLoader factory 和 .cjs Client 入口。
Undici Dispatcher 类型漂移 插件与 rc.2 HTTP proxy / fetch 使用相同的 ^8.10.0 范围。增加测试核对最低版本及安装后的解析路径,避免在开发依赖中引入两套 Dispatcher 类型;不使用类型断言掩盖冲突。
Timed 问答、Gateway、侧栏 / OpenInApp props 本插件不实现这些接口,也不将提问的 pending / 超时当作网络授权。无需相关迁移。
pi-ai 模型目录、提醒 framing、终端及 Windows ACL 本插件不选择模型、不创建提醒、不发现 Shell、不包装 ACL 脚本;不机械替换模型 ID 或改变外部内容的信任语义。

结论:本次无需重写业务代码或迁移现有配置;重点是提升版本门槛、统一依赖和回归验证。

升级方式

  1. 先将 Host 升级至 DSH 0.2.0-rc.2 或支持范围内的更新版本。
  2. 备份 / 记录当前 Profile 中的白名单和资源限制。rc.2 的插件管理不支持已安装包直接自动升级,需先卸载再安装:
dsh plugin --profile web remove dsh-web-fetch-enhanced
dsh plugin --profile web add dsh-web-fetch-enhanced@0.0.10
  1. 按部署方式重启 Host,刷新 Web 页面,并核对目标 Profile 的配置。配置结构没有变化,但不要假设卸载重装一定保留所有 Profile 覆盖值;必要时从备份恢复。日常保存白名单仍无需重启。
  2. Desktop Profile 应先至少启动一次桌面端,以初始化 Profile,再按上游桌面插件管理流程安装。

验证

在 Node 26.10.0、pnpm 11.7.0 下使用 rc.2 npm 依赖完成验证:

  • pnpm run check 通过:类型检查通过,lint 0 警告 / 0 错误,Host / Client 构建成功,13 个测试文件、102 项测试全部通过,包括 ModuleLoader 产物注册和代理 / DNS / SSRF 回归。
  • pnpm run test:coverage 通过:语句 98%、分支 95.48%、函数 100%、行 99.54%,逐文件阈值达标。
  • pnpm exec publint --strict 通过,输出 All good!,无格式或导出警告。
  • pnpm install --store-dir .pnpm-store --frozen-lockfile --offline 通过,锁文件与依赖声明一致;全部 16 个 DSH 直接 / 传递包对齐 rc.2,未升级无关依赖。
  • SemVer 回归在默认规则与 includePrerelease: true 下均拒绝 rc.1、接受 rc.2 / 同版本后续 RC 与 0.2.x 稳定版,并拒绝 0.3.0 预发布 / 正式版。Undici 最低版本和解析路径一致性测试通过,无 Dispatcher 类型冲突。

没有修改或重启运行中的 DSH Profile,不将单元 / 契约测试等同于真实浏览器或 Desktop 端到端验收。

English

v0.0.10 raises the minimum DSH version to 0.2.0-rc.2. All nine DSH peer ranges and the engine range are >=0.2.0-rc.2 <0.3.0-0; direct DSH development dependencies are pinned to rc.2. Other dependency floors already match upstream, including Undici 8.10.0. A regression test checks the transport dependency range and shared installed Dispatcher type source. The upstream public fetch, proxy, timeout, prompt, and configuration-form contracts remain compatible, so no provider rewrite or configuration-schema migration is needed. Back up Profile settings, upgrade the Host first, remove and reinstall the plugin using the rc.2 plugin manager, then restart the Host and refresh the browser. Live Profile changes and browser / Desktop end-to-end validation are outside this release verification.

v0.0.7 — DSH 0.1.7-rc.1 配置修复与界面更新

Choose a tag to compare

@Yurzi Yurzi released this 24 Sep 14:28

v0.0.7

兼容性

  • 最低支持 DeepSeek Harness 0.1.7-rc.1,支持范围为 >=0.1.7-rc.1 <0.2.0。
  • 配置改为当前 Profile 的 Cordis Config 与 volatile 字段,不再读取全局 settings.yaml。旧版用户请按迁移说明迁移白名单。
  • 程序化创建 provider 的原始配置类型为 ProviderConfig;Config 表示 Loader 解析后的 live-ref 配置。

修复与改进

  • 修复配置 schema 的校验回调在传输中被移除后,两个输入框持续禁用的问题;Host 仍完整校验所有保存请求。
  • 白名单表单直接显示在插件详情页,无需进入组件;去掉重复标题和折叠卡片,保存后显示结果并保持字段可见。
  • 同步外部配置变更,保留未保存草稿,通过 revision 检查拒绝过期写入。
  • 清空白名单保存为显式空数组;只有“恢复继承”才移除覆盖,避免意外恢复底层授权。
  • 白名单与资源限制更新后供下一次请求使用,在途请求保留原配置快照;授权变化同步更新系统提示词。
  • 改善窄屏按钮布局,补充表单交互、schema 传输与 Loader 热更新回归测试。

升级插件后重启 Host 并刷新 Web 页面。日常白名单保存无需重启。

English

Requires DSH 0.1.7-rc.1 or later within the 0.1 series. Configuration now belongs to the active Profile; review and migrate legacy global allowlists before upgrading. This release fixes disabled configuration inputs, moves the form onto the plugin details page, preserves drafts during external updates, rejects stale writes, and distinguishes explicit empty overrides from resetting to inherited values. Host validation and request-level configuration snapshots remain enforced. Restart the Host and refresh the browser after upgrading.