Skip to content

cadeeper/anti-work

Repository files navigation

English | 中文

Anti-Work

🔥 工作轨迹记录与分析系统

架构概览

┌─────────────────────────────────────────────────────────────────┐
│                        客户端 (本地)                             │
├─────────────────────┬───────────────────────────────────────────┤
│   Agent (CLI)       │         Chrome Extension                  │
│   监控本地代码变更    │         监控浏览器活动                     │
│   携带 UUID 上报     │         携带 UUID 上报                    │
└─────────┬───────────┴───────────────────┬───────────────────────┘
          │           HTTP + UUID          │
          ▼                               ▼
┌─────────────────────────────────────────────────────────────────┐
│                     Server (本地/云端)                           │
│         用户认证 + 数据接收 + 存储 + 生成报表                      │
└─────────────────────────────────────────────────────────────────┘

功能特性

  • 用户体系: 管理员和普通用户,数据隔离
  • 代码变更统计: Agent 监控 Git 仓库,智能去重上报
  • 网站活动追踪: Chrome 扩展记录浏览活动,支持域名白名单
  • 工作时长分析: 自动计算工作时长和加班时长
  • 可视化报表: 多维度数据展示与分析
  • 配置云同步: Agent/扩展从服务端同步配置

📸 截图预览

首页仪表盘

实时展示今日工作概览,包括代码提交、网站访问等关键指标 首页仪表盘

代码活动统计

按仓库、时间维度分析代码变更情况,追踪开发进度 代码活动统计

网站活动追踪

记录浏览器访问历史,支持域名过滤和时间范围查询 网站活动追踪

工作时长分析

可视化工作时间分布,自动识别有效工作时段 工作时长分析

加班统计

精确统计加班时长,支持按日/周/月维度查看 加班统计

前置要求

  • Node.js >= 18
  • pnpm >= 8
  • Docker & Docker Compose(生产部署)

🔧 开发调试

1. 克隆并安装依赖

git clone https://github.com/your-username/anti-work.git
cd anti-work
pnpm install

2. 启动开发环境

一键启动 Server + Web 前端:

pnpm dev

或使用脚本(自动初始化数据库):

./scripts/dev.sh

启动后访问:http://localhost:5173

端口说明

  • 5173 - 前端开发服务器(Vite 热更新,API 自动代理到 3000)
  • 3000 - 后端 API 服务(开发时无需直接访问)

也可分别启动:

  • pnpm dev:server - 仅启动服务端
  • pnpm dev:web - 仅启动前端

3. 初始化管理员账号

首次访问会自动跳转到初始化页面:

  1. 输入管理员用户名(默认 admin
  2. 设置密码(至少8位)
  3. 确认密码
  4. 点击「创建管理员账号」

4. 获取 UUID

登录后台 → 用户管理 → 创建用户 → 复制 UUID

UUID 用于 Agent 和 Chrome 扩展上报数据时标识用户

5. 构建 Chrome 扩展(开发)

pnpm build:extension

输出目录:packages/extension/dist

安装到 Chrome:

  1. 打开 chrome://extensions/
  2. 开启「开发者模式」
  3. 点击「加载已解压的扩展程序」
  4. 选择 packages/extension/dist 目录

6. 构建 Agent(开发)

pnpm build:agent

启动 Agent:

cd packages/agent
node dist/index.js start --uuid YOUR_UUID --watch ~/projects

🚀 生产部署

服务端:Docker 部署(推荐)

步骤 1:配置环境变量

cd 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

步骤 2:一键启动

# 从项目根目录执行
pnpm docker:start

# 或直接执行脚本
./scripts/docker-start.sh

脚本会自动:

  1. 检查 Docker 环境
  2. 创建 .env 配置(如不存在)
  3. 构建 Docker 镜像
  4. 启动服务(Server + MySQL)

步骤 3:初始化系统

访问 http://localhost:3000,创建管理员账号。

常用命令

cd docker

# 查看日志
docker compose logs -f

# 停止服务
docker compose down

# 重启服务
docker compose restart

# 查看状态
docker compose ps

本地Agent:安装 Agent(客户端)

Agent 运行在本地,监控代码变更并上报到服务端,使用 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 常用命令

# 查看状态
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-agent

开机自启动(可选)

pm2 startup
pm2 save

手动启动(调试用)

cd packages/agent
pnpm build
node dist/index.js start --uuid YOUR_UUID --server http://your-server:3000

网页端:安装 Chrome 扩展

步骤 1:构建扩展

pnpm extension:build

或使用脚本:

./scripts/build-extension-prod.sh

步骤 2:安装到 Chrome

  1. 打开 Chrome 浏览器
  2. 访问 chrome://extensions/
  3. 开启右上角「开发者模式」
  4. 点击「加载已解压的扩展程序」
  5. 选择目录:packages/extension/dist

步骤 3:配置扩展

  1. 点击 Chrome 工具栏的 Anti-Work 扩展图标
  2. 填写配置:
    • 服务器地址: 你的服务端地址(如 http://your-server:3000
    • 用户 UUID: 在服务端用户管理页面获取的 UUID
  3. 点击「保存配置」
  4. 状态显示「已连接」表示配置成功

📋 命令速查表

开发调试

命令 说明
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

⚙️ 配置说明

环境变量 (.env)

变量 说明 默认值
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

Docker 环境变量 (docker/.env)

变量 说明 默认值
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

📡 API 文档

认证接口

方法 路径 描述
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/扩展用)

数据上报(需 UUID)

方法 路径 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

📄 License

MIT

About

工作轨迹记录与分析系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors