Skip to content

nocoo/pew

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2,049 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pew

AI 编程工具的 contribution graph
追踪 token 用量 · 可视化消耗趋势 · 排行榜竞技

npm Node License


这是什么

pew 自动从本地 AI 编程工具的日志文件中提取 token 用量数据,聚合后上传至 SaaS 仪表盘,帮你了解每天在 AI 辅助编程上花了多少 token。类似于 GitHub 的 contribution graph,但计数单位是 token 而非 commit。

┌──────────────────────────────────────────────────────────────────┐
│  Local AI Tool Logs (read-only)                                  │
│  Claude Code · Codex · Gemini CLI · GitHub Copilot CLI · Hermes  │
│  Kosmos · OpenCode · OpenClaw · Pi · PM Studio · VS Code Copilot │
└───────────────┬──────────────────────────────────────────────────┘
                │  pew sync (incremental parse)
                ▼
       ParsedDelta[] → 30-min bucket aggregation → QueueRecord[]
                │
                │  upload (idempotent upsert)
                ▼
┌──────────────────────────────────────────────────────────────────┐
│  SaaS Dashboard                                                  │
│  仪表盘 · 模型分析 · 设备追踪 · 会话统计 · 排行榜 · 赛季       │
└──────────────────────────────────────────────────────────────────┘

功能

Token 追踪

  • 11 种 AI 工具 — Claude Code、Codex、Gemini CLI、GitHub Copilot CLI、Hermes、Kosmos、OpenCode、OpenClaw、Pi、PM Studio、VS Code Copilot
  • 四维 token 计数 — 输入 token、缓存命中 token、输出 token、推理 token
  • 增量同步 — 基于字节偏移/数组索引/时间水位的增量解析,不重复计数
  • 幂等上传 — 服务端 upsert 语义,重复上传不会导致数据膨胀

SaaS 仪表盘

  • 多维分析 — 按小时/天、按模型、按设备、按项目查看用量
  • 会话统计 — 消息数、持续时长、工具调用等会话级指标
  • 排行榜 — 公开排行榜 + 赛季系统,与其他开发者比拼
  • 团队协作 — 创建团队,汇总成员用量

自动化

  • 通知钩子pew init 一键安装,AI 工具会话结束后自动触发同步(支持 8 种工具;Hermes、Kosmos、PM Studio 需手动安装插件)
  • 只读设计 — 绝不修改用户的 AI 工具原始日志文件

安装

npm install -g @nocoo/pew

命令一览

命令 说明
pew sync 解析本地 AI 工具用量并上传到仪表盘
pew status 显示同步状态和 token 用量摘要
pew login 通过浏览器 OAuth 连接仪表盘
pew init 为已支持的 AI 工具安装通知钩子(Hermes 除外,需手动安装)
pew uninstall 移除通知钩子
pew reset 清除所有同步/上传状态,准备全量重扫
pew update 从 npm 更新到最新版本

项目结构

pew/
├── packages/
│   ├── core/           # 共享 TypeScript 类型 (@pew/core)
│   ├── cli/            # CLI 工具 (@nocoo/pew, published to npm)
│   ├── web/            # SaaS 仪表盘 (Next.js 16 + App Router)
│   ├── worker/         # Cloudflare Worker — D1 写入
│   └── worker-read/    # Cloudflare Worker — D1 读取
├── docs/               # 设计文档与架构决策记录
├── scripts/            # 发布、E2E、安全扫描脚本
└── .husky/             # Git hooks (pre-commit, pre-push)

技术栈

技术
运行时 & 包管理 Bun
CLI 框架 citty + picocolors
Web 框架 Next.js 16 (App Router)
UI React 19 + Tailwind CSS 4 + Radix UI + Recharts
认证 NextAuth.js v5 (Google OAuth)
数据库 Cloudflare D1 (SQLite)
边缘计算 Cloudflare Workers
类型系统 TypeScript (strict mode)

开发

环境要求: Bun ≥ 1.0, Node.js ≥ 18

# 安装依赖(自动配置 Git hooks)
bun install

# 构建所有包
bun run build

# 启动 Web 开发服务器 (port 7020)
bun run dev
命令 说明
bun run build 构建所有包 (core → cli → web → worker)
bun run dev 启动 Web 开发服务器
bun run test 运行单元测试 (Vitest)
bun run test:coverage 单元测试 + V8 覆盖率(≥ 90% 阈值)
bun run lint TypeScript 类型检查 (5 packages) + ESLint
bun run test:e2e L2 API E2E 测试 (port 17020)
bun run test:e2e:ui L3 BDD E2E 测试 via Playwright (port 27020)
bun run test:security 安全扫描
bun run release 版本发布(bump + changelog + tag)

测试

层级 内容 工具 触发时机
L1 Unit 业务逻辑、解析器、工具函数 Vitest pre-commit
L2 API E2E HTTP 端到端、Worker 集成 Vitest pre-push
L3 BDD E2E 浏览器端用户流程 Playwright pre-push
G1 Static TypeScript strict + ESLint --max-warnings=0 tsc + ESLint pre-push
G2 Security 依赖审计 + 自定义安全规则 scripts/run-security.ts 手动

覆盖率目标 90%(statements / branches / functions / lines),每次 commit 强制检查。

E2E setup

L2 API E2E 和 L3 Browser E2E 都需要 Cloudflare D1 凭据。pre-push hook 会在 缺少 packages/web/.env.localpackages/web/.env.test 时 fail-fast,提示 开发者按下表创建文件。两个文件均不提交到仓库,由开发者本地维护,CI 由 GitHub Secrets 注入。

packages/web/.env.local(生产 D1 + Worker + Auth 凭据)

Key 说明
CF_ACCOUNT_ID Cloudflare 账号 ID
CF_D1_DATABASE_ID 生产 D1 database ID
CF_D1_API_TOKEN D1 REST API token
WORKER_INGEST_URL 生产 ingest Worker URL
WORKER_READ_URL 生产 read Worker URL
WORKER_SECRET ingest Worker 共享密钥
WORKER_READ_SECRET read Worker 共享密钥
AUTH_SECRET NextAuth 会话签名密钥

packages/web/.env.test(测试 D1 隔离,必须与生产不同)

Key 说明
CF_D1_DATABASE_ID_TEST 测试 D1 database ID(与生产不同)
WORKER_INGEST_URL_TEST 测试 ingest Worker URL(与生产不同)
WORKER_READ_URL_TEST 测试 read Worker URL(与生产不同)

scripts/d1-test-guard.ts 在 E2E 启动时强制校验:测试 DB ID ≠ 生产、测试 Worker URL ≠ 生产、测试库有 _test_marker 表。三项任一失败立即终止。

本机运行

bun run test:e2e        # L2 API E2E
bun run test:e2e:ui     # L3 Browser E2E (Playwright)
bun run test:e2e:bdd    # alias of test:e2e:ui

文档

文档 说明
docs/01-plan.md 初始规划
docs/03-data-pipeline.md 数据管线架构
docs/04-sync-resilience.md 同步容错机制
docs/05-token-accounting.md Token 计量规则
docs/06-session-statistics.md 会话统计设计
docs/18-season-system.md 赛季系统
docs/30-quality-system-upgrade.md 质量体系

License

MIT © 2026

About

🦓 The contribution graph for AI-native developers — track and visualize your token usage across coding tools

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages