English | 中文
🔥 工作轨迹记录与分析系统
┌─────────────────────────────────────────────────────────────────┐
│ 客户端 (本地) │
├─────────────────────┬───────────────────────────────────────────┤
│ Agent (CLI) │ Chrome Extension │
│ 监控本地代码变更 │ 监控浏览器活动 │
│ 携带 UUID 上报 │ 携带 UUID 上报 │
└─────────┬───────────┴───────────────────┬───────────────────────┘
│ HTTP + UUID │
▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ Server (本地/云端) │
│ 用户认证 + 数据接收 + 存储 + 生成报表 │
└─────────────────────────────────────────────────────────────────┘
- 用户体系: 管理员和普通用户,数据隔离
- 代码变更统计: Agent 监控 Git 仓库,智能去重上报
- 网站活动追踪: Chrome 扩展记录浏览活动,支持域名白名单
- 工作时长分析: 自动计算工作时长和加班时长
- 可视化报表: 多维度数据展示与分析
- 配置云同步: Agent/扩展从服务端同步配置
- Node.js >= 18
- pnpm >= 8
- Docker & Docker Compose(生产部署)
git clone https://github.com/your-username/anti-work.git
cd anti-work
pnpm install一键启动 Server + Web 前端:
pnpm dev或使用脚本(自动初始化数据库):
./scripts/dev.sh启动后访问:http://localhost:5173
端口说明:
5173- 前端开发服务器(Vite 热更新,API 自动代理到 3000)3000- 后端 API 服务(开发时无需直接访问)也可分别启动:
pnpm dev:server- 仅启动服务端pnpm dev:web- 仅启动前端
首次访问会自动跳转到初始化页面:
- 开发环境: http://localhost:5173
- 生产环境: http://localhost:3000
- 输入管理员用户名(默认
admin) - 设置密码(至少8位)
- 确认密码
- 点击「创建管理员账号」
登录后台 → 用户管理 → 创建用户 → 复制 UUID
UUID 用于 Agent 和 Chrome 扩展上报数据时标识用户
pnpm build:extension输出目录:packages/extension/dist
安装到 Chrome:
- 打开
chrome://extensions/ - 开启「开发者模式」
- 点击「加载已解压的扩展程序」
- 选择
packages/extension/dist目录
pnpm build:agent启动 Agent:
cd packages/agent
node dist/index.js start --uuid YOUR_UUID --watch ~/projectscd docker
cp .env.example .env编辑 .env 文件,必须修改以下配置:
# JWT 密钥(必须修改!)
JWT_SECRET=your-super-secure-random-string
# MySQL 密码(建议修改)
MYSQL_ROOT_PASSWORD=your-root-password
MYSQL_PASSWORD=your-db-password# 从项目根目录执行
pnpm docker:start
# 或直接执行脚本
./scripts/docker-start.sh脚本会自动:
- 检查 Docker 环境
- 创建
.env配置(如不存在) - 构建 Docker 镜像
- 启动服务(Server + MySQL)
访问 http://localhost:3000,创建管理员账号。
cd docker
# 查看日志
docker compose logs -f
# 停止服务
docker compose down
# 重启服务
docker compose restart
# 查看状态
docker compose psAgent 运行在本地,监控代码变更并上报到服务端,使用 PM2 进程管理。
./scripts/install-agent.sh --uuid YOUR_UUID或通过 npm:
pnpm agent:install -- --uuid YOUR_UUID带服务器地址:
./scripts/install-agent.sh --uuid YOUR_UUID --server http://your-server:3000参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
--uuid, -u |
用户 UUID(必填) | - |
--server, -s |
服务器地址 | http://localhost:3000 |
注意: 监控目录从服务端配置获取。请在服务端「用户管理」→「用户设置」中配置
watchPaths
# 查看状态
pm2 status
# 查看日志
pm2 logs anti-work-agent
# 停止服务
pm2 stop anti-work-agent
# 启动服务
pm2 start anti-work-agent
# 重启服务
pm2 restart anti-work-agent
# 删除服务
pm2 delete anti-work-agentpm2 startup
pm2 savecd packages/agent
pnpm build
node dist/index.js start --uuid YOUR_UUID --server http://your-server:3000pnpm extension:build或使用脚本:
./scripts/build-extension-prod.sh- 打开 Chrome 浏览器
- 访问
chrome://extensions/ - 开启右上角「开发者模式」
- 点击「加载已解压的扩展程序」
- 选择目录:
packages/extension/dist
- 点击 Chrome 工具栏的 Anti-Work 扩展图标
- 填写配置:
- 服务器地址: 你的服务端地址(如
http://your-server:3000) - 用户 UUID: 在服务端用户管理页面获取的 UUID
- 服务器地址: 你的服务端地址(如
- 点击「保存配置」
- 状态显示「已连接」表示配置成功
| 命令 | 说明 |
|---|---|
pnpm dev |
启动开发环境(Server + Web) |
pnpm dev:server |
仅启动 Server |
pnpm dev:web |
仅启动 Web 前端 |
pnpm build |
构建所有模块 |
pnpm build:extension |
构建 Chrome 扩展 |
pnpm build:agent |
构建 Agent |
| 命令 | 说明 |
|---|---|
pnpm db:generate |
生成 Prisma Client |
pnpm db:push |
推送数据库结构 |
pnpm db:migrate |
执行数据库迁移 |
pnpm db:seed |
填充测试数据 |
| 命令 | 说明 |
|---|---|
pnpm docker:start |
Docker 一键部署 |
pnpm agent:install |
Agent 一键安装 |
pnpm extension:build |
构建 Chrome 扩展(生产) |
anti-work/
├── packages/
│ ├── server/ # 服务端 (Fastify + Prisma)
│ ├── agent/ # 本地 Agent (CLI)
│ ├── web/ # 前端 (React + Vite + TailwindCSS)
│ └── extension/ # Chrome 扩展 (MV3)
├── scripts/ # 运行脚本
│ ├── dev.sh # 开发环境启动
│ ├── build-extension.sh # 构建 Chrome 扩展
│ ├── build-agent.sh # 构建 Agent
│ ├── docker-start.sh # Docker 一键部署
│ ├── install-agent.sh # Agent 一键安装
│ └── build-extension-prod.sh # 生产构建 Chrome 扩展
├── config/ # 服务端配置
├── docker/ # Docker 部署文件
│ ├── docker-compose.yml # MySQL 版本(默认)
│ ├── docker-compose.sqlite.yml # SQLite 版本(备选)
│ ├── Dockerfile # MySQL 版本
│ └── Dockerfile.sqlite # SQLite 版本
├── .env.example # 环境变量模板
└── package.json
| 变量 | 说明 | 默认值 |
|---|---|---|
SERVER_PORT |
服务器端口 | 3000 |
SERVER_HOST |
服务器地址 | 0.0.0.0 |
DATABASE_URL |
数据库连接 | file:./data/anti-work.db |
JWT_SECRET |
JWT 密钥 | change-this-in-production |
JWT_EXPIRES_IN |
JWT 过期时间 | 7d |
AUTH_ENABLED |
是否启用认证 | false |
| 变量 | 说明 | 默认值 |
|---|---|---|
SERVER_PORT |
服务端口 | 3000 |
JWT_SECRET |
JWT 密钥 | 必须修改 |
MYSQL_ROOT_PASSWORD |
MySQL root 密码 | rootpassword |
MYSQL_DATABASE |
数据库名 | antiwork |
MYSQL_USER |
数据库用户 | antiwork |
MYSQL_PASSWORD |
数据库密码 | antiwork |
TZ |
时区 | Asia/Shanghai |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| watchPaths | 监控目录列表 | [] |
| pollInterval | 扫描间隔(秒) | 300 |
| excludePatterns | 排除模式 | node_modules, .git 等 |
| domainWhitelist | 域名白名单 | [](空表示全部) |
| domainBlacklist | 域名黑名单 | [] |
| sanitizePatterns | 脱敏正则 | [] |
| workTimeStart | 上班时间 | 09:00 |
| workTimeEnd | 下班时间 | 18:00 |
| lunchStart | 午休开始 | 12:00 |
| lunchEnd | 午休结束 | 14:00 |
| 角色 | 权限 |
|---|---|
| 管理员 | 查看所有用户数据、用户管理、自己也可上报数据 |
| 普通用户 | 只能查看自己的数据、配置自己的设置 |
| 场景 | 方式 |
|---|---|
| 后台登录 | 用户名 + 密码 → JWT |
| Agent/扩展上报 | HTTP Header X-User-UUID |
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/auth/status | 检查系统是否已初始化 |
| POST | /api/auth/setup | 初始化管理员账号(仅首次可用) |
| POST | /api/auth/login | 登录 |
| GET | /api/auth/me | 获取当前用户信息 |
| PUT | /api/auth/password | 修改密码 |
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/users | 用户列表 |
| POST | /api/users | 创建用户 |
| PUT | /api/users/:id | 更新用户 |
| PUT | /api/users/:id/disable | 禁用/启用用户 |
| DELETE | /api/users/:id | 删除用户 |
| GET | /api/users/:uuid/config | 获取用户配置(Agent/扩展用) |
| 方法 | 路径 | Header | 描述 |
|---|---|---|---|
| POST | /api/track/code | X-User-UUID | 上报代码变更 |
| POST | /api/track/web | X-User-UUID | 上报网站活动 |
| POST | /api/track/web/batch | X-User-UUID | 批量上报网站活动 |
| 方法 | 路径 | 参数 | 描述 |
|---|---|---|---|
| GET | /api/stats/today | userId? | 今日概览 |
| GET | /api/stats/daily | date?, userId? | 日报统计 |
| GET | /api/stats/weekly | week?, userId? | 周报统计 |
| GET | /api/stats/monthly | month?, userId? | 月报统计 |
| GET | /api/stats/overtime | start?, end?, userId? | 加班统计 |
| GET | /api/stats/web-activities | start?, end?, domain?, userId? | 网站活动详情 |
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/config/me | 获取自己的配置 |
| PUT | /api/config/me | 更新自己的配置 |
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/repos | 仓库列表 |
| GET | /api/repos/:name | 仓库详情 |
# 清除 Agent 本地状态
rm -rf ~/.anti-work
# 重置数据库(会清空所有数据)
cd packages/server
pnpm db:push --force-reset重置数据库后,再次访问 Web 页面会自动跳转到初始化页面重新设置管理员账号。
- 服务端: Node.js, Fastify, Prisma, JWT
- Agent: Node.js, Commander, simple-git, node-cron
- 前端: React, Vite, TailwindCSS, Recharts, React Query
- 扩展: Chrome Extension MV3
- 数据库: SQLite / MySQL
MIT




