{"id":30880205,"url":"https://github.com/2ue/star-man","last_synced_at":"2026-06-08T16:01:49.622Z","repository":{"id":310974235,"uuid":"1001512581","full_name":"2ue/star-man","owner":"2ue","description":null,"archived":false,"fork":false,"pushed_at":"2025-11-15T17:13:26.000Z","size":409,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-15T18:21:22.474Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/2ue.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-13T14:04:37.000Z","updated_at":"2025-11-15T17:13:26.000Z","dependencies_parsed_at":"2025-10-30T08:25:35.641Z","dependency_job_id":"1f23fcf0-e2bd-405a-ae01-b2376d829451","html_url":"https://github.com/2ue/star-man","commit_stats":null,"previous_names":["2ue/star-tags","2ue/star-man"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/2ue/star-man","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2ue%2Fstar-man","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2ue%2Fstar-man/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2ue%2Fstar-man/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2ue%2Fstar-man/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/2ue","download_url":"https://codeload.github.com/2ue/star-man/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/2ue%2Fstar-man/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34069501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-08T06:48:26.441Z","updated_at":"2026-06-08T16:01:49.617Z","avatar_url":"https://github.com/2ue.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Star Manager\n\n一个现代化的 GitHub Star 管理工具，帮助你高效管理和组织收藏的仓库。支持智能分析、标签管理、增量同步，提供 Web UI、CLI 和 REST API 三种使用方式。\n\n## ✨ 功能特性\n\n- 🌐 **Web 界面**：现代化的 React 应用，直观管理你的 Star 仓库\n- 🔄 **增量同步**：智能增量更新，只处理变化的仓库，节省时间和 API 配额\n- 🏷️ **智能分析**：自动分析仓库类型、技术栈，生成标签和分类\n- 🔍 **强大搜索**：按名称、语言、分类、标签快速筛选\n- 📊 **数据统计**：可视化你的技术栈分布和收藏趋势\n- 🖥️ **多接口支持**：Web UI / CLI / REST API 三种方式任选\n- 💾 **灵活存储**：支持 SQLite（默认）和 MySQL\n- 🐳 **开箱即用**：Docker 镜像一键部署，无需配置环境\n\n## 🏗️ 技术架构\n\n### 整体架构\n\nStar Manager 采用**前后端分离**的现代化架构，由三个核心模块组成：\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                     Star Manager                         │\n├─────────────────────────────────────────────────────────┤\n│                                                           │\n│  ┌───────────┐      ┌───────────┐      ┌───────────┐   │\n│  │  Web UI   │      │    CLI    │      │  REST API │   │\n│  │  (React)  │      │(Commander)│      │ (Express) │   │\n│  └─────┬─────┘      └─────┬─────┘      └─────┬─────┘   │\n│        │                  │                    │         │\n│        └──────────────────┼────────────────────┘         │\n│                           │                              │\n│                    ┌──────▼──────┐                       │\n│                    │  Core Layer │                       │\n│                    │  (Business) │                       │\n│                    └──────┬──────┘                       │\n│                           │                              │\n│                    ┌──────▼──────┐                       │\n│                    │   Database  │                       │\n│                    │   (Prisma)  │                       │\n│                    └─────────────┘                       │\n│                                                           │\n└─────────────────────────────────────────────────────────┘\n```\n\n### 技术栈\n\n**前端 (packages/web)**\n- React 18 + TypeScript 5\n- Vite 5（开发服务器 + 构建工具）\n- Tailwind CSS 3 + DaisyUI 4\n- TanStack Router + TanStack Query\n- Axios（API 请求）\n\n**后端 (packages/api)**\n- Express.js（REST API 服务器）\n- Swagger UI（API 文档）\n- TypeScript 5\n\n**命令行 (packages/cli)**\n- Commander.js（CLI 框架）\n- TypeScript 5\n\n**核心逻辑 (packages/core)**\n- Octokit（GitHub API 客户端）\n- Prisma ORM（数据库抽象层）\n- SQLite / MySQL（数据存储）\n\n**部署方案**\n- Docker（单镜像部署）\n- nginx（生产环境反向代理）\n- GitHub Actions（CI/CD）\n\n### 运行时架构\n\n**开发环境**（前后端分离）\n```\n浏览器 (localhost:3800)\n    │\n    ↓\nVite Dev Server (3800) ─── 代理 ───→ Express API (3801)\n    │                                      │\n    └────── 热重载 ──────┘                 │\n                                           ↓\n                                      Database\n```\n\n**生产环境**（Docker 单镜像）\n```\n浏览器 (localhost:3800)\n    │\n    ↓\nnginx (3800) ─── 静态文件\n    │\n    └─── /api/* ───→ Express API (3801)\n                           │\n                           ↓\n                      Database\n```\n\n## 🚀 快速开始\n\n### 方式一：Docker 部署（推荐）\n\n最快的方式，适合生产环境或快速体验。\n\n#### 1. 使用预构建镜像\n\n我们提供两个镜像源，任选其一：\n\n```bash\n# 从 Docker Hub 拉取（国内推荐）\ndocker pull huby11111/star-man:latest\n\n# 或从 GitHub Container Registry 拉取\ndocker pull ghcr.io/2ue/star-man:latest\n```\n\n📦 **镜像仓库**：\n- Docker Hub: [huby11111/star-man](https://hub.docker.com/r/huby11111/star-man)\n- GHCR: [ghcr.io/2ue/star-man](https://github.com/2ue/star-man/pkgs/container/star-man)\n\n#### 2. 准备环境变量\n\n创建 `.env` 文件：\n\n```env\nGITHUB_TOKEN=ghp_your_github_token_here\nDATABASE_URL=file:/app/data/star-man.db\nAPI_PORT=3801\nAPI_HOST=0.0.0.0\n```\n\n\u003e 💡 **获取 GitHub Token**：\n\u003e 1. 访问 [GitHub Settings → Personal Access Tokens](https://github.com/settings/tokens)\n\u003e 2. 创建新 token，至少需要 `public_repo` 权限\n\u003e 3. 复制 token 到 `.env` 文件\n\n#### 3. 使用 Docker Compose（推荐）\n\n```bash\n# 启动服务\ndocker-compose up -d\n\n# 查看日志\ndocker-compose logs -f\n\n# 停止服务\ndocker-compose down\n```\n\n#### 4. 或使用 Docker 命令\n\n```bash\ndocker run -d \\\n  --name star-man \\\n  -p 3800:3800 \\\n  --env-file .env \\\n  -v $(pwd)/data:/app/data \\\n  huby11111/star-man:latest\n```\n\n#### 5. 访问服务\n\n容器启动后（需 10-30 秒初始化），访问：\n\n- 🌐 **Web 界面**：http://localhost:3800\n- 📚 **API 文档**：http://localhost:3800/api-docs\n- 🏥 **健康检查**：http://localhost:3800/health\n\n---\n\n### 方式二：本地开发\n\n适合开发者进行二次开发或调试。\n\n#### 1. 环境要求\n\n- Node.js \u003e= 18\n- pnpm \u003e= 8\n- GitHub Personal Access Token\n\n#### 2. 一键初始化\n\n```bash\n# 克隆项目\ngit clone https://github.com/2ue/star-man.git\ncd star-man\n\n# 运行初始化脚本\npnpm setup\n```\n\n初始化脚本会自动：\n- ✅ 安装所有依赖\n- ✅ 创建 `.env` 配置文件（需手动填入 GitHub Token）\n- ✅ 生成 Prisma Client\n- ✅ 初始化数据库\n\n#### 3. 配置 GitHub Token\n\n编辑 `.env` 文件，填入你的 GitHub Token：\n\n```env\nGITHUB_TOKEN=ghp_your_github_token_here\nDATABASE_URL=./data/star-man.db\nAPI_PORT=3801\nAPI_HOST=localhost\n```\n\n#### 4. 启动开发服务器\n\n```bash\npnpm dev\n```\n\n这会同时启动：\n- 🌐 **Web 界面**：http://localhost:3800\n- 🔌 **API 服务**：http://localhost:3801\n- 📚 **API 文档**：http://localhost:3801/api-docs\n\n**单独启动**：\n```bash\npnpm dev:web    # 只启动前端\npnpm dev:api    # 只启动后端\npnpm dev:cli    # 只启动 CLI 监听模式\n```\n\n---\n\n### 方式三：CLI 使用\n\n#### 同步 Star 仓库\n\n```bash\n# 增量同步（推荐）\npnpm cli sync\n\n# 完整同步\npnpm cli sync --full\n```\n\n#### 查看统计信息\n\n```bash\n# 基本统计\npnpm cli stats\n\n# 详细统计（包含分类、语言分布）\npnpm cli stats --detailed\n```\n\n#### 列出仓库\n\n```bash\n# 列出前 20 个仓库\npnpm cli list\n\n# 搜索仓库\npnpm cli list --search \"react\"\n\n# 按语言筛选\npnpm cli list --language \"TypeScript\"\n\n# 按分类筛选\npnpm cli list --category \"Frontend\"\n```\n\n#### 更多命令\n\n```bash\npnpm cli --help\n```\n\n## 📖 详细文档\n\n### API 文档\n\n启动服务后访问 Swagger UI：\n- 开发环境：http://localhost:3801/api-docs\n- 生产环境：http://localhost:3800/api-docs\n\n### 主要 API 端点\n\n**仓库相关**\n- `GET /api/repos` - 获取仓库列表（支持分页、筛选、搜索）\n- `GET /api/repos/search?q=keyword` - 搜索仓库\n\n**统计相关**\n- `GET /api/stats` - 获取统计概览\n- `GET /api/stats/categories` - 获取分类统计\n- `GET /api/stats/languages` - 获取语言统计\n\n**同步相关**\n- `POST /api/sync` - 触发同步\n- `GET /api/sync/status` - 获取同步状态\n\n**示例**：\n```bash\n# 获取仓库列表\ncurl \"http://localhost:3800/api/repos?limit=10\"\n\n# 搜索 React 相关仓库\ncurl \"http://localhost:3800/api/repos/search?q=react\"\n\n# 触发增量同步\ncurl -X POST \"http://localhost:3800/api/sync\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"incremental\": true}'\n```\n\n## 📁 项目结构\n\n```\nstar-man/\n├── packages/\n│   ├── web/                     # Web 前端\n│   │   ├── src/\n│   │   │   ├── components/      # React 组件\n│   │   │   ├── routes/          # 路由页面\n│   │   │   └── lib/             # 工具函数\n│   │   └── vite.config.ts       # Vite 配置\n│   │\n│   ├── api/                     # REST API 服务\n│   │   └── src/\n│   │       ├── server.ts        # Express 服务器\n│   │       └── routes/          # API 路由\n│   │\n│   ├── cli/                     # 命令行工具\n│   │   └── src/\n│   │       ├── bin.ts           # CLI 入口\n│   │       └── commands/        # 命令实现\n│   │\n│   └── core/                    # 核心业务逻辑\n│       ├── src/\n│       │   ├── star-manager.ts  # 主管理类\n│       │   ├── github.ts        # GitHub API 封装\n│       │   ├── analyzer.ts      # 仓库智能分析\n│       │   └── database.ts      # 数据库操作\n│       └── prisma/\n│           └── schema.prisma    # 数据库 Schema\n│\n├── .github/workflows/           # GitHub Actions\n├── Dockerfile                   # 生产镜像构建\n├── docker-compose.yml           # Docker Compose 配置\n├── nginx.conf                   # nginx 配置\n└── README.md                    # 本文档\n```\n\n## ⚙️ 配置说明\n\n### 环境变量\n\n| 变量 | 必需 | 说明 | 示例 |\n|------|------|------|------|\n| `GITHUB_TOKEN` | ✅ | GitHub Personal Access Token | `ghp_xxxx` |\n| `DATABASE_URL` | ✅ | 数据库连接字符串 | `./data/star-man.db` |\n| `API_PORT` | ❌ | API 服务端口 | `3801` |\n| `API_HOST` | ❌ | API 监听地址 | `0.0.0.0` |\n\n### 数据库配置\n\n**SQLite（默认，推荐）**\n```env\n# 相对路径（推荐）\nDATABASE_URL=./data/star-man.db\n\n# file: 协议\nDATABASE_URL=file:./data/star-man.db\n```\n\n**MySQL**\n```env\nDATABASE_URL=mysql://user:password@localhost:3306/star_man\n```\n\n## 🔧 开发指南\n\n### 添加新功能\n\n1. **核心逻辑**：在 `packages/core/src/` 实现\n2. **API 接口**：在 `packages/api/src/routes/` 添加路由\n3. **CLI 命令**：在 `packages/cli/src/commands/` 添加命令\n4. **Web 页面**：在 `packages/web/src/routes/` 添加路由\n\n### 数据库操作\n\n```bash\n# 修改 schema 后生成 Prisma Client\npnpm --filter @star-man/core db:generate\n\n# 推送数据库变更（开发环境）\npnpm --filter @star-man/core db:push\n\n# 创建迁移文件（生产环境）\npnpm --filter @star-man/core db:migrate\n```\n\n### 构建和测试\n\n```bash\n# 构建所有包\npnpm build\n\n# 运行测试\npnpm test\n\n# 代码检查\npnpm lint\n```\n\n### 本地构建 Docker 镜像\n\n```bash\n# 构建镜像\ndocker build -t star-man:latest .\n\n# 运行本地镜像\ndocker-compose -f docker-compose.local.yml up -d\n```\n\n## 🔍 故障排查\n\n### Docker 相关\n\n**容器无法启动**\n```bash\n# 查看日志\ndocker-compose logs star-man\n\n# 检查健康状态\ndocker inspect star-man | grep Health\n```\n\n**数据库问题**\n- 确保 `./data` 目录有写权限\n- 检查 `DATABASE_URL` 配置是否正确\n\n### 开发环境\n\n**GitHub API 限制**\n- 未认证：60 次/小时\n- 已认证：5000 次/小时\n- 确保 Token 有 `public_repo` 权限\n\n**端口冲突**\n- Web: 3800\n- API: 3801\n- 修改 `.env` 中的端口配置\n\n**路径问题**\n- 相对路径基于项目根目录解析\n- 启用调试：`DEBUG=1 pnpm cli sync`\n\n## 🚢 部署方案\n\n### Docker Compose（推荐）\n\n```yaml\nservices:\n  star-man:\n    image: huby11111/star-man:latest\n    container_name: star-man\n    restart: unless-stopped\n    ports:\n      - \"3800:3800\"\n    environment:\n      GITHUB_TOKEN: ${GITHUB_TOKEN}\n      DATABASE_URL: file:/app/data/star-man.db\n    volumes:\n      - ./data:/app/data\n```\n\n### 多镜像源\n\n国内用户推荐使用 Docker Hub：\n```bash\ndocker pull huby11111/star-man:latest\n```\n\n国外用户或需要最新版本：\n```bash\ndocker pull ghcr.io/2ue/star-man:latest\n```\n\n## 📊 核心特性详解\n\n### 增量同步算法\n\n- **首次同步**：获取所有 Star 仓库\n- **增量同步**：只处理变化的仓库（新增/取消）\n- **数据保留**：取消的 Star 标记为 `isStarred: false`，不删除\n- **批量优化**：事务批量插入，减少数据库操作\n\n### 智能分析系统\n\n自动分析每个仓库：\n- **编程语言**：基于 GitHub API\n- **仓库分类**：Frontend、Backend、Mobile、DevOps、Tools 等\n- **自动标签**：根据 name、description、topics 生成\n- **流行度评分**：综合 stars、forks、watchers\n\n## 📄 许可证\n\nMIT License - 详见 [LICENSE](./LICENSE) 文件\n\n## 🤝 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n### 贡献步骤\n\n1. Fork 本仓库\n2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 创建 Pull Request\n\n## 📈 更新日志\n\n查看 [Releases](https://github.com/2ue/star-man/releases) 获取完整更新历史。\n\n### v0.0.3 (2025-11-04)\n- ✨ 优化 Docker 发布流程\n- ✨ 自动创建 GitHub Release\n- 🐳 发布到 Docker Hub 和 GHCR\n\n### v0.0.2 (2025-11-04)\n- 🐛 修复 Docker 镜像命名问题\n- 🔧 修复 ESLint 配置\n\n## 🔗 相关链接\n\n- 📖 [详细文档](./docs/README.md)\n- 🐛 [问题反馈](https://github.com/2ue/star-man/issues)\n- 🐳 [Docker Hub](https://hub.docker.com/r/huby11111/star-man)\n- 📦 [GitHub Packages](https://github.com/2ue/star-man/pkgs/container/star-man)\n\n---\n\n**Made with ❤️ by [2ue](https://github.com/2ue)**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2ue%2Fstar-man","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F2ue%2Fstar-man","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F2ue%2Fstar-man/lists"}