@@ -6,30 +6,32 @@
| 项目 | 内容 |
|------|------|
| 当前状态 | **实现推进中 ** ——设计文档主体定稿;后端 + 同步引擎 + 前端(管理面与成员视图)已落地;部署链已定(见 [`docs/design/部署方案.md` ](docs/design/部署方案.md ));CFW 衍生形态 待做 |
| 当前状态 | **实现推进中 ** ——设计文档主体定稿;后端 + 同步引擎 + 前端(管理面与成员视图)已落地;部署链已定(见 [`docs/design/部署方案.md` ](docs/design/部署方案.md ));Cloudflare Workers 抽取版 待做 |
| 技术栈 | 全栈 TypeScript(选型见 [`docs/design/技术选型.md` ](docs/design/技术选型.md )):Bun + Hono + Drizzle + PostgreSQL · 前端 Vue 3 + antdv-next |
## 这是什么
面向 [NewAPI ](https://github.com/QuantumNous/new-api ) 实例的**独立计费辅助平台**: 作者购买订阅额度后, 创建多个 sk- API key 分发给多名使用者分摊成本。平台只提供**事实服务** ——用量、来源标注、支付参数、多维统计;**不算「谁该付谁多少钱」**(分摊是人和人之间的事)。
面向 [NewAPI ](https://github.com/QuantumNous/new-api ) 实例的**独立计费辅助平台**: 订阅持有人 创建多个 sk- API key 分发给多名使用者,平台把「谁用了多少」的事实记录清楚 ——用量、来源标注、支付参数、多维统计;**不算「谁该付谁多少钱」**(分摊是人和人之间的事)。
**适用场景 ** :同一份订阅额度由多人共享的小团队 / 成本分担群体。
- 名字直述用途:NewAPI 网关下按 key 查询用量(key usage);产品展示名 NAKU
- 全场景 统一小写 kebab-case:仓库名 / 包名一致
- 仓库名 / 包名 统一小写 kebab-case
## 背景与约束
- 真实 场景:NewAPI( Go + GORM 开源 LLM 网关)实例提供订阅服务,多使用者通过分发 API key 共享订阅额度——**非商业,纯成本分担**
- 项目作者是该 实例的**普通用户**:只有 sk-key,**没有实例管理员账号**
- 一切数据获取只能走 key 级接口(账号级接口用 sk-key 访问会 401)
- 交付 形态为**双形态并行**:完整前后端部署在实例运营方提供的服务器上(作者不接触服务器)+ Cloudflare Workers 抽取版部署在作者自控 账号(见 [`docs/design/需求清单.md` ](docs/design/需求清单.md ) R13)
- 典型 场景:NewAPI( Go + GORM 开源 LLM 网关)实例提供订阅服务,多名 使用者通过分发 API key 共享订阅额度——**非商业,纯成本分担**
- 平台持有方通常只是 实例的**普通用户**:只有 sk-key,**没有实例管理员账号**
- 一切数据获取只能走 key 级接口(账号级接口用 sk-key 访问会 401)——这是整个数据链路的设计前提
- 部署 形态为**双形态并行**:完整前后端跑在自有或托管服务器上(见 [ `docs/design/部署方案.md` ]( docs/design/部署方案.md )); Cloudflare Workers 抽取版部署在自己掌控的 账号里 (见 [`docs/design/需求清单.md` ](docs/design/需求清单.md ) R13)
**双形态并行的动因 ** :服务器部署形态下,每次迭代都需实例运营方手工升级;部署到作者自控的 Cloudflare 账号后, 迭代部署权回到作者 手里。母体 完整前后端先行,Workers 抽取版延后至功能全集实现后。
**双形态并行的动因 ** :服务器部署形态下,每次迭代都要经服务器管理员手工升级;Workers 形态把 迭代部署权收回自己 手里。完整前后端先行,抽取版延后至功能全集实现后。
## 核心能力
| # | 能力 | 说明 |
|---|------|------|
| 1 | key 用量查询 | 按时间范围查模型请求日志与用量;作者 全员视角在管理面总览,成员视角在成员视图 |
| 1 | key 用量查询 | 按时间范围查模型请求日志与用量;管理端 全员视角,成员端各自视角 |
| 2 | key 登记 | 管理通道手动登记:入库并加入轮询;生命周期为手动启停(引擎只读 `status` ) |
| 3 | 支付事实登记 | 订阅权益与充值入账分表登记;`billing_domain` 标账本域,成员同域可见 |
| 4 | 多维统计 | 按成员 / key / 计费来源 / 模型的任意时段聚合 |
@@ -150,6 +152,7 @@ docker compose ps # migrate 应为 exited(0),其余 running/healthy
- 命名与分区:**目录用英文、文档名用中文**;`docs/design/` (方案与决策)· `docs/references/` (平台可用接口参考——实证事实,不做设计决策)
- 生命周期:状态流转(草案 → 讨论中 → 待审阅 → 定稿(日期) → 已实现);定稿后不搬家、只改状态;被取代时删除(git 历史即考古)
- AI 协作物料:[`AGENTS.md` ](AGENTS.md )(协作约定)与 `.agents/skills/` (技能包)随仓库分发——参与开发的 Agent 从这里读取项目约定,人工贡献者亦可参考
## 关键事实清单(实测 / 源码确认,设计时不得违反)
@@ -161,3 +164,9 @@ docker compose ps # migrate 应为 exited(0),其余 running/healthy
4. **1000 条硬上限 ** :窗口只保留最近 1000 条——当前日志速率下约等于 3 天;同步停摆超过窗口会永久丢数据
5. * * `TokenAuthReadOnly` **:用量/日志接口用宽松鉴权,key 过期 / 额度耗尽仍可查询;**显式禁用会被 401 拒绝**
6. * * `DisplayTokenStatEnabled` 已开启**: billing 接口返回 token 级额度
## License
[MIT ](LICENSE ) © 2026 skycurtain
NAKU 是 NewAPI 的**独立客户端**,仅通过 HTTP API 交互,不包含其源码;与上游许可证相互独立。上游 NewAPI 为 AGPL-3.0,本项目不受其传染,亦不衍生自它。