{"_id":"@alanwalk/ones-fetch","_rev":"2-c7d3773ff98e35acebfb040a029d9474","name":"@alanwalk/ones-fetch","dist-tags":{"latest":"2.1.0"},"versions":{"2.0.0":{"name":"@alanwalk/ones-fetch","version":"2.0.0","keywords":["ones","task","crawler","project-management"],"author":"","license":"MIT","_id":"@alanwalk/ones-fetch@2.0.0","maintainers":[{"name":"alanwalk","email":"alanwalk@qq.com"}],"bin":{"ones-fetch":"bin/cli.mjs"},"dist":{"shasum":"9106a801771d7c33255f1c1a7311a4c4e163404e","tarball":"https://registry.npmjs.org/@alanwalk/ones-fetch/-/ones-fetch-2.0.0.tgz","fileCount":10,"integrity":"sha512-5UtN3J1o7FieQ/X9FPuSRPDj4oC2GlUbYBg2L01DNKlwdaN7dpmI3jLkZVXiu0MyTMDYKFdm1eiuf+Es0/N6RA==","signatures":[{"sig":"MEUCIQDM4SAnFxRHfGuO/U7YFGsKF6rBxIu1aTcu6SoUUx+VgwIgEpR2vmg1rzEQ18AeR2gBas3YFxageNSllo5xVAt09Dg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":352688},"type":"module","gitHead":"aad6a43043db43185d2ea44a2ebb814a31d40469","scripts":{"dev":"node --watch src/server.mjs","start":"node src/server.mjs"},"_npmUser":{"name":"alanwalk","email":"alanwalk@qq.com"},"_npmVersion":"11.6.4","description":"ONES Fetch — Web app for recursive ONES subtask crawling","directories":{},"_nodeVersion":"24.11.1","dependencies":{"playwright-core":"^1.58.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ones-fetch_2.0.0_1776067376758_0.5483905886261593","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@alanwalk/ones-fetch","version":"2.1.0","type":"module","description":"ONES Fetch — Web app for recursive ONES subtask crawling","bin":{"ones-fetch":"bin/cli.mjs"},"scripts":{"start":"node src/server.mjs","dev":"node --watch src/server.mjs"},"dependencies":{"playwright-core":"^1.58.2"},"keywords":["ones","task","crawler","project-management"],"author":"","license":"MIT","publishConfig":{"access":"public"},"gitHead":"952e6993b379ad9265f89a4db4eec2a199ff3fc6","_id":"@alanwalk/ones-fetch@2.1.0","_nodeVersion":"24.11.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-1DSNRKbTMj2ogY+1Tsuyhq28QNTgsnzm42fA+g/t5XIsR2tziEfMFJm6xqYvo2ZeJJBnJX/hDwFG+DOWwN077Q==","shasum":"3ae9ea1c2f5c25b57eafbb325ca8d407a46cfdd4","tarball":"https://registry.npmjs.org/@alanwalk/ones-fetch/-/ones-fetch-2.1.0.tgz","fileCount":10,"unpackedSize":354218,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD4Sx3BbK3dD10QSpRLA0C6SeWT/GaDsmMS43yMvqwzMQIgOuCHoNctoQCVXAn6NkYscdkiiThMdXz3ef5v9aQf6G4="}]},"_npmUser":{"name":"alanwalk","email":"alanwalk@qq.com"},"directories":{},"maintainers":[{"name":"alanwalk","email":"alanwalk@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ones-fetch_2.1.0_1776070475018_0.3329701643321046"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-13T08:02:56.681Z","modified":"2026-04-13T08:54:35.373Z","2.0.0":"2026-04-13T08:02:56.948Z","2.1.0":"2026-04-13T08:54:35.265Z"},"license":"MIT","keywords":["ones","task","crawler","project-management"],"description":"ONES Fetch — Web app for recursive ONES subtask crawling","maintainers":[{"name":"alanwalk","email":"alanwalk@qq.com"}],"readme":"# ONES 子任务采集工具\n\n一个本地 Web 工具，用浏览器界面批量解析 ONES 任务链接或任务编号，并递归抓取所有子任务。\n\n## 快速安装（推荐）\n\n策划电脑上已有 Node.js，执行一条命令即可：\n\n```bash\nnpx @alanwalk/ones-fetch@latest install\n```\n\n或者使用 npm 安装：\n\n```bash\nnpm install -g @alanwalk/ones-fetch\n```\n\n这会自动：\n- 安装依赖（约 30MB，仅首次需要）\n- 在桌面创建快捷方式\n- 完成后双击桌面图标即可使用\n\n**注意**：\n- 依赖只需安装一次，后续启动无需重新安装\n- 解析任务时会显示实时进度（1/7）\n\n---\n\n## 环境要求\n\n- Node.js 18+\n- Chrome 或 Edge 浏览器（系统已安装）\n- 可访问的 ONES 租户 URL\n\n## 手动安装\n\n```bash\ngit clone <repo-url>\ncd ones-fetch\nnpm install\n```\n\n---\n\n## 使用方法\n\n### 方式 1：双击启动（推荐给非技术用户）\n\n**Windows 用户：**\n- 双击桌面 `ones-fetch.lnk`\n- 浏览器会自动打开工具页面\n- Windows 启动入口已改为 `launch.cmd`，不再依赖 VBS\n- 如果双击没有反应，请重新执行一次 `npx @alanwalk/ones-fetch@latest install` 以刷新启动器\n- 启动器日志在 `~/.ones-fetch/logs/launcher.log`\n- 服务运行日志在 `~/.ones-fetch/logs/runtime.log`\n\n### 方式 2：命令行启动\n\n```bash\nnpm start\n# 或开发模式（自动重启）\nnpm run dev\n```\n\n启动后会自动打开浏览器访问 `http://localhost:36781`。\n\n### 方式 3：命令行管理后台服务\n\n```bash\nones-fetch start\nones-fetch status\nones-fetch stop\nones-fetch restart\n```\n\n- `start` 会在后台启动本地服务，并自动打开浏览器\n- `status` 会显示服务状态、PID 和访问地址\n- `stop` 会停止由 `ones-fetch start` 启动的后台实例\n- `restart` 会先停止再重新启动后台实例\n\n### 使用流程\n\n1. **首次使用 - 连接 ONES**\n   - 页面会提示\"连接 ONES\"\n   - 点击后会打开浏览器登录页\n   - 登录完成后，系统会自动捕获认证信息和 team-id\n\n2. **粘贴任务文本**\n   - 支持粘贴完整 ONES 任务链接\n   - 也支持直接粘贴 `#90182|#90183` 这种编号文本\n   - 页面会自动提取任务编号并递归抓取所有子任务\n\n3. **查看结果**\n   - 任务列表会显示所有子任务\n   - 包含任务编号、标题、状态、负责人、截止日期等信息\n\n---\n\n## 技术说明\n\n### 认证机制\n\n- 首次登录时，系统会启动浏览器窗口\n- 自动从页面 URL 提取 team-id（格式：`/team/{uuid}/...`）\n- 认证信息保存在 `~/.ones-fetch/credentials.json`（权限 600）\n- 令牌过期时会提示重新登录\n\n### Web API\n\n服务提供以下接口：\n\n| 方法 | 路径 | 说明 |\n|---|---|---|\n| `GET` | `/` | Web UI 首页 |\n| `GET` | `/api/auth/status` | 当前认证状态 |\n| `POST` | `/api/auth/login` | 启动浏览器登录采集 |\n| `POST` | `/api/crawl` | 批量采集接口 |\n\n**`/api/crawl` 请求格式：**\n\n```json\n{\n  \"taskIds\": [\"90182\", \"90183\", \"HM6gttraKPOVnrdy\"],\n  \"baseUrl\": \"https://your-team.ones.cn\",\n  \"teamId\": \"<team-uuid>\"\n}\n```\n\n**响应格式：**\n\n```json\n{\n  \"roots\": [\"<uuid1>\", \"<uuid2>\"],\n  \"tasks\": [\n    { \"uuid\": \"...\", \"root_uuid\": \"<uuid1>\", \"number\": \"...\", \"summary\": \"...\", ... },\n    ...\n  ]\n}\n```\n\n错误时返回 `401`（需要登录或令牌过期）或 `500`（采集失败）。\n\n---\n\n## 环境变量\n\n可选的环境变量：\n\n| 变量 | 说明 |\n|---|---|\n| `PORT` | 服务端口（默认 36781） |\n| `ONES_BASE_URL` | ONES 基础 URL |\n| `ONES_TEAM_ID` | 团队 UUID（通常自动检测） |\n\n---\n\n## 本地凭证文件\n\n| 路径 | 用途 |\n|---|---|\n| `~/.ones-fetch/credentials.json` | 登录时保存的认证令牌（权限 600） |\n\n---\n\n## 项目结构\n\n```\nones-fetch/\n├── bin/\n│   └── install.mjs     # 安装依赖及快捷方式\n├── src/\n│   ├── server.mjs      # HTTP 服务器和任务爬取逻辑\n│   └── auth.mjs        # 浏览器登录和凭证管理\n├── public/\n│   └── index.html      # Web UI 界面\n└── package.json\n```\n","readmeFilename":"README.md"}