{"id":"1051965e-c939-4af0-a5e5-aeef35dd0172","entityType":"agent","slug":"clawhub-wscats-tencent-docs-markdown","name":"腾讯文档Markdown","canonicalUrl":"https://www.xpersona.co/agent/clawhub-wscats-tencent-docs-markdown","canonicalPath":"/agent/clawhub-wscats-tencent-docs-markdown","generatedAt":"2026-10-09T09:17:37.013Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T03:48:33.166Z","emptyReason":null},"description":"腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 5.7K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17bw1sf2hsjw09jmyh7nhzshn83h2gf:tencent-docs-markdown","sourceUrl":"https://clawhub.ai/wscats/tencent-docs-markdown","homepage":"https://clawhub.ai/wscats/skills/tencent-docs-markdown","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/wscats/tencent-docs-markdown","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/wscats/skills/tencent-docs-markdown","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":72,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"腾讯文档Markdown technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T03:48:33.166Z","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-09T03:48:33.166Z","emptyReason":null},"stars":null,"forks":null,"downloads":5718,"packageName":null,"latestVersion":"1.1.7","tractionLabel":"5.7K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T03:48:33.165Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T03:48:33.166Z","lastCrawledAt":"2026-10-09T03:48:33.165Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T03:48:33.165Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.7","createdAt":"2026-05-02T07:26:08.938Z","changelog":"tencent-docs-markdown v1.1.7 - 增加本地凭证安全性，`.cookies.json` 保存时自动设置为 0600 权限，并在文档和命令行提示文件敏感性。 - 新增 `logout` 命令及编程接口（`clear_cookies()`），便于主动清除本地会话凭证。 - 关键操作（update/delete/rename）新增不可撤销保护，CLI 支持 `-y/--yes` 跳过确认，编程接口需显式 `confirm=True`。 - `requirements.txt` 运行时依赖增加版本锁定，提升安全性。 - 更新文档（SKILL.md），详细说明凭证管理、破坏性操作防护、新命令及安全注意事项。 - 新增 README.md 文件。","fileCount":12,"zipByteSize":31951},{"version":"1.1.5","createdAt":"2026-03-26T00:48:38.029Z","changelog":"# 腾讯文档Markdown v1.1.5 Changelog - 更新依赖配置，提升兼容性与稳定性。 - package.json 文件有变动。","fileCount":10,"zipByteSize":23285},{"version":"1.1.4","createdAt":"2026-03-26T00:40:45.745Z","changelog":"重大变更：技能已从 Node.js/JavaScript 重写为 Python，使用 Playwright 实现自动化。 - 技能内核由 Node.js/JavaScript 切换为 Python 实现，所有功能迁移至 Python 脚本（如 main.py、api.py、auth.py等）。 - 依赖管理切换为 requirements.txt，需使用 pip 安装依赖并安装 Chromium 浏览器。 - 所有命令行和程序化用法均变更为 Python 调用方式。 - 代码结构与入口更新，删除了 JS 相关源文件，新增了 Python 包结构文件（如 __init__.py）。 - 认证自动化和文档操作逻辑（如扫码与轮询登录、padId 解析等）已采用 Python/Playwright 实现，支持原有全部功能。 - 示例及文档已全面更新为 Python 语法和流程，明确要求 Python >=3.10。","fileCount":10,"zipByteSize":23280},{"version":"1.1.3","createdAt":"2026-03-25T13:53:13.529Z","changelog":"- Internal code improvements in authentication and API integration. - package.json and source files updated, no user-facing changes. - No new features or breaking changes introduced.","fileCount":9,"zipByteSize":23855},{"version":"1.1.2","createdAt":"2026-03-25T01:59:03.845Z","changelog":"tencent-docs-markdown 1.1.2 - 增加了安全提示，明确警示 .cookies.json 文件包含敏感 Cookie，建议限制权限与避免分享。 - 文档补充“所需配置”说明，强调 Cookie 存储位置及敏感性。 - 强调 Puppeteer 下载 Chromium 并需浏览器自动化权限，建议在受控环境下运行。 - 其他文本描述细节优化，未涉及功能变更。","fileCount":9,"zipByteSize":23598},{"version":"1.1.1","createdAt":"2026-03-25T01:49:41.875Z","changelog":"- Updated trigger phrases to require explicit URLs or clear file references, making intent recognition more precise. - Modified sample phrases for actions like \"下载\", \"读取\", \"删除\", and \"重命名\" to include explicit `https://docs.qq.com/markdown/[xxx]` URLs. - Clarified expected user input format for updating and getting info about documents. - No changes to overall functionality or API; only documentation and user guide improved for clarity. - No breaking changes.","fileCount":9,"zipByteSize":23246},{"version":"1.1.0","createdAt":"2026-03-25T01:25:13.626Z","changelog":"- Added a publish.sh script for streamlined publishing. - Updated dependencies and scripts in package.json. - Made improvements or changes to authentication/cookie logic in src/auth.js.","fileCount":9,"zipByteSize":23014},{"version":"1.0.3","createdAt":"2026-03-25T01:14:48.971Z","changelog":"- 修正 SKILL.md 文件中的技能名称格式（去除名称中的空格）。 - 文档内容无功能改动，仅改变元数据规范。","fileCount":8,"zipByteSize":20751}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17bw1sf2hsjw09jmyh7nhzshn83h2gf:tencent-docs-markdown","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17bw1sf2hsjw09jmyh7nhzshn83h2gf:tencent-docs-markdown` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/wscats/tencent-docs-markdown before using production credentials."],"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-wscats-tencent-docs-markdown/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/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-09T09:17:37.011Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-wscats-tencent-docs-markdown/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":"medium","updatedAt":"2026-10-09T03:48:33.166Z","emptyReason":null},"readme":"Skill: 腾讯文档Markdown\n\nOwner: wscats\n\nSummary: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\nTags: latest:1.1.7\n\nVersion history:\n\nv1.1.7 | 2026-05-02T07:26:08.938Z | auto\n\ntencent-docs-markdown v1.1.7\n\n- 增加本地凭证安全性，`.cookies.json` 保存时自动设置为 0600 权限，并在文档和命令行提示文件敏感性。\n- 新增 `logout` 命令及编程接口（`clear_cookies()`），便于主动清除本地会话凭证。\n- 关键操作（update/delete/rename）新增不可撤销保护，CLI 支持 `-y/--yes` 跳过确认，编程接口需显式 `confirm=True`。\n- `requirements.txt` 运行时依赖增加版本锁定，提升安全性。\n- 更新文档（SKILL.md），详细说明凭证管理、破坏性操作防护、新命令及安全注意事项。\n- 新增 README.md 文件。\n\nv1.1.5 | 2026-03-26T00:48:38.029Z | auto\n\n# 腾讯文档Markdown v1.1.5 Changelog\n\n- 更新依赖配置，提升兼容性与稳定性。\n- package.json 文件有变动。\n\nv1.1.4 | 2026-03-26T00:40:45.745Z | auto\n\n重大变更：技能已从 Node.js/JavaScript 重写为 Python，使用 Playwright 实现自动化。\n\n- 技能内核由 Node.js/JavaScript 切换为 Python 实现，所有功能迁移至 Python 脚本（如 main.py、api.py、auth.py等）。\n- 依赖管理切换为 requirements.txt，需使用 pip 安装依赖并安装 Chromium 浏览器。\n- 所有命令行和程序化用法均变更为 Python 调用方式。\n- 代码结构与入口更新，删除了 JS 相关源文件，新增了 Python 包结构文件（如 __init__.py）。\n- 认证自动化和文档操作逻辑（如扫码与轮询登录、padId 解析等）已采用 Python/Playwright 实现，支持原有全部功能。\n- 示例及文档已全面更新为 Python 语法和流程，明确要求 Python >=3.10。\n\nv1.1.3 | 2026-03-25T13:53:13.529Z | auto\n\n- Internal code improvements in authentication and API integration.\n- package.json and source files updated, no user-facing changes.\n- No new features or breaking changes introduced.\n\nv1.1.2 | 2026-03-25T01:59:03.845Z | auto\n\ntencent-docs-markdown 1.1.2\n\n- 增加了安全提示，明确警示 .cookies.json 文件包含敏感 Cookie，建议限制权限与避免分享。\n- 文档补充“所需配置”说明，强调 Cookie 存储位置及敏感性。\n- 强调 Puppeteer 下载 Chromium 并需浏览器自动化权限，建议在受控环境下运行。\n- 其他文本描述细节优化，未涉及功能变更。\n\nv1.1.1 | 2026-03-25T01:49:41.875Z | auto\n\n- Updated trigger phrases to require explicit URLs or clear file references, making intent recognition more precise.\n- Modified sample phrases for actions like \"下载\", \"读取\", \"删除\", and \"重命名\" to include explicit `https://docs.qq.com/markdown/[xxx]` URLs.\n- Clarified expected user input format for updating and getting info about documents.\n- No changes to overall functionality or API; only documentation and user guide improved for clarity.\n- No breaking changes.\n\nv1.1.0 | 2026-03-25T01:25:13.626Z | auto\n\n- Added a publish.sh script for streamlined publishing.\n- Updated dependencies and scripts in package.json.\n- Made improvements or changes to authentication/cookie logic in src/auth.js.\n\nv1.0.3 | 2026-03-25T01:14:48.971Z | auto\n\n- 修正 SKILL.md 文件中的技能名称格式（去除名称中的空格）。\n- 文档内容无功能改动，仅改变元数据规范。\n\nv1.0.2 | 2026-03-25T01:07:53.524Z | auto\n\n- skill 名称由英文 \"tencent-docs-markdown\" 改为中文 \"腾讯文档 Markdown\"\n- 仅修改了 SKILL.md 文件中的技能名称字段（name）\n- 其余内容、功能、接口未作更改\n\nv1.0.1 | 2026-03-24T15:40:53.884Z | auto\n\n- 文档描述和简介统一表述为“新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作”。\n- 其他内容未见明显变动，仅为表述微调和语言精简，没有影响功能或 API。\n\nv1.0.0 | 2026-03-24T15:25:04.027Z | auto\n\nInitial release of tencent-docs-markdown.\n\n- Supports creating, writing, downloading, deleting, reading, updating, and renaming Tencent Docs Markdown documents.\n- Includes login flow with cookie management via QR code or WeChat quick login.\n- Command-line and programmable interfaces for all features.\n- Automatically resolves real padId for API usage from document URLs.\n- Provides detailed error handling and user guidance for common issues.\n\nArchive index:\n\nArchive v1.1.7: 12 files, 31951 bytes\n\nFiles: package.json (962b), publish.sh (3643b), README.md (8687b), requirements.txt (64b), skill-card.md (2473b), SKILL.md (12079b), src/__init__.py (47b), src/api.py (10254b), src/auth.py (36255b), src/login_with_polling.py (4942b), src/main.py (17228b), _meta.json (140b)\n\nFile v1.1.7:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install -r requirements.txt\nplaywright install chromium\n\n# 2. 登录（使用微信/QQ 扫描二维码）\npython -m src.main login\n\n# 3. 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\npython -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create_and_write\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\npython -m src.main create \"我的新文档\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_download\nresult = handle_download('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md')\n# result: {'path': ..., 'content': ...}\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_read\ncontent = handle_read('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n> **⚠️ 安全提示：** 这是**破坏性操作**。交互模式下会显示目标文档标题与 URL 并要求确认 (`y/N`)。程序化调用须显式传入 `confirm=True`，否则操作会被拒绝。CLI 也可加 `-y/--yes` 跳过提示。\n\n**命令行：**\n```bash\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md -y   # 跳过确认\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_update\nhandle_update('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容', confirm=True)\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n> **⚠️ 安全提示：** 交互模式下会展示目标文档标题与 URL 并要求确认 (`y/N`)。程序化调用须显式传入 `confirm=True`，否则操作会被拒绝。CLI 也可加 `-y/--yes` 跳过提示。\n\n**命令行：**\n```bash\npython -m src.main delete https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main delete https://docs.qq.com/markdown/DQxxxxxxxx -y        # 跳过确认\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_delete\nresult = handle_delete('https://docs.qq.com/markdown/DQxxxxxxxx', confirm=True)\n# result: {'padId': ..., 'title': ..., 'deleted': True}\n```\n\n### 7. 重命名文档\n\n> **⚠️ 安全提示：** 交互模式下会展示原标题、新标题与 URL 并要求确认 (`y/N`)。程序化调用须显式传入 `confirm=True`。\n\n**命令行：**\n```bash\npython -m src.main rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\npython -m src.main rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\" -y  # 跳过确认\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_rename\nhandle_rename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题', confirm=True)\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\npython -m src.main info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_info\ninfo = handle_info('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\npython -m src.main login          # 使用缓存的 Cookies（如有效）\npython -m src.main login --force  # 强制重新登录\n```\n\n### 10. 登出 / 清除 Cookies\n\n删除本地 `.cookies.json` 凭证文件，在不再需要该会话时使用。\n\n**命令行：**\n```bash\npython -m src.main logout\n```\n\n**编程接口：**\n```python\nfrom src.auth import clear_cookies\nclear_cookies()\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n> **🔐 凭证管理：** `.cookies.json` 被明确声明为 **账户级凭证**。保存时会自动应用 POSIX `0600` 权限（仅当前用户可读写），并在终端提示用户其敏感性。**切勿**将此文件提交到版本控制或共享给他人；不再使用时请运行 `python -m src.main logout` 或手动删除。推荐使用专用的自动化账号，而非个人主账号。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── requirements.txt      # Python 依赖\n├── SKILL.md              # 技能定义文件（本文件）\n├── publish.sh            # 版本发布脚本\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── __init__.py       # Python 包初始化\n    ├── main.py           # 主入口 & CLI 命令\n    ├── auth.py           # 扫码登录 & Cookie 管理\n    ├── api.py            # 腾讯文档 Markdown API 客户端\n    └── login_with_polling.py  # 轮询登录脚本\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolve_real_pad_id()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore），保存时自动设置 `0600` 权限\n- **安全提示：** `.cookies.json` 包含敏感的会话 Cookie，其作用等同于账户凭证。请勿提交到版本控制或分享给他人；文件自动设置 `0600` 权限，如需手动重置：`chmod 600 .cookies.json`。不再使用时请运行 `python -m src.main logout` 清除。\n- **破坏性操作保护：** `update` / `delete` / `rename` 均为不可撤销或影响用户文档的操作；它们在执行前会解析并展示目标文档的标题与 URL，交互模式下要求 `y/N` 确认；程序化调用必须显式传入 `confirm=True`，否则操作会被拒绝。\n- **隐私提示：** `download` / `read` 会将文档内容暴露给当前 agent 会话、终端输出或本地文件；请避免对高敏感文档使用这些操作。\n- **依赖版本锁定：** `requirements.txt` 中所有运行时依赖都被锁定到确定版本以减少供应链风险；请在可信任的环境中安装并审查任何依赖更新。\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n- 建议在受控或受信环境中运行此工具，因为 Playwright 会下载 Chromium 并使用浏览器自动化权限\n- **Python 版本要求：** Python >= 3.10\n\n---\n\n## 所需配置\n\n| 配置项 | 路径 | 说明 |\n|--------|------|------|\n| Cookie 存储（凭证） | `.cookies.json`（项目根目录，自动生成） | 存储腾讯文档会话 Cookie 的**账户级凭证文件**。首次登录后自动创建，保存时自动应用 `0600` 权限。**此文件包含敏感信息，请勿泄露；不再使用时请运行 `python -m src.main logout` 或手动删除。**\n\nFile v1.1.7:README.md\n\n# 腾讯文档 Markdown 工具\n\n> 一个用于操作腾讯文档 Markdown 的 Python 工具，支持新建、写入、下载、读取、更新、重命名、删除等操作。\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)\n\n---\n\n## 功能特性\n\n- ✅ **新建文档** — 创建空白 Markdown 文档或新建并直接写入内容\n- ✅ **读取文档** — 获取文档的 Markdown 原始内容\n- ✅ **更新文档** — 覆盖已有文档内容（支持文本或 `.md` 文件）\n- ✅ **下载文档** — 将文档保存为本地 `.md` 文件\n- ✅ **删除文档** — 将文档移入回收站\n- ✅ **重命名文档** — 修改文档标题\n- ✅ **查看文档信息** — 获取文档元数据\n- ✅ **自动登录** — 支持微信/QQ 扫码登录，Cookie 自动缓存复用\n\n---\n\n## 快速开始\n\n### 环境要求\n\n- Python >= 3.10\n\n### 安装\n\n```bash\n# 1. 安装 Python 依赖\npip install -r requirements.txt\n\n# 2. 安装 Playwright 浏览器\nplaywright install chromium\n```\n\n### 登录\n\n首次使用需要扫码登录腾讯文档：\n\n```bash\npython -m src.main login\n```\n\n登录成功后，Cookie 会自动保存到 `.cookies.json`，后续操作无需重复登录。\n\n### 基本使用\n\n```bash\n# 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\"\n\n# 读取文档\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 下载文档到本地\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\npython -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create_and_write\n\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户\n```\n\n### 2. 新建空文档\n\n```bash\npython -m src.main create \"我的新文档\"\n```\n\n```python\nfrom src.main import handle_create\n\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n```bash\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n```python\nfrom src.main import handle_download\n\nresult = handle_download('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md')\n# result: {'path': ..., 'content': ...}\n```\n\n### 4. 读取文档\n\n```bash\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n```python\nfrom src.main import handle_read\n\ncontent = handle_read('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n```bash\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n```python\nfrom src.main import handle_update\n\nhandle_update('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容')\n```\n\n### 6. 删除文档\n\n将文档移入回收站（可恢复）。\n\n```bash\npython -m src.main delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n```python\nfrom src.main import handle_delete\n\nresult = handle_delete('https://docs.qq.com/markdown/DQxxxxxxxx')\n# result: {'padId': ..., 'deleted': True}\n```\n\n### 7. 重命名文档\n\n```bash\npython -m src.main rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n```python\nfrom src.main import handle_rename\n\nhandle_rename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题')\n```\n\n### 8. 获取文档信息\n\n```bash\npython -m src.main info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n```python\nfrom src.main import handle_info\n\ninfo = handle_info('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 9. 登录管理\n\n```bash\npython -m src.main login          # 使用缓存的 Cookies（如有效）\npython -m src.main login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── requirements.txt           # Python 依赖\n├── README.md                  # 项目说明文档（本文件）\n├── SKILL.md                   # Agent 技能定义文件\n├── publish.sh                 # 版本发布脚本\n├── .cookies.json              # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── __init__.py            # Python 包初始化\n    ├── main.py                # 主入口 & CLI 命令\n    ├── auth.py                # 扫码登录 & Cookie 管理\n    ├── api.py                 # 腾讯文档 Markdown API 客户端\n    └── login_with_polling.py  # 轮询登录脚本\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolve_real_pad_id()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 注意事项\n\n- **Python 版本要求：** Python >= 3.10\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 `.gitignore`）\n- **安全提示：** `.cookies.json` 包含敏感的会话 Cookie，请勿提交到版本控制或分享给他人，建议限制其文件权限（如 `chmod 600 .cookies.json`）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n- 建议在受控或受信环境中运行此工具，因为 Playwright 会下载 Chromium 并使用浏览器自动化权限\n\n---\n\n## 许可证\n\n[MIT](LICENSE)\n\nFile v1.1.7:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.7\",\n  \"publishedAt\": 1777706768938\n}\n\nFile v1.1.7:skill-card.md\n\n## Description:\n\n腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[wscats](https://clawhub.ai/user/wscats)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and agents use this skill to create, read, download, update, rename, and delete Tencent Docs Markdown documents from natural-language requests or Python/CLI workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses Tencent Docs account-session cookies and can act with the permissions of that account.\n\nMitigation: Use a dedicated Tencent Docs account where possible, keep .cookies.json private, and run logout to clear saved credentials when work is complete.\n\nRisk: Update, delete, and rename operations can mutate or remove Tencent Docs content.\n\nMitigation: Provide only explicit HTTPS docs.qq.com document URLs and confirm the target document before approving destructive actions.\n\nRisk: The security review notes URL-validation and scoping issues that deserve review before installation.\n\nMitigation: Update the flagged URL-validation behavior before using the skill with sensitive documents.\n\nRisk: Read and download operations expose document content to the current agent session, terminal output, or local files.\n\nMitigation: Avoid using the skill with highly sensitive documents unless the execution environment and output handling are trusted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/wscats/skills/tencent-docs-markdown)\n- [Tencent Docs](https://docs.qq.com)\n- [Tencent Docs desktop](https://docs.qq.com/desktop)\n- [Python](https://www.python.org/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files, Shell commands, Configuration]\n\n**Output Format:** [Markdown content, Tencent Docs URLs, local .md files, status text, and JSON-like command results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Tencent Docs session cookies stored in .cookies.json for authenticated operations.]\n\n## Skill Version(s):\n\n1.1.7 (source: package.json and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.1.7:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.7\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"runtime\": \"python\",\n  \"entrypoint\": \"python -m src.main\",\n  \"scripts\": {\n    \"install\": \"pip install --require-hashes -r requirements.txt 2>/dev/null || pip install -r requirements.txt && playwright install chromium\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"python_dependencies\": {\n    \"requests\": \"==2.32.3\",\n    \"playwright\": \"==1.49.1\",\n    \"click\": \"==8.1.8\",\n    \"Pillow\": \"==11.1.0\"\n  },\n  \"credentials\": {\n    \"cookie_file\": {\n      \"path\": \".cookies.json\",\n      \"description\": \"Tencent Docs session cookies (sensitive). Auto-created on first login.\",\n      \"permissions\": \"0600\",\n      \"gitignored\": true\n    }\n  },\n  \"license\": \"MIT\"\n}\n\nFile v1.1.7:requirements.txt\n\nrequests==2.32.3\nplaywright==1.49.1\nclick==8.1.8\nPillow==11.1.0\n\nArchive v1.1.5: 10 files, 23285 bytes\n\nFiles: package.json (667b), publish.sh (3643b), requirements.txt (64b), SKILL.md (9492b), src/__init__.py (47b), src/api.py (10254b), src/auth.py (33793b), src/login_with_polling.py (4942b), src/main.py (10253b), _meta.json (140b)\n\nFile v1.1.5:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install -r requirements.txt\nplaywright install chromium\n\n# 2. 登录（使用微信/QQ 扫描二维码）\npython -m src.main login\n\n# 3. 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\npython -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create_and_write\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\npython -m src.main create \"我的新文档\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_download\nresult = handle_download('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md')\n# result: {'path': ..., 'content': ...}\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_read\ncontent = handle_read('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_update\nhandle_update('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容')\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\npython -m src.main delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_delete\nresult = handle_delete('https://docs.qq.com/markdown/DQxxxxxxxx')\n# result: {'padId': ..., 'deleted': True}\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\npython -m src.main rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_rename\nhandle_rename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题')\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\npython -m src.main info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_info\ninfo = handle_info('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\npython -m src.main login          # 使用缓存的 Cookies（如有效）\npython -m src.main login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── requirements.txt      # Python 依赖\n├── SKILL.md              # 技能定义文件（本文件）\n├── publish.sh            # 版本发布脚本\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── __init__.py       # Python 包初始化\n    ├── main.py           # 主入口 & CLI 命令\n    ├── auth.py           # 扫码登录 & Cookie 管理\n    ├── api.py            # 腾讯文档 Markdown API 客户端\n    └── login_with_polling.py  # 轮询登录脚本\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolve_real_pad_id()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- **安全提示：** `.cookies.json` 包含敏感的会话 Cookie，请勿提交到版本控制或分享给他人，建议限制其文件权限（如 `chmod 600 .cookies.json`）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n- 建议在受控或受信环境中运行此工具，因为 Playwright 会下载 Chromium 并使用浏览器自动化权限\n- **Python 版本要求：** Python >= 3.10\n\n---\n\n## 所需配置\n\n| 配置项 | 路径 | 说明 |\n|--------|------|------|\n| Cookie 存储 | `.cookies.json`（项目根目录，自动生成） | 存储腾讯文档会话 Cookie，首次登录后自动创建。**此文件包含敏感信息，请勿泄露。** |\n\nFile v1.1.5:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.5\",\n  \"publishedAt\": 1774486118029\n}\n\nFile v1.1.5:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.5\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"runtime\": \"python\",\n  \"entrypoint\": \"python -m src.main\",\n  \"scripts\": {\n    \"install\": \"pip install -r requirements.txt && playwright install chromium\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"python_dependencies\": {\n    \"requests\": \">=2.31.0\",\n    \"playwright\": \">=1.40.0\",\n    \"click\": \">=8.1.0\",\n    \"Pillow\": \">=10.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nFile v1.1.5:requirements.txt\n\nrequests>=2.31.0\nplaywright>=1.40.0\nclick>=8.1.0\nPillow>=10.0.0\n\nArchive v1.1.4: 10 files, 23280 bytes\n\nFiles: package.json (730b), publish.sh (3643b), requirements.txt (64b), SKILL.md (9492b), src/__init__.py (47b), src/api.py (10254b), src/auth.py (33793b), src/login_with_polling.py (4942b), src/main.py (10253b), _meta.json (140b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install -r requirements.txt\nplaywright install chromium\n\n# 2. 登录（使用微信/QQ 扫描二维码）\npython -m src.main login\n\n# 3. 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\npython -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create_and_write\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\npython -m src.main create \"我的新文档\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_download\nresult = handle_download('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md')\n# result: {'path': ..., 'content': ...}\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_read\ncontent = handle_read('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_update\nhandle_update('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容')\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\npython -m src.main delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_delete\nresult = handle_delete('https://docs.qq.com/markdown/DQxxxxxxxx')\n# result: {'padId': ..., 'deleted': True}\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\npython -m src.main rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_rename\nhandle_rename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题')\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\npython -m src.main info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_info\ninfo = handle_info('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\npython -m src.main login          # 使用缓存的 Cookies（如有效）\npython -m src.main login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── requirements.txt      # Python 依赖\n├── SKILL.md              # 技能定义文件（本文件）\n├── publish.sh            # 版本发布脚本\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── __init__.py       # Python 包初始化\n    ├── main.py           # 主入口 & CLI 命令\n    ├── auth.py           # 扫码登录 & Cookie 管理\n    ├── api.py            # 腾讯文档 Markdown API 客户端\n    └── login_with_polling.py  # 轮询登录脚本\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolve_real_pad_id()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- **安全提示：** `.cookies.json` 包含敏感的会话 Cookie，请勿提交到版本控制或分享给他人，建议限制其文件权限（如 `chmod 600 .cookies.json`）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n- 建议在受控或受信环境中运行此工具，因为 Playwright 会下载 Chromium 并使用浏览器自动化权限\n- **Python 版本要求：** Python >= 3.10\n\n---\n\n## 所需配置\n\n| 配置项 | 路径 | 说明 |\n|--------|------|------|\n| Cookie 存储 | `.cookies.json`（项目根目录，自动生成） | 存储腾讯文档会话 Cookie，首次登录后自动创建。**此文件包含敏感信息，请勿泄露。** |\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1774485645745\n}\n\nFile v1.1.4:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.4\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nFile v1.1.4:requirements.txt\n\nrequests>=2.31.0\nplaywright>=1.40.0\nclick>=8.1.0\nPillow>=10.0.0\n\nArchive v1.1.3: 9 files, 23855 bytes\n\nFiles: package.json (730b), publish.sh (3643b), README.md (4774b), SKILL.md (9421b), src/api.js (9537b), src/auth.js (27485b), src/index.js (10979b), src/login-with-polling.js (5151b), _meta.json (140b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- **安全提示：** `.cookies.json` 包含敏感的会话 Cookie，请勿提交到版本控制或分享给他人，建议限制其文件权限（如 `chmod 600 .cookies.json`）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n- 建议在受控或受信环境中运行此工具，因为 Puppeteer 会下载 Chromium 并使用浏览器自动化权限\n\n---\n\n## 所需配置\n\n| 配置项 | 路径 | 说明 |\n|--------|------|------|\n| Cookie 存储 | `.cookies.json`（项目根目录，自动生成） | 存储腾讯文档会话 Cookie，首次登录后自动创建。**此文件包含敏感信息，请勿泄露。** |\n\nFile v1.1.3:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1774446793529\n}\n\nFile v1.1.3:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.3\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.1.2: 9 files, 23598 bytes\n\nFiles: package.json (730b), publish.sh (3643b), README.md (4774b), SKILL.md (9421b), src/api.js (8987b), src/auth.js (27399b), src/index.js (10979b), src/login-with-polling.js (5151b), _meta.json (140b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- **安全提示：** `.cookies.json` 包含敏感的会话 Cookie，请勿提交到版本控制或分享给他人，建议限制其文件权限（如 `chmod 600 .cookies.json`）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n- 建议在受控或受信环境中运行此工具，因为 Puppeteer 会下载 Chromium 并使用浏览器自动化权限\n\n---\n\n## 所需配置\n\n| 配置项 | 路径 | 说明 |\n|--------|------|------|\n| Cookie 存储 | `.cookies.json`（项目根目录，自动生成） | 存储腾讯文档会话 Cookie，首次登录后自动创建。**此文件包含敏感信息，请勿泄露。** |\n\nFile v1.1.2:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1774403943845\n}\n\nFile v1.1.2:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.2\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.1.1: 9 files, 23246 bytes\n\nFiles: package.json (730b), publish.sh (3643b), README.md (4774b), SKILL.md (8850b), src/api.js (8987b), src/auth.js (26633b), src/index.js (10979b), src/login-with-polling.js (5579b), _meta.json (140b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n\nFile v1.1.1:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1774403381875\n}\n\nFile v1.1.1:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.1\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.1.0: 9 files, 23014 bytes\n\nFiles: package.json (730b), publish.sh (3643b), README.md (4774b), SKILL.md (8844b), src/api.js (8418b), src/auth.js (26633b), src/index.js (10505b), src/login-with-polling.js (5579b), _meta.json (140b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"下载腾讯文档到本地\" / \"把这个文档保存到本地\" |\n| **读取** | \"读取这个文档内容\" / \"查看Markdown内容\" |\n| **更新** | \"更新腾讯文档内容\" / \"用本地文件覆盖腾讯文档\" |\n| **删除** | \"删除这个腾讯文档\" / \"帮我删掉这个Markdown\" |\n| **重命名** | \"重命名这个文档为xxx\" |\n| **查看信息** | \"查看文档信息\" / \"获取这个文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n\nFile v1.1.0:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1774401913626\n}\n\nFile v1.1.0:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.0\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.3: 8 files, 20751 bytes\n\nFiles: package.json (570b), README.md (4774b), SKILL.md (8844b), src/api.js (8418b), src/auth.js (24939b), src/index.js (10505b), src/login-with-polling.js (5579b), _meta.json (140b)\n\nFile v1.0.3:SKILL.md\n\n---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"下载腾讯文档到本地\" / \"把这个文档保存到本地\" |\n| **读取** | \"读取这个文档内容\" / \"查看Markdown内容\" |\n| **更新** | \"更新腾讯文档内容\" / \"用本地文件覆盖腾讯文档\" |\n| **删除** | \"删除这个腾讯文档\" / \"帮我删掉这个Markdown\" |\n| **重命名** | \"重命名这个文档为xxx\" |\n| **查看信息** | \"查看文档信息\" / \"获取这个文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n\nFile v1.0.3:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.0.3:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.0.3\",\n  \"publishedAt\": 1774401288971\n}\n\nFile v1.0.3:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.2: 8 files, 20326 bytes\n\nFiles: package.json (570b), README.md (4774b), SKILL.md (8845b), src/api.js (8418b), src/auth.js (23647b), src/index.js (10505b), src/login-with-polling.js (5579b), _meta.json (140b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: 腾讯文档 Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"下载腾讯文档到本地\" / \"把这个文档保存到本地\" |\n| **读取** | \"读取这个文档内容\" / \"查看Markdown内容\" |\n| **更新** | \"更新腾讯文档内容\" / \"用本地文件覆盖腾讯文档\" |\n| **删除** | \"删除这个腾讯文档\" / \"帮我删掉这个Markdown\" |\n| **重命名** | \"重命名这个文档为xxx\" |\n| **查看信息** | \"查看文档信息\" / \"获取这个文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n\nFile v1.0.2:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1774400873524\n}\n\nFile v1.0.2:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}\n\nArchive v1.0.1: 8 files, 20328 bytes\n\nFiles: package.json (570b), README.md (4774b), SKILL.md (8845b), src/api.js (8418b), src/auth.js (23647b), src/index.js (10505b), src/login-with-polling.js (5579b), _meta.json (140b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: tencent-docs-markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"下载腾讯文档到本地\" / \"把这个文档保存到本地\" |\n| **读取** | \"读取这个文档内容\" / \"查看Markdown内容\" |\n| **更新** | \"更新腾讯文档内容\" / \"用本地文件覆盖腾讯文档\" |\n| **删除** | \"删除这个腾讯文档\" / \"帮我删掉这个Markdown\" |\n| **重命名** | \"重命名这个文档为xxx\" |\n| **查看信息** | \"查看文档信息\" / \"获取这个文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\nnpm install\n\n# 2. 登录（使用微信/QQ 扫描二维码）\nnode src/index.js login\n\n# 3. 新建文档并写入内容\nnode src/index.js write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\nnode src/index.js write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreateAndWrite } = require('./src/index');\nconst result = await handleCreateAndWrite('我的文档', '# Hello World\\n这是内容。');\n// result: { docUrl, padId, globalPadId, title }\n// → 将 result.docUrl 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\nnode src/index.js create \"我的新文档\"\n```\n\n**编程接口：**\n```javascript\nconst { handleCreate } = require('./src/index');\nconst result = await handleCreate('我的文档');\n// result: { docUrl, padId, globalPadId, title }\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```javascript\nconst { handleDownload } = require('./src/index');\nconst result = await handleDownload('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md');\n// result: { path, content }\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleRead } = require('./src/index');\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n**命令行：**\n```bash\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n**编程接口：**\n```javascript\nconst { handleUpdate } = require('./src/index');\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容');\n```\n\n### 6. 删除文档\n\n将文档移入回收站。\n\n**命令行：**\n```bash\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleDelete } = require('./src/index');\nconst result = await handleDelete('https://docs.qq.com/markdown/DQxxxxxxxx');\n// result: { padId, deleted: true }\n```\n\n### 7. 重命名文档\n\n**命令行：**\n```bash\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n```\n\n**编程接口：**\n```javascript\nconst { handleRename } = require('./src/index');\nawait handleRename('https://docs.qq.com/markdown/DQxxxxxxxx', '新标题');\n```\n\n### 8. 获取文档信息\n\n**命令行：**\n```bash\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```javascript\nconst { handleInfo } = require('./src/index');\nconst info = await handleInfo('https://docs.qq.com/markdown/DQxxxxxxxx');\n```\n\n### 9. 登录\n\n**命令行：**\n```bash\nnode src/index.js login          # 使用缓存的 Cookies（如有效）\nnode src/index.js login --force  # 强制重新登录\n```\n\n---\n\n## 认证机制\n\n首次使用需扫码登录，之后 Cookie 会缓存在 `.cookies.json` 中自动复用。\n\n支持两种登录方式：\n1. **扫码登录** — 使用微信/QQ 扫描二维码\n2. **微信快捷登录** — 如果之前在当前浏览器已有微信登录记录，系统会自动检测并点击\"微信快捷登录\"按钮，页面显示\"登录中...\"后自动完成登录\n\n```mermaid\nflowchart TD\n    A[开始] --> B{.cookies.json 存在？}\n    B -->|是| C{Cookies 有效？}\n    B -->|否| D[启动浏览器]\n    C -->|是| E[就绪]\n    C -->|否| D\n    D --> F{微信快捷登录可用？}\n    F -->|是| G[点击'微信快捷登录'按钮]\n    G --> H[页面显示'登录中...']\n    H --> I[每10秒轮询检测页面变化]\n    F -->|否| J[展示二维码供扫描]\n    J --> I\n    I --> K{检测到登录成功？}\n    K -->|是| L[获取并验证 Cookies]\n    K -->|否 / 超时| I\n    L --> M[保存 Cookies 到 .cookies.json]\n    M --> E\n```\n\n---\n\n## API 参考\n\n| 接口 | 方法 | 路径 | 关键参数 |\n|------|------|------|----------|\n| 创建文档 | GET | `/cgi-bin/online_docs/createdoc_new` | `doc_type=14`, `create_type=1`, `folder_id=/`, `title`, `xsrf` |\n| 删除文档 | POST | `/cgi-bin/online_docs/doc_delete` | `pad_id`, `domain_id`, `xsrf` |\n| 读取内容 | POST | `/api/markdown/read/data` | `file_id`（globalPadId） |\n| 写入内容 | POST | `/api/markdown/write/data` | `file_id`, `mark_down` |\n| 文档信息 | POST | `/cgi-bin/online_docs/doc_info` | `file_id` |\n| 重命名 | POST | `/cgi-bin/online_docs/doc_changetitle` | `pad_id`, `title`, `xsrf` |\n| 解析真实 padId | GET | 文档页面 HTML | 从 `basicClientVars` 中提取 `padId` |\n\n---\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖与脚本\n├── SKILL.md              # 技能定义文件（本文件）\n├── README.md             # 用户指南\n├── .cookies.json         # 保存的登录 Cookies（自动生成，已加入 .gitignore）\n└── src/\n    ├── index.js          # 主入口 & CLI 命令\n    ├── auth.js           # 扫码登录 & Cookie 管理\n    └── api.js            # 腾讯文档 Markdown API 客户端\n```\n\n---\n\n## 核心概念\n\n### URL 标识符与真实 padId\n\n腾讯文档 Markdown 的 URL 格式为 `https://docs.qq.com/markdown/DSxxxxxxxx`，其中 `DSxxxxxxxx` 是 **URL 标识符**，并非 API 所需的真实 `padId`。\n\n系统通过 `resolveRealPadId()` 函数访问文档页面，从嵌入的 `basicClientVars` JSON 中提取真实的 `padId`，然后拼接为 `globalPadId`（格式：`{domainId}${padId}`）用于 API 调用。\n\n此机制对 **下载（download）**、**读取（read）**、**更新（update）** 操作自动生效，用户无需关注。\n\n---\n\n## 错误处理\n\n| 错误 | 原因 | 解决方案 |\n|------|------|----------|\n| Cookie 过期 | 会话超时 | 自动通过扫码重新登录 |\n| `retcode !== 0` | API 返回错误 | 显示详细错误信息 |\n| 无效 URL | 腾讯文档 URL 格式不正确 | 确保格式为：`https://docs.qq.com/markdown/xxxxx` |\n| 资源不存在 | URL 标识符无法解析为真实 padId | 检查文档是否存在或是否有访问权限 |\n\n---\n\n## 备注\n\n- Markdown 文档类型编号为 `14`（`doc_type=14`）\n- 默认 `domain_id` 为 `300000000`\n- XSRF Token 从 `TOK` Cookie 中提取\n- Cookies 存储在 `.cookies.json` 中（已加入 .gitignore）\n- 删除操作会将文档移至回收站（可恢复）\n- 下载/读取/更新操作会自动解析 URL 中的标识符为真实 padId\n\nFile v1.0.1:README.md\n\n# Tencent Docs Markdown CLI & Agent Skill\n\n> 腾讯文档 Markdown 的命令行工具和 Agent Skill，支持通过自然语言创建、上传、下载、删除、编辑腾讯文档 Markdown 文件。\n\n## 使用方法\n\n### 安装\n\n```bash\nnpm install\n```\n\n### 登录\n\n首次使用需要扫码登录，登录后 Cookie 自动缓存，过期时会自动触发重新登录。\n\n```bash\n# 扫码登录（缓存有效则跳过）\nnode src/index.js login\n\n# 强制重新登录\nnode src/index.js login --force\n```\n\n### 命令行使用\n\n```bash\n# 创建文档\nnode src/index.js create \"我的笔记\"\nnode src/index.js create \"我的笔记\" --content \"# Hello World\"\n\n# 上传本地 .md 文件\nnode src/index.js upload ./my-notes.md\nnode src/index.js upload ./my-notes.md --title \"自定义标题\"\n\n# 下载文档到本地\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx\nnode src/index.js download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n\n# 删除文档（移至回收站）\nnode src/index.js delete https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 查看文档内容\nnode src/index.js read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 更新文档内容\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\nnode src/index.js update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n\n# 重命名文档\nnode src/index.js rename https://docs.qq.com/markdown/DQxxxxxxxx \"新标题\"\n\n# 查看文档信息\nnode src/index.js info https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n### Agent 集成使用\n\n```javascript\nconst {\n  handleCreate,\n  handleUpload,\n  handleDownload,\n  handleDelete,\n  handleRead,\n  handleUpdate,\n  handleRename,\n  handleInfo,\n  handleLogin,\n} = require('./src/index');\n\n// Create\nconst doc = await handleCreate('My Document', '# Hello');\nconsole.log(doc.docUrl); // https://docs.qq.com/markdown/DQxxxxx\n\n// Upload local file\nconst uploaded = await handleUpload('./notes.md');\n\n// Download to local\nconst downloaded = await handleDownload('https://docs.qq.com/markdown/DQxxxxx', './output.md');\n\n// Delete\nawait handleDelete('https://docs.qq.com/markdown/DQxxxxx');\n\n// Read content\nconst content = await handleRead('https://docs.qq.com/markdown/DQxxxxx');\n\n// Update content\nawait handleUpdate('https://docs.qq.com/markdown/DQxxxxx', '# Updated');\n\n// Rename\nawait handleRename('https://docs.qq.com/markdown/DQxxxxx', 'New Title');\n```\n\n## 功能列表\n\n| 功能 | CLI 命令 | 说明 |\n|---|---|---|\n| 🔐 扫码登录 | `login` | 微信/QQ 扫码登录，Cookie 自动缓存 |\n| ➕ 创建文档 | `create <title>` | 创建空白 Markdown 文档 |\n| 📤 上传文件 | `upload <file>` | 上传本地 .md 文件到腾讯文档 |\n| 📥 下载文档 | `download <url>` | 下载腾讯文档到本地 .md 文件 |\n| 🗑️ 删除文档 | `delete <url>` | 删除文档（移至回收站） |\n| 📖 读取内容 | `read <url>` | 读取并显示文档内容 |\n| ✏️ 更新内容 | `update <url> <content>` | 更新文档内容（支持文本或文件路径） |\n| 📝 重命名 | `rename <url> <title>` | 修改文档标题 |\n| ℹ️ 文档信息 | `info <url>` | 获取文档元数据 |\n\n## 认证机制\n\n1. **首次使用**：执行任何操作时会自动检测登录状态\n2. **未登录/过期**：自动打开浏览器显示腾讯文档登录页面\n3. **扫码登录**：使用微信或 QQ 扫描二维码完成登录\n4. **Cookie 缓存**：登录成功后 Cookie 保存到 `.cookies.json`\n5. **自动续期**：每次操作前检测 Cookie 是否有效，过期则重新扫码\n\n```\n操作请求 → 检查 Cookie → 有效 → 执行 API\n                        → 无效 → 打开浏览器 → 扫码登录 → 保存 Cookie → 执行 API\n```\n\n## 技术栈\n\n- **Node.js** - 运行时\n- **Puppeteer** - 浏览器自动化（扫码登录）\n- **Axios** - HTTP 请求\n- **Commander** - CLI 命令解析\n- **Chalk / Ora** - 终端美化输出\n\n## 项目结构\n\n```\ntencent-docs-markdown/\n├── package.json          # 依赖配置\n├── SKILL.md              # Skill 定义文档\n├── README.md             # 使用说明（本文件）\n├── .gitignore            # Git 忽略配置\n├── .cookies.json         # Cookie 缓存（自动生成）\n└── src/\n    ├── index.js          # 主入口 & CLI\n    ├── auth.js           # 登录认证模块\n    └── api.js            # 腾讯文档 API 模块\n```\n\n## 注意事项\n\n- Markdown 文档类型 (`doc_type`) 为 `14`\n- 腾讯文档 URL 格式：`https://docs.qq.com/markdown/xxxxxxxx`\n- 删除操作为移至回收站，可在腾讯文档回收站中恢复\n- Cookie 保存在项目根目录的 `.cookies.json` 中，请勿泄露\n- 需要 Node.js 16+ 和 Chromium（Puppeteer 自动下载）\n\n## License\n\nMIT\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1774366853884\n}\n\nFile v1.0.1:package.json\n\n{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"main\": \"src/index.js\",\n  \"scripts\": {\n    \"start\": \"node src/index.js\",\n    \"login\": \"node src/index.js login\",\n    \"login:force\": \"node src/index.js login --force\"\n  },\n  \"dependencies\": {\n    \"axios\": \"^1.7.0\",\n    \"chalk\": \"^4.1.2\",\n    \"commander\": \"^12.0.0\",\n    \"ora\": \"^5.4.1\",\n    \"puppeteer\": \"^22.0.0\"\n  },\n  \"engines\": {\n    \"node\": \">=16.0.0\"\n  },\n  \"license\": \"MIT\"\n}","readmeExcerpt":"Skill: 腾讯文档Markdown Owner: wscats Summary: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。 Tags: latest:1.1.7 Version history: v1.1.7 | 2026-05-02T07:26:08.938Z | auto tencent-docs-markdown v1.1.7 - 增加本地凭证安全性，.cookies.json 保存时自动设置为 0600 权限，并在文档和命令行提示文件敏感性。 - 新增 logout 命令及编程接口（clear_cookies()），便于主动清除本地会话凭证。 - 关键操作（update/delete/rename）新增不可撤销保护，CLI 支持 -y/--yes 跳过确认，编程接口需显式 confirm=True。 - requirements.txt 运行时依","codeSnippets":[],"executableExamples":[{"language":"mermaid","snippet":"flowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]"},{"language":"bash","snippet":"# 1. 安装依赖\npip install -r requirements.txt\nplaywright install chromium\n\n# 2. 登录（使用微信/QQ 扫描二维码）\npython -m src.main login\n\n# 3. 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\""},{"language":"bash","snippet":"python -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\""},{"language":"python","snippet":"from src.main import handle_create_and_write\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户"},{"language":"bash","snippet":"python -m src.main create \"我的新文档\""},{"language":"python","snippet":"from src.main import handle_create\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: 腾讯文档Markdown\nlicense: MIT\ndescription: 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n---\n\n# 腾讯文档 Markdown 技能\n\n> **名称：** `tencent-docs-markdown`\n> **许可证：** MIT\n> **简介：** 腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\n---\n\n## Agent 如何使用此技能\n\n### 触发短语\n\n当用户表达以下意图时，Agent 应激活此技能：\n\n| 意图 | 示例短语 |\n|------|----------|\n| **新建并写入** | \"新建一个Markdown到腾讯文档并写入内容[xxx]\" / \"帮我新建腾讯文档md，写入以下内容\" / \"上传xxx.md到腾讯文档\" / \"上传xxx.md文档\" / \"同步xxx.md文档\" / \"提交xxx.md文档\" / \"把本地文件同步到腾讯文档\" |\n| **新建空文档** | \"帮我创建名为xxx.md\" / \"新建一个Markdown文档\" |\n| **下载** | \"把https://docs.qq.com/markdown/[xxx]文档保存到本地\" |\n| **读取** | \"读取https://docs.qq.com/markdown/[xxx]文档内容\"|\n| **更新** | \"更新[xxx]到https://docs.qq.com/markdown/[xxx]\" |\n| **删除** | \"删除https://docs.qq.com/markdown/[xxx]\"|\n| **重命名** | \"重命名https://docs.qq.com/markdown/[xxx]文档为xxx\" |\n| **查看信息** | \"获取https://docs.qq.com/markdown/[xxx]文档的详情\" |\n| **登录** | \"登录腾讯文档\" / \"重新登录\" / \"Cookie过期了\" |\n\n### Agent 工作流程\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{Cookies 有效？}\n    B -->|是| C[执行操作]\n    B -->|否| D[通过扫码登录]\n    D --> E[保存 Cookies]\n    E --> C\n    C --> F[返回结果 + 文档链接]\n```\n\n---\n\n## 快速开始\n\n```bash\n# 1. 安装依赖\npip install -r requirements.txt\nplaywright install chromium\n\n# 2. 登录（使用微信/QQ 扫描二维码）\npython -m src.main login\n\n# 3. 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\"\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\npython -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create_and_write\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户\n```\n\n### 2. 新建空文档\n\n创建一个新的空 Markdown 文档。\n\n**命令行：**\n```bash\npython -m src.main create \"我的新文档\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n**命令行：**\n```bash\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_download\nresult = handle_download('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md')\n# result: {'path': ..., 'content': ...}\n```\n\n### 4. 读取文档\n\n读取并返回文档内容。\n\n**命令行：**\n```bash\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_read\ncontent = handle_read('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n> **⚠️ 安全提示：** 这是**破坏性操作**。交互模式下会显示目标文档标题与 URL 并要求确认 (`y/N`)。程序化调用须显式传入 `confirm=True`，否则操作会被拒绝。CLI 也可加 `-y/--yes` 跳过提示。\n\n**命令行：**\n```bash\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\npy"},{"path":"README.md","content":"# 腾讯文档 Markdown 工具\n\n> 一个用于操作腾讯文档 Markdown 的 Python 工具，支持新建、写入、下载、读取、更新、重命名、删除等操作。\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)\n\n---\n\n## 功能特性\n\n- ✅ **新建文档** — 创建空白 Markdown 文档或新建并直接写入内容\n- ✅ **读取文档** — 获取文档的 Markdown 原始内容\n- ✅ **更新文档** — 覆盖已有文档内容（支持文本或 `.md` 文件）\n- ✅ **下载文档** — 将文档保存为本地 `.md` 文件\n- ✅ **删除文档** — 将文档移入回收站\n- ✅ **重命名文档** — 修改文档标题\n- ✅ **查看文档信息** — 获取文档元数据\n- ✅ **自动登录** — 支持微信/QQ 扫码登录，Cookie 自动缓存复用\n\n---\n\n## 快速开始\n\n### 环境要求\n\n- Python >= 3.10\n\n### 安装\n\n```bash\n# 1. 安装 Python 依赖\npip install -r requirements.txt\n\n# 2. 安装 Playwright 浏览器\nplaywright install chromium\n```\n\n### 登录\n\n首次使用需要扫码登录腾讯文档：\n\n```bash\npython -m src.main login\n```\n\n登录成功后，Cookie 会自动保存到 `.cookies.json`，后续操作无需重复登录。\n\n### 基本使用\n\n```bash\n# 新建文档并写入内容\npython -m src.main write \"我的文档\" \"# Hello World\"\n\n# 读取文档\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n\n# 下载文档到本地\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n---\n\n## 功能操作\n\n### 1. 新建并写入文档\n\n新建一个腾讯文档 Markdown，写入内容后返回文档链接。\n\n**命令行：**\n```bash\npython -m src.main write \"我的文档\" \"# Hello World\\n这是我的文档内容。\"\n```\n\n**编程接口：**\n```python\nfrom src.main import handle_create_and_write\n\nresult = handle_create_and_write('我的文档', '# Hello World\\n这是内容。')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n# → 将 result['docUrl'] 分享给用户\n```\n\n### 2. 新建空文档\n\n```bash\npython -m src.main create \"我的新文档\"\n```\n\n```python\nfrom src.main import handle_create\n\nresult = handle_create('我的文档')\n# result: {'docUrl': ..., 'padId': ..., 'globalPadId': ..., 'title': ...}\n```\n\n### 3. 下载文档\n\n将腾讯文档 Markdown 下载为本地 `.md` 文件。\n\n> **注意：** 系统会自动从文档页面解析真实的 `padId`（URL 中的标识符与 API 所需的真实 padId 不同）。\n\n```bash\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx\npython -m src.main download https://docs.qq.com/markdown/DQxxxxxxxx -o ./output.md\n```\n\n```python\nfrom src.main import handle_download\n\nresult = handle_download('https://docs.qq.com/markdown/DQxxxxxxxx', './output.md')\n# result: {'path': ..., 'content': ...}\n```\n\n### 4. 读取文档\n\n```bash\npython -m src.main read https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n```python\nfrom src.main import handle_read\n\ncontent = handle_read('https://docs.qq.com/markdown/DQxxxxxxxx')\n```\n\n### 5. 更新文档\n\n覆盖已有文档的内容（支持直接传入文本或 `.md` 文件路径）。\n\n```bash\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx \"# 新内容\"\npython -m src.main update https://docs.qq.com/markdown/DQxxxxxxxx ./updated.md\n```\n\n```python\nfrom src.main import handle_update\n\nhandle_update('https://docs.qq.com/markdown/DQxxxxxxxx', '# 更新后的内容')\n```\n\n### 6. 删除文档\n\n将文档移入回收站（可恢复）。\n\n```bash\npython -m src.main delete https://docs.qq.com/markdown/DQxxxxxxxx\n```\n\n```python\nfrom src.main import handle_delete\n\nresult = handle_delete('https://docs.qq.com/markdown/DQxxxxxxxx')\n# result: {'padId': ..., 'deleted': True}\n```\n\n### 7. 重命名文档\n\n```bash\npython -m src.main rename https://docs.qq.com/mark"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn78mv1912530wvdbf2vjcd3r982v66j\",\n  \"slug\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.7\",\n  \"publishedAt\": 1777706768938\n}"},{"path":"skill-card.md","content":"## Description:\n\n腾讯文档 Markdown 技能，支持新建 Markdown 并写入内容、下载、删除、读取、更新、重命名等操作。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[wscats](https://clawhub.ai/user/wscats)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and agents use this skill to create, read, download, update, rename, and delete Tencent Docs Markdown documents from natural-language requests or Python/CLI workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses Tencent Docs account-session cookies and can act with the permissions of that account.\n\nMitigation: Use a dedicated Tencent Docs account where possible, keep .cookies.json private, and run logout to clear saved credentials when work is complete.\n\nRisk: Update, delete, and rename operations can mutate or remove Tencent Docs content.\n\nMitigation: Provide only explicit HTTPS docs.qq.com document URLs and confirm the target document before approving destructive actions.\n\nRisk: The security review notes URL-validation and scoping issues that deserve review before installation.\n\nMitigation: Update the flagged URL-validation behavior before using the skill with sensitive documents.\n\nRisk: Read and download operations expose document content to the current agent session, terminal output, or local files.\n\nMitigation: Avoid using the skill with highly sensitive documents unless the execution environment and output handling are trusted.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/wscats/skills/tencent-docs-markdown)\n- [Tencent Docs](https://docs.qq.com)\n- [Tencent Docs desktop](https://docs.qq.com/desktop)\n- [Python](https://www.python.org/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files, Shell commands, Configuration]\n\n**Output Format:** [Markdown content, Tencent Docs URLs, local .md files, status text, and JSON-like command results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires Tencent Docs session cookies stored in .cookies.json for authenticated operations.]\n\n## Skill Version(s):\n\n1.1.7 (source: package.json and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"package.json","content":"{\n  \"name\": \"tencent-docs-markdown\",\n  \"version\": \"1.1.7\",\n  \"description\": \"Tencent Docs Markdown Skill - Create, upload, download, and delete Markdown documents via natural language\",\n  \"runtime\": \"python\",\n  \"entrypoint\": \"python -m src.main\",\n  \"scripts\": {\n    \"install\": \"pip install --require-hashes -r requirements.txt 2>/dev/null || pip install -r requirements.txt && playwright install chromium\",\n    \"publish\": \"./publish.sh\",\n    \"publish:patch\": \"./publish.sh patch\",\n    \"publish:minor\": \"./publish.sh minor\",\n    \"publish:major\": \"./publish.sh major\"\n  },\n  \"python_dependencies\": {\n    \"requests\": \"==2.32.3\",\n    \"playwright\": \"==1.49.1\",\n    \"click\": \"==8.1.8\",\n    \"Pillow\": \"==11.1.0\"\n  },\n  \"credentials\": {\n    \"cookie_file\": {\n      \"path\": \".cookies.json\",\n      \"description\": \"Tencent Docs session cookies (sensitive). Auto-created on first login.\",\n      \"permissions\": \"0600\",\n      \"gitignored\": true\n    }\n  },\n  \"license\": \"MIT\"\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1275,"uniquenessScore":42,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T03:48:33.166Z","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-09T03:48:33.166Z","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-09T09:17:37.013Z","emptyReason":null},"items":[{"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":"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-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","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"}]}}}