用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/changzhi777/SpideHarness --skill spide-autofix命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | spide-autofix |
| description | 适配器自动修复 — 当 opencli 命令因网站 DOM/API 变更而失败时,自动诊断、修复适配器并重试。 当 opencli 命令失败时使用此 skill。 |
| category | meta |
当 opencli 命令因网站 DOM、API 或响应结构变更而失败时,自动诊断、修复适配器并重试 — 不要只是报告错误。
开始任何修复前,检查这些硬性停止条件:
AUTH_REQUIRED(退出码 77)— 停止。 不要修改代码。告诉用户在 Chrome 中登录目标站点。BROWSER_CONNECT(退出码 69)— 停止。 不要修改代码。告诉用户运行 opencli doctor。范围约束:
RepairContext.adapter.sourcePath 处的文件 — 这是权威适配器位置(可能是仓库中的 clis/<site>/ 或 npm 安装的 ~/.opencli/clis/<site>/)src/、extension/、tests/、package.json 或 tsconfig.json重试预算: 每次故障最多 3 轮修复。如果 3 轮 诊断→修复→重试 仍未解决,停止并报告已尝试的操作。
opencli doctor # 验证扩展 + 守护进程连通性
当 opencli <site> <command> 因可修复错误而失败时使用:
EMPTY_RESULT — 有时结构有效的 SELECTOR 返回空 — 通常不是适配器 bug。平台主动在反爬策略下降级结果,站点返回的"未找到"响应并不意味着内容真的缺失。在提交修复之前排除这种情况:
opencli xiaohongshu search "X" 返回 0 但 opencli xiaohongshu search "X 攻略" 返回 20,适配器没问题 — 平台在塑造第一个查询的结果。opencli doctor / 重新登录,而不是编辑源码。results: [],这是一个有效答案 — 向用户报告"此查询无匹配",而不是修补适配器。仅当空结果/选择器缺失结果在重试和替代入口点中可复现时才进入 Step 1。否则你是在修补一个正常工作的适配器来追踪噪声,修补后的版本会破坏下一个可用路径。
启用诊断模式运行失败的命令:
OPENCLI_DIAGNOSTIC=1 opencli <site> <command> [args...] 2>diagnostic.json
这会在 stderr 的 ___OPENCLI_DIAGNOSTIC___ 标记之间输出 RepairContext JSON:
{
"error": {
"code": "SELECTOR",
"message": "Could not find element: .old-selector",
"hint": "The page UI may have changed."
},
"adapter": {
"site": "example",
"command": "example/search",
"sourcePath": "/path/to/clis/example/search.ts",
"source": "// 完整适配器源代码"
},
"page": {
"url": "https://example.com/search",
"snapshot": "// 带 [N] 索引的 DOM 快照",
"networkRequests": [],
"consoleErrors": [
读取诊断上下文和适配器源码,分类根因:
| 错误码 | 可能原因 | 修复策略 |
|---|---|---|
| SELECTOR | DOM 重构,class/id 重命名 | 探索当前 DOM → 找到新选择器 |
| EMPTY_RESULT | API 响应结构变更,或数据移位 | 检查网络 → 找到新响应路径 |
| API_ERROR | 端点 URL 变更,需要新参数 | 通过网络拦截发现新 API |
| AUTH_REQUIRED | 登录流程变更,Cookie 过期 | 停止 — 让用户登录,不要修改代码 |
| TIMEOUT | 页面加载方式改变,spinner/懒加载 | 添加/更新等待条件 |
| PAGE_CHANGED | 重大改版 | 可能需要完整重写适配器 |
用 opencli browser 检查实时网站。绝不使用损坏的适配器 — 它只会再次失败。
# DOM 变更(SELECTOR 错误)
opencli browser open https://example.com/target-page && opencli browser state
# API 变更(API_ERROR, EMPTY_RESULT)
opencli browser open https://example.com/target-page && opencli browser state
opencli browser click <N> && opencli browser network
opencli browser network --detail <index>
读取 RepairContext.adapter.sourcePath 处的适配器源文件并进行针对性修复。
columns 和返回格式必须保持兼容@jackwener/opencli/* 导入 — 绝不添加第三方包导入选择器更新:
// 前:page.evaluate('document.querySelector(".old-class")...')
// 后:page.evaluate('document.querySelector(".new-class")...')
API 端点变更:
// 前:const resp = await page.evaluate(`fetch('/api/v1/old-endpoint')...`)
// 后:const resp = await page.evaluate(`fetch('/api/v2/new-endpoint')...`)
响应结构变更:
// 前:const items = data.results
// 后:const items = data.data.items
等待条件更新:
// 前:await page.waitForSelector('.loading-spinner', { hidden: true })
// 后:await page.waitForSelector('[data-loaded="true"]')
# 正常运行命令(不带诊断模式)
opencli <site> <command> [args...]
如果仍然失败,回到 Step 1 收集新的诊断信息。你有 3 轮修复预算。如果同一错误在修复后持续存在,尝试不同方法。3 轮后停止并报告已尝试的操作。
硬性停止(不要修改代码):
软性停止(尝试后报告):
基于 SOC 职业分类