Files
zhuiguang-ai/.trae/specs/modules/07-lib-and-scripts.md
T

111 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工具库与脚本模块
## 工具库 (`src/lib/`)
### src/lib/github.ts (GitHub数据采集)
- 依赖: octokit
- 认证: process.env.GITHUB_TOKEN (可选,提升限流60→5000次/小时)
- `searchHotRepos(query, minStars, maxResults)`: 搜索热门仓库,按Star降序
- `getRepoReadme(owner, repo)`: 获取仓库README内容(base64解码)
- `GitHubRepo` 接口: id, full_name, html_url, description, stargazers_count, forks_count, language, license, topics, updated_at, readme
### src/lib/deepseek.ts (DeepSeek评测生成)
- 依赖: openai (兼容OpenAI接口)
- 认证: process.env.DEEPSEEK_API_KEY
- baseURL: https://api.deepseek.com/v1
- 模型: deepseek-v4-pro
- `generateReview(repoName, description, stars, license, readme)`: 调用DeepSeek生成五维评测
- `ReviewDimension` 接口: { score, summary, detail }
- `ReviewResult` 接口: capability, devExp, costLicense, community, performance, overall, tags
- 综合分校验: 自动计算五维均分,偏差>0.3时修正
- JSON提取: 兼容markdown代码块包裹的响应
### prisma.ts - 数据库客户端
- Prisma单例模式,防止开发环境热重载创建多实例
- 使用PrismaMariaDb adapter
- 连接池配置
### auth.ts - 认证配置
- NextAuth配置导出
- Credentials Provider(管理员+用户)
- JWT策略
- GitHub OAuth Provider
- 导出GET/POST handler
### admin-auth.ts - 管理员API认证
- 导出 `requireAdmin()` 中间件函数
- 验证session中邮箱是否为admin@zhuiguang.ai
- 所有 `/api/admin/` 路由必须使用此中间件
- 返回401/403错误响应
### utils.ts - 工具函数
- `cn()`: 合并clsx + tailwind-merge的className工具
### logo-fetcher.ts - Logo抓取引擎
- 导出 `fetchLogo(websiteUrl, html?): Promise<string>` — 返回Logo URL
- 导出 `fetchLogoWithMethod(websiteUrl, html?): Promise<LogoFetchResult>` — 返回 `{url, method}`
- 10种抓取策略按优先级执行
- 支持从SystemConfig读取配置
- 每种成功方法返回中文名称(如"HTML Link图标"、"OG/Twitter图片"等)
- 详见 [05-ai-discovery.md](./05-ai-discovery.md)
### logo-storage.ts - Logo本地存储
- 导出 `downloadLogo(url, filename): Promise<string>`
- 下载远程Logo到 `/public/logos/` 目录
- 返回本地路径如 `/logos/filename.png`
---
## 脚本 (`scripts/`)
### discover-skills.mjs - AI技能发现
- 独立运行的Node.js脚本
- 遍历20个技能分类,每类调用DeepSeek API推荐10个GitHub开源项目
- 通过 `/api/admin/pending-skills/batch` 批量导入
- 自动排除已收录技能
- 每分类间隔3秒
- 运行: `node scripts/discover-skills.mjs`
### import-tools-batch1.mjs - 第一批工具导入
- 硬编码约80个国产AI工具
- 分类: 文本生成(165)/图像生成(174)/视频生成(183)/音频与语音(191)
### import-tools-batch2.mjs - 第二批工具导入
- 硬编码约200个国产AI工具
- 分类: 代码开发/AI Agent/办公效率/设计创意/营销SEO/数据分析/教育学习/搜索信息/安全合规/医疗健康/金融法律/电商零售/3D游戏/科学研究/模型框架/聊天机器人
---
## 运维脚本
### scripts/auto-review.mjs (自动化评测脚本)
- 依赖: @prisma/client, @prisma/adapter-mariadb, octokit, openai
- 流程: GitHub搜索→README获取→DeepSeek评测→Skill入库→SkillReview入库→日志记录
- 配置: SEARCH_QUERIES(4个关键词), MIN_STARS(500), MAX_PER_QUERY(5), DAILY_LIMIT(8)
- 去重: 通过sourceUrl检查
- slug生成: repo full_name转小写+连字符
- 默认分类ID: 120 (AI/ML工程)
- 运行: `$env:NODE_TLS_REJECT_UNAUTHORIZED="0"; node scripts/auto-review.mjs`
### scripts/publish-reviews.mjs (发布评测脚本)
- 将DRAFT状态SkillReview改为PUBLISHED
- 将对应draft状态Skill改为published
### scripts/test-github.mjs (GitHub API测试)
- 测试searchHotRepos和getRepoReadme功能
- 运行: `$env:NODE_TLS_REJECT_UNAUTHORIZED="0"; node -r dotenv/config scripts/test-github.mjs`
### scripts/test-deepseek.mjs (DeepSeek API测试)
- 测试generateReview功能,使用langflow作为测试用例
- 运行: `$env:NODE_TLS_REJECT_UNAUTHORIZED="0"; node scripts/test-deepseek.mjs`
### restart.ps1 - 服务重启
- PowerShell脚本
- 扫描8301-8310端口
- 杀死占用进程
- 执行 `npm run dev` 启动服务(端口8301)
- 运行: `pwsh -ExecutionPolicy Bypass -File restart.ps1`
### temp_clear.mjs - 临时清理
- 清空pending_tools表