$npx -y skills add Narylr350/book-source-creator-skill --skill legado-book-source-generatorUse when 用户要求为任意网站生成书源、生成阅读书源、分析小说站点、生成 Legado/阅读规则。强制触发词:书源、生成书源、帮我生成、book source、legado、阅读书源、小说站点分析。如果用户给出了一个 URL 并要求生成或分析,必须加载此 skill。
| 1 | # Legado 书源生成 |
| 2 | |
| 3 | 这是工具箱模式。先初始化,再按当前问题选择工具;不要把流程当成必须机械执行的长状态机。 |
| 4 | |
| 5 | ```powershell |
| 6 | node "<skill-dir>/scripts/bsg.mjs" init <url> [--cwd <输出目录>] |
| 7 | node "<skill-dir>/scripts/bsg.mjs" toolbox |
| 8 | node "<skill-dir>/scripts/bsg.mjs" status --run <run-dir> |
| 9 | ``` |
| 10 | |
| 11 | ## 先读哪些 reference |
| 12 | |
| 13 | - 常规流程:读 `references/workflow.md`。 |
| 14 | - 匿名初探 / site-facts:读 `references/probe-guide.md` 和 `references/assessment-template.md`。 |
| 15 | - 生成规则:读 `references/legado-json-structure.md`、`references/official-rule-pack.json`、`references/legado-source-behavior.md`。 |
| 16 | - 验证失败回修:读 `references/failure-diagnosis.md`、`references/validation-policy.md`、`references/validator-integration.md`。 |
| 17 | - Android、模拟器、登录态、WebView/WebJs、入口反爬复核:必须先读 `references/android-probe-guide.md` 和 `references/policies.md`;需要判断 Probe 与阅读 App 差异时再读 `references/webview-behavior-matrix.md`。 |
| 18 | |
| 19 | ## 常用工具 |
| 20 | |
| 21 | - `status --run <run-dir>`:看当前阶段、`pendingUserAction`、`repairContext` 和下一步建议。 |
| 22 | - `check --run <run-dir>`:检查评估、登录、Android 决策是否缺证据。 |
| 23 | - `source inspect --run <run-dir>`:审计当前 `book-source.json` 的风险字段。 |
| 24 | - `android --run <run-dir>`:Android 单入口;检查真机/模拟器和 Probe,必要时启动 Probe,运行 `mode=android` 验证并收敛报告。 |
| 25 | - `android --run <run-dir> --dump-cookie <file>`:显式导出 Probe 原始 Cookie 到本地文件,供人工核对或 validator 调试;默认输出不显示 Cookie 值。 |
| 26 | - `android-status`:只读诊断;检查 adb、真机/模拟器和 Android Probe。 |
| 27 | - `validate --run <run-dir> [--mode http|browser|android] [--keyword <中文关键词>] [--book-url <url>]`:运行 validator,写入 `validator-report.json`。`--book-url` 跳过搜索直接从详情页开始验证(对齐阅读 debug 模式的 URL 直接入口),用于搜索被反爬阻塞但需验证后续链路的场景。 |
| 28 | - `record-validation --run <run-dir> --status <status>`:把真实验证报告收敛成状态、能力矩阵和修复上下文。 |
| 29 | - `debug-bundle [--run <run-dir>]`:打包状态、报告、书源和会话导出,方便复盘。 |
| 30 | - `run --run <run-dir>`:可选的温和助手;它会启动下一阶段,或在已有 `validator-report.json` 时自动记录验证结果。 |
| 31 | |
| 32 | ## Windows / PowerShell 命令风险 |
| 33 | |
| 34 | 当前默认 shell 是 PowerShell。复制或手写命令时先确认语法属于 PowerShell,不要混用 bash、cmd 和 PowerShell。 |
| 35 | |
| 36 | ## 常见坑 |
| 37 | |
| 38 | - 用 `curl.exe` 调 HTTP,不要用 `curl`;PowerShell 里的 `curl` 可能是 `Invoke-WebRequest` 别名。 |
| 39 | - 优先写一行命令。不要混用 bash 的 `\`、cmd 的 `^`、PowerShell 的反引号续行。 |
| 40 | - JSON 请求体优先用单引号包住:`-d '{"url":"https://example.com","timeout":60000}'`。复杂 JSON 用 `$body = @{ ... } | ConvertTo-Json -Depth 8`。 |
| 41 | - 路径必须加双引号,尤其是中文路径、空格路径和 `<skill-dir>`:`node "D:/.../scripts/bsg.mjs" ...`。 |
| 42 | - `Select-String` 没有 `-First`;先匹配再 `| Select-Object -First 3`。 |
| 43 | - `Select-Object -Index 40..80` 是错的;要先读数组再用 `$lines[40..80]`。 |
| 44 | - `ConvertFrom-Json` 只能吃纯 JSON;命令输出混有日志、提示词或乱码时,先保存/截取纯 JSON 再解析。 |
| 45 | - 不确定 shell 写法时,不要临时拼长命令;优先运行 `toolbox`、`android-status`、`android --run`、`validate --run` 这些封装命令。 |
| 46 | |
| 47 | ## 原则 |
| 48 | |
| 49 | - **UA 完整性**:书源 `header` 的 UA 必须完整(含引擎名+版本号)。截断的 UA 会被反爬识别。详见 `references/legado-source-behavior.md`。 |
| 50 | - **验证码与登录态**:验证码触发时,如果站点有登录功能,先走登录路径再重试验证。只有登录后仍被拦才判定为站点固有限制。搜索仍被阻塞时用 `validate --book-url <url>` 跳过搜索验证后续链路。详见 `references/policies.md`。 |
| 51 | - **TLS 指纹**:validator 用 curl 发 HTTP 请求(非 OkHttp),避免 PC JVM 的 TLS 指纹被反爬识别。详见 `references/legado-source-behavior.md`。 |
| 52 | - **Browser MCP 缺失**:当需要浏览器分析、登录 Cookie 或前端渲染页面时,先确认当前执行环境是否具备浏览器工具。如果没有,不要假装已经看过页面,也不要编造 DOM、接口或 Cookie。先用 HTTP/validator 能力继续分析;若该站点必须浏览器能力才能判断,明确提示用户配置 Browser MCP、使用 Android Probe,或换用支持浏览器工具的客户端。 |
| 53 | |
| 54 | ## Android / WebView 快速配方 |
| 55 | |
| 56 | 遇到登录态、`webView:true`、`webJs`、CSR 正文、入口验证码/反爬复核,或用户已连接真机/模拟器时: |
| 57 | |
| 58 | 1. 读 `references/android-probe-guide.md`。 |
| 59 | 2. 运行 `node "<skill-dir>/scripts/bsg.mjs" android --run <run-dir>`。 |
| 60 | 3. 按它返回的 `requiredUserAction`、`nextCommand` 或 `afterUserCommand` 继续;常规 Android 场景优先跟随这个入口,不自己临时拼 adb、Probe API 或 validator 子步骤。 |
| 61 | |
| 62 | PC HTTP / Browser 只用于观察站点和辅助写规则。交付前如果 validator 结果不是 Android mode,`record-validation` 会先要求确认 Android 真机或模拟器可用性;用户明确没有设备后才允许降级记录,不能把 PC passed 写成 full pass。 |
| 63 | |
| 64 | `android --run` 是默认收敛入口,不是所有 Android 问题的唯一调试手段。只有在它返回明确诊断、脚本失败需要定位环境问题、或用户要求调试 Probe/设备时,才展开底层 adb、Probe API 或 validator 子步骤;调试结束后仍回到 `android --run` / `record-validation` 收敛结果。 |
| 65 | |
| 66 | 如果 Probe 登录后自动 Cookie 判断和手机页面状态矛盾,先看 `android --login-completed` 的 `probeCookieEvidence`。仍不清楚时运行 `android --run <run-dir> --dump-cookie "runs/<slug>/cookies.json"`,人工核对域名和 Cookie 名;原始 Cookie 只用于本地调试,不要写进书源。 |
| 67 | |
| 68 | ## 最终审计 |
| 69 | |
| 70 | 交付前必须运行: |
| 71 | |
| 72 | ```powershell |
| 73 | node "<skill-dir>/scripts/bsg.mjs" deliver --run <run-dir> |
| 74 | ``` |
| 75 | |
| 76 | 前提是 `validator-report.json` 已通过 `record-validation` 或 `run` 收敛,并且 `rule-check.json`、`capability-matrix.json` 等产物仍对应当前 `book-source.json`。缺什么让 `deliver` 返回 `nextCommand` / `correctiveAction`,不要自己补结论。 |
| 77 | |
| 78 | `deliver` 是唯一最终审计。它通过之前,不要宣称书源“可用”、“正常阅读”、“full pass”。 |
| 79 | |
| 80 | ## 硬规则 |
| 81 | |
| 82 | **0. `bsg.mjs deliver` 返回 ok 是任务完成的唯一标志。没有第三种状态。** |
| 83 | |
| 84 | 本 skill 的 validator 是基于阅读书源规则语义的 JVM/Kotlin 兼容验证器,实现了书源规则解析、JS/Rhino 执行、CSS/JSONPath/XPath/Regex 提取,以及 search → detail → toc → content 的主要验证链路。**书源通过 validator + record-validation + deliver 代表规则层具有较强参考价值;纯 HTTP/SSR 站点通常可直接导入使用。** 涉及 Android WebView、登录态、CookieJar 持久化、付费/VIP、验证码、Cloudflare 的站点,必须以 `record-validation` 归一化后的状态和 `capability-matrix.json` 为准,不能由 AI 摘要自行改结论。 |
| 85 | |
| 86 | 反过来:**绕过 deliver 交一个 `book-source.json` 文件,无论你已经验证了多少链路、写了多完整的总结表格,都视为未完成。** 用户拿到此书源大概率用不了,必然回来要求返工——你只是把返工成本转嫁给了用户,不是完成了任务。validator |