Files
new-api-key-usage/AGENTS.md
T
skycurtain e1c6d2153e feat(server): 同步引擎与 seed(阶段 4)
- 引擎:tick(5 分钟 + 防重入 + 启动即跑)· 单轮串行遍历 active key · 日志整批单事务入库(ON CONFLICT DO NOTHING + log_synced_at 取请求发起时刻)· 额度采集(上游字段全组,独立 try)· QPU 采样(基线 / 值变化才追加)· 每轮摘要与超期 warning
- 401 状态机:N=3 摘除(disabled_source=auto_401);403/500/网络不计数;解密失败跳过不计数
- 纯逻辑抽层:policy(计数 / 合并判定)· dedupe(去重键与内容指纹)· log-row(日志映射,与 seed 共用)
- seed 脚本(幂等):假 key + 984 条日志 + QPU 基线 + 示例购买
- 实测:401 端到端 1→2→3 摘除且摘除后不再轮询;幂等重跑新增 0 条
- 实证发现:错误行 request_id 不唯一(8 组 ×3)——记入实施计划「待定问题 #5」与 upstream 文档,待作者裁决
- AGENTS.md / 根 package.json 增 seed 命令
2026-09-15 00:46:46 +08:00

3.1 KiB
Raw Blame History

AGENTS.md

给 AI 协作者的仓库指引。开始任何工作前,先读 README.md——它是全景入口:项目是什么、为什么长这样、走到哪了。

协作约定(长期有效)

  • Git:仅当项目作者明确说"提交 / commit"时才执行提交;git push 永远由项目作者手工执行,AI 绝不推送
  • 命名:需求 / 设计 / 交互 / 技术方案 / 计划等文档名用中文(README / AGENTS / LICENSE 等约定俗成除外)、目录用英文;新文档按性质放入 docs/design/(我们定的方案与决策)或 docs/upstream/(NewAPI 的实证事实,不做设计决策),并同步更新 README 的「文档地图」;docs/deprecated/ 只归档已废弃文档——勿引用、勿作依据
  • 文档状态:头部表格标「状态」(草案 → 讨论中 → 待审阅 → 定稿(日期) → 已实现);设计文档定稿后不搬家、只改状态;被取代时删除(git 历史即考古),尚未入库的历史文档移入 docs/deprecated/
  • 部署:项目作者不接触服务器,一切部署由实例运营方执行;交付物需保证「一条命令链」可跑

项目速览(速记)

  • 针对 NewAPI 平台的 key 用量统计工具;只有 sk-key,没有管理员账号,一切数据走 key 级接口
  • 上游没有任何时间过滤接口 → 轮询 /api/log/token + request_id 去重攒本地库,任一时段用量 = 本地聚合
  • 数据模型四张表:api_keys · usage_logs · purchases · qpu_history(四张表设计均已定稿);四张表各有一篇独立表字段设计文档(docs/design/)
  • 脚手架已落地:前后端独立部署、后端单进程(API + 同步引擎同进程、单实例)

命令

monorepo(Bun workspaces:apps/web · apps/server · packages/shared)——根目录执行:

bun install          # 安装全部依赖(一次搞定)

bun run dev          # 并行起前端(Vite :5173)与后端(Hono :3000)
bun run dev:web      # 只起前端
bun run dev:server   # 只起后端(--hot 热重载)

bun run build        # 构建前端产物(apps/web/dist)
bun run test         # 前端单测(Vitest)
bun run lint         # 前端 lint(oxlint + eslint)
bun run type-check   # 类型检查(vue-tsc + tsc)

bun run db:generate  # 生成 Drizzle 迁移(apps/server/drizzle)
bun run db:migrate   # 执行迁移
bun run db:push      # 直接推 schema(开发期)
bun run seed         # 灌入开发数据(样例快照 → 四张表;幂等,仅本地)
  • 环境变量:复制 .env.example 为 .env 并填值(DATABASE_URL / MANAGE_TOKEN / KEYS_MASTER_KEY / NEWAPI_BASE;离线开发可加 UPSTREAM_SOURCE=fixture 走样例快照,见 docs/design/实施计划.md §6)
  • 目录速记:前端 apps/web/src/{api,router,views} · 后端 apps/server/src/{db,routes,sync,lib} · 契约类型在 packages/shared
  • 开发期前端 /api 由 Vite 代理到 :3000(apps/web/vite.config.ts);生产由同域反代承担(见 README 工程注记)