{"_id":"@adreamleft/opencli-treehole-adapter","_rev":"2-3bbd6f7acc93ce74e7dc4cb4eb16b742","name":"@adreamleft/opencli-treehole-adapter","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@adreamleft/opencli-treehole-adapter","version":"0.1.0","keywords":["opencli","codex","pku","treehole"],"author":{"name":"ADreamLeft"},"license":"MIT","_id":"@adreamleft/opencli-treehole-adapter@0.1.0","maintainers":[{"name":"unerevereste","email":"zhongshanwho@qq.com"}],"homepage":"https://github.com/ADreamLeft/pku-treehole-skill#readme","bugs":{"url":"https://github.com/ADreamLeft/pku-treehole-skill/issues"},"bin":{"opencli-treehole-adapter":"bin/opencli-treehole-adapter.mjs"},"dist":{"shasum":"b9c8d7f1112cbbb5a9182d2fdc754a0fb8f9234d","tarball":"https://registry.npmjs.org/@adreamleft/opencli-treehole-adapter/-/opencli-treehole-adapter-0.1.0.tgz","fileCount":19,"integrity":"sha512-iHGXAYr+THI/JNhQLWOET/HSU62d9mUy3dCy7BuS3CxOONDa70tOnH05bntaFICWFsaZo/p3abdLZ20nXOcM2A==","signatures":[{"sig":"MEQCIB1pvvM2Jv5vct8BDTILcNvQosu4Hgh57f0MWBNraG9OAiBllwwXPV9tIOQoTnVXmCDnS3vUM+64ynJFqTbz4YNDMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66172},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"00d47d2af3d4b8f00889c6d2fd880155616491bc","scripts":{"test":"node --test bin/*.test.mjs opencli/clis/treehole/*.test.js"},"_npmUser":{"name":"unerevereste","email":"zhongshanwho@qq.com"},"repository":{"url":"git+https://github.com/ADreamLeft/pku-treehole-skill.git","type":"git"},"_npmVersion":"11.12.1","description":"Installer for the PKU Treehole OpenCLI adapter and Codex skill assets.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"@jackwener/opencli":"^1.8.2"},"_npmOperationalInternal":{"tmp":"tmp/opencli-treehole-adapter_0.1.0_1780543588032_0.14448611244863652","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@adreamleft/opencli-treehole-adapter","version":"0.1.1","description":"Installer for the PKU Treehole OpenCLI adapter and Codex skill assets.","type":"module","bin":{"opencli-treehole-adapter":"bin/opencli-treehole-adapter.mjs"},"scripts":{"test":"node --test bin/*.test.mjs opencli/clis/treehole/*.test.js"},"keywords":["opencli","codex","pku","treehole"],"author":{"name":"ADreamLeft"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ADreamLeft/pku-treehole-skill.git"},"homepage":"https://github.com/ADreamLeft/pku-treehole-skill#readme","engines":{"node":">=20.0.0"},"devDependencies":{"@jackwener/opencli":"^1.8.2"},"gitHead":"48fb93ae7e05cee59d3f4d97358a7fa8ca0cd9d6","_id":"@adreamleft/opencli-treehole-adapter@0.1.1","bugs":{"url":"https://github.com/ADreamLeft/pku-treehole-skill/issues"},"_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-Ay9cQyT50nzyunr57zWbsVbCt+9jfholakzaO/Oqtf6VritZbmWiwfjTWBWMavWAaiyHDLdI5YevR99kQrLZHQ==","shasum":"9b58f5e33d45bd0de83cf92168bb71bd27416f2b","tarball":"https://registry.npmjs.org/@adreamleft/opencli-treehole-adapter/-/opencli-treehole-adapter-0.1.1.tgz","fileCount":19,"unpackedSize":66448,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDW1Tl83lmp5RxhuywLWua/2xWctxfGt6cS00kCv0fnUAiBvetUaBhSahTDtWk1r2vJ+mhR9DWMedMmn5NnZWe8WTQ=="}]},"_npmUser":{"name":"unerevereste","email":"zhongshanwho@qq.com"},"directories":{},"maintainers":[{"name":"unerevereste","email":"zhongshanwho@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencli-treehole-adapter_0.1.1_1780544148531_0.692401080502286"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-04T03:26:27.810Z","modified":"2026-06-04T03:35:48.833Z","0.1.0":"2026-06-04T03:26:28.176Z","0.1.1":"2026-06-04T03:35:48.670Z"},"bugs":{"url":"https://github.com/ADreamLeft/pku-treehole-skill/issues"},"author":{"name":"ADreamLeft"},"license":"MIT","homepage":"https://github.com/ADreamLeft/pku-treehole-skill#readme","keywords":["opencli","codex","pku","treehole"],"repository":{"type":"git","url":"git+https://github.com/ADreamLeft/pku-treehole-skill.git"},"description":"Installer for the PKU Treehole OpenCLI adapter and Codex skill assets.","maintainers":[{"name":"unerevereste","email":"zhongshanwho@qq.com"}],"readme":"# PKU Treehole Skill\n\n这是一个给 Codex 使用的北大树洞 skill。它只配合 OpenCLI 的 `treehole` adapter 使用，通过 OpenCLI Browser Bridge 复用本机已登录的 Chrome 会话读取树洞页面状态，并可在明确要求时发布纯文字帖子/评论；它不要求输入学号密码，也不要求手动复制 cookie、token、UUID 或 XSRF。\n\n## 能做什么\n\n- 搜索关键词或 `#PID`\n- 浏览最近帖子，按点赞数和回复数筛选\n- 读取单帖详情和回复\n- 查询已知标签 ID\n- 导出筛选结果为 Markdown\n- 发布纯文字树洞帖子，默认 dry-run，需 `--confirm` 才会发送\n- 在帖子下发布纯文字评论，默认 dry-run，需 `--confirm` 才会发送\n\n## 安装\n\n先安装 OpenCLI：\n\n```bash\nnpm install -g @jackwener/opencli\n```\n\n再安装北大树洞 adapter：\n\n```bash\nnpx @adreamleft/opencli-treehole-adapter install\nopencli treehole --help\n```\n\n`opencli treehole --help` 应该能看到 `search`、`latest`、`post`、`tags`、`export-markdown`、`write` 和 `comment`。\n\n把仓库克隆到 Codex skills 目录：\n\n```bash\nmkdir -p ~/.codex/skills\ngit clone https://github.com/ADreamLeft/pku-treehole-skill.git ~/.codex/skills/pku-treehole\n```\n\n然后重启 Codex，或重新加载 skills。\n\n如果 npm/npx 不方便使用，也可以从仓库手动安装 adapter：\n\n```bash\nmkdir -p ~/.opencli/clis/treehole ~/.opencli/node_modules/@jackwener\ncp -R ~/.codex/skills/pku-treehole/opencli/clis/treehole/*.js ~/.opencli/clis/treehole/\ntest -f ~/.opencli/package.json || cp ~/.codex/skills/pku-treehole/opencli/package.json ~/.opencli/package.json\ntest -e ~/.opencli/node_modules/@jackwener/opencli || ln -s \"$(npm root -g)/@jackwener/opencli\" ~/.opencli/node_modules/@jackwener/opencli\nopencli treehole --help\n```\n\n## OpenCLI 准备\n\n需要先安装并配置 OpenCLI，确保 Browser Bridge 扩展已经连接：\n\n```bash\nopencli doctor\n```\n\n如果 Browser Bridge 没有连接，先打开 Chrome，确认扩展可用，然后重启 OpenCLI daemon：\n\n```bash\nopencli daemon restart\nopencli doctor\n```\n\n同时需要在 Chrome 中登录：\n\n```text\nhttps://treehole.pku.edu.cn/web/\n```\n\n如果有多个 Chrome profile 连接到 Browser Bridge，先固定默认 profile：\n\n```bash\nopencli profile list\nopencli profile use <profile>\n```\n\n## 持久会话\n\n推荐使用 OpenCLI 的持久站点会话：\n\n```bash\nopencli treehole search \"数学期末\" --pages 5 --site-session persistent -f json\n```\n\n`persistent` 会让 OpenCLI 复用 `site:treehole` 会话和浏览器中的登录态。它的效果接近本地记住 cookie，但凭据仍留在 Chrome/OpenCLI Browser Bridge 的浏览器上下文里，skill 不会保存学号密码或手动导出的 cookie 文件。\n\n## 直接使用 OpenCLI\n\n常用命令：\n\n```bash\nopencli treehole search \"数学期末\" --pages 5 --site-session persistent -f json\nopencli treehole post 8164148 --all-comments --site-session persistent -f json\nopencli treehole latest --pages 3 --min-likes 5 --min-replies 10 --site-session persistent -f json\nopencli treehole tags -f table\nopencli treehole export-markdown ./treehole.md --keyword \"数学期末\" --pages 5 --site-session persistent -f json\nopencli treehole write \"炒作是什么意思\" -f json\nopencli treehole write \"炒作是什么意思\" --confirm -f json\nopencli treehole comment 8279942 \"莫名其妙的热梗\" --confirm -f json\n```\n\n可查看 adapter 参数：\n\n```bash\nopencli treehole --help\nopencli treehole search --help\nopencli treehole post --help\nopencli treehole write --help\nopencli treehole comment --help\n```\n\n## 在 Codex 中使用\n\n可以直接点名 skill：\n\n```text\nUse $pku-treehole to search \"数学期末\" on PKU Treehole, save raw JSON, and summarize the most relevant posts.\n```\n\n中文也可以：\n\n```text\n用 $pku-treehole 搜索“数学期末”，把原始结果保存到 raw_data/，再整理一个简短总结。\n```\n\n这个 skill 会指导 Codex：\n\n- 先运行 `opencli doctor` 检查 Browser Bridge；\n- 调用 `opencli treehole ... --site-session persistent`；\n- 对需要进一步分析的长帖再读取单帖和全部回复；\n- 对发帖/评论先确认目标和正文；没有 `--confirm` 时只 dry-run；\n- 原始数据和总结分开放置；\n- 保持串行、低频、分批读取，避免大规模抓取。\n\n## 文件结构\n\n```text\n.\n├── SKILL.md\n├── README.md\n├── agents/\n│   └── openai.yaml\n├── opencli/\n│   ├── package.json\n│   └── clis/\n│       └── treehole/\n│           ├── client.js\n│           ├── client.test.js\n│           ├── comment.js\n│           ├── export-markdown.js\n│           ├── latest.js\n│           ├── post.js\n│           ├── search.js\n│           ├── tags.js\n│           ├── utils.js\n│           ├── utils.test.js\n│           └── write.js\n├── references/\n│   ├── api-and-data.md\n│   └── task-templates.md\n```\n\n## 注意事项\n\n- 只用于你有权限访问的树洞内容。\n- 不要发布或转存包含个人隐私的原始帖子、评论或图片。\n- 不要在用户没有明确要求时发布帖子或评论。\n- 不要做并发抓取、长时间刷新或超大规模导出。\n- 不要让 agent、脚本或配置文件保存 PKU 学号密码、手动复制的 cookie、bearer token、UUID 或 XSRF。\n","readmeFilename":"README.md"}