https://raw.githubusercontent.com/daidaij/websearch-mcpserver/HEAD/AGENTS.md
− searxng/ # SearXNG 兼容 HTTP 端点− - **当前状态:** 三项随 `v3.10.4` 交付(base Release 含 4 平台整包 + GHCR 镜像);按用户要求本次**不打 `-registry` tag**,MCP Registry 停在 `3.10.3`− - **验收:** `go build ./...`、`go vet ./...` 干净;`go test -short -count=1 ./...` 与 `LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8` 复跑全绿;`go test ./pkg/i18n/`(新增 2 条 log key)绿;本次改动的 Go 文件在 LF 化副本上 `gofmt -l` 干净;整包步骤用假 dist 树本地干跑(4 平台产物名、包内清单、tar owner/mtime 均核对),`actionlint@v1.7.12` 0 findings;`SetLoggerLevel` 回归测试在改回旧实现时确认失败(级别停在 trace)− - 本机部署 `D:\Programs\websearch` 已升级到 `v3.10.2`(2026-10-25,用 base Release 的 `websearch-mcpserver-windows-amd64.exe` 覆盖,sha256 `beb21986…` 与 Release 一致;上一版 `v3.10.0` 备份为 `websearch-mcpserver.exe.bak-pre-v3.10.2`);`everything.max_results: 10`;`cleanfetch.auto_proxy: true`;新供应商已配测试 Key(tinyfish/keenable 进 `apipool.engines`,github PAT 提额,search_history 已开启),`mcp_hub.fetch_mode: prefer` 激活远端抓取链;`academic.enabled: false`,故 MCP 工具数为 4(smartsearch / cleanfetch / file_search / search_history)− - [ ] v3.10.4 整包真机走查:从 Release 下载对应平台压缩包、解压、按包内 README 启动、把 `skills/websearch-mcp` 装进宿主 Skill 目录(本批只有本地干跑 + 内容清单核对,CI 侧未见真实运行结果)+ 7. **发布矩阵对称:npm 走 `-npm` 后缀 tag,不随普通 tag 发**。普通 tag(`vX.Y.Z`)只发 Release + GHCR;产物就绪后再单独打 `vX.Y.Z-npm`,由 **`npm-plugin.yml` 自己的 `on.push.tags` 接**(`release.yml` 的 tags 已排除 `-npm`,`docker.yml` 也跳过),从 **base tag** 的 Release 下载并校验 `websearch-mcp-cli-*`,按「4 平台包 → `websearch-mcp-cli` → `dsh-websearch-mcpserver`」顺序发 6 个包,npm 版本取 base 版本(`v3.10.5-npm` → `3.10.5`,`publish.sh` 剥 `-npm` 后缀)。这与 `-registry` 发 MCP Registry 的链路对称:两种后缀 tag 都不重编译、不建 base Release、不推 GHCR 镜像。**发布认证是 npm Trusted Publishing(OIDC)**:+ ### 初始化失败不再 panic — done(2026-11-11,未发版)+ - **当前状态:** `ServerOption` 从 `func()` 改为 `func() error`,`Init` 逐项传播;搜索引擎、缓存命名空间与缓存构造失败沿 `Run` / `cmd/cli` 返回,入口打印友好错误而不是堆栈。`Handler` 嵌入路径仍按文档在边界 fail-fast panic+ - **附带:** 新增 `tool.init.search_engine_failed` / `cache_namespace_failed` / `cache_failed` 三条中英文案;`docs/api` 的嵌入边界同步区分 `Run` 返回 error 与 `Handler` panic+ - **验证:** `go build ./...`、`go vet ./...`、`go test -short ./...`、`go test ./pkg/i18n/`+ ### SearXNG 兼容端点移除 — done(2026-11-11,未发版)+ - **当前状态:** 删除 `searxng/` 包与 `GET /searxng/search` 路由,移除仅服务于它的 `mcp.GetSearchGroup`;清理 `log.searxng.*` 文案、配置样例鉴权注释与文档/图源中的端点引用+ - **理由:** 该端点只实现 JSON 子集(仅读取 `q`),与 MCP 的 `smartsearch` / `cleanfetch` 能力重复,实际使用面为零;保留需要持续维护 LiteLLM 兼容口径与文档,收益低于成本+ - **影响:** 破坏性变更,记入 CHANGELOG Unreleased;LiteLLM 等 SearXNG 客户端改走 MCP 端点或客户端侧适配+ - **验证:** `go build ./...`、`go test -short ./...`、`go test ./pkg/i18n/`+ ### 搜索质量闭环 — done(2026-11-11,已合入 master `61427d4`,未发版)+ - **当前状态:** 分支 `feat/search-quality-loop` 已合入 master 并推送,未打 tag、未发 Release/GHCR/Registry;合入内容包含今天远端两个分支(`feat/search-budget-and-params` 的批量/depth/sources/内容预算、`fix/hosted-mcp-ua` 的入站 UA 透传)与 D1 / D2 / D5、D3 部分落地,以及 KeyPool / ShowMeta / 进程内指标三项工程债治理+ - **D5:** `NewMCPServer` 在 `ServerOptions.Instructions` 下发中英双语工具选择纪律(发现 / 读正文 / 查论文 / 本地文件 / 历史),调用方显式设置时尊重其值;`skills/websearch-mcp/SKILL.md` 增补「参数纪律」+ - **D2:** 新增叶子包 `pkg/errcode`(稳定码 + `CodeOf` / `Message`);`core.ClassifyFailure`、`telemetry.ClassifyErrorKind`、`mcp.isAntiBotFailure` 改为码优先、关键词兜底;`antirobot.ErrLocalRateLimit`、`provider.KeyError`、`webfetch` 分类附码;`adapter/baidu_fallback.go` 双失败用 `errcode.Message` 保留主备原因+ - **D3(部分):** `googlenews` / `wikipedia` 补 `ContextEngine`(`NewRequestWithContext`);`hybrid` 的包装 goroutine 与 `cleanfetch` 统一预算未动+ - **D1:** `bench/quality` 20 条中英固定 fixture,逐 case 与聚合输出 P@8 / R@8 / MRR@8,聚合门槛拦退化;合成候选集只衡量排序回归,真实 HTML fixture 仍归 T2+ - **工程债:** provider Key 池改为命名结构体 `mode.ProviderPools`;`core.ShowMeta` 改为 `atomic.Bool` + setter;`/metrics` 增加进程内指标(在飞请求、uptime、goroutine、堆分配、`websearch_telemetry_enabled`),控制台关闭时返回 200 并省略遥测序列+ - **解析契约:** Bing 与 DDG 补 HTML parser fixture;baidu(JSON feed)、google、so360、googlenews(RSS)、wikipedia(JSON)已有解析测试+ - **工具面取舍:** `depth` / `max_chars` / `fetch_top_n` 只塑造 web 正文;仅 academic 时显式传这三个参数返回错误,避免静默无效。未新增任何 MCP 参数或工具+ - **暂缓:** D4(citation / untrusted 边界,改输出契约)、D6(垂直源)、D7(配置分层)、D8 tracing 与显式 DI、真实检索快照/定时 live smoke+ - **验收:** `go build ./...`、`go vet ./...`、`go test -short -count=1 ./...` 与 `LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8` 复跑全绿;`go test -race -short ./server/ ./pkg/search/{hybrid,core,mode}/` 绿;`go test ./pkg/i18n/ ./pkg/errcode/ ./bench/quality/` 绿;`pkg/academic` 的 PubMed 真网测试偶发 `unexpected EOF`,单跑通过,属既有 flake+ - **当前状态:** 三项随 `v3.10.4` 交付:base Release 24 个产物(8 裸二进制 + 4 平台整包 + 12 校验和,整包 19.9–21.2 MB,约为同平台两个裸二进制之和的 39%)、`release.yml` 与 `docker.yml` 均 success、GHCR `3.10.4` 镜像已推;按用户要求本次**不打 `-registry` tag**,MCP Registry 仍停在 `3.10.3`(已核对 registry 列表无 `3.10.4`)+ - **验收:** `go build ./...`、`go vet ./...` 干净;`go test -short -count=1 ./...` 与 `LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8` 复跑全绿;`go test ./pkg/i18n/`(新增 2 条 log key)绿;本次改动的 Go 文件在 LF 化副本上 `gofmt -l` 干净;`actionlint@v1.7.12` 0 findings;`SetLoggerLevel` 回归测试在改回旧实现时确认失败(级别停在 trace)。**发布产物核对(2026-11-05):** 从 v3.10.4 下载 windows `.zip` 与 linux `.tar.gz`,sha256 与随附 `.sha256` 一致;包内为两个二进制 + 两份样例配置 + LICENSE + 中英 README + 完整 `skills/`(含 `everything-http-server` 与 `websearch-mcp/agents|references`);包内服务端二进制与裸二进制 + - 本机部署实际路径是 **`D:\tool\websearch-mcpserver`**(旧记录里的 `D:\Programs\websearch` 已不存在,属过期信息)。2026-11-05 已从旧构建(exe 报 `dev`、sha256 `753370a5…`)升级到 **`v3.10.4`**(sha256 `775ab905…`,与 Release 整包内 exe 一致),并按下述口径迁移配置+ - **启动方式**:Startup 目录 `WebSearchMCP.lnk` → `wscript.exe "D:\tool\websearch-mcpserver\autostart.vbs"`,vbs 设 `WEBSEARCH_CONFIG=D:\tool\websearch-mcpserver\config.yaml` 后 `start`(隐藏窗口、脱离 shell 作业);手工重启必须脱离当前 shell 作业(用 WMI `Win32_Process.Create` 或双击快捷方式),否则作业对象销毁会连带杀掉服务+ - **配置迁移**:旧 `config.yaml`(1.5 KB 精简版,30 个生效键)整体搬进 v3.10.4 的 `config.example.yaml` 结构(35 KB,带全量注释),生效键 64 个、旧键零丢失零改值:`port 8338` / `log_level info` / `mode apipool` / `network china` / 8 条 `black_list_host` / `rate_limit 3·60` / `anysearch`(2 Key,num_results 10)/ `exa`(num_results 5,lookback_days 90)/ `tavily` / `apipool`(weighted,engines = anysearch → tavily → exa)/ `bing` 启用 / `duckduckgo` 关闭 / `academic` 关闭 / `cleanfetch` 启用 / `log 1·1`+ - **新版本默认行为的取舍**:v3.10.x 的 `start` 会默认生成 `dashboard.yaml`(含随机口令)启用控制中心,并建 `data/` 遥测库与桌面快捷方式。本次按「迁移旧参数与模式」的口径在 `config.yaml` 里显式写 `dashboard.enabled: false` 沿用旧行为,已删除生成的 `dashboard.yaml` / `data/` / 图标与桌面 `.lnk`(`fetchdata/` 属 cleanfetch 输出,保留);要开控制中心把那行改 true 重启即可+ - **备份**:`websearch-mcpserver.exe.bak-pre-v3.10.4`(旧 exe)、`config.yaml.bak-pre-v3.10.4`(旧配置)+ - **验收**:MCP `serverInfo.version = v3.10.4`;工具 2 个(smartsearch / cleanfetch;`file_search` 因 Everything HTTP Server 未运行而不暴露,`academic`/`search_history` 关闭);真机 smartsearch 走 anysearch 返回 10 条、`/searxng/search` 返回 10 条;重启后日志 0 条 `level=debug`(`log_level: info` 生效)+ - [ ] v3.10.4 整包真机走查(剩余部分):解压后按包内 README 启动服务、把 `skills/websearch-mcp` 装进宿主 Skill 目录并确认工具清单与项目标签生效(下载/校验和/包内清单已在发版当日核对)