# 更新日志

记录 `dsh-web-search-enhanced` 的用户可见变化。历史条目描述对应版本，不代表当前行为。

## [Unreleased]

## [0.1.10] - 2026-10-19

### 新增

- Loader 配置 `providerId`（默认 `deepseek-official`）：与 dsh-web-fetch-enhanced 一样，可改用其他 ID，与重新启用的原生 DeepSeek 搜索共存，见[配置参考](docs/configuration.md#provider-id-与原生搜索共存)。它只能在 Profile 中修改，修改后插件重新挂载；设置页不显示也不改动它。
- 设置页在 `web_search` 不经过本插件时给出提示：`web` 条目没有指定 `searchProvider`（会自动选择，可能报 `WEB_PROVIDER_AMBIGUOUS`）、被 DSH 自带「网页搜索」页面的开关改为 DeepSeek Search API，或指向其他 provider。判断方式与 DSH 相同，也考虑 `DSH_WEB_SEARCH_PROVIDER`。
- `searchConnections/provider` Remote 方法：返回本插件注册的 provider ID 和 `DSH_WEB_SEARCH_PROVIDER`，供设置页判断。

### 修复

- 与 dsh-web-fetch-enhanced 等抓取插件同时安装时 `web_fetch` 无法正常使用：安装补丁不再改写共享的 `web` 条目。旧补丁只写 `searchProvider`，补丁整体替换条目配置，`fetchProvider: http` 随之丢失，抓取落入自动选择。
- 设置页把某项改回默认值后，Profile 中会留下空的覆盖对象（例如关掉再打开一个服务后的 `builtin:tavily: {}`）；现在一并删除。

### 开发

- 新增端到端测试 `pnpm run test:e2e`（迁移自 dsh-web-fetch-enhanced）：在隔离的真实 DSH 中与 dsh-web-fetch-enhanced 一起安装，验证合成结果、Host 路由、共存配置和 Web 界面。见[开发指南](docs/development.md#端到端测试)。

### 变更

- 搜索 provider 的 ID 由 `enhanced-search` 改为原生 DeepSeek 搜索的 `deepseek-official`，由 base profile 的 `web.searchProvider` 直接选中。安装补丁只停用 `web-search-deepseek` 并插入本插件条目，与 dsh-web-fetch-enhanced 的做法一致。
- 不再停用 `web-deepseek-api`：两个选择都已固定，它的 provider 只在用户显式选择时使用。
- 如果在 Profile 中手写过 `searchProvider: enhanced-search`，或设置了 `DSH_WEB_SEARCH_PROVIDER=enhanced-search`，升级后会报 `WEB_PROVIDER_CONFIGURED_MISSING`，删除这条覆盖即可。

### 升级说明

- DSH 要求不变（`>=0.2.1-rc.2 <0.3.0`），设置格式仍为 version 2，会话存储不变，无需迁移。卸载旧插件后安装 0.1.10 并刷新 Web 页面；设置、密钥和会话选择都会保留。
- 用 `link:` 安装的开发环境需要重启 DSH：热更新会替换插件代码，但不会重新读取链接包的安装补丁。
- 如果以前改过 DSH 内置「网页搜索」页面的开关，用户层 `web` 条目中残留的 `deepseek-search-api` / `deepseek-fetch-api` 现在会让搜索和抓取改走 DeepSeek Search / Fetch API（0.1.9 时是报错）；设置页会提示，删除这两个字段即可。详见[升级指南](docs/upgrading.md)。

## [0.1.9] - 2026-10-19

### 宿主兼容性

- 只支持 DSH `>=0.2.1-rc.2 <0.3.0`；所有 DSH peer 依赖改为同一范围，开发依赖固定到 0.2.1-rc.2。
- DSH 0.2.1 默认开启热更新，已安装时需先卸载再安装新版本，见[升级指南](docs/upgrading.md)。
- 设置格式仍为 version 2，会话存储域仍为 `web_search_enhanced` v1（新增 `pairings` 表），无需格式迁移。

### 新增

- DeepSeek 搜索连接 `builtin:deepseek`：使用 DeepSeek 账号登录的会话直接用账号授权，其他会话使用 `DEEPSEEK_API_KEY`（与 DSH「模型」页共用）。
- 输入框菜单列出缺少密钥或当前不可用的连接并注明原因，点击即打开插件设置页；所选连接不可用时在菜单顶部说明并提供设置入口。
- 插件页显示插件图标与中英文简介；首次启用时提示免密钥可用的服务和设置入口。
- 新的文档：[配置参考](docs/configuration.md)、[升级指南](docs/upgrading.md)、[架构](docs/architecture.md)、[开发指南](docs/development.md) 和 [AGENTS.md](AGENTS.md)。

### 改进

- 输入框按钮和菜单改用 DSH 原生组件，样式与模型选择器一致；关闭搜索的选项改为「不使用搜索」；所选连接不响应实时性时，实时性选项不可用。
- 窄输入栏改为纯 CSS 逐级收起：先隐藏实时性，再隐藏连接名，最窄时只保留地球图标。
- 设置页用 DSH 组件重做：每项修改自动保存且只写差异；参数按当前访问方式显示；自定义连接改为表单编辑，`custom:` 前缀固定，凭据引用按 ID 建议（如 `CUSTOM_WORK_SEARCH_API_KEY`），可顺便填入密钥，只有非官方地址需要确认信任；移除自定义连接和「恢复默认设置」前需要确认。
- 所有界面文字提供完整的中文和英文，中文统一使用「密钥」。
- 跟随会话模型只读取 DSH 公开的模型配置，支持模型自己的 `api` 与 `baseURL`；不支持时说明具体原因。
- 模型与连接的配对记录改存 DSH 存储，随 DSH 数据一起保存。
- 搜索 provider 通过 DSH 找到发起调用的会话，原生调用和代码模式调用使用同一步冻结的搜索计划。

### 变更与移除

- 跟随会话模型要求 provider 配置显式写出 `api`，不再借助 pi-ai 内置目录补齐；DSH 自带的 DeepSeek 路由不能跟随，请改用 DeepSeek 连接。
- 不再读取 `$DSH_HOME/cache/web-search-enhanced/model-connections.json`，各模型的配对记录从空开始。
- 输入栏空间不足时不再隐藏搜索按钮；只有关闭「在输入框显示搜索按钮」时才隐藏。
- 移除 0.0.x 单一路由时代的编程接口：`createProvider`、`resolveConfig`、`EnhancedSearchProvider`、`DEFAULT_*` 常量等。
- 合并并重写文档，删除旧的 `docs/*.zh-CN.md` 与历史上游评估文档；npm 包不再包含 `docs/`。

### 修复

- 在 DSH 0.2.1 上 `web_fetch` 报 `WEB_PROVIDER_AMBIGUOUS`：安装补丁停用 `web-deepseek-api`，抓取回到唯一的本地 HTTP 实现，与 dsh-web-fetch-enhanced 同时安装时也成立。
- 点击搜索菜单时输入框会抢走焦点：菜单改为挂在页面顶层。

### 升级说明

- 先把 DSH 升级到 0.2.1-rc.2 或更新的 0.2.x，再卸载旧插件并安装 0.1.9，刷新 Web 页面。设置、密钥和会话选择都会保留。
- 如果以前改过 DSH 内置「网页搜索」页面的开关，删除用户层 `web` 条目中残留的 `searchProvider` / `fetchProvider`。
- 回退到 0.1.8 及更早版本需要同时回退 DSH，并先删除 DeepSeek 连接相关的设置。详见[升级指南](docs/upgrading.md)。

## [0.1.8] - 2026-10-12

### 窄输入栏适配

- 选择器只剩图标时同时去掉下拉箭头，改为与原生图标按钮一致的 28px 方形按钮；保存成功 / 错误标记改为角标，不再撑宽按钮。
- 输入栏连图标都放不下、控件即将被挤到下一行时，选择器自动让出位置；空间足够时自动重新出现。判断基于实际渲染的控件是否同处一行，并先等待 DSH 收起模型名，不使用固定像素阈值；恢复前以同步探测确认放得下，同宽度下连续反复时需再放宽 4px 才重试，避免来回闪。
- 出错、保存中、面板打开或所选连接不可用时始终显示选择器，宁可换行也不隐藏需要处理的状态；“关闭”属于主动选择，允许隐藏。
- 新增 `/setup-search` 指令：在输入框中弹出当前会话的搜索连接与实时性选项，与选择器共用会话选择与缓存；选择器被隐藏时也能切换，切换后输入栏中的选择器同步刷新。
- 新增 `showSelector` 配置（设置页“在输入栏显示搜索连接选择器”，默认开启），可完全隐藏输入栏中的选择器，改用 `/setup-search`。
- 跟随 dsh-mobile 0.6.3+ 的 flex 工具栏，移除旧网格布局下的规则：分组换行和 44px 触控尺寸由 dsh-mobile 负责，宽度上限改到按钮本身，标签在 dsh-mobile 允许按钮换行时仍保持单行省略；手机页同样会在放不下时让出选择器位置。
- 新增 `scripts/check-composer-fit.mjs` 隔离浏览器检查（桌面与 dsh-mobile 布局）及对应单元测试。

### 升级说明

- 包版本推进为 0.1.8；配置 version 2、会话 Storage Domain version 1、DSH 0.2.0-rc.2 基线和搜索行为均不变，无需迁移。新增的 `showSelector` 为可选字段，缺省等同开启。
- 升级方式同前：备份后移除旧插件再安装新包，重载服务端插件并刷新 Web 页面。使用手机页时建议配合 dsh-mobile 0.6.3 及以上版本。

## [0.1.7] - 2026-10-04

### 配置版本与自动迁移

- 沿用 `version` 作为配置 schema 版本，新增前后端共享的当前版本常量与严格判定；独立于插件包版本、宿主版本、并发 revision 和存储版本。
- 新增逐版本纯迁移入口，显式 V1 和无版本旧模型配置自动执行 1 → 2；无版本连接配置固定兼容为 V2，未来版本及非法版本拒绝读取或提交，不自动降级。
- 迁移保留已有连接、实时性偏好与显式默认连接；修复跟随会话模式迁移丢失连接配置的问题。
- 迁移执行中收到配置修改会重新读取最新 revision，继续使用宿主 CAS 提交，避免丢失更新；保留先保存 Credentials、后提交配置的可重试顺序。
- 客户端编辑与重置拒绝未迁移或未来版本，补充版本判定、输入不变、幂等、真实宿主重启及并发迁移回归。
- 新增配置版本设计文档，说明扩展步骤、失败恢复与跨服务事务边界（现已并入[架构](docs/architecture.md#设置与版本迁移)）。

### 升级说明

- 包版本推进为 0.1.7；配置 version 2、会话 Storage Domain version 1、DSH 0.2.0-rc.2 基线均不变。现有 V2 配置无需格式转换，旧配置自动迁移不影响已有会话选择。
- 升级前备份 profile 和凭据；安装后重载服务端插件并刷新 Web 页面。

## [0.1.6] - 2026-09-30

### DSH 0.2.0-rc.2 兼容性

- 最低宿主版本提升至 `0.2.0-rc.2`；所有 DSH peer 依赖下限改为 `^0.2.0-rc.2`，直接开发依赖固定到 rc.2，同步更新锁文件和预发布白名单。
- Zod 最低版本保持与上游一致的 `^4.4.3`，开发依赖树统一锁定 `4.4.3`，增加跨包 schema 类型一致性和发行包契约检查，避免依赖漂移被误判为 API 破坏。Cordis / Schemastery 的上游版本未变。
- 增加 pi-ai 新 DeepSeek Flash ID 的跟随模型回归，验证被移除的目录 ID 不会被自动改名，显式私有路由保持原模型 ID。
- 配置 version 2、会话 Storage Domain version 1 保持不变，无需新增迁移；升级指南明确先卸载旧插件再安装，并重载服务端、刷新 Web 页面。CI 和发布均显式使用冻结锁文件。

### 会话搜索选择器

- 新增“关闭”选项，按会话禁用 `web_search`；恢复连接后重新启用，不影响 `web_fetch`。
- 对齐宿主输入区模型选择器的响应式边界，保留关闭搜索、连接选择和实时性控制的既有回归测试。

## [0.1.5] - 2026-09-29

### DSH 0.2.0-rc.1 兼容性

- 最低宿主版本提升至 `0.2.0-rc.1`；所有 DSH peer 依赖同步改为 `^0.2.0-rc.1`，直接开发依赖固定到该版本，更新锁文件、预发布白名单和发布包契约断言。
- 核对搜索 Provider、设置 / 插槽、会话与工具恢复、Schedule 拆包、原生命令和遥测变更；无需修改搜索业务代码或安装补丁。新增真实宿主配置继承、修改、重启及恢复默认的回归测试。
- 明确原生 DeepSeek 搜索新增的账号认证不会自动用于本插件：跟随模型仍要求可解析的 API Key 路由，结构化与固定连接保持独立。
- 设置格式 version 2、会话 Storage Domain version 1 不变；从 0.1.4 升级无需新迁移，重载服务端后刷新 Web 页面。

## [0.1.4] - 2026-09-24

### DSH 0.1.7-rc.2 兼容性

- 最低宿主版本提升至 `0.1.7-rc.2`；DSH peer 依赖下限、精确开发依赖、锁文件及预发布安装白名单同步对齐。
- 核对动态工具更新、DeepSeek Provider 拆包、模型选择校验、Schedule 与审批变更；插件不调用 selectModel，不依赖被移除的 Schedule API，无需修改搜索运行时代码。
- 跟随模型仍仅支持可解析的 API Key 路由，不因宿主支持官方账号而自动支持账号 / OAuth 搜索；固定连接及结构化搜索不受模型选择校验影响。
- 设置格式 version 2、会话 Storage Domain version 1 保持不变。

### 搜索选择器请求优化

- 移除每 2 秒常驻轮询；首次加载、模型实际变化、展开菜单及页面恢复可见/焦点时按需读取，关闭菜单和普通重渲染不请求。
- 增加按会话隔离的 30 秒客户端缓存与并发请求合并，最多保留 64 个空闲会话项；TTL 到期本身不会触发请求。
- 写入成功直接复用返回值；手动重试和写入冲突刷新绕过缓存，模型/配置失效发生在请求期间时合并补读，防止旧响应覆盖新状态。
- 插件配置变化及本插件保存凭据后使缓存失效；连接断开/重建与插件卸载清理缓存并隔离旧请求。
- 本阶段不增加服务端推送：其他窗口的修改在后续缓存过期的按需刷新时同步，不再保证两秒内自动同步；版本冲突保护保留。

## [0.1.3] - 2026-09-24

### 界面细节对齐

- 保留设置卡片、行内配置与会话搜索菜单布局，对齐 DSH 的中性色按钮、表单底色、细边框、状态标签和单色凭据图标。
- 搜索菜单采用官方紧凑间距、圆角、背景模糊和浮层阴影；实时性分段选项跟随宿主主题。
- 修复主按钮悬停时文字颜色被覆盖的问题，改善窄屏表单与操作按钮换行，并尊重减少动态效果偏好。
- 设置与选择器预览共用官方浅色／深色主题变量快照，更新界面截图。

### DSH 0.1.7-rc.1 适配

- 最低宿主版本提升至 `0.1.7-rc.1`，开发依赖固定到该版本；Cordis / Schemastery 对齐 volatile 配置能力。
- 服务端改用 Loader `Volatile<T>.get()` 与 `internal/config` 校验，SettingsForms 只负责 profile 投影与 CAS 保存；移除 installSection 和直接写 settings.yaml 的旧逻辑。
- 保留旧配置导入：跟随宿主 settings.yaml → profile 时序，先迁凭据再替换配置，失败保留旧值并可重试，不覆盖已有不同凭据。
- 客户端设置迁移至 ConfigForms 和 plugins.bundle.config，使用 hooks/回调注入与 whileServed 生命周期；修复保存拒绝仍显示成功的问题。
- 会话选择器使用类型化 modelSelection projection；跟随模型按公开目录中的实例 namespace/path 读取设置，不扫描废弃 session 事件。
- Typert strict codec 改惰性 create()；集成测试迁移 PtcRuntime.resolve/run，保留 native/PTC 请求快照与并发隔离。
- 更新真实 profile、交互、模型目录与发布包契约测试，配置示例改为 profile patch。

### 升级边界

- 配置格式仍为 version 2，搜索选择 Storage Domain 仍为 version 1；不迁移或重写宿主 Session 日志。
- 跟随模式仍有受限 adapter identity/catalog 兼容 shim，不自动扩大到 OAuth/订阅认证；无法证明绑定时拒绝搜索，可用固定连接。
- 本版本需重新加载服务端插件并刷新 Web 页面；不支持旧版 settingsScope/settings.plugin.item 宿主。

## [0.1.2] - 2026-09-22

### 新增与修复

- 新增 OpenAlex 与 Semantic Scholar 学术检索连接，支持摘要、作者、引用计数与开放获取链接。
- 修复 OpenAlex 个人 API Key 认证：使用 api_key 查询参数，免 Key 模式不发送凭据；支持配置 mailto 联系邮箱。
- 模型切换时，尚未手动修改选择的非 fork 会话（revision 为 0）动态更新搜索连接；客户端订阅模型选择变化。
- 内置及自定义连接的 Key、OpenAlex 邮箱和已有连接编辑统一在对应行下展开，避免共享凭据引用导致重复展开。
- 移除独立迁移脚本和手动导入入口，仅保留启动自动迁移；统一旧字段检测，验证转换结果后顺序写入凭据与设置，失败时保留旧配置并输出脱敏提示。
- 更新配置、升级指南及安装示例，补充认证、稀疏旧配置迁移与设置渲染回归测试。

### 升级注意

- 升级前自行备份 settings.yaml；重新加载插件或重启 DSH 后刷新 Web 页面。
- 不再提供 pnpm run migrate 命令。自动迁移失败时，检查宿主日志、旧配置和 Credentials 写权限后重启插件。
- 保存 Key 不会自动切换访问模式；个人 Key 仍需显式选择。

## [0.1.1] - 2026-09-21

### 新增与优化

- **模型与搜索连接智能记忆联动**：引入 `ModelPairingStore` 状态缓存机制（持久化于 `$DSH_HOME/cache/web-search-enhanced/model-connections.json`），实现不同对话模型与其最近一次选择的搜索连接自动绑定与恢复；新会话自动恢复该模型最近一次使用的搜索连接偏好，未记录模型平滑回退至全局默认配置。
- **自定义连接配置全面采用 DSH 原生 YAML 规范**：设置页自定义连接编辑器升级为 DSH 原生 YAML 块级缩进格式（替代原 JSON 格式），大幅提升阅读与手动编辑体验，并保持完全向后兼容。
- **配置自动迁移与静默自愈**：该版本提供命令行配置迁移脚本及启动时自动迁移；独立脚本在 0.1.2 中移除。
- **文档与应用市场体验优化**：优化 README 用户安装与上手指引，补充更友好的安装与使用说明及截图清单 `screenshots.json`。

## [0.1.0] - 2026-09-21 🎉

### 全新搜索连接架构

- 用会话级搜索连接取代旧全局模型配置；对话模型与搜索连接独立选择。
- 内置 Exa、Firecrawl、Tavily、Tinyfish，支持显式免 Key / 个人 API Key 模式；安装为新会话默认选择 Exa。
- 支持固定搜索模型及跟随会话模型，适配 Anthropic Messages、OpenAI Responses、OpenAI Chat Completions。
- 会话持久化连接与内容实时性偏好；请求使用冻结快照，fork 复制后独立，多标签页通过 revision 检测冲突。
- 重写设置页与紧凑搜索选择器，支持表单化自定义连接、深浅色主题和窄屏布局。
- 凭据通过 DSH Credentials 解析；设置仅保存引用与稀疏差异，自定义端点要求显式信任。
- 扩充传输、宿主集成、会话隔离和 UI 回归测试；重写 README、配置、迁移、架构与开发文档。
- 新增 Q 版 DeepSeek 鲸鱼娘搜索主题 Banner，并注明角色与参考作品归属。

### 升级注意

- 旧配置需在设置页显式导入；`configured` 映射至 `custom:legacy`，`current-session` 映射至跟随会话模型。明文 Key 先迁入 Credentials。
- 不再执行 `fallbackModel` 或自动切换 Key / 服务；移除旧模型请求审计事件及 `/search-config` 快捷命令。
- 跟随会话模型要求 provider 显式配置 `apiKeyEnv`；不重建 OAuth / 订阅凭据，不透传自定义 headers。
- Tavily / Tinyfish 未显式设置访问方式时使用免 Key；Tinyfish `research_paper` 需要个人 Key。
- 实时性是内容缓存年龄偏好，不是发布日期过滤，且仅部分适配器支持。
- 前后端契约同时更新：升级后重新加载插件或重启宿主，并刷新页面。
- 主开发线使用 `main`；旧 0.0.x 主线保留于 `legacy/v0.0.x`。

详见[升级指南](docs/upgrading.md)。

## [0.0.6] - 2026-09-11

### Changed
- **Sparse Settings Mutation & Bloat Prevention**: Redesigned client settings card (`SearchSettingsCard`) with differential analysis (`computeSettingsOperations`) against schema defaults and composition base. Default values matching the inherited baseline are omitted to prevent `$DSH_HOME/settings.yaml` from bloating.
- **Redundant Overrides Self-Healing & Pruning**: Existing redundant default keys in user settings are automatically pruned via `unset` operations on save or reset, restoring a clean configuration file for existing users.
- **Single Atomic Mutation Batching (`scope.mutate`)**: Replaced consecutive serial `scope.set` calls with a single atomic `scope.mutate(ops)` transaction, eliminating multiple filesystem locks and I/O thrashing during settings persistence.
- **Decoupled Credential Storage**: Saving an API key without modifying other configuration parameters executes credential writes exclusively, resulting in zero mutations written to `settings.yaml`.

### Removed
- **Scaffolding & Outdated Documentation**: Cleaned up obsolete template comparison and outdated alpha contract references from `docs/`.

## [0.0.5] - 2026-09-11

### Changed
- **DSH 0.1.5-rc.2 Exclusivity & Compatibility**: Upgraded engine requirement to `engines.dsh >= 0.1.5-rc.2` and all `@deepseek-ai/*` peerDependencies/devDependencies to `^0.1.5-rc.2`, dropping legacy support for `v0.1.2-rc.1`.
- **Default Model Upgrade**: Updated global `DEFAULT_MODEL` and profile patch fallback model from `deepseek-v4-flash` to `deepseek-flash` (DeepSeek-V41-Flash) to match upstream DSH 0.1.5 conventions.
- **Session Audit & Transparency (`recordRequest`)**: Implemented pre-dispatch request logging via `session.append('web/deepseek-search-llm-request')`, safely capturing resolved endpoints, protocol identifiers, API versions, and secret-free payloads for turn auditing and trajectory exports.
- **Client Action Command (`/search-config`)**: Added client-side `/search-config` action command leveraging DSH 0.1.5 `ActionSpec` (`kind: 'action'`) to provide instant one-click navigation directly to the Web Search Enhanced settings card without interrupting conversation flow.
- **Egress & Proxy Verification**: Expanded egress test suite to verify outbound request dispatching under proxy and custom fetcher environments.

## [0.0.4] - 2026-09-03

### Changed
- **DSH 0.1.2-rc.1 Minimum Requirement & Compatibility**: Updated `engines.dsh` to `>= 0.1.2-rc.1` and `peerDependencies` across all `@deepseek-ai/dsh-*` packages to `^0.1.2-rc.1`.
- **RC-Only Support Policy**: Formally documented in `README.md` that the plugin exclusively supports DSH Release Candidate (RC) versions with a minimum requirement of `>= 0.1.2-rc.1`, and does not support intermediate alpha/beta/nightly snapshots.
- **Anthropic Endpoint Normalization**: Aligned with upstream PR #3451 specifications; added automatic normalization for Anthropic Messages `baseURL` with or without trailing `/v1` (e.g., `https://api.anthropic.com` safely resolves to `/v1/messages`), preventing 404 errors on official Anthropic endpoints and compatible gateways.
- **Out-of-the-Box Credential Fallback**: Added automatic fallback to `DEEPSEEK_API_KEY` when `apiKeyEnv` remains at default `WEB_SEARCH_ENHANCED_API` and the target endpoint is DeepSeek, enabling seamless drop-in replacement of the native search provider without redundant credential re-entry.
- **Client Build Defines Alignment**: Updated `tsdown.config.ts` define configuration to supply the root `import.meta.env` object alongside `import.meta.env.MODE`, matching upstream preset conventions and preventing property-probe runtime errors in bundled client libraries.
- **Egress & Compatibility Tests**: Added `tests/egress.spec.ts` and updated `tests/protocols.spec.ts` and `tests/plugin.spec.ts` to cover endpoint normalization and credential fallback behaviors.

## [0.0.3] - 2026-08-31

### Fixed
- **Cordis Profile Patch Optimization**: Removed hardcoded `fetchProvider: http` from `cordis.patch.yml` under `- id: web`, preventing Object Replace patch collisions when coexisting with custom fetch plugins (such as `dsh-web-fetch-enhanced`) and allowing DSH `WebRuntime` to auto-select active fetch providers cleanly.
- **Bundle & Coexistence Testing**: Added `tests/bundle.spec.ts` test suite to verify profile bundle configuration, `cordis.patch.yml` structure, module loader registration, and seamless auto-selection of fetch providers.

## [0.0.2] - 2026-08-30

### Changed
- **Upstream 0.1.2-alpha.2 Settings API Alignment**: Migrated settings registration from deprecated top-level `installSettingsSection` and branded `settingsNamespace` to Cordis service-based `ctx.settings.installSection()` with native kebab-case string namespace, maintaining backwards compatibility with earlier versions.
- **Search Endpoint Failure Guidance**: Added standardized endpoint reporting and configuration recovery instructions to post-dispatch `WebError` failures (network errors, HTTP errors, response parsing errors) to align with upstream search provider behavioral specifications.
- **Verification Tooling**: Hardened `scripts/verify-package.mjs` with sandbox-safe cache directories and multi-pack fallback support.

## [0.0.1] - 2026-08-28

### Added
- Initial release of `dsh-web-search-enhanced`.
- Support for Anthropic Messages, OpenAI Responses, and OpenAI Chat Completions search protocols.
- Follow mode (`current-session`) and fixed search configuration mode.
- DeepSeek Harness Web GUI settings card integration.
