/root/.openclaw/workspace/tasks/task-t038p21-c1c082/task.md/root/.openclaw/workspace/tasks/task-t038p21-c1c082/session.md彻底清除所有 agent-reach / agent_reach / AgentReach 遗留引用,全部统一为 ai-search / ai_search / AISearch。不保留任何兼容层。
coder → reviewer → 爱衣质检
agent:coder:main)任务:彻底清理所有 agent-reach 遗留,统一为 ai-search。
⚠️ 核心原则:删干净,不留兼容层。
agent_reach/ 整个旧目录cd /srv/projects/agent-reach
rm -rf agent_reach/
ai_search/ 内残留引用# 查找所有残留
grep -rn "agent_reach\|agent.reach\|AgentReach" ai_search/ --include="*.py" --include="*.md"
逐个修改:
- ai_search/core.py:删除 AgentReach = AISearch 别名,类名只保留 AISearch
- ai_search/cli.py:所有 "Agent Reach" 文本改为 "AI Search"(版本号显示、help 文本等)
- ai_search/__init__.py:如有 AgentReach 导出,删除
- ai_search/channels/*.py:检查每个 channel 文件内是否有残留的 agent_reach import 或字符串
- ai_search/integrations/mcp_server.py:改引用
- ai_search/config.py:改引用
- ai_search/doctor.py:改引用
- ai_search/cookie_extract.py:改引用
- ai_search/skill/SKILL.md:改为 ai-search
- ai_search/guides/*.md:所有 agent-reach 改为 ai-search
pyproject.tomlagent-reach = "ai_search.cli:main" 别名行"agent_reach"ai-search = "ai_search.cli:main"grep -rn "agent_reach\|agent.reach\|AgentReach" tests/
全部改为 ai_search / AISearch。
README.md:agent-reach → ai-searchdocs/*.md:agent-reach → ai-searchOpenClaw skill(最重要):
# 查看当前 skill
cat ~/.openclaw/skills/agent-reach/SKILL.md
agent-reach 改为 ai-search~/.openclaw/skills/agent-reach/ 本身可能需要改名为 ai-searchcp -r ~/.openclaw/skills/agent-reach ~/.openclaw/skills/ai-searchrm -rf ~/.openclaw/skills/agent-reachTOOLS.md:
grep -n "agent.reach\|agent_reach" ~/.openclaw/workspace/TOOLS.md
全部改为 ai-search。
cd /srv/projects/agent-reach
pip install -e . --break-system-packages 2>&1 | tail -5
# 验证
ai-search version
which ai-search
which agent-reach # 应该不存在了
# 确认没有残留
grep -r "agent_reach\|AgentReach" ai_search/ --include="*.py" | grep -v "__pycache__"
# 应该输出为空
# 功能测试
python3 -c "from ai_search.core import AISearch; print('OK')"
python3 -c "from ai_search.channels.searxng import SearXNGChannel; print(SearXNGChannel().check())"
# 确保旧 import 会报错(不再兼容)
python3 -c "from agent_reach import *" 2>&1 | head -1
# 应该 ModuleNotFoundError
开始时:
/root/.openclaw/workspace/scripts/log-to-channel.sh coder receive "T038-P2.1 清理agent-reach遗留" task-t038p21-c1c082
完成后:
1. session.md 记录所有修改和验证结果
2. bash
/root/.openclaw/workspace/scripts/log-to-channel.sh coder handoff "T038-P2.1 清理agent-reach遗留" reviewer task-t038p21-c1c082
3. sessions_send 通知 reviewer(agent:reviewer:main,timeoutSeconds=0):
task_id=task-t038p21-c1c082
task=/root/.openclaw/workspace/tasks/task-t038p21-c1c082/task.md
agent:reviewer:main)任务:验证 agent-reach 已被彻底清除。
审查要点:
# 允许的例外:git 仓库名 agent-reach(目录名本身不改)、CHANGELOG/历史记录中的旧名
```
# 旧 skill 目录应该不存在
[ -d ~/.openclaw/skills/agent-reach ] && echo "❌ 旧skill还在!" || echo "✅ 已删除"
# 新 skill 目录应该存在
[ -d ~/.openclaw/skills/ai-search ] && echo "✅ 新skill存在" || echo "❌ 新skill缺失!"
```
python3 -c "from ai_search.core import AISearch; print('ai_search OK')"
python3 -c "from agent_reach import *" 2>&1 | grep -q "ModuleNotFoundError" && echo "✅ 旧import已失效" || echo "❌ 旧import还能用!"
# SearXNG 搜索
python3 -c "
import asyncio
from ai_search.core import AISearch
s = AISearch()
r = asyncio.run(s.web('test'))
print(f'web(): {len(r)} results')
"
```
pyproject.toml 检查
bash
grep "agent.reach\|agent_reach" /srv/projects/agent-reach/pyproject.toml
# 应该无输出
外部引用检查
bash
grep -n "agent.reach\|agent_reach" ~/.openclaw/workspace/TOOLS.md
cat ~/.openclaw/skills/ai-search/SKILL.md | grep -c "agent.reach"
# 均应为 0
开始时:
/root/.openclaw/workspace/scripts/log-to-channel.sh reviewer receive "T038-P2.1 清理agent-reach遗留" task-t038p21-c1c082
完成后:
/root/.openclaw/workspace/scripts/log-to-channel.sh reviewer handoff "T038-P2.1 清理agent-reach遗留" main task-t038p21-c1c082
sessions_send 通知爱衣(agent:main:main,timeoutSeconds=0)
grep -r "agent_reach\|AgentReach\|agent-reach" 全项目扫描零匹配?agent_reach/ 目录已删?~/.openclaw/skills/agent-reach/ 已删、ai-search/ 已建?which agent-reach 无结果?ai-search version 正常?from agent_reach import * 报 ModuleNotFoundError?通过 → log done + message 主人
不通过 → 按标准重试/上报流程