feat: web search MCP v1 (oh-my-pi pattern, Python stdlib)

web_search auto chain Perplexity/Exa/Tavily/Brave/SearXNG/DuckDuckGo
with pinned-provider no-fallback, web_fetch with head+tail truncation,
codex-home seeding helper (idempotent, never writes keys).
Tests: cloud/tests/test_websearch_mcp.py 12/12 (mocked HTTP).
Not wired into worker, not deployed, paid backends not live-tested.
This commit is contained in:
host committed 2026-10-28 17:14:22 +08:00
1 parent 5026e75b2c
commit f8acdffb4a
5 files changed
+1194

No files matched your search

+19
View File
@@ -3,6 +3,25 @@
语义化版本见 `VERSION`(当前 0.1.0)。以下按日期倒序,只列已交付
的大项,每项附实测证据;未建成的东西在“诚实边界”里明说,不夸大。
## 2026-10-28:网页搜索 MCP v1(oh-my-pi 模式,Python 实现)
- 新增 `cloud/websearch.py` + `cloud/websearch_mcp.py`(纯标准库):
stdio MCP 服务器暴露 `web_search` / `web_fetch`,provider 链
按 Perplexity → Exa → Tavily → Brave → SearXNG → DuckDuckGo
的 auto 顺序回退,pin 单个名字时不回退;抓取去脚本样式、
默认 15000 字符头尾截断并标 `[TRUNCATED]`;key 只走进程
环境变量,错误串不含 key(单测断言)。
- 新增 `ensure_codex_home_websearch`:把两个脚本拷进租户
codex-home,缺失时追加 `[mcp_servers.websearch]`,已有
section 绝不重写、租户改过的脚本绝不覆盖。
- 单测:`cloud/tests/test_websearch_mcp.py` 12 个全部通过
(链式回退、pin 不回退、全部失败、Perplexity 答案与引用、
Brave/Tavily 映射、DuckDuckGo HTML 解析、抓取截断与拒绝、
MCP 帧、配置合并幂等),不联网、不需要真实 key。
诚实边界:付费后端只以 mock 验证请求字段与映射,未用真实
key 实测;worker 自动播种未接线、生产 egress 白名单未改、
本批只本地提交,未推、未建 PR、未合并、未部署。
## 2026-10-28:长 goal 任务异常退出可断点续跑(不再 terminal failed)
- 实弹事故:11:49 认领的 8 轮 goal 长任务跑约 60 分钟后终局