一个智能的 VSCode 插件,帮助程序员在 AI Coding 场景中避免久坐,保持健康的编码习惯。
- 启动扩展:按
F5键 - 开始编码:在新窗口中编写代码
- 查看状态:观察左下角状态栏显示的编码时长
- 测试 API:按
Ctrl+Shift+I打开开发者工具,在控制台输入:(global as any).sleepSkillsAPI.getSummary()
# 1. 安装依赖
npm install
# 2. 编译代码
npm run compile
# 3. 打包扩展(需要先安装 vsce)
npm install -g @vscode/vsce
vsce package
# 4. 在 VSCode 中安装生成的 .vsix 文件- 自动监听编辑器活动(文档编辑、编辑器切换)
- 精确统计每日编码时长和连续工作时间
- 区分活跃时间和空闲时间(5分钟无活动视为空闲)
基于多维度数据评估疲劳程度(0-100分):
- 连续工作时间(权重 40%)
- 今日总工作时间(权重 30%)
- 休息频率(权重 20%)
- 工作时间段(权重 10%,深夜工作增加疲劳)
疲劳等级:
- 🟢 低疲劳(0-39分):状态良好
- 🟡 中等疲劳(40-59分):建议休息
- 🟠 高疲劳(60-79分):需要休息
- 🔴 严重疲劳(80-100分):强烈建议立即休息
- 多级提醒(信息/警告/严重)
- 防重复提醒(10分钟冷却时间)
- 个性化建议(站立、走动、拉伸、喝水等)
- 番茄工作法模式(25分钟工作 / 5分钟休息)
实时展示:
- 今日编码时长
- 连续工作时间
- 工作会话次数
- 健康提醒次数
- 疲劳指数(带动态进度条)
- 当前状态(工作中/休息中)
提供标准化接口供 AI Agent 调用:
getTodayUsage()- 获取今日使用情况shouldTakeBreak()- 判断是否应该休息getFatigueScore()- 获取疲劳评分getHealthSuggestions()- 获取健康建议getSummary()- 获取统计摘要
npm installnpm run compile- 在 VSCode 中按
F5启动调试 - 在新窗口中开始编码
- 插件会自动追踪你的编码时间
按 Ctrl+Shift+P (Windows/Linux) 或 Cmd+Shift+P (Mac) 打开命令面板:
Sleep Skills: Show Health Dashboard- 显示健康仪表盘Sleep Skills: Take a Break- 手动开始休息Sleep Skills: Reset Today's Stats- 重置今日统计
在 VSCode 设置中搜索 "Sleep Skills":
{
"sleepSkills.reminderInterval": 60, // 连续工作多少分钟后提醒(默认60)
"sleepSkills.strongReminderInterval": 120, // 强提醒间隔(默认120)
"sleepSkills.dailyLimit": 240, // 每日建议编码时长上限(默认240分钟)
"sleepSkills.pomodoroMode": false // 启用番茄工作法模式(默认关闭)
}┌─────────────────────────────────────────────────────────┐
│ VSCode Extension │
│ (监听编辑器事件、用户交互、AI 工具使用) │
└────────────────────┬────────────────────────────────────┘
│
┌────────────┴────────────┐
│ │
┌───────▼────────┐ ┌────────▼─────────┐
│ TimeTracker │ │ StateManager │
│ (时间统计) │◄────►│ (状态管理) │
└───────┬────────┘ └────────┬─────────┘
│ │
└────────┬───────────────┘
│
┌────────▼────────┐
│ FatigueEngine │
│ (疲劳检测引擎) │
└────────┬────────┘
│
┌────────▼────────────┐
│ NotificationScheduler│
│ (提醒调度器) │
└────────┬────────────┘
│
┌────────▼────────┐
│ HealthSkillsAPI │
│ (AI Skills 接口) │
└────────┬────────┘
│
┌────────▼────────┐
│ DataStore │
│ (数据持久化) │
└─────────────────┘
- 监听
onDidChangeTextDocument和onDidChangeActiveTextEditor事件 - 每分钟检查用户活跃状态
- 5分钟无活动视为空闲
- 维护用户当前状态(连续工作时间、今日统计等)
- 管理工作会话(Session)
- 处理休息状态切换
- 多维度疲劳评分算法
- 智能提醒策略
- 番茄工作法支持
- 定时检查疲劳状态
- 显示分级提醒
- 处理用户响应
- 标准化接口设计
- 支持 AI Agent 调用
- 返回结构化数据
- 使用 VSCode globalState 存储
- 自动检测新的一天并重置
- 支持历史数据查询(可扩展)
- Webview 实现
- 实时数据更新(每5秒)
- 响应式设计
// 获取 Skills API 实例
const skillsAPI = (global as any).sleepSkillsAPI;
// 示例1:AI 主动关心用户健康
const usage = skillsAPI.getTodayUsage();
if (usage.data.continuousMinutes > 90) {
console.log("你已经连续工作90分钟了,建议休息一下!");
}
// 示例2:判断是否应该提醒
const shouldBreak = skillsAPI.shouldTakeBreak();
if (shouldBreak.data.shouldBreak) {
console.log(shouldBreak.data.reason);
}
// 示例3:获取疲劳评分
const fatigue = skillsAPI.getFatigueScore();
console.log(`当前疲劳指数:${fatigue.data.score}/100`);
// 示例4:生成健康报告
const summary = skillsAPI.getSummary();
console.log(summary.data);可以将 Skills API 封装为 MCP 工具:
{
"tools": [
{
"name": "get_developer_health_status",
"description": "获取开发者当前健康状态",
"inputSchema": {
"type": "object",
"properties": {}
}
},
{
"name": "suggest_break",
"description": "建议开发者休息",
"inputSchema": {
"type": "object",
"properties": {
"urgency": {
"type": "string",
"enum": ["low", "medium", "high"]
}
}
}
}
]
}// 在 TimeTracker 中添加
vscode.extensions.onDidChange(() => {
// 检测 Copilot、ChatGPT 等扩展的使用
// 调用 skillsAPI.recordAIUsage()
});// 在 FatigueEngine 中扩展
class PersonalizedFatigueEngine extends FatigueEngine {
// 基于用户历史数据学习最佳提醒时机
// 考虑用户的工作习惯、效率曲线等
}// 在 DataStore 中扩展
class CloudDataStore extends DataStore {
// 使用云存储同步多设备数据
// 支持跨设备统计
}// 添加导出功能
export async function exportHealthData(format: 'json' | 'csv') {
// 导出历史数据用于分析
}{
currentSession?: Session;
lastActivityTime: number;
continuousMinutes: number;
todayStats: DailyStats;
lastReminderTime?: number;
isOnBreak: boolean;
}{
date: string;
totalActiveMinutes: number;
codingMinutes: number;
aiUsageMinutes: number;
breakMinutes: number;
sessions: Session[];
fatigueScore: number;
remindersShown: number;
}用户连续编码60分钟 → 插件显示提醒 → 用户选择"休息一下" → 插件显示休息建议 → 用户完成休息 → 重置连续工作时间
用户与 AI 对话 → AI 调用 getTodayUsage() → 发现用户已工作3小时 → AI 主动提醒:"你今天已经工作3小时了,记得休息哦!"
用户启用番茄模式 → 工作25分钟 → 插件提醒休息5分钟 → 自动循环
用户打开仪表盘 → 查看今日统计 → 了解疲劳指数 → 调整工作节奏
欢迎提交 Issue 和 Pull Request!
MIT License
感谢所有关注开发者健康的朋友们!
记住:健康的身体是高效编码的基础! 💪