{"id":"ab82069f-6573-43c4-9382-fbb8d1100530","entityType":"agent","slug":"clawhub-liuboacean-zhihu-auto-skill","name":"zhihu-helper","canonicalUrl":"https://www.xpersona.co/agent/clawhub-liuboacean-zhihu-auto-skill","canonicalPath":"/agent/clawhub-liuboacean-zhihu-auto-skill","generatedAt":"2026-10-11T20:59:34.049Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T18:08:44.640Z","emptyReason":null},"description":"知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Skill: zhihu-helper Owner: liuboacean Summary: 知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Tags: latest:2.0.7 Version history: v2.0.7 | 2026-05-15T06:36:17.772Z | auto zhihu-auto-skill v2.0.7 - 重命名技能为“知乎内容辅助工具”（zhihu-helper），聚焦内容查看和数据提取。 - 简化和重构功能模块，仅保留文章发布、想法发布、问题回答、提问、互动、数据提取等主流程。 - 明确所有发布/互动类操作必须在执行前用户确认，提升安全性。 - 移除大量废弃脚本，合并/精简原有代码，新增日志和初始化支持。 - 保持 Cookie 加密安全方案和环境配置不变，增加操作稳定性与一致性。 - 完善文档，更突出触发词、主要用法与注意","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1779brgcyhkdmz9tgjpwarx3h84vb82:zhihu-auto-skill","sourceUrl":"https://clawhub.ai/liuboacean/zhihu-auto-skill","homepage":"https://clawhub.ai/liuboacean/skills/zhihu-auto-skill","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/liuboacean/zhihu-auto-skill","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/liuboacean/skills/zhihu-auto-skill","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Skill: zhihu-helper Owner: liuboacean Summary: 知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Tag"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:08:44.640Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:08:44.640Z","emptyReason":null},"stars":null,"forks":null,"downloads":1012,"packageName":null,"latestVersion":"2.0.7","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:08:44.577Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T18:08:44.640Z","lastCrawledAt":"2026-10-11T18:08:44.577Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T18:08:44.577Z","lastVerifiedAt":null,"highlights":[{"version":"2.0.7","createdAt":"2026-05-15T06:36:17.772Z","changelog":"zhihu-auto-skill v2.0.7 - 重命名技能为“知乎内容辅助工具”（zhihu-helper），聚焦内容查看和数据提取。 - 简化和重构功能模块，仅保留文章发布、想法发布、问题回答、提问、互动、数据提取等主流程。 - 明确所有发布/互动类操作必须在执行前用户确认，提升安全性。 - 移除大量废弃脚本，合并/精简原有代码，新增日志和初始化支持。 - 保持 Cookie 加密安全方案和环境配置不变，增加操作稳定性与一致性。 - 完善文档，更突出触发词、主要用法与注意事项。","fileCount":31,"zipByteSize":82984},{"version":"2.0.3","createdAt":"2026-05-15T06:17:32.500Z","changelog":"zhihu-automation v2.0.3 — 全新双通道知乎自动化 Skill - 支持知乎专栏发文、想法发布、问题提问、回答、点赞、评论、关注等常用操作 - 热榜、搜索、用户、问题等数据可结构化提取，支持多种查询方式 - Playwright 浏览器自动化与 HTTP API 双通道混合架构，兼容性强，执行更稳定 - Cookie 加密存储（AES-256-GCM）与密钥轮换，提升账号安全性 - 丰富 CLI 工具链及详细使用文档，适合开发和自动化场景 - 加强异常恢复和频率控制，自动应对知乎页面结构变动及接口限流","fileCount":53,"zipByteSize":125895}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1779brgcyhkdmz9tgjpwarx3h84vb82:zhihu-auto-skill","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T20:59:34.048Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liuboacean-zhihu-auto-skill/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T18:08:44.640Z","emptyReason":null},"readme":"Skill: zhihu-helper\n\nOwner: liuboacean\n\nSummary: 知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。\n\nTags: latest:2.0.7\n\nVersion history:\n\nv2.0.7 | 2026-05-15T06:36:17.772Z | auto\n\nzhihu-auto-skill v2.0.7\n\n- 重命名技能为“知乎内容辅助工具”（zhihu-helper），聚焦内容查看和数据提取。\n- 简化和重构功能模块，仅保留文章发布、想法发布、问题回答、提问、互动、数据提取等主流程。\n- 明确所有发布/互动类操作必须在执行前用户确认，提升安全性。\n- 移除大量废弃脚本，合并/精简原有代码，新增日志和初始化支持。\n- 保持 Cookie 加密安全方案和环境配置不变，增加操作稳定性与一致性。\n- 完善文档，更突出触发词、主要用法与注意事项。\n\nv2.0.3 | 2026-05-15T06:17:32.500Z | auto\n\nzhihu-automation v2.0.3 — 全新双通道知乎自动化 Skill\n\n- 支持知乎专栏发文、想法发布、问题提问、回答、点赞、评论、关注等常用操作\n- 热榜、搜索、用户、问题等数据可结构化提取，支持多种查询方式\n- Playwright 浏览器自动化与 HTTP API 双通道混合架构，兼容性强，执行更稳定\n- Cookie 加密存储（AES-256-GCM）与密钥轮换，提升账号安全性\n- 丰富 CLI 工具链及详细使用文档，适合开发和自动化场景\n- 加强异常恢复和频率控制，自动应对知乎页面结构变动及接口限流\n\nArchive index:\n\nArchive v2.0.7: 31 files, 82984 bytes\n\nFiles: _meta.json (135b), CHANGELOG.md (3412b), config/api-endpoints.json (2267b), config/selectors.json (3299b), CONTRIBUTING.md (4520b), package-lock.json (1761b), package.json (1305b), README.md (10938b), review-product-blindspots.yaml (13194b), scripts/python/zhihu_bot.py (17253b), scripts/setup.js (8848b), scripts/zhihu-answer.js (3687b), scripts/zhihu-ask.js (3486b), scripts/zhihu-bridge.js (8175b), scripts/zhihu-browser.js (16103b), scripts/zhihu-core.js (17832b), scripts/zhihu-export-cookie.js (3593b), scripts/zhihu-extract.js (4715b), scripts/zhihu-http.js (16512b), scripts/zhihu-interact.js (6853b), scripts/zhihu-logger.js (10518b), scripts/zhihu-publish.js (16371b), scripts/zhihu-ratelimiter.js (5734b), scripts/zhihu-signature.js (4756b), SECURITY.md (3351b), SKILL.md (6672b), tests/cookie-check.js (4123b), tests/e2e-test.js (8118b), tests/schema-validator.js (6534b), tests/smoke-test.js (8863b), zhihu.js (5171b)\n\nFile v2.0.7:SKILL.md\n\n---\nname: zhihu-helper\ndescription: >-\n  知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。\n  提供浏览器操作辅助，Cookie 加密存储。\nmetadata:\n  author: Hermes + WorkBuddy\n  version: \"2.0.7\"\n  requires:\n    - node\n    - playwright\n    - python3\n  env:\n    - ZHIHU_COOKIE_KEY (sensitive)\n    - ZHIHU_APP_KEY (optional)\n    - ZHIHU_APP_SECRET (optional)\n---\n\n# 知乎内容辅助工具 (Zhihu Helper v2.0)\n\n辅助查看知乎内容，提取数据，Cookie 加密存储，稳定可靠。\n\n---\n\n## 触发词（Trigger Phrases）\n\n- \"帮我发一篇知乎文章\" / \"写知乎文章\"\n- \"发布知乎想法\" / \"发一条想法\"\n- \"回答知乎问题\" / \"写回答\"\n- \"知乎提问\" / \"问一个问题\"\n- \"点赞\" / \"评论\" / \"关注\"（知乎内容）\n- \"查看知乎热榜\" / \"知乎热搜\"\n- \"搜索知乎\" / \"查一下知乎上的\"\n- \"知乎数据\" / \"提取知乎信息\"\n\n## 快速开始\n\n### 1. 安装依赖\n```bash\n# 依赖已安装，如首次使用：\ncd zhihu-skill\nnpm install\nnpx playwright install chromium\n```\n\n### 2. 配置 Cookie 加密密钥\n```bash\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n```\n\n### 3. 导出知乎 Cookie\n```bash\n# 会自动打开浏览器，手动登录后 Cookie 自动加密保存\nnode scripts/zhihu-export-cookie.js\n```\n\n### 4. 验证\n```bash\n# 检查 Cookie 是否有效\nnode tests/cookie-check.js\n```\n\n---\n\n## 功能模块\n\n### 1️⃣ 发布文章\n在知乎专栏发布 Markdown 文章。\n\n```\n你: 帮我发一篇知乎文章，标题是\"xxx\"，内容是...\nAI: 正在生成内容 → 展示预览 → 等待用户确认 → 发布 → 返回链接\n```\n\n> ⚠️ **重要**：所有发布操作前 AI 必须展示预览并等待用户明确确认（\"确认发布？\"），未经确认不得执行任何公开操作。\n\n**CLI:**\n```bash\n# 直接指定内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\"\n\n# 从文件读取内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content-file \"文章.md\"\n\n# 保存为草稿（不发布）\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\" --draft\n```\n\n### 2️⃣ 发布想法\n类似 Twitter 的短内容发布。\n\n```\n你: 发一条知乎想法，内容是xxx\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-publish.js thought --content \"想法内容\"\n\n# 带图片\nnode scripts/zhihu-publish.js thought --content \"想法内容\" --image \"图片路径\"\n```\n\n### 3️⃣ 回答问题\n搜索问题并撰写回答。\n\n```\n你: 帮我在知乎搜索关于xxx的问题并回答\nAI: 搜索问题 → 列出选项 → 用户选择 → 撰写 → 展示预览 → 等待确认 → 提交\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-answer.js --question-id 123456789 --content \"回答内容\"\n```\n\n### 4️⃣ 提问\n在知乎上提出新问题。\n\n```\n你: 帮我在知乎提问：xxx\nAI: 展示预览 → 等待确认 → 提交\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-ask.js --title \"问题标题\" --detail \"补充说明\"\n```\n\n### 5️⃣ 互动\n点赞、评论、关注（执行前需用户确认）。\n\n```\n你: 给这篇知乎文章点赞 / 评论 / 关注这个用户\nAI: 展示操作详情 → 等待确认 → 执行\n```\n\n> ⚠️ **所有互动操作（点赞/评论/关注）前必须等待用户明确确认。**\n\n**CLI:**\n```bash\n# 点赞\nnode scripts/zhihu-interact.js like --url \"https://www.zhihu.com/question/xxx/answer/xxx\"\n\n# 取消点赞\nnode scripts/zhihu-interact.js unlike --url \"...\"\n\n# 评论\nnode scripts/zhihu-interact.js comment --url \"...\" --content \"评论内容\"\n\n# 关注用户\nnode scripts/zhihu-interact.js follow --user \"用户ID\"\n```\n\n### 6️⃣ 数据提取\n从知乎提取结构化数据。\n\n```\n你: 今天知乎热榜是什么？\nAI: 返回热榜 Top 20\n```\n\n**CLI:**\n```bash\n# 热榜\nnode scripts/zhihu-extract.js --type hot-list [--limit 20]\n\n# 搜索\nnode scripts/zhihu-extract.js --type search --query \"关键词\" [--limit 10]\n\n# 文章详情\nnode scripts/zhihu-extract.js --type article --id \"文章ID\"\n\n# 用户信息\nnode scripts/zhihu-extract.js --type user --id \"用户ID\"\n\n# 问题详情\nnode scripts/zhihu-extract.js --type question --id \"问题ID\"\n\n# 回答列表\nnode scripts/zhihu-extract.js --type answers --id \"问题ID\" [--limit 10]\n```\n\n---\n\n## 架构\n\n```\n                   AI Agent（用户自然语言触发）\n                           │\n                  ┌────────▼────────┐\n                  │  Skill 调度层    │\n                  │  SKILL.md → 路由  │\n                  └────────┬────────┘\n                           │\n              ┌────────────┼────────────┐\n              │                         │\n    ┌─────────▼─────────┐    ┌─────▼─────────┐\n    │  浏览器操作通道   │    │ Python/OpenAPI │\n    │  zhihu-browser.js │    │ zhihu_bot.py  │\n    │  zhihu-publish.js │    │ zhihu-bridge   │\n    │  zhihu-interact.js│    └───────────────┘\n    │  zhihu-answer.js   │\n    │  zhihu-extract.js │\n    └───────────────────┘\n```\n\n> 注：所有操作统一通过浏览器实现，Cookie 加密存储，稳定可靠。\n\n## 安全\n\n- Cookie 使用 **AES-256-GCM** 加密存储（权限 0600）\n- 环境变量 `ZHIHU_COOKIE_KEY` 管理加密密钥\n- 支持密钥轮换（`rotateCookieKey`）\n\n### Cookie 加密格式\n```\n~/.hermes/credentials/zhihu-cookies.enc\n├── [12 bytes: 随机 IV]\n├── [16 bytes: GCM 认证标签]\n└── [AES-256-GCM 加密的 Cookie 数据]\n```\n\n## 环境变量\n\n| 变量 | 必填 | 说明 |\n|------|:----:|------|\n| `ZHIHU_COOKIE_KEY` | ✅ | Cookie 加密密钥（`openssl rand -hex 32` 生成） |\n| `ZHIHU_APP_KEY` | ❌ | 知乎 OpenAPI app_key（圈子互动） |\n| `ZHIHU_APP_SECRET` | ❌ | 知乎 OpenAPI app_secret |\n\n## 测试\n\n```bash\n# 选择器冒烟测试\nnode tests/smoke-test.js\n\n# Cookie 到期检测\nnode tests/cookie-check.js\n\n# 端到端集成测试（沙箱模式）\nZHIHU_TEST_MODE=sandbox node tests/e2e-test.js\n```\n\n## 注意事项\n\n- ⚠️ **频率控制**：HTTP 200-500ms 间隔，浏览器 5-10s 间隔\n- ⚠️ **Cookie 有效期**：约 30 天，到期需重新登录导出\n- ⚠️ **知乎改版**：`config/selectors.json` 可能需更新\n- ⚠️ **签名失效自动降级**：C3b 失败自动切换 Plan B（浏览器通道）\n- ⚠️ **浏览器崩溃恢复**：withCrashRecovery 自动重建会话\n\nFile v2.0.7:README.md\n\n<div align=\"center\">\n\n# 🤖 知乎操作辅助 Skill\n\n**通过浏览器操作知乎 — 发文章、写想法、回答问题、看热榜**\n\n[![Version](https://img.shields.io/badge/version-2.0.2-blue)](https://github.com/liuboacean/zhihu-automation-skill)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![CI](https://github.com/liuboacean/zhihu-automation-skill/actions/workflows/ci.yml/badge.svg)](https://github.com/liuboacean/zhihu-automation-skill/actions)\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\n[![Playwright](https://img.shields.io/badge/playwright-powered-orange)](https://playwright.dev)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](CONTRIBUTING.md)\n\n</div>\n\n---\n\n## ✨ 它能做什么？\n\n| 功能 | 一句话描述 | 通道 |\n|:----|-----------|:----:|\n| 📝 **发文章** | Markdown → 一键发布知乎专栏（**25ms 批量粘贴**） | 浏览器 |\n| 💭 **发想法** | 像发朋友圈一样发想法 | 浏览器 |\n| ❓ **答问题** | 搜索并回答知乎上的问题 | 浏览器 |\n| 🙋 **提问** | 在知乎上自动提问 | 浏览器 |\n| 👍 **互动** | 点赞、评论、关注一条龙 | 浏览器 |\n| 🔥 **看热榜** | 获取知乎热榜 Top 20（浏览器兜底） | 浏览器 |\n| 🔍 **搜内容** | 搜索知乎上的文章和回答 | 浏览器 |\n| 👁️ **预览模式** | 发布前查看内容并确认（`--preview`） | — |\n| 🔒 **沙箱模式** | `ZHIHU_TEST_MODE=sandbox` 保存本地草稿，不实际发布 | — |\n\n> ℹ️ 所有操作统一走**浏览器通道**（Cookie 登录），稳定可靠。\n> HTTP 签名通道因 API 签名算法分析成本过高已正式放弃（详见 `zhihu-signature.js`）。\n\n---\n\n## 🚀 30 秒上手\n\n```bash\n# 1. 装依赖（已装好可跳过）\ncd zhihu-skill && npm install\n\n# 2. 一键配置（生成密钥 + 安装浏览器 + 引导登录）\nnpm run setup\n\n# 3. 开玩 🎉\nnode zhihu.js hot-list --limit 5                          # 看热榜\nnode zhihu.js publish thought --content \"Hello 知乎\"        # 发想法\nnode zhihu.js publish article --title \"标题\" --content \"正文\"  # 发文章\n```\n\n> 💡 **小贴士**：`npm run setup` 会自动生成加密密钥并写入 `.env`，引导你手动登录知乎保存 Cookie。密钥只存在本地，**永远不要提交到代码仓库**。\n\n---\n\n## 🏗️ 架构\n\n```\n                  ┌──────────────────┐\n                  │  AI Agent / 用户  │\n                  └────────┬─────────┘\n                           │\n          ┌────────────────┼────────────────┐\n          ▼                ▼                ▼\n   ┌────────────┐  ┌──────────────┐  ┌────────────┐\n   │ 浏览器操作  │  │   编辑器     │  │ Cookie 加密 │\n   │ 发布/互动/问答│  │ Draft.js 兼容│  │ AES-256-GCM│\n   │ 热榜/搜索   │  │ 25ms 批量粘贴│  │ 密钥轮换    │\n   └────────────┘  └──────────────┘  └────────────┘\n```\n\n| 特性 | 说明 |\n|------|------|\n| 🔒 **Cookie 安全** | AES-256-GCM 加密存储，权限 0600，支持密钥轮换 |\n| 🛡️ **防护机制** | 贝塞尔鼠标轨迹模拟人工操作 |\n| 🔄 **Plan B 降级** | 签名失效自动降级到浏览器通道，永不中断 |\n| ⏱️ **智能限流** | 浏览器 5-10s / 限流指数退避（30s → 10min） |\n| 💥 **崩溃恢复** | 浏览器崩溃自动重建会话，任务不丢失 |\n| ⚡ **极速发布** | ClipboardEvent 批量粘贴，800 字文章 25ms 完成 |\n| 📊 **进度反馈** | 发布流程 `[1/5]~[5/5]` 分步进度条 |\n| 👁️ **发布预览** | `--preview` 发布前确认内容，防止误操作 |\n| 🔒 **沙箱模式** | `ZHIHU_TEST_MODE=sandbox` 仅保存草稿，安全测试 |\n| 📋 **统一日志** | DEBUG/INFO/WARN/ERROR 四级，控制台彩色 + JSONL 文件 |\n\n---\n\n## 📖 详细用法\n\n### 统一 CLI（推荐）\n\n```bash\nnode zhihu.js setup                              # 首次配置引导\nnode zhihu.js publish article --title \"标题\" --content \"正文\" [--draft] [--preview]\nnode zhihu.js publish thought --content \"想法\" [--image \"photo.jpg\"] [--preview]\nnode zhihu.js hot-list [--limit 10]              # 热榜\nnode zhihu.js search \"AI 编程\"                    # 搜索\nnode zhihu.js cookie-check                       # Cookie 状态\nnode zhihu.js export-cookie                      # 刷新 Cookie\nnode zhihu.js --version                          # 版本信息\nnode zhihu.js --help                             # 帮助\n```\n\n### 发布文章\n\n```bash\n# CLI 方式（推荐）\nnode zhihu.js publish article --title \"文章标题\" --content-file \"article.md\"\nnode zhihu.js publish article --title \"标题\" --content \"正文\" --draft    # 存草稿\nnode zhihu.js publish article --title \"标题\" --content \"正文\" --preview  # 预览后确认\n\n# 直接脚本方式\nnode scripts/zhihu-publish.js article --title \"标题\" --content-file \"article.md\"\n```\n\n### 发布想法\n\n```bash\nnode zhihu.js publish thought --content \"今天天气真好\"\nnode zhihu.js publish thought --content \"附张图\" --image \"photo.jpg\"\nnode zhihu.js publish thought --content \"测试想法\" --preview    # 预览确认\n```\n\n### 数据提取\n\n```bash\nnode zhihu.js hot-list --limit 10                                # 热榜 Top 10\nnode zhihu.js search \"AI 编程\"                                   # 搜索\nnode scripts/zhihu-extract.js --type user --id \"excited-vczh\"    # 用户信息\n```\n\n### 互动\n\n```bash\nnode scripts/zhihu-interact.js like --url \"https://www.zhihu.com/question/xxx/answer/xxx\"\nnode scripts/zhihu-interact.js comment --url \"...\" --content \"好文章！\"\nnode scripts/zhihu-interact.js follow --user \"url_token\"\n```\n\n### 问答\n\n```bash\nnode scripts/zhihu-answer.js --question-id 123456789 --content \"这是我的回答\"\nnode scripts/zhihu-ask.js --title \"如何学习 AI？\" --detail \"希望得到一些建议\"\n```\n\n### 测试\n\n```bash\nnpm test                         # 单元测试\nnpm run smoke-test               # 选择器冒烟测试\nnpm run e2e-test                 # 端到端测试（沙箱模式）\nnpm run cookie-check             # Cookie 到期检测\n```\n\n### 沙箱模式（安全测试）\n\n```bash\n# 环境变量设置后，所有发布操作不会写入知乎，仅保存本地草稿\nexport ZHIHU_TEST_MODE=sandbox\nnode zhihu.js publish article --title \"测试\" --content \"不会被发布\"\n# → 内容保存到 ~/.hermes/drafts/\n```\n\n---\n\n## 📂 项目结构\n\n```\nzhihu-skill/\n├── zhihu.js                    # 🆕 统一 CLI 入口\n├── SKILL.md                    # AI Agent 入口\n├── package.json                # 依赖声明 (v2.0.2)\n├── README.md                   # 本文件\n├── LICENSE                     # MIT License\n├── SECURITY.md                 # 安全策略\n├── CONTRIBUTING.md             # 贡献指南\n├── CHANGELOG.md                # 变更日志\n├── .github/\n│   ├── workflows/ci.yml        # CI (Node 18/20/22 矩阵)\n│   ├── dependabot.yml          # 自动依赖更新\n│   └── ISSUE_TEMPLATE/         # Issue/PR 模板\n├── config/\n│   ├── selectors.json          # 页面选择器（带 fallbacks）\n│   └── api-endpoints.json      # HTTP API 端点\n├── scripts/ (14 模块)\n│   ├── zhihu-core.js           # Cookie/浏览器/日志/重试\n│   ├── zhihu-logger.js         # 🆕 统一日志框架（四级日志 + 彩色输出 + JSONL）\n│   ├── zhihu-signature.js      # 签名适配器（含放弃决策说明）\n│   ├── zhihu-http.js           # HTTP 读通道（公开端点）\n│   ├── zhihu-browser.js        # 浏览器操作（防护+CrashRecovery）\n│   ├── zhihu-publish.js        # 发布文章+想法（进度条+预览+沙箱）\n│   ├── zhihu-interact.js       # 点赞+评论+关注\n│   ├── zhihu-answer.js / ask.js# 问答\n│   ├── zhihu-extract.js        # 数据提取\n│   ├── zhihu-bridge.js         # Python 桥接\n│   ├── zhihu-ratelimiter.js    # 分层速率控制\n│   ├── zhihu-export-cookie.js  # Cookie 导出\n│   ├── setup.js                # 🆕 首次配置引导（环境检查+密钥+登录）\n│   └── python/zhihu_bot.py     # OpenAPI 圈子互动\n└── tests/\n    ├── smoke-test.js           # 选择器冒烟测试\n    ├── e2e-test.js             # 端到端集成测试\n    ├── cookie-check.js         # Cookie 到期检测\n    └── schema-validator.js     # API 响应校验\n```\n\n---\n\n## 📋 日志系统\n\nv2.0.2 新增统一日志框架 (`zhihu-logger.js`)，所有模块均已接入。\n\n```bash\n# 日志文件位置\n~/.hermes/logs/zhihu/YYYY-MM-DD.jsonl    # JSONL 结构化日志\n\n# 日志示例\n{\"timestamp\":\"2026-05-13T09:30:00Z\",\"level\":\"INFO\",\"module\":\"zhihu-core\",\"message\":\"浏览器会话已初始化\"}\n{\"timestamp\":\"2026-05-13T09:30:05Z\",\"level\":\"WARN\",\"module\":\"zhihu-core\",\"message\":\"⚠️ Cookie 将在 3 天后过期\"}\n```\n\n---\n\n## 🛡️ 安全\n\n| 项目 | 说明 |\n|:----|------|\n| Cookie 存储 | AES-256-GCM 加密 + 随机 IV + 权限 0600 |\n| 密钥管理 | 环境变量 `ZHIHU_COOKIE_KEY`，支持轮换 |\n| 沙箱模式 | `ZHIHU_TEST_MODE=sandbox` 确保测试不污染线上 |\n| 原子写入 | Cookie 先写 tmp 再 rename，防止崩溃损坏 |\n| 漏洞报告 | 通过 [Security Advisory](https://github.com/liuboacean/zhihu-automation-skill/security/advisories) 提交 |\n| 依赖安全 | Dependabot 每周检查，`npm audit` |\n\n---\n\n## 📋 依赖\n\n| 工具 | 版本要求 | 用途 |\n|:----|:--------:|------|\n| Node.js | >= 18 | 核心运行环境 |\n| Playwright | 1.52+ | 浏览器操作 |\n| Python 3 | >= 3.8 | 仅圈子互动（可选） |\n\n---\n\n## ⚠️ 注意事项\n\n- **Cookie 有效期约 30 天**，到期后运行 `node zhihu.js export-cookie` 重新登录\n- **知乎前端经常改版**，`config/selectors.json` 可能需更新\n- **HTTP 签名通道已放弃**，所有操作走浏览器通道，热榜/搜索等读操作可能略慢\n- **沙箱模式**：测试发布流程时启用 `ZHIHU_TEST_MODE=sandbox`，避免误发布\n- 建议先在小号上测试，熟悉后再用于主账号\n\n---\n\n## 🤝 贡献\n\n欢迎提交 Issue 或 PR！详细流程见 [CONTRIBUTING.md](CONTRIBUTING.md)。\n\n- [Bug 报告](.github/ISSUE_TEMPLATE/bug_report.md)\n- [功能建议](.github/ISSUE_TEMPLATE/feature_request.md)\n- [PR 模板](.github/PULL_REQUEST_TEMPLATE/pull_request_template.md)\n\n---\n\n## 📄 License\n\nMIT © liuboacean\n\nFile v2.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn73qbrbqs4s8t2nh8pm22wxbd84vm7r\",\n  \"slug\": \"zhihu-auto-skill\",\n  \"version\": \"2.0.7\",\n  \"publishedAt\": 1778826977772\n}\n\nFile v2.0.7:CHANGELOG.md\n\n# 变更日志\n\n## v2.0.0 (2026-05-09)\n\n### 正式发布 — 浏览器操作架构\n\n知乎操作辅助 Skill v2.0 采用浏览器操作架构，统一通过浏览器通道实现所有操作，提升了稳定性。\n\n#### 新架构\n\n```\n                  ┌──────────────────┐\n                  │  AI Agent / 用户  │\n                  └────────┬─────────┘\n                           │\n                  ┌────────▼─────────┐\n                  │  浏览器操作通道   │\n                  │  所有操作统一实现  │\n                  └────────┬─────────┘\n                           │\n              ┌────────────┼────────────┐\n              │                         │\n    ┌─────────▼─────────┐    ┌─────▼─────────┐\n    │  浏览器操作     │    │ Python/OpenAPI │\n    │  zhihu-browser.js│    │ zhihu_bot.py  │\n    │  zhihu-publish.js│    │ zhihu-bridge   │\n    │  zhihu-interact.js│\n    │  zhihu-extract.js│\n    └───────────────────┘\n```\n\n#### 6 大功能模块\n\n| 模块 | CLI 脚本 | 通道 |\n|:----|:---------|:----:|\n| 📝 **发布文章** | `zhihu-publish.js article` | 浏览器通道 |\n| 💭 **发布想法** | `zhihu-publish.js thought` | 浏览器通道 |\n| ❓ **回答问题** | `zhihu-answer.js` | 浏览器通道 |\n| 🙋 **提问** | `zhihu-ask.js` | 浏览器通道 |\n| 👍 **互动（点赞/评论/关注）** | `zhihu-interact.js` | 浏览器通道 |\n| 🔥 **数据提取（热榜/搜索/用户/问题）** | `zhihu-extract.js` | 浏览器通道 |\n\n#### 新增特性\n\n- **浏览器自动化架构**：所有操作统一通过浏览器实现，稳定可靠\n- **Cookie AES-256-GCM 加密存储**：加密密钥通过 `ZHIHU_COOKIE_KEY` 环境变量管理，支持密钥轮换\n- **人工操作模拟**：贝塞尔鼠标轨迹、逐字输入\n- **智能签名引擎（zse-123）**：适配器模式支持多种签名算法，支持 C3b 前向兼容和 WebWorker 计算\n- **Plan B 降级策略**：HTTP 签名失败自动降级到浏览器通道\n- **崩溃自动恢复**：`withCrashRecovery` 机制自动重建浏览器会话\n- **指数退避限流**：遇到限流时自动退避（30s → 1min → 3min → 10min）\n- **选择器自动降级**：`config/selectors.json` 支持主/备/兜底三级选择器\n- **沙箱测试模式**：`ZHIHU_TEST_MODE=sandbox` 隔离测试环境\n\n#### 12 个核心模块\n\n- `zhihu-core.js` — Cookie 加密/浏览器管理/日志/重试\n- `zhihu-signature.js` — 签名生成（适配器模式）\n- `zhihu-http.js` — HTTP 读通道\n- `zhihu-browser.js` — 浏览器操作\n- `zhihu-publish.js` — 发布文章 + 想法\n- `zhihu-interact.js` — 点赞 + 评论 + 关注\n- `zhihu-answer.js` — 回答问题\n- `zhihu-ask.js` — 提问\n- `zhihu-extract.js` — 数据提取\n- `zhihu-bridge.js` — Python 桥接\n- `zhihu-export-cookie.js` — Cookie 导出\n- `python/zhihu_bot.py` — OpenAPI 圈子互动\n\n---\n\n## v1.x (历史版本)\n\nv1.x 为单通道架构（纯浏览器操作），代码已不再维护。建议升级到 v2.0 获取更好的性能和稳定性。\n\nFile v2.0.7:CONTRIBUTING.md\n\n# 贡献指南\n\n感谢你对知乎自动化 Skill 的关注！我们欢迎任何形式的贡献 —— 新功能、bug 修复、文档改进、使用反馈，通通欢迎。\n\n---\n\n## 开发环境搭建\n\n### 前置要求\n\n- Node.js >= 18（推荐使用 nvm 管理版本，参考 `.nvmrc`）\n- npm（随 Node.js 一同安装）\n\n### 安装步骤\n\n```bash\n# 克隆仓库\ngit clone https://github.com/liuboacean/zhihu-automation-skill.git\ncd zhihu-automation-skill\n\n# 安装依赖\nnpm install\n\n# 安装 Playwright Chromium 浏览器\nnpx playwright install chromium\n```\n\n### 配置 Cookie 加密密钥\n\n```bash\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n```\n\n---\n\n## 代码规范\n\n### JavaScript 规范\n\n- **ESM 模块**：项目使用 `\"type\": \"module\"`，所有 `.js` 文件使用 `import`/`export` 语法\n- **命名风格**：\n  - 函数名使用 camelCase\n  - 类名使用 PascalCase\n  - 常量使用 UPPER_SNAKE_CASE\n  - 文件名使用 kebab-case\n- **异步处理**：优先使用 `async/await`，避免裸 `.then()` / `.catch()`\n- **错误处理**：关键操作必须包裹 try-catch，错误信息应包含上下文\n\n### 提交规范\n\n本项目遵循 [Conventional Commits](https://www.conventionalcommits.org/)：\n\n```\n<type>(<scope>): <description>\n\n[optional body]\n```\n\n常用类型：\n\n| 类型       | 用途                 |\n| ---------- | -------------------- |\n| `feat`     | 新功能               |\n| `fix`      | Bug 修复             |\n| `docs`     | 文档变更             |\n| `refactor` | 代码重构             |\n| `perf`     | 性能优化             |\n| `test`     | 测试相关             |\n| `chore`    | 构建/工具/依赖变更   |\n| `security` | 安全相关修复         |\n\n示例：\n\n```\nfeat(zhihu-publish): 支持 Markdown 表格转知乎格式\nfix(zhihu-interact): 修复点赞后未更新状态\ndocs(readme): 更新 Cookie 导出步骤\n```\n\n### Prettier 格式化\n\n建议在编辑器中开启 Prettier 自动格式化，或提交前运行：\n\n```bash\nnpx prettier --check scripts/**/*.js\n```\n\n> 注：项目当前尚未配置 `.prettierrc`，欢迎 PR 添加。\n\n---\n\n## 提交 PR 流程\n\n1. **Fork 本仓库** 到你的 GitHub 账号\n2. **创建功能分支**：`git checkout -b feat/your-feature-name`\n3. **进行开发**，确保：\n   - 代码风格与现有代码一致\n   - 为新增功能添加必要的注释和错误处理\n   - 如果是新脚本，更新 `package.json` 中的 `\"scripts\"` 字段\n4. **运行测试**：`npm test`\n5. **提交**：`git commit -m \"feat(xxx): 简洁描述变更\"`\n6. **推送分支**：`git push origin feat/your-feature-name`\n7. **创建 PR** 到 `main` 分支，并在描述中说明：\n   - 做了什么、为什么做\n   - 测试情况\n   - 截图（如涉及 UI 操作）\n\n### PR 审查标准\n\n- 代码无明显安全问题\n- 不引入新的外部依赖（或新增依赖有充分理由）\n- 新增功能的 CLI 接口风格与现有保持一致\n- 浏览器自动化操作包含合适的等待和重试逻辑\n- 已考虑知乎反爬限制（频率控制、降级策略等）\n\n---\n\n## 测试\n\n```bash\n# 选择器冒烟测试\nnpm run smoke-test\n\n# Cookie 到期检测\nnpm run cookie-check\n\n# 端到端测试（沙箱模式）\nnpm run e2e-test\n```\n\n建议在提交 PR 前至少通过 `smoke-test` 和 `cookie-check`。\n\n---\n\n## 注意事项\n\n### Cookie 安全\n\n- Cookie 文件使用 **AES-256-GCM** 加密存储在 `~/.hermes/credentials/zhihu-cookies.enc`\n- **切勿**将未加密的 Cookie 提交到 Git\n- **切勿**将 `ZHIHU_COOKIE_KEY` 写在代码或提交信息中\n- Cookie 有效期约 30 天，过期需重新登录导出\n\n### 知乎反爬限制\n\n- **频率控制**：HTTP 请求间隔 200-500ms，浏览器操作间隔 5-10s\n- **限流处理**：遇到限流时自动指数退避（30s → 1min → 3min → 10min）\n- **验证码**：浏览器通道可能触发滑块验证，系统会自动等待手动验证\n- **选择器失效**：知乎前端经常改版，`config/selectors.json` 可能需更新\n- **签名降级**：HTTP 签名通道返回 401 时自动降级到浏览器通道\n\n### 账号安全建议\n\n- 建议先在**小号**上测试所有功能\n- 不要在公共机器上长期保存 Cookie 密钥\n- 定期轮换 Cookie 加密密钥\n\n---\n\n## 问题反馈\n\n遇到问题请先查阅已有 Issues。如未解决，欢迎提交 Issue，请包含：\n\n- 操作步骤\n- 期望结果与实际结果\n- 相关日志或错误信息\n- 知乎页面是否已改版（可附上截图）\n\n---\n\n再次感谢你的贡献！\n\nFile v2.0.7:SECURITY.md\n\n# 安全策略\n\n## Cookie 安全\n\n知乎自动化 Skill 使用知乎账号 Cookie 进行操作，Cookie 的安全性至关重要。\n\n### 加密存储\n\n所有导出的 Cookie 使用 **AES-256-GCM** 算法加密存储：\n\n```\n加密流程：\n  明文 Cookie\n      ↓\n  + AES-256-GCM 加密（随机 12 字节 IV）\n      ↓\n  密文 + IV + GCM 认证标签\n      ↓\n  写入 ~/.hermes/credentials/zhihu-cookies.enc（权限 0600）\n```\n\n- **加密算法**：AES-256-GCM（认证加密，防篡改）\n- **密钥长度**：256 位（64 字符 hex）\n- **IV**：每次加密生成随机 12 字节 IV\n- **认证标签**：16 字节 GCM 认证标签\n- **文件权限**：`0600`（仅文件所有者可读写）\n\n### 密钥管理\n\n```bash\n# 生成密钥（建议添加到 ~/.zshrc 或 ~/.bashrc）\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n\n# 密钥轮换\nnode -e \"\nconst { rotateCookieKey } = require('./scripts/zhihu-core.js');\nrotateCookieKey('新的_64字符_hex密钥').then(console.log);\n\"\n```\n\n### 安全注意事项\n\n- **永远不要**将未加密的 Cookie 提交到版本控制系统\n- **永远不要**将 `ZHIHU_COOKIE_KEY` 写在代码、提交信息或公开场合\n- 不要在共享或公共计算机上长期保存 Cookie\n- Cookie 有效期约 30 天，过期后应重新导出\n- 如果怀疑密钥泄露，立即执行密钥轮换\n\n---\n\n## 环境变量管理建议\n\n### 必需变量\n\n| 变量 | 说明 |\n|------|------|\n| `ZHIHU_COOKIE_KEY` | Cookie AES-256-GCM 加密密钥（32 字节 hex） |\n\n### 可选变量\n\n| 变量 | 说明 | 安全级别 |\n|------|------|:--------:|\n| `ZHIHU_APP_KEY` | 知乎 OpenAPI app_key | 敏感 |\n| `ZHIHU_APP_SECRET` | 知乎 OpenAPI app_secret | 敏感 |\n| `ZHIHU_PROXY` | 代理地址（反爬场景） | 低 |\n| `CAPTCHA_API_KEY` | 打码平台 API Key | 敏感 |\n\n### 环境变量管理建议\n\n1. **不要硬编码**：所有敏感配置通过环境变量传入，不要写在代码中\n2. **使用 dotenv**：本地开发可用 `.env` 文件（已加入 `.gitignore`），切勿提交\n3. **密钥轮换**：定期更换 `ZHIHU_COOKIE_KEY`，尤其是团队协作场景\n4. **最小权限**：只赋予必要的环境变量，不要使用万能密钥\n\n---\n\n## 报告安全漏洞\n\n如果你发现了安全漏洞，**请不要公开提交 Issue**。\n\n请通过以下方式私下报告：\n\n1. **GitHub Security Advisory**：\n   访问 https://github.com/liuboacean/zhihu-automation-skill/security/advisories/new\n\n2. **直接联系维护者**：\n   通过 [GitHub Issues](https://github.com/liuboacean/zhihu-automation-skill/issues) 联系项目维护者\n\n### 报告内容建议\n\n- 漏洞类型和影响范围\n- 复现步骤\n- 受影响版本\n- 建议的修复方案（可选）\n\n### 响应承诺\n\n- 收到报告后 **48 小时内**回复确认\n- 评估后 **7 天内**给出修复时间计划\n- 修复完成后公开致谢（征得报告人同意）\n\n---\n\n## 依赖供应链安全\n\n- 核心依赖仅 3 个：`playwright`、`playwright-extra`、`puppeteer-extra-plugin-stealth`\n- 所有依赖通过 `package-lock.json` 锁定版本\n- 建议定期运行 `npm audit` 检查已知漏洞\n\n---\n\n## 安全更新\n\n安全更新会标注 `security` 标签：\n\n```\nsecurity(xxx): 修复 Cookie 泄露风险\n```\n\n建议开启 GitHub 仓库的 Watch → Custom → Security alerts 以接收安全更新通知。\n\nFile v2.0.7:config/api-endpoints.json\n\n{\n  \"version\": \"1.0\",\n  \"description\": \"知乎内部 HTTP API 端点配置\",\n  \"notes\": \"部分端点需要 x-zse-96 签名头，仅公开数据端点不需要\",\n  \"baseUrls\": {\n    \"zhihu\": \"https://www.zhihu.com\",\n    \"zhuanlan\": \"https://zhuanlan.zhihu.com\"\n  },\n  \"endpoints\": {\n    \"hotList\": {\n      \"url\": \"/api/v3/feed/topstory/hot-lists/total\",\n      \"method\": \"GET\",\n      \"requiresSignature\": true,\n      \"responseSchema\": {\n        \"data\": \"array\",\n        \"data[].target.title_area.text\": \"string\",\n        \"data[].target.metrics_area.text\": \"string\"\n      },\n      \"planBFallback\": \"browser\",\n      \"description\": \"全站热榜\"\n    },\n    \"search\": {\n      \"url\": \"/api/v4/search_v3?q={query}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": true,\n      \"responseSchema\": {\n        \"data\": \"array\",\n        \"data[].object.text\": \"string\"\n      },\n      \"planBFallback\": \"browser\",\n      \"description\": \"全局搜索\"\n    },\n    \"article\": {\n      \"url\": \"/api/v4/articles/{id}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": true,\n      \"responseSchema\": {\n        \"id\": \"number\",\n        \"title\": \"string\",\n        \"content\": \"string\"\n      },\n      \"planBFallback\": \"browser\",\n      \"description\": \"文章详情\"\n    },\n    \"user\": {\n      \"url\": \"/api/v4/members/{id}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": false,\n      \"responseSchema\": {\n        \"id\": \"string\",\n        \"name\": \"string\",\n        \"headline\": \"string\",\n        \"url_token\": \"string\"\n      },\n      \"planBFallback\": \"none\",\n      \"description\": \"用户信息（公开数据）\"\n    },\n    \"question\": {\n      \"url\": \"/api/v4/questions/{id}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": false,\n      \"responseSchema\": {\n        \"id\": \"number\",\n        \"title\": \"string\",\n        \"detail\": \"string\"\n      },\n      \"planBFallback\": \"none\",\n      \"description\": \"问题详情（公开数据）\"\n    },\n    \"answers\": {\n      \"url\": \"/api/v4/questions/{id}/answers\",\n      \"method\": \"GET\",\n      \"requiresSignature\": false,\n      \"responseSchema\": {\n        \"data\": \"array\",\n        \"data[].content\": \"string\",\n        \"data[].author.name\": \"string\"\n      },\n      \"planBFallback\": \"none\",\n      \"description\": \"问题回答列表（公开数据）\"\n    }\n  }\n}\n\nFile v2.0.7:config/selectors.json\n\n{\n  \"version\": \"1.0\",\n  \"description\": \"知乎页面选择器配置（primary + fallbacks 结构）\",\n  \"notes\": \"前端改版时更新此文件，fallbacks 按优先级排列\",\n  \"login\": {\n    \"avatar\": {\n      \"primary\": \".AppHeader-profileAvatar\",\n      \"fallbacks\": [\n        \".Avatar\",\n        \"img[data-za-detail-view-path-module*='Avatar']\"\n      ]\n    },\n    \"signinButton\": {\n      \"primary\": \".SignContainer-accountLogin\",\n      \"fallbacks\": [\n        \".SignFlow-accountInput\",\n        \"button:has-text('登录')\"\n      ]\n    }\n  },\n  \"article_editor\": {\n    \"url\": \"https://zhuanlan.zhihu.com/write\",\n    \"titleInput\": {\n      \"primary\": \"textarea[placeholder*='标题']\",\n      \"fallbacks\": [\n        \".WriteIndex-titleInput input\",\n        \".WriteIndex-titleInput textarea\"\n      ]\n    },\n    \"contentEditor\": {\n      \"primary\": \"[contenteditable]\",\n      \"fallbacks\": [\n        \".ProseMirror\",\n        \"[contenteditable='true']\"\n      ]\n    },\n    \"publishSettingsButton\": {\n      \"primary\": \"button:has-text('发布设置')\",\n      \"fallbacks\": [\n        \".WriteIndex-submitButton\"\n      ]\n    },\n    \"publishButton\": {\n      \"primary\": \".PublishPanel-submitButton\",\n      \"fallbacks\": [\n        \"button:has-text('发布')\",\n        \".Modal button:has-text('发布')\"\n      ]\n    },\n    \"coverUpload\": {\n      \"primary\": \"input[type='file'][accept='image/*']\"\n    }\n  },\n  \"thought\": {\n    \"trigger\": {\n      \"primary\": \"button:has-text('发想法')\",\n      \"fallbacks\": [\n        \".TopstoryItem-createButton\",\n        \"button:has-text('想法')\"\n      ]\n    },\n    \"input\": {\n      \"primary\": \"[contenteditable='true']\",\n      \"fallbacks\": [\n        \".RichTextEditor-inner\",\n        \".Editable-UniToolbar\",\n        \".MomentEditor-editor\"\n      ]\n    },\n    \"publishButton\": {\n      \"primary\": \"button:has-text('发布')\",\n      \"fallbacks\": [\n        \".Button:has-text('发布')\",\n        \".Card-button\"\n      ]\n    }\n  },\n  \"answer\": {\n    \"editor\": {\n      \"primary\": \".AnswerForm-editor .ProseMirror\",\n      \"fallbacks\": [\n        \".ProseMirror\",\n        \"[contenteditable='true']\"\n      ]\n    },\n    \"submit\": {\n      \"primary\": \".AnswerForm-submit\",\n      \"fallbacks\": [\n        \"button:has-text('提交回答')\"\n      ]\n    }\n  },\n  \"ask\": {\n    \"titleInput\": {\n      \"primary\": \".QuestionForm-title input\",\n      \"fallbacks\": [\n        \"input[placeholder*='请写下你的问题']\"\n      ]\n    },\n    \"detailInput\": {\n      \"primary\": \".QuestionForm-detail .ProseMirror\",\n      \"fallbacks\": [\n        \"[contenteditable='true']\"\n      ]\n    },\n    \"submitButton\": {\n      \"primary\": \".QuestionForm-submit\",\n      \"fallbacks\": [\n        \"button:has-text('提交问题')\"\n      ]\n    }\n  },\n  \"interaction\": {\n    \"likeButton\": {\n      \"primary\": \".VoteButton\",\n      \"fallbacks\": [\n        \"button:has-text('赞同')\",\n        \".LikeButton\"\n      ]\n    },\n    \"commentInput\": {\n      \"primary\": \".CommentEditor-input\",\n      \"fallbacks\": [\n        \"[placeholder*='写下你的评论']\"\n      ]\n    },\n    \"commentSubmit\": {\n      \"primary\": \".CommentEditor-submit\",\n      \"fallbacks\": [\n        \"button:has-text('发布评论')\"\n      ]\n    },\n    \"followButton\": {\n      \"primary\": \".FollowButton\",\n      \"fallbacks\": [\n        \"button:has-text('关注')\"\n      ]\n    }\n  }\n}\n\nFile v2.0.7:package-lock.json\n\n{\n  \"name\": \"zhihu-automation-skill\",\n  \"version\": \"2.0.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"zhihu-automation-skill\",\n      \"version\": \"2.0.0\",\n      \"dependencies\": {\n        \"playwright\": \"^1.52.0\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/fsevents\": {\n      \"version\": \"2.3.2\",\n      \"resolved\": \"https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz\",\n      \"integrity\": \"sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==\",\n      \"hasInstallScript\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^8.16.0 || ^10.6.0 || >=11.0.0\"\n      }\n    },\n    \"node_modules/playwright\": {\n      \"version\": \"1.59.1\",\n      \"resolved\": \"https://registry.npmmirror.com/playwright/-/playwright-1.59.1.tgz\",\n      \"integrity\": \"sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"playwright-core\": \"1.59.1\"\n      },\n      \"bin\": {\n        \"playwright\": \"cli.js\"\n      },\n      \"engines\": {\n        \"node\": \">=18\"\n      },\n      \"optionalDependencies\": {\n        \"fsevents\": \"2.3.2\"\n      }\n    },\n    \"node_modules/playwright-core\": {\n      \"version\": \"1.59.1\",\n      \"resolved\": \"https://registry.npmmirror.com/playwright-core/-/playwright-core-1.59.1.tgz\",\n      \"integrity\": \"sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==\",\n      \"license\": \"Apache-2.0\",\n      \"bin\": {\n        \"playwright-core\": \"cli.js\"\n      },\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    }\n  }\n}\n\nFile v2.0.7:package.json\n\n{\n  \"name\": \"zhihu-automation-skill\",\n  \"version\": \"2.0.2\",\n  \"description\": \"Zhihu (知乎) Automation Skill — publish articles, thoughts, answer questions, interact, and extract data with dual-channel architecture (HTTP read + browser write). v2.0.2 adds unified logging framework and complete JSDoc type annotations.\",\n  \"homepage\": \"https://github.com/liuboacean/zhihu-automation-skill#readme\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"setup\": \"node scripts/setup.js\",\n    \"zhihu\": \"node zhihu.js\",\n    \"version\": \"node zhihu.js --version\",\n    \"test\": \"node --test tests/*.js\",\n    \"smoke-test\": \"node tests/smoke-test.js\",\n    \"cookie-check\": \"node tests/cookie-check.js\",\n    \"e2e-test\": \"ZHIHU_TEST_MODE=sandbox node tests/e2e-test.js\",\n    \"export-cookie\": \"node scripts/zhihu-export-cookie.js\",\n    \"hot-list\": \"node scripts/zhihu-extract.js --type hot-list\",\n    \"search\": \"node scripts/zhihu-extract.js --type search --query\",\n    \"publish-article\": \"node scripts/zhihu-publish.js article\",\n    \"publish-thought\": \"node scripts/zhihu-publish.js thought\",\n    \"answer\": \"node scripts/zhihu-answer.js\",\n    \"ask\": \"node scripts/zhihu-ask.js\",\n    \"interact\": \"node scripts/zhihu-interact.js\"\n  },\n  \"dependencies\": {\n    \"playwright\": \"^1.52.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  }\n}\n\nFile v2.0.7:review-product-blindspots.yaml\n\nfindings:\n  - dimension: 架构真实性 - 双通道名存实亡\n    severity: critical\n    title: HTTP 读通道大面积不可用但 SKILL.md 仍宣称双通道\n    detail: >-\n      这是最大盲区，8轮评审全部遗漏。zhihu-signature.js 第8-20行有正式决策注释\n      \"正式决策：放弃 HTTP 签名通道\"，明确说明 x-zse-96 签名算法逆向失败、\n      \"逆向成本 > 2 天，触发 Plan B 预设规则\"。READM.md 第31行也写明\n      \"HTTP 签名通道因 API 签名算法逆向成本过高已正式放弃\"。\n      影响范围：config/api-endpoints.json 中 6 个端点有 3 个需要签名\n      (hotList、search、article)，而这3个正是核心功能（热榜、搜索、文章提取）。\n      更严重的是，zhihu-extract.js 第69-82行中这3个端点的浏览器降级\n      (browser_pending) 全部返回 null data，注释写着\n      \"需等待 Phase 2 开发完成\"— 意味着降级路径也是空壳。\n      实际上只有 user/question/answers 3个不需要签名的公开端点可用。\n      用户看到的SKILL.md和README.md（README.md已注明但SKILL.md没有）描述的\n      \"双通道架构\"是虚假承诺。\n    recommendation: >-\n      立即修正SKILL.md描述，将架构改为\"浏览器单通道（部分公开API辅助）\"。\n      删除或隐藏不可用的HTTP通道文档。将phas-1.5（双引擎融合）优先级调整为P0\n      — 因为当前根本没有\"双引擎\"可融合。如果签名逆向不可行，应集中100%资源\n      优化浏览器通道性能（热榜/搜索/文章的浏览器提取），而不是维护一个\n      虚假的双通道架构文档。\n\n  - dimension: 功能覆盖度\n    severity: critical\n    title: 缺失知乎创作生态核心场景 — 合集、专栏管理、收藏、视频想法\n    detail: >-\n      方案列出了6大功能（文章/想法/回答/提问/互动/数据提取），但漏掉了知乎\n      创作生态的关键能力：(1) 合集（Collection）是知乎重要内容组织方式，\n      没有支持；(2) 专栏管理 — 只能发布不能管理已有专栏文章（编辑、删除、\n      排序）；(3) 收藏 — interaction模块只有点赞/评论/关注，缺少收藏\n      （知乎核心互动指标之一）；(4) 想法带视频 — publishThought只支持图片\n      `--image`，不支持上传视频，而视频想法在知乎传播力远高于图文想法。\n      这些缺失意味着AI Agent只能完成半条创作链路：可以生产内容，但无法管理\n      内容资产、无法参与合集生态、无法利用视频传播渠道。\n    recommendation: >-\n      Phase 3应增加：(1) 合集创建与内容归类（特别是自动将同类文章加入合集）；\n      (2) 专栏文章管理（编辑标题/摘要/封面、删除、排序）；\n      (3) 收藏功能（对内容/回答进行收藏）；(4) 想法视频上传。\n      优先级：收藏 > 合集 > 专栏管理 > 视频想法。\n\n  - dimension: 用户价值排序\n    severity: high\n    title: 最核心场景\"热榜+搜索\"实际上不可用，但未列为P0修复\n    detail: >-\n      实施方案有5个Phase，但Phase 1 是\"基础设施修复\"（选选择器/Cookie加密等），\n      Phase 1.5 是\"双引擎融合\"，Phase 2 才是\"核心反爬+浏览器\"。\n      然而热榜（hot-list）和搜索（search）是用户最频繁使用、价值最高的功能\n      — 看热榜、找问题、了解热点。但当前这2个核心功能需要签名的HTTP端点\n      返回错误数据时，浏览器降级路径(browser_pending)完全没有实现。\n      这意味着用户在Phase 2完成前，核心功能根本不能用。产品发布后有用户\n      输入\"看热榜\"得到的是 null data 和 \"需等待 Phase 2\" 的提示。\n      这是严重的价值倒挂：最常用的功能最后做，最先做的基础设施用户看不见。\n    recommendation: >-\n      重新排序Phase: P0 = 浏览器通道热榜/搜索提取（现在可用公开API+浏览器兜底）。\n      将phase的浏览器热榜提取前置到Phase 1。Phase 1的\"基础设施\"可以并行进行。\n      至少确保MVP发布时 \"看热榜\"、\"搜内容\" 能用。\n\n  - dimension: MVP边界\n    severity: high\n    title: MVP严重膨胀 — 42项修复后边界模糊\n    detail: >-\n      经过42项修复后方案从\"发文章+看热榜\"膨胀到包含圈子互动(Python OpenAPI)、\n      签名引擎适配器、密钥轮换依赖、Playwright Stealth、Plan B降级链路、\n      沙箱测试模式、CI矩阵、Dependabot等大量\"工程完整性\"功能。\n      但核心用户价值链（热榜→选问题→回答/提问→发文章→互动→看效果）\n      实际只有 \"发文章/想法/回答/提问\" 可用。数据提取仅 user/question/answers\n      可用。方案的 \"11天\" 工时预估在包含如此多工程细节后几乎不可能准确。\n      真正的MVP应该切在：用户能否完成一次完整的 \"发现→参与→发布→互动\"\n      端到端闭环？当前不行（热榜发现链断裂）。\n    recommendation: >-\n      重新定义MVP边界为\"浏览器单一通道 + 公开API辅助\"，裁掉：\n      (1) Python OpenAPI圈子互动（ZHIHU_APP_KEY/ZHIHU_APP_SECRET 从必选移除）；\n      (2) 签名引擎适配器（废弃代码）；\n      (3) 沙箱模式（移至v2.1）；\n      (4) Plan B降级（单通道不需要Plan B）。\n      MVP核心：浏览器发布文章/想法/回答/提问 + 公开API热榜/搜索 + 互动。\n      预计可砍掉约40%代码和50%工时。\n\n  - dimension: 竞品盲区\n    severity: high\n    title: 未做竞品分析 — 同类工具已有成熟方案\n    detail: >-\n      方案完全未提及已有知乎自动化工具。市场上知乎内容自动化工具包括：\n      (1) 知乎官方创作者平台（zhuanlan.zhihu.com）本身提供数据分析、\n      定时发布、多专栏管理 — 官方功能正在补齐；(2) 第三方MCN工具\n      （如\"新榜\"、\"萤火\"等）支持知乎多账号管理、定时发布、数据看板、\n      内容库；(3) 开源方案（如NoneBot插件、zhihu-automation等）\n      已有社区维护的浏览器自动化方案。本方案差异优势不明确：没有定时发布\n      （竞品有）、没有多账号（竞品有）、没有数据分析（竞品有）。\n      唯一差异化可能是AI生成内容，但方案完全没有讨论AI内容策略。\n    recommendation: >-\n      做竞品矩阵调研，明确定位。建议差异化方向：(1) AI内容生成+自动化发布\n      闭环（竞品无）；(2) 内容策略智能调度（GPT分析热榜趋势→生成选题→\n      自动发布）；(3) 效果追踪与优化闭环。如果只是做浏览器自动发布，没有\n      竞品不可替代性。\n\n  - dimension: 内容策略缺失\n    severity: high\n    title: 有\"发\"没有\"发什么\" — 内容生产策略完全缺失\n    detail: >-\n      方案6大功能全部聚焦于\"如何发\"，但从未讨论\"发什么\"、\"什么时候发\"、\n      \"什么调性\"。作为AI自动化工具，内容策略是核心竞争力。\n      缺失包括：(1) 内容生成模板 — 文章、想法、回答应该有不同的prompt\n      策略和风格指南；(2) 热榜驱动内容 — 看了热榜后应该能自动生成对应\n      选题建议；(3) 定时策略 — 知乎用户活跃时间分布（晚上8-11点高峰期）\n      未被考虑；(4) AI生成内容检测风险 — 知乎有反AI政策，自动发布\n      AI内容可能导致封号；(5) 内容调性配置 — 专业回答 vs 轻松想法的\n      风格切换；(6) 交叉推广 — 回答中引用自己文章、想法中预热回答等策略。\n    recommendation: >-\n      (1) 增加 content-templates/ 目录，提供多套AI写作prompt模板；\n      (2) 增加内容风险检测模块（检测AI痕迹、敏感词、知乎社区规范）；\n      (3) 在SKILL.md用户触发词中增加\"帮我写一篇关于xxx的文章\" —\n      不仅仅是发，还有AI生成能力；(4) 思考定时发布机制（即使只是\n      浏览器端的定时点击）。\n\n  - dimension: SKILL.md用户视角\n    severity: medium\n    title: SKILL.md面向用户的触发词与实际可用功能不匹配\n    detail: >-\n      SKILL.md第14-16行列出的触发词包括\"查看知乎热榜\"、\"知乎热搜\"、\n      \"知乎数据\"、\"提取知乎信息\"。但实际测试这些功能时（热榜/搜索\n      需要签名的端点），用户得到的是失败或空数据。用户说\"看热榜\"\n      然后得到错误提示，这会严重破坏信任。此外，SKILL.md列出的\n      CLI命令如 `node scripts/zhihu-extract.js --type hot-list` 在\n      当前实现下无法工作（签名失败 → browser_pending → null）。\n      用户按文档操作得到失败结果。\n      更隐蔽的问题是：SKILL.md说\"读操作→HTTP\"但没说明需要ZHIHU_COOKIE_KEY，\n      而HTTP端点实际也依赖Cookie传递（参考 zhihu-http.js 中Cookie在处理逻辑\n      但没有在SKILL.md的env标注中体现为读通道必需）。\n    recommendation: >-\n      (1) 即时修正SKILL.md中不可用的触发词，或明确标记哪些功能在开发中；\n      (2) 在触发词中增加\"（测试中）\"标记；(3) SKILL.md的依赖标注增加\n      Cookie为读通道必需；(4) 建立用户能看到的功能清单表（status列），\n      标注 可用/有限可用/开发中。\n\n  - dimension: 单点故障风险\n    severity: medium\n    title: 浏览器单通道架构下所有写操作依赖同一Chromium进程\n    detail: >-\n      实际架构（去掉不可用的HTTP通道后）所有写+大部分读操作都依赖同一个\n      Playwright浏览器进程。zhihu-core.js 第198-199行的 browserInstance\n      是全局单例。任何操作中的页面崩溃、Cookie过期、验证码弹出都会阻塞\n      整个系统。withCrashRecovery只有2次重试。极端场景：用户在发文章时\n      遇到滑块验证码，系统进入等待手动验证状态(zhihu-core.js 第329行\n      waitForLogin)，此时所有其他操作（点赞、评论、看热榜）全部卡住。\n      这是一个没有防抖机制的全局锁。\n    recommendation: >-\n      (1) 改为每个操作独立页面/独立context，避免全局锁；\n      (2) 验证码弹出时应有超时+优雅降级（而非无限等待）；\n      (3) 考虑多context池（connection pool模式），支持并发操作；\n      (4) withCrashRecovery加强为3次且包含浏览器重启。\n\n  - dimension: 多账号支持\n    severity: medium\n    title: 单Cookie路径不支持多知乎账号切换\n    detail: >-\n      Cookie存储在固定路径 `~/.hermes/credentials/zhihu-cookies.enc`，\n      使用固定的 `ZHIHU_COOKIE_KEY`。整个系统只支持一个知乎账号。\n      对于内容运营场景（MCN、品牌号、个人号分离），多账号是刚需。\n      方案没有多账号的设计，也没有账号切换的API。\n    recommendation: >-\n      (1) Cookie存储路径增加账号标识，如 zhihu-cookies-{account_id}.enc；\n      (2) 增加 `--account` CLI参数，支持多账号Cookie分别管理；\n      (3) SKILL.md用户使用路径中考虑账号上下文。\n\n  - dimension: 数据闭环缺失\n    severity: medium\n    title: 只能\"发\"不能\"追踪\" — 缺少内容发布后效果数据\n    detail: >-\n      方案有数据提取功能，但只提取别人的数据（热榜/搜索/用户/问题），\n      没有自己发布内容的阅读量、互动量、涨粉量等效果指标。\n      内容创作者的核心需求是\"发了之后效果如何\"——但目前方案没有\n      任何发布后分析。这导致AI是\"蒙着眼发文章\"——不知道什么内容\n      有效、什么时间好、什么风格受欢迎。\n    recommendation: >-\n      (1) 增加发布后效果追踪模块，自动抓取自己内容的阅读数、点赞数、\n      评论数、关注数变化；(2) 增加简单的发布日志（含时间、内容、链接、\n      初始效果）；(3) 考虑长期积累可用于AI策略优化的数据。\n\n  - dimension: 安全与合规\n    severity: medium\n    title: 没有多设备Cookie同步机制和环境安全隔离\n    detail: >-\n      Cookie是当前唯一认证方式，有效期约30天。但方案没有考虑：\n      (1) Cookie泄露后没有一键失效机制（需要去知乎改密码）；\n      (2) 没有多设备Cookie同步方案（用户换了电脑需要重新导出）；\n      (3) ZHIHU_COOKIE_KEY 存在环境变量中，在多用户系统中不安全；\n      (4) CAPTCHA_API_KEY 也在环境变量中，属于敏感凭据但无额外保护。\n      此外，方案测试只在macOS上，但实际Playwright在Linux headless模式\n      下行为不同（无沙箱、无显卡加速、Draft.js渲染差异）。\n    recommendation: >-\n      (1) 增加\"清除Cookie\"CLI命令，提供远程失效能力；\n      (2) 设计Cookie导入导出（加密传输）机制；\n      (3) 考虑将敏感凭据放入系统密钥链（macOS Keychain）；\n      (4) 增加Linux headless兼容性测试。\n\nArchive v2.0.3: 53 files, 125895 bytes\n\nFiles: _meta.json (135b), CHANGELOG.md (3360b), config/api-endpoints.json (2267b), config/selectors.json (3299b), CONTRIBUTING.md (4520b), day3-check.js (4853b), edit-desensitize.js (5166b), find-targets.js (2670b), package-lock.json (20413b), package.json (1202b), post-day2.js (2760b), post-day3.js (2136b), post-now.js (4756b), post-thought.js (2771b), README.md (6474b), scripts/python/zhihu_bot.py (17253b), scripts/zhihu-answer.js (3364b), scripts/zhihu-ask.js (3251b), scripts/zhihu-bridge.js (7673b), scripts/zhihu-browser.js (9690b), scripts/zhihu-core.js (15312b), scripts/zhihu-export-cookie.js (3305b), scripts/zhihu-extract.js (4958b), scripts/zhihu-http.js (14126b), scripts/zhihu-interact.js (6154b), scripts/zhihu-publish.js (9046b), scripts/zhihu-ratelimiter.js (4758b), scripts/zhihu-signature.js (8448b), SECURITY.md (3351b), SKILL.md (6933b), tests/cookie-check.js (431b), tests/e2e-test.js (6918b), tests/schema-validator.js (5296b), tests/smoke-test.js (7407b), zhihu-api-update-v2.js (7392b), zhihu-api-update.js (9978b), zhihu-batch-answer.js (1081b), zhihu-dump-page.js (3693b), zhihu-dump-profile.js (4425b), zhihu-edit-final.js (10900b), zhihu-edit-profile-v2.js (10312b), zhihu-edit-profile.js (9776b), zhihu-find-questions.js (3435b), zhihu-post-all-v2.js (5848b), zhihu-post-all.js (5722b), zhihu-profile-check-v2.js (15429b), zhihu-profile-check.js (15728b), zhihu-search-api.js (3628b), zhihu-search-questions.js (2619b), zhihu-topic-questions.js (3804b), zhihu-update-profile-v3.js (7987b), zhihu-update-profile.js (9361b), zhihu-web-questions.js (4580b)\n\nFile v2.0.3:SKILL.md\n\n---\nname: zhihu-automation\ndescription: >-\n  知乎自动化 Skill（双通道）。发布文章（专栏）、发布想法、回答问题、提问、\n  互动（点赞/评论/关注）、数据提取（热榜/搜索/用户/问题）。使用 Playwright \n  浏览器自动化 + HTTP API 双通道，Cookie 持久化登录。\n\n  Trigger phrases:\n  - \"帮我发一篇知乎文章\" / \"写知乎文章\"\n  - \"发布知乎想法\" / \"发一条想法\"\n  - \"回答知乎问题\" / \"写回答\"\n  - \"知乎提问\" / \"问一个问题\"\n  - \"点赞\" / \"评论\" / \"关注\"（知乎内容）\n  - \"查看知乎热榜\" / \"知乎热搜\"\n  - \"搜索知乎\" / \"查一下知乎上的\"\n  - \"知乎数据\" / \"提取知乎信息\"\nmetadata:\n  author: Hermes + WorkBuddy\n  version: \"2.0.0\"\n  requires:\n    - node\n    - playwright\n    - python3\n  env:\n    - ZHIHU_COOKIE_KEY\n    - ZHIHU_APP_KEY (optional)\n    - ZHIHU_APP_SECRET (optional)\n---\n\n# 知乎自动化 Skill (Zhihu Automation v2.0)\n\n双通道架构：HTTP 读（热榜/搜索/用户/问题）+ 浏览器写（发布/互动）。\n\n---\n\n## 快速开始\n\n### 1. 安装依赖\n```bash\n# 依赖已安装，如首次使用：\ncd zhihu-skill\nnpm install\nnpx playwright install chromium\n```\n\n### 2. 配置 Cookie 加密密钥\n```bash\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n```\n\n### 3. 导出知乎 Cookie\n```bash\n# 会自动打开浏览器，手动登录后 Cookie 自动加密保存\nnode scripts/zhihu-export-cookie.js\n```\n\n### 4. 验证\n```bash\n# 检查 Cookie 是否有效\nnode tests/cookie-check.js\n```\n\n---\n\n## 功能模块\n\n### 1️⃣ 发布文章\n在知乎专栏发布 Markdown 文章。\n\n```\n你: 帮我发一篇知乎文章，标题是\"xxx\"，内容是...\nAI: 正在生成内容 → 打开编辑器 → 发布 → 返回链接\n```\n\n**CLI:**\n```bash\n# 直接指定内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\"\n\n# 从文件读取内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content-file \"文章.md\"\n\n# 保存为草稿（不发布）\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\" --draft\n```\n\n### 2️⃣ 发布想法\n类似 Twitter 的短内容发布。\n\n```\n你: 发一条知乎想法，内容是xxx\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-publish.js thought --content \"想法内容\"\n\n# 带图片\nnode scripts/zhihu-publish.js thought --content \"想法内容\" --image \"图片路径\"\n```\n\n### 3️⃣ 回答问题\n搜索问题并撰写回答。\n\n```\n你: 帮我在知乎搜索关于xxx的问题并回答\nAI: 搜索问题 → 列出选项 → 用户选择 → 撰写 → 提交\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-answer.js --question-id 123456789 --content \"回答内容\"\n```\n\n### 4️⃣ 提问\n在知乎上提出新问题。\n\n```\n你: 帮我在知乎提问：xxx\nAI: 打开提问页 → 填写标题 → 补充详情 → 提交\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-ask.js --title \"问题标题\" --detail \"补充说明\"\n```\n\n### 5️⃣ 互动\n点赞、评论、关注。\n\n```\n你: 给这篇知乎文章点赞 / 评论 / 关注这个用户\n```\n\n**CLI:**\n```bash\n# 点赞\nnode scripts/zhihu-interact.js like --url \"https://www.zhihu.com/question/xxx/answer/xxx\"\n\n# 取消点赞\nnode scripts/zhihu-interact.js unlike --url \"...\"\n\n# 评论\nnode scripts/zhihu-interact.js comment --url \"...\" --content \"评论内容\"\n\n# 关注用户\nnode scripts/zhihu-interact.js follow --user \"用户ID\"\n```\n\n### 6️⃣ 数据提取\n从知乎提取结构化数据。\n\n```\n你: 今天知乎热榜是什么？\nAI: 返回热榜 Top 20\n```\n\n**CLI:**\n```bash\n# 热榜\nnode scripts/zhihu-extract.js --type hot-list [--limit 20]\n\n# 搜索\nnode scripts/zhihu-extract.js --type search --query \"关键词\" [--limit 10]\n\n# 文章详情\nnode scripts/zhihu-extract.js --type article --id \"文章ID\"\n\n# 用户信息\nnode scripts/zhihu-extract.js --type user --id \"用户ID\"\n\n# 问题详情\nnode scripts/zhihu-extract.js --type question --id \"问题ID\"\n\n# 回答列表\nnode scripts/zhihu-extract.js --type answers --id \"问题ID\" [--limit 10]\n```\n\n---\n\n## 架构\n\n```\n                   AI Agent（用户自然语言触发）\n                           │\n                  ┌────────▼────────┐\n                  │  Skill 调度层    │\n                  │  SKILL.md → 路由  │\n                  └────────┬────────┘\n                           │\n                  ┌────────▼────────┐\n                  │  双通道决策      │\n                  │  读操作→HTTP    │\n                  │  写操作→浏览器  │\n                  └────────┬────────┘\n                           │\n              ┌────────────┼────────────┐\n              │            │            │\n    ┌─────────▼─────┐ ┌───▼────┐ ┌─────▼─────────┐\n    │ HTTP 通道     │ │ 浏览器  │ │ Python        │\n    │ zhihu-http.js │ │ 通道   │ │ OpenAPI       │\n    │ zhihu-extract │ │ 自动化  │ │ zhihu_bot.py  │\n    │ zhihu-signature│ │ publish│ │ zhihu-bridge  │\n    └───────────────┘ │ interact│ └───────────────┘\n                      │ answer  │\n                      │ ask     │\n                      └─────────┘\n```\n\n## 安全\n\n- Cookie 使用 **AES-256-GCM** 加密存储（权限 0600）\n- 环境变量 `ZHIHU_COOKIE_KEY` 管理加密密钥\n- 支持密钥轮换（`rotateCookieKey`）\n\n### Cookie 加密格式\n```\n~/.hermes/credentials/zhihu-cookies.enc\n├── [12 bytes: 随机 IV]\n├── [16 bytes: GCM 认证标签]\n└── [AES-256-GCM 加密的 Cookie 数据]\n```\n\n## 环境变量\n\n| 变量 | 必填 | 说明 |\n|------|:----:|------|\n| `ZHIHU_COOKIE_KEY` | ✅ | Cookie 加密密钥（`openssl rand -hex 32` 生成） |\n| `ZHIHU_APP_KEY` | ❌ | 知乎 OpenAPI app_key（圈子互动） |\n| `ZHIHU_APP_SECRET` | ❌ | 知乎 OpenAPI app_secret |\n| `ZHIHU_PROXY` | ❌ | 代理地址（反爬场景） |\n| `CAPTCHA_API_KEY` | ❌ | 打码平台 Key |\n\n## 测试\n\n```bash\n# 选择器冒烟测试\nnode tests/smoke-test.js\n\n# Cookie 到期检测\nnode tests/cookie-check.js\n\n# 端到端集成测试（沙箱模式）\nZHIHU_TEST_MODE=sandbox node tests/e2e-test.js\n```\n\n## 注意事项\n\n- ⚠️ **频率控制**：HTTP 200-500ms 间隔，浏览器 5-10s 间隔\n- ⚠️ **Cookie 有效期**：约 30 天，到期需重新登录导出\n- ⚠️ **知乎改版**：`config/selectors.json` 可能需更新\n- ⚠️ **签名失效自动降级**：C3b 失败自动切换 Plan B（浏览器通道）\n- ⚠️ **浏览器崩溃恢复**：withCrashRecovery 自动重建会话\n\nFile v2.0.3:README.md\n\n<div align=\"center\">\n\n# 🤖 知乎自动化 Skill\n\n**让你的 AI 助手帮你打理知乎 — 发文章、写想法、回答问题、看热榜，全都自动化**\n\n[![Version](https://img.shields.io/badge/version-2.0.0-blue)](https://github.com/liuboacean/zhihu-automation-skill)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\n[![Playwright](https://img.shields.io/badge/playwright-powered-orange)](https://playwright.dev)\n\n</div>\n\n---\n\n## ✨ 它能做什么？\n\n| 功能 | 一句话描述 | 效果 |\n|:----|-----------|:----:|\n| 📝 **发文章** | 把 Markdown 一键发布到知乎专栏 | 不用打开浏览器编辑 |\n| 💭 **发想法** | 像发朋友圈一样自动化发想法 | 随手记录灵感 |\n| ❓ **答问题** | 搜索并回答知乎上的问题 | 自动涨粉利器 |\n| 🙋 **提问** | 在知乎上自动提问 | 获取社区反馈 |\n| 👍 **互动** | 点赞、评论、关注一条龙 | 社交自动化 |\n| 🔥 **看热榜** | 实时获取知乎热榜 Top 20 | 选题不再愁 |\n| 🔍 **搜内容** | 搜索知乎上的文章和回答 | 竞品调研好帮手 |\n\n---\n\n## 🚀 30 秒上手\n\n```bash\n# 1. 装依赖（已装好可跳过）\ncd zhihu-skill && npm install\n\n# 2. 生成加密密钥\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n\n# 3. 登录知乎（只需一次，Cookie 自动加密保存）\nnode scripts/zhihu-export-cookie.js\n\n# 4. 开玩 🎉\nnode scripts/zhihu-extract.js --type hot-list --limit 5      # 看热榜\nnode scripts/zhihu-publish.js thought --content \"Hello 知乎\"  # 发想法\n```\n\n> 💡 **小贴士**：把 `ZHIHU_COOKIE_KEY` 加到 `~/.zshrc` 里，以后每次打开终端就能直接用。\n\n---\n\n## 🏗️ 架构亮点\n\n```\n                  ┌──────────────────┐\n                  │  AI Agent / 用户  │\n                  └────────┬─────────┘\n                           │\n          ┌────────────────┼────────────────┐\n          ▼                ▼                ▼\n   ┌────────────┐  ┌────────────┐  ┌──────────────┐\n   │ HTTP 读通道 │  │ 浏览器写通道 │  │ Python OpenAPI│\n   │ 热榜/搜索   │  │ 文章/想法   │  │ 圈子互动      │\n   │ 用户/问答   │  │ 互动/问答   │  │ (可选)        │\n   └────────────┘  └────────────┘  └──────────────┘\n```\n\n| 特性 | 说明 |\n|------|------|\n| 🔒 **Cookie 加密** | AES-256-GCM + 随机 IV，权限 0600，支持密钥轮换 |\n| 🛡️ **反爬防护** | Playwright Stealth + 贝塞尔鼠标轨迹 + 逐字输入 + TLS 指纹伪装 |\n| 🔄 **Plan B 降级** | 签名失效自动降级到浏览器通道，永不中断 |\n| ⏱️ **智能限流** | HTTP 200-500ms / 浏览器 5-10s / 限流指数退避（30s → 10min） |\n| 💥 **崩溃恢复** | 浏览器崩溃自动重建会话，任务不丢失 |\n\n---\n\n## 📖 详细用法\n\n### 发布文章\n```bash\n# 从文件读取内容发布\nnode scripts/zhihu-publish.js article --title \"文章标题\" --content-file \"article.md\"\n\n# 或直接传字符串\nnode scripts/zhihu-publish.js article --title \"文章标题\" --content \"正文内容\"\n\n# 存为草稿（不发布）\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\" --draft\n```\n\n### 发布想法\n```bash\nnode scripts/zhihu-publish.js thought --content \"今天天气真好\"\nnode scripts/zhihu-publish.js thought --content \"附张图\" --image \"photo.jpg\"\n```\n\n### 数据提取\n```bash\nnode scripts/zhihu-extract.js --type hot-list --limit 10       # 热榜 Top 10\nnode scripts/zhihu-extract.js --type search --query \"AI 编程\"   # 搜索\nnode scripts/zhihu-extract.js --type user --id \"excited-vczh\"  # 用户信息\nnode scripts/zhihu-extract.js --type question --id 123456789    # 问题详情\n```\n\n### 互动\n```bash\nnode scripts/zhihu-interact.js like --url \"https://www.zhihu.com/question/xxx/answer/xxx\"\nnode scripts/zhihu-interact.js comment --url \"...\" --content \"好文章！\"\nnode scripts/zhihu-interact.js follow --user \"url_token\"\n```\n\n### 问答\n```bash\nnode scripts/zhihu-answer.js --question-id 123456789 --content \"这是我的回答\"\nnode scripts/zhihu-ask.js --title \"如何学习 AI？\" --detail \"希望得到一些建议\"\n```\n\n---\n\n## 📂 项目结构\n\n```\nzhihu-skill/\n├── SKILL.md                    # AI Agent 入口\n├── package.json                # 依赖声明\n├── config/\n│   ├── selectors.json          # 页面选择器（带 fallbacks 自动降级）\n│   └── api-endpoints.json      # HTTP API 端点配置\n├── scripts/                    # 核心代码 12 模块\n│   ├── zhihu-core.js           # Cookie 加密/浏览器管理/日志/重试\n│   ├── zhihu-signature.js      # 签名生成（适配器模式）\n│   ├── zhihu-http.js           # HTTP 读通道\n│   ├── zhihu-browser.js        # 浏览器自动化\n│   ├── zhihu-publish.js        # 发布文章+想法\n│   ├── zhihu-interact.js       # 点赞+评论+关注\n│   ├── zhihu-answer.js         # 回答问题\n│   ├── zhihu-ask.js            # 提问\n│   ├── zhihu-extract.js        # 数据提取\n│   ├── zhihu-bridge.js         # Python 桥接\n│   ├── zhihu-export-cookie.js  # Cookie 导出\n│   └── python/zhihu_bot.py     # OpenAPI 圈子互动\n└── tests/                      # 测试桩\n```\n\n---\n\n## 📋 依赖\n\n| 工具 | 版本要求 | 用途 |\n|:----|:--------:|------|\n| Node.js | >= 18 | 核心运行环境 |\n| Playwright | 1.52+ | 浏览器自动化 |\n| Python 3 | >= 3.8 | 仅圈子互动（可选） |\n\n---\n\n## ⚠️ 注意事项\n\n- **Cookie 有效期约 30 天**，到期后重新运行 `node scripts/zhihu-export-cookie.js`\n- **知乎前端经常改版**，`config/selectors.json` 可能需更新\n- **HTTP 签名通道**（热榜/搜索）如果返回 401，系统会自动降级到浏览器通道\n- 建议先在小号上测试，熟悉后再用于主账号\n\n---\n\n## 🤝 贡献\n\n提交 Issue 或 PR，一起让知乎自动化更好用！\n\n---\n\n## 📄 License\n\nMIT © liuboacean\n\nFile v2.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn73qbrbqs4s8t2nh8pm22wxbd84vm7r\",\n  \"slug\": \"zhihu-auto-skill\",\n  \"version\": \"2.0.3\",\n  \"publishedAt\": 1778825852500\n}\n\nFile v2.0.3:CHANGELOG.md\n\n# 变更日志\n\n## v2.0.0 (2026-05-09)\n\n### 正式发布 — 双通道架构\n\n知乎自动化 Skill v2.0 采用全新的双通道架构设计，将读操作（HTTP API）与写操作（浏览器自动化）分离，显著提升了稳定性、速度和可维护性。\n\n#### 新架构\n\n```\n                  ┌──────────────────┐\n                  │  AI Agent / 用户  │\n                  └────────┬─────────┘\n                           │\n          ┌────────────────┼────────────────┐\n          ▼                ▼                ▼\n   ┌────────────┐  ┌────────────┐  ┌──────────────┐\n   │ HTTP 读通道 │  │ 浏览器写通道 │  │ Python OpenAPI│\n   │ 热榜/搜索   │  │ 文章/想法   │  │ 圈子互动      │\n   │ 用户/问答   │  │ 互动/问答   │  │ (可选)        │\n   └────────────┘  └────────────┘  └──────────────┘\n```\n\n#### 6 大功能模块\n\n| 模块 | CLI 脚本 | 通道 |\n|:----|:---------|:----:|\n| 📝 **发布文章** | `zhihu-publish.js article` | 浏览器写通道 |\n| 💭 **发布想法** | `zhihu-publish.js thought` | 浏览器写通道 |\n| ❓ **回答问题** | `zhihu-answer.js` | 浏览器写通道 |\n| 🙋 **提问** | `zhihu-ask.js` | 浏览器写通道 |\n| 👍 **互动（点赞/评论/关注）** | `zhihu-interact.js` | 浏览器写通道 |\n| 🔥 **数据提取（热榜/搜索/用户/问题）** | `zhihu-extract.js` | HTTP 读通道 |\n\n#### 新增特性\n\n- **双通道架构**：读操作走 HTTP API（更快），写操作走浏览器自动化（更稳）\n- **Cookie AES-256-GCM 加密存储**：加密密钥通过 `ZHIHU_COOKIE_KEY` 环境变量管理，支持密钥轮换\n- **Playwright Stealth 反爬保护**：贝塞尔鼠标轨迹、逐字输入、TLS 指纹伪装\n- **智能签名引擎（zse-123）**：适配器模式支持多种签名算法，支持 C3b 前向兼容和 WebWorker 计算\n- **Plan B 降级策略**：HTTP 签名失败自动降级到浏览器通道\n- **崩溃自动恢复**：`withCrashRecovery` 机制自动重建浏览器会话\n- **指数退避限流**：遇到限流时自动退避（30s → 1min → 3min → 10min）\n- **选择器自动降级**：`config/selectors.json` 支持主/备/兜底三级选择器\n- **沙箱测试模式**：`ZHIHU_TEST_MODE=sandbox` 隔离测试环境\n\n#### 12 个核心模块\n\n- `zhihu-core.js` — Cookie 加密/浏览器管理/日志/重试\n- `zhihu-signature.js` — 签名生成（适配器模式）\n- `zhihu-http.js` — HTTP 读通道\n- `zhihu-browser.js` — 浏览器自动化\n- `zhihu-publish.js` — 发布文章 + 想法\n- `zhihu-interact.js` — 点赞 + 评论 + 关注\n- `zhihu-answer.js` — 回答问题\n- `zhihu-ask.js` — 提问\n- `zhihu-extract.js` — 数据提取\n- `zhihu-bridge.js` — Python 桥接\n- `zhihu-export-cookie.js` — Cookie 导出\n- `python/zhihu_bot.py` — OpenAPI 圈子互动\n\n---\n\n## v1.x (历史版本)\n\nv1.x 为单通道架构（纯浏览器自动化），代码已不再维护。建议升级到 v2.0 获取更好的性能和稳定性。\n\nFile v2.0.3:CONTRIBUTING.md\n\n# 贡献指南\n\n感谢你对知乎自动化 Skill 的关注！我们欢迎任何形式的贡献 —— 新功能、bug 修复、文档改进、使用反馈，通通欢迎。\n\n---\n\n## 开发环境搭建\n\n### 前置要求\n\n- Node.js >= 18（推荐使用 nvm 管理版本，参考 `.nvmrc`）\n- npm（随 Node.js 一同安装）\n\n### 安装步骤\n\n```bash\n# 克隆仓库\ngit clone https://github.com/liuboacean/zhihu-automation-skill.git\ncd zhihu-automation-skill\n\n# 安装依赖\nnpm install\n\n# 安装 Playwright Chromium 浏览器\nnpx playwright install chromium\n```\n\n### 配置 Cookie 加密密钥\n\n```bash\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n```\n\n---\n\n## 代码规范\n\n### JavaScript 规范\n\n- **ESM 模块**：项目使用 `\"type\": \"module\"`，所有 `.js` 文件使用 `import`/`export` 语法\n- **命名风格**：\n  - 函数名使用 camelCase\n  - 类名使用 PascalCase\n  - 常量使用 UPPER_SNAKE_CASE\n  - 文件名使用 kebab-case\n- **异步处理**：优先使用 `async/await`，避免裸 `.then()` / `.catch()`\n- **错误处理**：关键操作必须包裹 try-catch，错误信息应包含上下文\n\n### 提交规范\n\n本项目遵循 [Conventional Commits](https://www.conventionalcommits.org/)：\n\n```\n<type>(<scope>): <description>\n\n[optional body]\n```\n\n常用类型：\n\n| 类型       | 用途                 |\n| ---------- | -------------------- |\n| `feat`     | 新功能               |\n| `fix`      | Bug 修复             |\n| `docs`     | 文档变更             |\n| `refactor` | 代码重构             |\n| `perf`     | 性能优化             |\n| `test`     | 测试相关             |\n| `chore`    | 构建/工具/依赖变更   |\n| `security` | 安全相关修复         |\n\n示例：\n\n```\nfeat(zhihu-publish): 支持 Markdown 表格转知乎格式\nfix(zhihu-interact): 修复点赞后未更新状态\ndocs(readme): 更新 Cookie 导出步骤\n```\n\n### Prettier 格式化\n\n建议在编辑器中开启 Prettier 自动格式化，或提交前运行：\n\n```bash\nnpx prettier --check scripts/**/*.js\n```\n\n> 注：项目当前尚未配置 `.prettierrc`，欢迎 PR 添加。\n\n---\n\n## 提交 PR 流程\n\n1. **Fork 本仓库** 到你的 GitHub 账号\n2. **创建功能分支**：`git checkout -b feat/your-feature-name`\n3. **进行开发**，确保：\n   - 代码风格与现有代码一致\n   - 为新增功能添加必要的注释和错误处理\n   - 如果是新脚本，更新 `package.json` 中的 `\"scripts\"` 字段\n4. **运行测试**：`npm test`\n5. **提交**：`git commit -m \"feat(xxx): 简洁描述变更\"`\n6. **推送分支**：`git push origin feat/your-feature-name`\n7. **创建 PR** 到 `main` 分支，并在描述中说明：\n   - 做了什么、为什么做\n   - 测试情况\n   - 截图（如涉及 UI 操作）\n\n### PR 审查标准\n\n- 代码无明显安全问题\n- 不引入新的外部依赖（或新增依赖有充分理由）\n- 新增功能的 CLI 接口风格与现有保持一致\n- 浏览器自动化操作包含合适的等待和重试逻辑\n- 已考虑知乎反爬限制（频率控制、降级策略等）\n\n---\n\n## 测试\n\n```bash\n# 选择器冒烟测试\nnpm run smoke-test\n\n# Cookie 到期检测\nnpm run cookie-check\n\n# 端到端测试（沙箱模式）\nnpm run e2e-test\n```\n\n建议在提交 PR 前至少通过 `smoke-test` 和 `cookie-check`。\n\n---\n\n## 注意事项\n\n### Cookie 安全\n\n- Cookie 文件使用 **AES-256-GCM** 加密存储在 `~/.hermes/credentials/zhihu-cookies.enc`\n- **切勿**将未加密的 Cookie 提交到 Git\n- **切勿**将 `ZHIHU_COOKIE_KEY` 写在代码或提交信息中\n- Cookie 有效期约 30 天，过期需重新登录导出\n\n### 知乎反爬限制\n\n- **频率控制**：HTTP 请求间隔 200-500ms，浏览器操作间隔 5-10s\n- **限流处理**：遇到限流时自动指数退避（30s → 1min → 3min → 10min）\n- **验证码**：浏览器通道可能触发滑块验证，系统会自动等待手动验证\n- **选择器失效**：知乎前端经常改版，`config/selectors.json` 可能需更新\n- **签名降级**：HTTP 签名通道返回 401 时自动降级到浏览器通道\n\n### 账号安全建议\n\n- 建议先在**小号**上测试所有功能\n- 不要在公共机器上长期保存 Cookie 密钥\n- 定期轮换 Cookie 加密密钥\n\n---\n\n## 问题反馈\n\n遇到问题请先查阅已有 Issues。如未解决，欢迎提交 Issue，请包含：\n\n- 操作步骤\n- 期望结果与实际结果\n- 相关日志或错误信息\n- 知乎页面是否已改版（可附上截图）\n\n---\n\n再次感谢你的贡献！\n\nFile v2.0.3:SECURITY.md\n\n# 安全策略\n\n## Cookie 安全\n\n知乎自动化 Skill 使用知乎账号 Cookie 进行操作，Cookie 的安全性至关重要。\n\n### 加密存储\n\n所有导出的 Cookie 使用 **AES-256-GCM** 算法加密存储：\n\n```\n加密流程：\n  明文 Cookie\n      ↓\n  + AES-256-GCM 加密（随机 12 字节 IV）\n      ↓\n  密文 + IV + GCM 认证标签\n      ↓\n  写入 ~/.hermes/credentials/zhihu-cookies.enc（权限 0600）\n```\n\n- **加密算法**：AES-256-GCM（认证加密，防篡改）\n- **密钥长度**：256 位（64 字符 hex）\n- **IV**：每次加密生成随机 12 字节 IV\n- **认证标签**：16 字节 GCM 认证标签\n- **文件权限**：`0600`（仅文件所有者可读写）\n\n### 密钥管理\n\n```bash\n# 生成密钥（建议添加到 ~/.zshrc 或 ~/.bashrc）\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n\n# 密钥轮换\nnode -e \"\nconst { rotateCookieKey } = require('./scripts/zhihu-core.js');\nrotateCookieKey('新的_64字符_hex密钥').then(console.log);\n\"\n```\n\n### 安全注意事项\n\n- **永远不要**将未加密的 Cookie 提交到版本控制系统\n- **永远不要**将 `ZHIHU_COOKIE_KEY` 写在代码、提交信息或公开场合\n- 不要在共享或公共计算机上长期保存 Cookie\n- Cookie 有效期约 30 天，过期后应重新导出\n- 如果怀疑密钥泄露，立即执行密钥轮换\n\n---\n\n## 环境变量管理建议\n\n### 必需变量\n\n| 变量 | 说明 |\n|------|------|\n| `ZHIHU_COOKIE_KEY` | Cookie AES-256-GCM 加密密钥（32 字节 hex） |\n\n### 可选变量\n\n| 变量 | 说明 | 安全级别 |\n|------|------|:--------:|\n| `ZHIHU_APP_KEY` | 知乎 OpenAPI app_key | 敏感 |\n| `ZHIHU_APP_SECRET` | 知乎 OpenAPI app_secret | 敏感 |\n| `ZHIHU_PROXY` | 代理地址（反爬场景） | 低 |\n| `CAPTCHA_API_KEY` | 打码平台 API Key | 敏感 |\n\n### 环境变量管理建议\n\n1. **不要硬编码**：所有敏感配置通过环境变量传入，不要写在代码中\n2. **使用 dotenv**：本地开发可用 `.env` 文件（已加入 `.gitignore`），切勿提交\n3. **密钥轮换**：定期更换 `ZHIHU_COOKIE_KEY`，尤其是团队协作场景\n4. **最小权限**：只赋予必要的环境变量，不要使用万能密钥\n\n---\n\n## 报告安全漏洞\n\n如果你发现了安全漏洞，**请不要公开提交 Issue**。\n\n请通过以下方式私下报告：\n\n1. **GitHub Security Advisory**：\n   访问 https://github.com/liuboacean/zhihu-automation-skill/security/advisories/new\n\n2. **直接联系维护者**：\n   通过 [GitHub Issues](https://github.com/liuboacean/zhihu-automation-skill/issues) 联系项目维护者\n\n### 报告内容建议\n\n- 漏洞类型和影响范围\n- 复现步骤\n- 受影响版本\n- 建议的修复方案（可选）\n\n### 响应承诺\n\n- 收到报告后 **48 小时内**回复确认\n- 评估后 **7 天内**给出修复时间计划\n- 修复完成后公开致谢（征得报告人同意）\n\n---\n\n## 依赖供应链安全\n\n- 核心依赖仅 3 个：`playwright`、`playwright-extra`、`puppeteer-extra-plugin-stealth`\n- 所有依赖通过 `package-lock.json` 锁定版本\n- 建议定期运行 `npm audit` 检查已知漏洞\n\n---\n\n## 安全更新\n\n安全更新会标注 `security` 标签：\n\n```\nsecurity(xxx): 修复 Cookie 泄露风险\n```\n\n建议开启 GitHub 仓库的 Watch → Custom → Security alerts 以接收安全更新通知。\n\nFile v2.0.3:config/api-endpoints.json\n\n{\n  \"version\": \"1.0\",\n  \"description\": \"知乎内部 HTTP API 端点配置\",\n  \"notes\": \"部分端点需要 x-zse-96 签名头，仅公开数据端点不需要\",\n  \"baseUrls\": {\n    \"zhihu\": \"https://www.zhihu.com\",\n    \"zhuanlan\": \"https://zhuanlan.zhihu.com\"\n  },\n  \"endpoints\": {\n    \"hotList\": {\n      \"url\": \"/api/v3/feed/topstory/hot-lists/total\",\n      \"method\": \"GET\",\n      \"requiresSignature\": true,\n      \"responseSchema\": {\n        \"data\": \"array\",\n        \"data[].target.title_area.text\": \"string\",\n        \"data[].target.metrics_area.text\": \"string\"\n      },\n      \"planBFallback\": \"browser\",\n      \"description\": \"全站热榜\"\n    },\n    \"search\": {\n      \"url\": \"/api/v4/search_v3?q={query}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": true,\n      \"responseSchema\": {\n        \"data\": \"array\",\n        \"data[].object.text\": \"string\"\n      },\n      \"planBFallback\": \"browser\",\n      \"description\": \"全局搜索\"\n    },\n    \"article\": {\n      \"url\": \"/api/v4/articles/{id}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": true,\n      \"responseSchema\": {\n        \"id\": \"number\",\n        \"title\": \"string\",\n        \"content\": \"string\"\n      },\n      \"planBFallback\": \"browser\",\n      \"description\": \"文章详情\"\n    },\n    \"user\": {\n      \"url\": \"/api/v4/members/{id}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": false,\n      \"responseSchema\": {\n        \"id\": \"string\",\n        \"name\": \"string\",\n        \"headline\": \"string\",\n        \"url_token\": \"string\"\n      },\n      \"planBFallback\": \"none\",\n      \"description\": \"用户信息（公开数据）\"\n    },\n    \"question\": {\n      \"url\": \"/api/v4/questions/{id}\",\n      \"method\": \"GET\",\n      \"requiresSignature\": false,\n      \"responseSchema\": {\n        \"id\": \"number\",\n        \"title\": \"string\",\n        \"detail\": \"string\"\n      },\n      \"planBFallback\": \"none\",\n      \"description\": \"问题详情（公开数据）\"\n    },\n    \"answers\": {\n      \"url\": \"/api/v4/questions/{id}/answers\",\n      \"method\": \"GET\",\n      \"requiresSignature\": false,\n      \"responseSchema\": {\n        \"data\": \"array\",\n        \"data[].content\": \"string\",\n        \"data[].author.name\": \"string\"\n      },\n      \"planBFallback\": \"none\",\n      \"description\": \"问题回答列表（公开数据）\"\n    }\n  }\n}\n\nFile v2.0.3:config/selectors.json\n\n{\n  \"version\": \"1.0\",\n  \"description\": \"知乎页面选择器配置（primary + fallbacks 结构）\",\n  \"notes\": \"前端改版时更新此文件，fallbacks 按优先级排列\",\n  \"login\": {\n    \"avatar\": {\n      \"primary\": \".AppHeader-profileAvatar\",\n      \"fallbacks\": [\n        \".Avatar\",\n        \"img[data-za-detail-view-path-module*='Avatar']\"\n      ]\n    },\n    \"signinButton\": {\n      \"primary\": \".SignContainer-accountLogin\",\n      \"fallbacks\": [\n        \".SignFlow-accountInput\",\n        \"button:contains('登录')\"\n      ]\n    }\n  },\n  \"article_editor\": {\n    \"url\": \"https://zhuanlan.zhihu.com/write\",\n    \"titleInput\": {\n      \"primary\": \"textarea[placeholder*='标题']\",\n      \"fallbacks\": [\n        \".WriteIndex-titleInput input\",\n        \".WriteIndex-titleInput textarea\"\n      ]\n    },\n    \"contentEditor\": {\n      \"primary\": \"[contenteditable]\",\n      \"fallbacks\": [\n        \".ProseMirror\",\n        \"[contenteditable='true']\"\n      ]\n    },\n    \"publishSettingsButton\": {\n      \"primary\": \"button:has-text('发布设置')\",\n      \"fallbacks\": [\n        \".WriteIndex-submitButton\"\n      ]\n    },\n    \"publishButton\": {\n      \"primary\": \".PublishPanel-submitButton\",\n      \"fallbacks\": [\n        \"button:has-text('发布')\",\n        \".Modal button:has-text('发布')\"\n      ]\n    },\n    \"coverUpload\": {\n      \"primary\": \"input[type='file'][accept='image/*']\"\n    }\n  },\n  \"thought\": {\n    \"trigger\": {\n      \"primary\": \"button:has-text('发想法')\",\n      \"fallbacks\": [\n        \".TopstoryItem-createButton\",\n        \"button:has-text('想法')\"\n      ]\n    },\n    \"input\": {\n      \"primary\": \"[contenteditable='true']\",\n      \"fallbacks\": [\n        \".RichTextEditor-inner\",\n        \".Editable-UniToolbar\",\n        \".MomentEditor-editor\"\n      ]\n    },\n    \"publishButton\": {\n      \"primary\": \"button:has-text('发布')\",\n      \"fallbacks\": [\n        \".Button:has-text('发布')\",\n        \".Card-button\"\n      ]\n    }\n  },\n  \"answer\": {\n    \"editor\": {\n      \"primary\": \".AnswerForm-editor .ProseMirror\",\n      \"fallbacks\": [\n        \".ProseMirror\",\n        \"[contenteditable='true']\"\n      ]\n    },\n    \"submit\": {\n      \"primary\": \".AnswerForm-submit\",\n      \"fallbacks\": [\n        \"button:contains('提交回答')\"\n      ]\n    }\n  },\n  \"ask\": {\n    \"titleInput\": {\n      \"primary\": \".QuestionForm-title input\",\n      \"fallbacks\": [\n        \"input[placeholder*='请写下你的问题']\"\n      ]\n    },\n    \"detailInput\": {\n      \"primary\": \".QuestionForm-detail .ProseMirror\",\n      \"fallbacks\": [\n        \"[contenteditable='true']\"\n      ]\n    },\n    \"submitButton\": {\n      \"primary\": \".QuestionForm-submit\",\n      \"fallbacks\": [\n        \"button:contains('提交问题')\"\n      ]\n    }\n  },\n  \"interaction\": {\n    \"likeButton\": {\n      \"primary\": \".VoteButton\",\n      \"fallbacks\": [\n        \"button:contains('赞同')\",\n        \".LikeButton\"\n      ]\n    },\n    \"commentInput\": {\n      \"primary\": \".CommentEditor-input\",\n      \"fallbacks\": [\n        \"[placeholder*='写下你的评论']\"\n      ]\n    },\n    \"commentSubmit\": {\n      \"primary\": \".CommentEditor-submit\",\n      \"fallbacks\": [\n        \"button:contains('发布评论')\"\n      ]\n    },\n    \"followButton\": {\n      \"primary\": \".FollowButton\",\n      \"fallbacks\": [\n        \"button:contains('关注')\"\n      ]\n    }\n  }\n}\n\nFile v2.0.3:package-lock.json\n\n{\n  \"name\": \"zhihu-automation-skill\",\n  \"version\": \"2.0.0\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"zhihu-automation-skill\",\n      \"version\": \"2.0.0\",\n      \"dependencies\": {\n        \"playwright\": \"^1.52.0\",\n        \"playwright-extra\": \"^4.3.0\",\n        \"puppeteer-extra-plugin-stealth\": \"^2.11.0\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@types/debug\": {\n      \"version\": \"4.1.13\",\n      \"resolved\": \"https://registry.npmmirror.com/@types/debug/-/debug-4.1.13.tgz\",\n      \"integrity\": \"sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/ms\": \"*\"\n      }\n    },\n    \"node_modules/@types/ms\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz\",\n      \"integrity\": \"sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/arr-union\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz\",\n      \"integrity\": \"sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/balanced-match\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz\",\n      \"integrity\": \"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/brace-expansion\": {\n      \"version\": \"1.1.14\",\n      \"resolved\": \"https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.14.tgz\",\n      \"integrity\": \"sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"balanced-match\": \"^1.0.0\",\n        \"concat-map\": \"0.0.1\"\n      }\n    },\n    \"node_modules/clone-deep\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmmirror.com/clone-deep/-/clone-deep-0.2.4.tgz\",\n      \"integrity\": \"sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"for-own\": \"^0.1.3\",\n        \"is-plain-object\": \"^2.0.1\",\n        \"kind-of\": \"^3.0.2\",\n        \"lazy-cache\": \"^1.0.3\",\n        \"shallow-clone\": \"^0.1.2\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/concat-map\": {\n      \"version\": \"0.0.1\",\n      \"resolved\": \"https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz\",\n      \"integrity\": \"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/debug\": {\n      \"version\": \"4.4.3\",\n      \"resolved\": \"https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz\",\n      \"integrity\": \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"ms\": \"^2.1.3\"\n      },\n      \"engines\": {\n        \"node\": \">=6.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"supports-color\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/deepmerge\": {\n      \"version\": \"4.3.1\",\n      \"resolved\": \"https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz\",\n      \"integrity\": \"sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/for-in\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz\",\n      \"integrity\": \"sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/for-own\": {\n      \"version\": \"0.1.5\",\n      \"resolved\": \"https://registry.npmmirror.com/for-own/-/for-own-0.1.5.tgz\",\n      \"integrity\": \"sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"for-in\": \"^1.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/fs-extra\": {\n      \"version\": \"10.1.0\",\n      \"resolved\": \"https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz\",\n      \"integrity\": \"sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"graceful-fs\": \"^4.2.0\",\n        \"jsonfile\": \"^6.0.1\",\n        \"universalify\": \"^2.0.0\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      }\n    },\n    \"node_modules/fs.realpath\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz\",\n      \"integrity\": \"sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==\",\n      \"license\": \"ISC\"\n    },\n    \"node_modules/fsevents\": {\n      \"version\": \"2.3.2\",\n      \"resolved\": \"https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz\",\n      \"integrity\": \"sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==\",\n      \"hasInstallScript\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \"^8.16.0 || ^10.6.0 || >=11.0.0\"\n      }\n    },\n    \"node_modules/glob\": {\n      \"version\": \"7.2.3\",\n      \"resolved\": \"https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz\",\n      \"integrity\": \"sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\n      \"deprecated\": \"Glob versions prior to v9 are no longer supported\",\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"fs.realpath\": \"^1.0.0\",\n        \"inflight\": \"^1.0.4\",\n        \"inherits\": \"2\",\n        \"minimatch\": \"^3.1.1\",\n        \"once\": \"^1.3.0\",\n        \"path-is-absolute\": \"^1.0.0\"\n      },\n      \"engines\": {\n        \"node\": \"*\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/graceful-fs\": {\n      \"version\": \"4.2.11\",\n      \"resolved\": \"https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz\",\n      \"integrity\": \"sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==\",\n      \"license\": \"ISC\"\n    },\n    \"node_modules/inflight\": {\n      \"version\": \"1.0.6\",\n      \"resolved\": \"https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz\",\n      \"integrity\": \"sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==\",\n      \"deprecated\": \"This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.\",\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"once\": \"^1.3.0\",\n        \"wrappy\": \"1\"\n      }\n    },\n    \"node_modules/inherits\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz\",\n      \"integrity\": \"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\",\n      \"license\": \"ISC\"\n    },\n    \"node_modules/is-buffer\": {\n      \"version\": \"1.1.6\",\n      \"resolved\": \"https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz\",\n      \"integrity\": \"sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/is-extendable\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz\",\n      \"integrity\": \"sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/is-plain-object\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz\",\n      \"integrity\": \"sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"isobject\": \"^3.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/isobject\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz\",\n      \"integrity\": \"sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/jsonfile\": {\n      \"version\": \"6.2.1\",\n      \"resolved\": \"https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.1.tgz\",\n      \"integrity\": \"sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"universalify\": \"^2.0.0\"\n      },\n      \"optionalDependencies\": {\n        \"graceful-fs\": \"^4.1.6\"\n      }\n    },\n    \"node_modules/kind-of\": {\n      \"version\": \"3.2.2\",\n      \"resolved\": \"https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz\",\n      \"integrity\": \"sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"is-buffer\": \"^1.1.5\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/lazy-cache\": {\n      \"version\": \"1.0.4\",\n      \"resolved\": \"https://registry.npmmirror.com/lazy-cache/-/lazy-cache-1.0.4.tgz\",\n      \"integrity\": \"sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/merge-deep\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmmirror.com/merge-deep/-/merge-deep-3.0.3.tgz\",\n      \"integrity\": \"sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"arr-union\": \"^3.1.0\",\n        \"clone-deep\": \"^0.2.4\",\n        \"kind-of\": \"^3.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/minimatch\": {\n      \"version\": \"3.1.5\",\n      \"resolved\": \"https://registry.npmmirror.com/minimatch/-/minimatch-3.1.5.tgz\",\n      \"integrity\": \"sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==\",\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"brace-expansion\": \"^1.1.7\"\n      },\n      \"engines\": {\n        \"node\": \"*\"\n      }\n    },\n    \"node_modules/mixin-object\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmmirror.com/mixin-object/-/mixin-object-2.0.1.tgz\",\n      \"integrity\": \"sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"for-in\": \"^0.1.3\",\n        \"is-extendable\": \"^0.1.1\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/mixin-object/node_modules/for-in\": {\n      \"version\": \"0.1.8\",\n      \"resolved\": \"https://registry.npmmirror.com/for-in/-/for-in-0.1.8.tgz\",\n      \"integrity\": \"sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/ms\": {\n      \"version\": \"2.1.3\",\n      \"resolved\": \"https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz\",\n      \"integrity\": \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\n      \"license\": \"MIT\"\n    },\n    \"node_modules/once\": {\n      \"version\": \"1.4.0\",\n      \"resolved\": \"https://registry.npmmirror.com/once/-/once-1.4.0.tgz\",\n      \"integrity\": \"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==\",\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"wrappy\": \"1\"\n      }\n    },\n    \"node_modules/path-is-absolute\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz\",\n      \"integrity\": \"sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/playwright\": {\n      \"version\": \"1.59.1\",\n      \"resolved\": \"https://registry.npmmirror.com/playwright/-/playwright-1.59.1.tgz\",\n      \"integrity\": \"sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"playwright-core\": \"1.59.1\"\n      },\n      \"bin\": {\n        \"playwright\": \"cli.js\"\n      },\n      \"engines\": {\n        \"node\": \">=18\"\n      },\n      \"optionalDependencies\": {\n        \"fsevents\": \"2.3.2\"\n      }\n    },\n    \"node_modules/playwright-core\": {\n      \"version\": \"1.59.1\",\n      \"resolved\": \"https://registry.npmmirror.com/playwright-core/-/playwright-core-1.59.1.tgz\",\n      \"integrity\": \"sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==\",\n      \"license\": \"Apache-2.0\",\n      \"bin\": {\n        \"playwright-core\": \"cli.js\"\n      },\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/playwright-extra\": {\n      \"version\": \"4.3.6\",\n      \"resolved\": \"https://registry.npmmirror.com/playwright-extra/-/playwright-extra-4.3.6.tgz\",\n      \"integrity\": \"sha512-q2rVtcE8V8K3vPVF1zny4pvwZveHLH8KBuVU2MoE3Jw4OKVoBWsHI9CH9zPydovHHOCDxjGN2Vg+2m644q3ijA==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"debug\": \"^4.3.4\"\n      },\n      \"engines\": {\n        \"node\": \">=12\"\n      },\n      \"peerDependencies\": {\n        \"playwright\": \"*\",\n        \"playwright-core\": \"*\"\n      },\n      \"peerDependenciesMeta\": {\n        \"playwright\": {\n          \"optional\": true\n        },\n        \"playwright-core\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/puppeteer-extra-plugin\": {\n      \"version\": \"3.2.3\",\n      \"resolved\": \"https://registry.npmmirror.com/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz\",\n      \"integrity\": \"sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@types/debug\": \"^4.1.0\",\n        \"debug\": \"^4.1.1\",\n        \"merge-deep\": \"^3.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=9.11.2\"\n      },\n      \"peerDependencies\": {\n        \"playwright-extra\": \"*\",\n        \"puppeteer-extra\": \"*\"\n      },\n      \"peerDependenciesMeta\": {\n        \"playwright-extra\": {\n          \"optional\": true\n        },\n        \"puppeteer-extra\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/puppeteer-extra-plugin-stealth\": {\n      \"version\": \"2.11.2\",\n      \"resolved\": \"https://registry.npmmirror.com/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz\",\n      \"integrity\": \"sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"debug\": \"^4.1.1\",\n        \"puppeteer-extra-plugin\": \"^3.2.3\",\n        \"puppeteer-extra-plugin-user-preferences\": \"^2.4.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      },\n      \"peerDependencies\": {\n        \"playwright-extra\": \"*\",\n        \"puppeteer-extra\": \"*\"\n      },\n      \"peerDependenciesMeta\": {\n        \"playwright-extra\": {\n          \"optional\": true\n        },\n        \"puppeteer-extra\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/puppeteer-extra-plugin-user-data-dir\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmmirror.com/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz\",\n      \"integrity\": \"sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"debug\": \"^4.1.1\",\n        \"fs-extra\": \"^10.0.0\",\n        \"puppeteer-extra-plugin\": \"^3.2.3\",\n        \"rimraf\": \"^3.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      },\n      \"peerDependencies\": {\n        \"playwright-extra\": \"*\",\n        \"puppeteer-extra\": \"*\"\n      },\n      \"peerDependenciesMeta\": {\n        \"playwright-extra\": {\n          \"optional\": true\n        },\n        \"puppeteer-extra\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/puppeteer-extra-plugin-user-preferences\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmmirror.com/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz\",\n      \"integrity\": \"sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"debug\": \"^4.1.1\",\n        \"deepmerge\": \"^4.2.2\",\n        \"puppeteer-extra-plugin\": \"^3.2.3\",\n        \"puppeteer-extra-plugin-user-data-dir\": \"^2.4.1\"\n      },\n      \"engines\": {\n        \"node\": \">=8\"\n      },\n      \"peerDependencies\": {\n        \"playwright-extra\": \"*\",\n        \"puppeteer-extra\": \"*\"\n      },\n      \"peerDependenciesMeta\": {\n        \"playwright-extra\": {\n          \"optional\": true\n        },\n        \"puppeteer-extra\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/rimraf\": {\n      \"version\": \"3.0.2\",\n      \"resolved\": \"https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz\",\n      \"integrity\": \"sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==\",\n      \"deprecated\": \"Rimraf versions prior to v4 are no longer supported\",\n      \"license\": \"ISC\",\n      \"dependencies\": {\n        \"glob\": \"^7.1.3\"\n      },\n      \"bin\": {\n        \"rimraf\": \"bin.js\"\n      },\n      \"funding\": {\n        \"url\": \"https://github.com/sponsors/isaacs\"\n      }\n    },\n    \"node_modules/shallow-clone\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmmirror.com/shallow-clone/-/shallow-clone-0.1.2.tgz\",\n      \"integrity\": \"sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"is-extendable\": \"^0.1.1\",\n        \"kind-of\": \"^2.0.1\",\n        \"lazy-cache\": \"^0.2.3\",\n        \"mixin-object\": \"^2.0.1\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/shallow-clone/node_modules/kind-of\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmmirror.com/kind-of/-/kind-of-2.0.1.tgz\",\n      \"integrity\": \"sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"is-buffer\": \"^1.0.2\"\n      },\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/shallow-clone/node_modules/lazy-cache\": {\n      \"version\": \"0.2.7\",\n      \"resolved\": \"https://registry.npmmirror.com/lazy-cache/-/lazy-cache-0.2.7.tgz\",\n      \"integrity\": \"sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">=0.10.0\"\n      }\n    },\n    \"node_modules/universalify\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz\",\n      \"integrity\": \"sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==\",\n      \"license\": \"MIT\",\n      \"engines\": {\n        \"node\": \">= 10.0.0\"\n      }\n    },\n    \"node_modules/wrappy\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz\",\n      \"integrity\": \"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==\",\n      \"license\": \"ISC\"\n    }\n  }\n}\n\nFile v2.0.3:package.json\n\n{\n  \"name\": \"zhihu-automation-skill\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Zhihu (知乎) Automation Skill — publish articles, thoughts, answer questions, interact, and extract data with dual-channel architecture (HTTP read + browser write)\",\n  \"homepage\": \"https://github.com/liuboacean/zhihu-automation-skill#readme\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"test\": \"node --test tests/*.js\",\n    \"smoke-test\": \"node tests/smoke-test.js\",\n    \"cookie-check\": \"node tests/cookie-check.js\",\n    \"e2e-test\": \"ZHIHU_TEST_MODE=sandbox node tests/e2e-test.js\",\n    \"export-cookie\": \"node scripts/zhihu-export-cookie.js\",\n    \"hot-list\": \"node scripts/zhihu-extract.js --type hot-list\",\n    \"search\": \"node scripts/zhihu-extract.js --type search --query\",\n    \"publish-article\": \"node scripts/zhihu-publish.js article\",\n    \"publish-thought\": \"node scripts/zhihu-publish.js thought\",\n    \"answer\": \"node scripts/zhihu-answer.js\",\n    \"ask\": \"node scripts/zhihu-ask.js\",\n    \"interact\": \"node scripts/zhihu-interact.js\"\n  },\n  \"dependencies\": {\n    \"playwright\": \"^1.52.0\",\n    \"playwright-extra\": \"^4.3.0\",\n    \"puppeteer-extra-plugin-stealth\": \"^2.11.0\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  }\n}","readmeExcerpt":"Skill: zhihu-helper Owner: liuboacean Summary: 知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Tags: latest:2.0.7 Version history: v2.0.7 | 2026-05-15T06:36:17.772Z | auto zhihu-auto-skill v2.0.7 - 重命名技能为“知乎内容辅助工具”（zhihu-helper），聚焦内容查看和数据提取。 - 简化和重构功能模块，仅保留文章发布、想法发布、问题回答、提问、互动、数据提取等主流程。 - 明确所有发布/互动类操作必须在执行前用户确认，提升安全性。 - 移除大量废弃脚本，合并/精简原有代码，新增日志和初始化支持。 - 保持 Cookie 加密安全方案和环境配置不变，增加操作稳定性与一致性。 - 完善文档，更突出触发词、主要用法与注意","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 依赖已安装，如首次使用：\ncd zhihu-skill\nnpm install\nnpx playwright install chromium"},{"language":"bash","snippet":"export ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\""},{"language":"bash","snippet":"# 会自动打开浏览器，手动登录后 Cookie 自动加密保存\nnode scripts/zhihu-export-cookie.js"},{"language":"bash","snippet":"# 检查 Cookie 是否有效\nnode tests/cookie-check.js"},{"language":"text","snippet":"你: 帮我发一篇知乎文章，标题是\"xxx\"，内容是...\nAI: 正在生成内容 → 展示预览 → 等待用户确认 → 发布 → 返回链接"},{"language":"bash","snippet":"# 直接指定内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\"\n\n# 从文件读取内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content-file \"文章.md\"\n\n# 保存为草稿（不发布）\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\" --draft"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: zhihu-helper\ndescription: >-\n  知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。\n  提供浏览器操作辅助，Cookie 加密存储。\nmetadata:\n  author: Hermes + WorkBuddy\n  version: \"2.0.7\"\n  requires:\n    - node\n    - playwright\n    - python3\n  env:\n    - ZHIHU_COOKIE_KEY (sensitive)\n    - ZHIHU_APP_KEY (optional)\n    - ZHIHU_APP_SECRET (optional)\n---\n\n# 知乎内容辅助工具 (Zhihu Helper v2.0)\n\n辅助查看知乎内容，提取数据，Cookie 加密存储，稳定可靠。\n\n---\n\n## 触发词（Trigger Phrases）\n\n- \"帮我发一篇知乎文章\" / \"写知乎文章\"\n- \"发布知乎想法\" / \"发一条想法\"\n- \"回答知乎问题\" / \"写回答\"\n- \"知乎提问\" / \"问一个问题\"\n- \"点赞\" / \"评论\" / \"关注\"（知乎内容）\n- \"查看知乎热榜\" / \"知乎热搜\"\n- \"搜索知乎\" / \"查一下知乎上的\"\n- \"知乎数据\" / \"提取知乎信息\"\n\n## 快速开始\n\n### 1. 安装依赖\n```bash\n# 依赖已安装，如首次使用：\ncd zhihu-skill\nnpm install\nnpx playwright install chromium\n```\n\n### 2. 配置 Cookie 加密密钥\n```bash\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n```\n\n### 3. 导出知乎 Cookie\n```bash\n# 会自动打开浏览器，手动登录后 Cookie 自动加密保存\nnode scripts/zhihu-export-cookie.js\n```\n\n### 4. 验证\n```bash\n# 检查 Cookie 是否有效\nnode tests/cookie-check.js\n```\n\n---\n\n## 功能模块\n\n### 1️⃣ 发布文章\n在知乎专栏发布 Markdown 文章。\n\n```\n你: 帮我发一篇知乎文章，标题是\"xxx\"，内容是...\nAI: 正在生成内容 → 展示预览 → 等待用户确认 → 发布 → 返回链接\n```\n\n> ⚠️ **重要**：所有发布操作前 AI 必须展示预览并等待用户明确确认（\"确认发布？\"），未经确认不得执行任何公开操作。\n\n**CLI:**\n```bash\n# 直接指定内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\"\n\n# 从文件读取内容\nnode scripts/zhihu-publish.js article --title \"标题\" --content-file \"文章.md\"\n\n# 保存为草稿（不发布）\nnode scripts/zhihu-publish.js article --title \"标题\" --content \"正文\" --draft\n```\n\n### 2️⃣ 发布想法\n类似 Twitter 的短内容发布。\n\n```\n你: 发一条知乎想法，内容是xxx\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-publish.js thought --content \"想法内容\"\n\n# 带图片\nnode scripts/zhihu-publish.js thought --content \"想法内容\" --image \"图片路径\"\n```\n\n### 3️⃣ 回答问题\n搜索问题并撰写回答。\n\n```\n你: 帮我在知乎搜索关于xxx的问题并回答\nAI: 搜索问题 → 列出选项 → 用户选择 → 撰写 → 展示预览 → 等待确认 → 提交\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-answer.js --question-id 123456789 --content \"回答内容\"\n```\n\n### 4️⃣ 提问\n在知乎上提出新问题。\n\n```\n你: 帮我在知乎提问：xxx\nAI: 展示预览 → 等待确认 → 提交\n```\n\n**CLI:**\n```bash\nnode scripts/zhihu-ask.js --title \"问题标题\" --detail \"补充说明\"\n```\n\n### 5️⃣ 互动\n点赞、评论、关注（执行前需用户确认）。\n\n```\n你: 给这篇知乎文章点赞 / 评论 / 关注这个用户\nAI: 展示操作详情 → 等待确认 → 执行\n```\n\n> ⚠️ **所有互动操作（点赞/评论/关注）前必须等待用户明确确认。**\n\n**CLI:**\n```bash\n# 点赞\nnode scripts/zhihu-interact.js like --url \"https://www.zhihu.com/question/xxx/answer/xxx\"\n\n# 取消点赞\nnode scripts/zhihu-interact.js unlike --url \"...\"\n\n# 评论\nnode scripts/zhihu-interact.js comment --url \"...\" --content \"评论内容\"\n\n# 关注用户\nnode scripts/zhihu-interact.js follow --user \"用户ID\"\n```\n\n### 6️⃣ 数据提取\n从知乎提取结构化数据。\n\n```\n你: 今天知乎热榜是什么？\nAI: 返回热榜 Top 20\n```\n\n**CLI:**\n```bash\n# 热榜\nnode scripts/zhihu-extract.js --type hot-list [--limit 20]\n\n# 搜索\nnode scripts/zhihu-extract.js --type search --query \"关键词\" [--limit 10]\n\n# 文章详情\nnode scripts/zhihu-extract.js --type article --id \"文章ID\"\n\n# 用户信息\nnode scripts/zhihu-extract.js --type user --id \"用户ID\"\n\n# 问题详情\nnode scripts/zhihu-extract.js --type question --id \"问题ID\"\n\n# 回答列表\nnode scripts/zhihu-extract.js --type answers --id \"问题ID\" [--limit 10]\n```\n\n---\n\n## 架构\n\n```\n                   AI Agent（用户自然语言触发）\n                           │\n              "},{"path":"README.md","content":"<div align=\"center\">\n\n# 🤖 知乎操作辅助 Skill\n\n**通过浏览器操作知乎 — 发文章、写想法、回答问题、看热榜**\n\n[![Version](https://img.shields.io/badge/version-2.0.2-blue)](https://github.com/liuboacean/zhihu-automation-skill)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![CI](https://github.com/liuboacean/zhihu-automation-skill/actions/workflows/ci.yml/badge.svg)](https://github.com/liuboacean/zhihu-automation-skill/actions)\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)\n[![Playwright](https://img.shields.io/badge/playwright-powered-orange)](https://playwright.dev)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen)](CONTRIBUTING.md)\n\n</div>\n\n---\n\n## ✨ 它能做什么？\n\n| 功能 | 一句话描述 | 通道 |\n|:----|-----------|:----:|\n| 📝 **发文章** | Markdown → 一键发布知乎专栏（**25ms 批量粘贴**） | 浏览器 |\n| 💭 **发想法** | 像发朋友圈一样发想法 | 浏览器 |\n| ❓ **答问题** | 搜索并回答知乎上的问题 | 浏览器 |\n| 🙋 **提问** | 在知乎上自动提问 | 浏览器 |\n| 👍 **互动** | 点赞、评论、关注一条龙 | 浏览器 |\n| 🔥 **看热榜** | 获取知乎热榜 Top 20（浏览器兜底） | 浏览器 |\n| 🔍 **搜内容** | 搜索知乎上的文章和回答 | 浏览器 |\n| 👁️ **预览模式** | 发布前查看内容并确认（`--preview`） | — |\n| 🔒 **沙箱模式** | `ZHIHU_TEST_MODE=sandbox` 保存本地草稿，不实际发布 | — |\n\n> ℹ️ 所有操作统一走**浏览器通道**（Cookie 登录），稳定可靠。\n> HTTP 签名通道因 API 签名算法分析成本过高已正式放弃（详见 `zhihu-signature.js`）。\n\n---\n\n## 🚀 30 秒上手\n\n```bash\n# 1. 装依赖（已装好可跳过）\ncd zhihu-skill && npm install\n\n# 2. 一键配置（生成密钥 + 安装浏览器 + 引导登录）\nnpm run setup\n\n# 3. 开玩 🎉\nnode zhihu.js hot-list --limit 5                          # 看热榜\nnode zhihu.js publish thought --content \"Hello 知乎\"        # 发想法\nnode zhihu.js publish article --title \"标题\" --content \"正文\"  # 发文章\n```\n\n> 💡 **小贴士**：`npm run setup` 会自动生成加密密钥并写入 `.env`，引导你手动登录知乎保存 Cookie。密钥只存在本地，**永远不要提交到代码仓库**。\n\n---\n\n## 🏗️ 架构\n\n```\n                  ┌──────────────────┐\n                  │  AI Agent / 用户  │\n                  └────────┬─────────┘\n                           │\n          ┌────────────────┼────────────────┐\n          ▼                ▼                ▼\n   ┌────────────┐  ┌──────────────┐  ┌────────────┐\n   │ 浏览器操作  │  │   编辑器     │  │ Cookie 加密 │\n   │ 发布/互动/问答│  │ Draft.js 兼容│  │ AES-256-GCM│\n   │ 热榜/搜索   │  │ 25ms 批量粘贴│  │ 密钥轮换    │\n   └────────────┘  └──────────────┘  └────────────┘\n```\n\n| 特性 | 说明 |\n|------|------|\n| 🔒 **Cookie 安全** | AES-256-GCM 加密存储，权限 0600，支持密钥轮换 |\n| 🛡️ **防护机制** | 贝塞尔鼠标轨迹模拟人工操作 |\n| 🔄 **Plan B 降级** | 签名失效自动降级到浏览器通道，永不中断 |\n| ⏱️ **智能限流** | 浏览器 5-10s / 限流指数退避（30s → 10min） |\n| 💥 **崩溃恢复** | 浏览器崩溃自动重建会话，任务不丢失 |\n| ⚡ **极速发布** | ClipboardEvent 批量粘贴，800 字文章 25ms 完成 |\n| 📊 **进度反馈** | 发布流程 `[1/5]~[5/5]` 分步进度条 |\n| 👁️ **发布预览** | `--preview` 发布前确认内容，防止误操作 |\n| 🔒 **沙箱模式** | `ZHIHU_TEST_MODE=sandbox` 仅保存草稿，安全测试 |\n| 📋 **统一日志** | DEBUG/INFO/WARN/ERROR 四级，控制台彩色 + JSONL 文件 |\n\n---\n\n## 📖 详细用法\n\n### 统一 CLI（推荐）\n\n```bash\nnode zhihu.js setup                              # 首次配置引导\nnode zhihu.js publish article --title \"标题\" --content \"正文\" [--draft] [--preview]\nnode zhihu.js publish thought --content \"想法\" [--image \"photo.jpg\"] [--preview]\nnode zhihu.js hot-list [--limit 10]              # 热榜\nnode zhihu.js search "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn73qbrbqs4s8t2nh8pm22wxbd84vm7r\",\n  \"slug\": \"zhihu-auto-skill\",\n  \"version\": \"2.0.7\",\n  \"publishedAt\": 1778826977772\n}"},{"path":"CHANGELOG.md","content":"# 变更日志\n\n## v2.0.0 (2026-05-09)\n\n### 正式发布 — 浏览器操作架构\n\n知乎操作辅助 Skill v2.0 采用浏览器操作架构，统一通过浏览器通道实现所有操作，提升了稳定性。\n\n#### 新架构\n\n```\n                  ┌──────────────────┐\n                  │  AI Agent / 用户  │\n                  └────────┬─────────┘\n                           │\n                  ┌────────▼─────────┐\n                  │  浏览器操作通道   │\n                  │  所有操作统一实现  │\n                  └────────┬─────────┘\n                           │\n              ┌────────────┼────────────┐\n              │                         │\n    ┌─────────▼─────────┐    ┌─────▼─────────┐\n    │  浏览器操作     │    │ Python/OpenAPI │\n    │  zhihu-browser.js│    │ zhihu_bot.py  │\n    │  zhihu-publish.js│    │ zhihu-bridge   │\n    │  zhihu-interact.js│\n    │  zhihu-extract.js│\n    └───────────────────┘\n```\n\n#### 6 大功能模块\n\n| 模块 | CLI 脚本 | 通道 |\n|:----|:---------|:----:|\n| 📝 **发布文章** | `zhihu-publish.js article` | 浏览器通道 |\n| 💭 **发布想法** | `zhihu-publish.js thought` | 浏览器通道 |\n| ❓ **回答问题** | `zhihu-answer.js` | 浏览器通道 |\n| 🙋 **提问** | `zhihu-ask.js` | 浏览器通道 |\n| 👍 **互动（点赞/评论/关注）** | `zhihu-interact.js` | 浏览器通道 |\n| 🔥 **数据提取（热榜/搜索/用户/问题）** | `zhihu-extract.js` | 浏览器通道 |\n\n#### 新增特性\n\n- **浏览器自动化架构**：所有操作统一通过浏览器实现，稳定可靠\n- **Cookie AES-256-GCM 加密存储**：加密密钥通过 `ZHIHU_COOKIE_KEY` 环境变量管理，支持密钥轮换\n- **人工操作模拟**：贝塞尔鼠标轨迹、逐字输入\n- **智能签名引擎（zse-123）**：适配器模式支持多种签名算法，支持 C3b 前向兼容和 WebWorker 计算\n- **Plan B 降级策略**：HTTP 签名失败自动降级到浏览器通道\n- **崩溃自动恢复**：`withCrashRecovery` 机制自动重建浏览器会话\n- **指数退避限流**：遇到限流时自动退避（30s → 1min → 3min → 10min）\n- **选择器自动降级**：`config/selectors.json` 支持主/备/兜底三级选择器\n- **沙箱测试模式**：`ZHIHU_TEST_MODE=sandbox` 隔离测试环境\n\n#### 12 个核心模块\n\n- `zhihu-core.js` — Cookie 加密/浏览器管理/日志/重试\n- `zhihu-signature.js` — 签名生成（适配器模式）\n- `zhihu-http.js` — HTTP 读通道\n- `zhihu-browser.js` — 浏览器操作\n- `zhihu-publish.js` — 发布文章 + 想法\n- `zhihu-interact.js` — 点赞 + 评论 + 关注\n- `zhihu-answer.js` — 回答问题\n- `zhihu-ask.js` — 提问\n- `zhihu-extract.js` — 数据提取\n- `zhihu-bridge.js` — Python 桥接\n- `zhihu-export-cookie.js` — Cookie 导出\n- `python/zhihu_bot.py` — OpenAPI 圈子互动\n\n---\n\n## v1.x (历史版本)\n\nv1.x 为单通道架构（纯浏览器操作），代码已不再维护。建议升级到 v2.0 获取更好的性能和稳定性。"},{"path":"CONTRIBUTING.md","content":"# 贡献指南\n\n感谢你对知乎自动化 Skill 的关注！我们欢迎任何形式的贡献 —— 新功能、bug 修复、文档改进、使用反馈，通通欢迎。\n\n---\n\n## 开发环境搭建\n\n### 前置要求\n\n- Node.js >= 18（推荐使用 nvm 管理版本，参考 `.nvmrc`）\n- npm（随 Node.js 一同安装）\n\n### 安装步骤\n\n```bash\n# 克隆仓库\ngit clone https://github.com/liuboacean/zhihu-automation-skill.git\ncd zhihu-automation-skill\n\n# 安装依赖\nnpm install\n\n# 安装 Playwright Chromium 浏览器\nnpx playwright install chromium\n```\n\n### 配置 Cookie 加密密钥\n\n```bash\nexport ZHIHU_COOKIE_KEY=\"$(openssl rand -hex 32)\"\n```\n\n---\n\n## 代码规范\n\n### JavaScript 规范\n\n- **ESM 模块**：项目使用 `\"type\": \"module\"`，所有 `.js` 文件使用 `import`/`export` 语法\n- **命名风格**：\n  - 函数名使用 camelCase\n  - 类名使用 PascalCase\n  - 常量使用 UPPER_SNAKE_CASE\n  - 文件名使用 kebab-case\n- **异步处理**：优先使用 `async/await`，避免裸 `.then()` / `.catch()`\n- **错误处理**：关键操作必须包裹 try-catch，错误信息应包含上下文\n\n### 提交规范\n\n本项目遵循 [Conventional Commits](https://www.conventionalcommits.org/)：\n\n```\n<type>(<scope>): <description>\n\n[optional body]\n```\n\n常用类型：\n\n| 类型       | 用途                 |\n| ---------- | -------------------- |\n| `feat`     | 新功能               |\n| `fix`      | Bug 修复             |\n| `docs`     | 文档变更             |\n| `refactor` | 代码重构             |\n| `perf`     | 性能优化             |\n| `test`     | 测试相关             |\n| `chore`    | 构建/工具/依赖变更   |\n| `security` | 安全相关修复         |\n\n示例：\n\n```\nfeat(zhihu-publish): 支持 Markdown 表格转知乎格式\nfix(zhihu-interact): 修复点赞后未更新状态\ndocs(readme): 更新 Cookie 导出步骤\n```\n\n### Prettier 格式化\n\n建议在编辑器中开启 Prettier 自动格式化，或提交前运行：\n\n```bash\nnpx prettier --check scripts/**/*.js\n```\n\n> 注：项目当前尚未配置 `.prettierrc`，欢迎 PR 添加。\n\n---\n\n## 提交 PR 流程\n\n1. **Fork 本仓库** 到你的 GitHub 账号\n2. **创建功能分支**：`git checkout -b feat/your-feature-name`\n3. **进行开发**，确保：\n   - 代码风格与现有代码一致\n   - 为新增功能添加必要的注释和错误处理\n   - 如果是新脚本，更新 `package.json` 中的 `\"scripts\"` 字段\n4. **运行测试**：`npm test`\n5. **提交**：`git commit -m \"feat(xxx): 简洁描述变更\"`\n6. **推送分支**：`git push origin feat/your-feature-name`\n7. **创建 PR** 到 `main` 分支，并在描述中说明：\n   - 做了什么、为什么做\n   - 测试情况\n   - 截图（如涉及 UI 操作）\n\n### PR 审查标准\n\n- 代码无明显安全问题\n- 不引入新的外部依赖（或新增依赖有充分理由）\n- 新增功能的 CLI 接口风格与现有保持一致\n- 浏览器自动化操作包含合适的等待和重试逻辑\n- 已考虑知乎反爬限制（频率控制、降级策略等）\n\n---\n\n## 测试\n\n```bash\n# 选择器冒烟测试\nnpm run smoke-test\n\n# Cookie 到期检测\nnpm run cookie-check\n\n# 端到端测试（沙箱模式）\nnpm run e2e-test\n```\n\n建议在提交 PR 前至少通过 `smoke-test` 和 `cookie-check`。\n\n---\n\n## 注意事项\n\n### Cookie 安全\n\n- Cookie 文件使用 **AES-256-GCM** 加密存储在 `~/.hermes/credentials/zhihu-cookies.enc`\n- **切勿**将未加密的 Cookie 提交到 Git\n- **切勿**将 `ZHIHU_COOKIE_KEY` 写在代码或提交信息中\n- Cookie 有效期约 30 天，过期需重新登录导出\n\n### 知乎反爬限制\n\n- **频率控制**：HTTP 请求间隔 200-500ms，浏览器操作间隔 5-10s\n- **限流处理**：遇到限流时自动指数退避（30s → 1min → 3min → 10min）\n- **验证码**：浏览器通道可能触发滑块验证，系统会自动等待手动验证\n- **选择器失效**：知乎前端经常改版，`config/selectors.json` 可能需更新\n- **签名降级**：HTTP 签名通道返回 401 时自动降级到浏览器通道\n\n### 账号安全建议\n\n- 建议先在**小号**上测试所有功能\n- 不要在公共机器上长期保存 Cookie 密钥\n- 定期轮换 Cookie 加密密钥\n\n---\n\n## 问题反馈\n\n遇到问题请先查阅已有 Issues。如未解决，欢迎提交 Issue，请包含：\n\n- 操作步骤\n- 期望结果与实际结果\n- 相关日志或错误信息\n- 知乎页面是否已改版（可附上截图）\n\n---\n\n再次感谢你的贡献！"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Skill: zhihu-helper Owner: liuboacean Summary: 知乎内容辅助工具。支持查看文章、搜索问题、提取热榜/用户数据。 提供浏览器操作辅助，Cookie 加密存储。 Tags: latest:2.0.7 Version history: v2.0.7 | 2026-05-15T06:36:17.772Z | auto zhihu-auto-skill v2.0.7 - 重命名技能为“知乎内容辅助工具”（zhihu-helper），聚焦内容查看和数据提取。 - 简化和重构功能模块，仅保留文章发布、想法发布、问题回答、提问、互动、数据提取等主流程。 - 明确所有发布/互动类操作必须在执行前用户确认，提升安全性。 - 移除大量废弃脚本，合并/精简原有代码，新增日志和初始化支持。 - 保持 Cookie 加密安全方案和环境配置不变，增加操作稳定性与一致性。 - 完善文档，更突出触发词、主要用法与注意","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":690,"uniquenessScore":57,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:08:44.640Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:08:44.640Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:59:34.049Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}