😴 Sleep Skills - 开发者健康管理助手
一个智能的 VSCode 插件,帮助程序员在 AI Coding 场景中避免久坐,保持健康的编码习惯。
🎯 如何使用?
方式 1:快速体验(推荐)
- 启动扩展:按
F5 键
- 开始编码:在新窗口中编写代码
- 查看状态:观察左下角状态栏显示的编码时长
- 测试 API:按
Ctrl+Shift+I 打开开发者工具,在控制台输入:
(global as any).sleepSkillsAPI.getSummary()
方式 2:安装到正式环境
# 1. 安装依赖
npm install
# 2. 编译代码
npm run compile
# 3. 打包扩展(需要先安装 vsce)
npm install -g @vscode/vsce
vsce package
# 4. 在 VSCode 中安装生成的 .vsix 文件
✨ 核心功能
1. 智能时间追踪
- 自动监听编辑器活动(文档编辑、编辑器切换)
- 精确统计每日编码时长和连续工作时间
- 区分活跃时间和空闲时间(5分钟无活动视为空闲)
2. 疲劳检测引擎
基于多维度数据评估疲劳程度(0-100分):
- 连续工作时间(权重 40%)
- 今日总工作时间(权重 30%)
- 休息频率(权重 20%)
- 工作时间段(权重 10%,深夜工作增加疲劳)
疲劳等级:
- 🟢 低疲劳(0-39分):状态良好
- 🟡 中等疲劳(40-59分):建议休息
- 🟠 高疲劳(60-79分):需要休息
- 🔴 严重疲劳(80-100分):强烈建议立即休息
3. 智能提醒系统
- 多级提醒(信息/警告/严重)
- 防重复提醒(10分钟冷却时间)
- 个性化建议(站立、走动、拉伸、喝水等)
- 番茄工作法模式(25分钟工作 / 5分钟休息)
4. 可视化仪表盘
实时展示:
- 今日编码时长
- 连续工作时间
- 工作会话次数
- 健康提醒次数
- 疲劳指数(带动态进度条)
- 当前状态(工作中/休息中)
5. AI Skills API
提供标准化接口供 AI Agent 调用:
getTodayUsage() - 获取今日使用情况
shouldTakeBreak() - 判断是否应该休息
getFatigueScore() - 获取疲劳评分
getHealthSuggestions() - 获取健康建议
getSummary() - 获取统计摘要
🚀 快速开始
安装依赖
npm install
编译项目
npm 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 │
│ (数据持久化) │
└─────────────────┘
📦 核心模块说明
1. TimeTracker(时间统计模块)
- 监听
onDidChangeTextDocument 和 onDidChangeActiveTextEditor 事件
- 每分钟检查用户活跃状态
- 5分钟无活动视为空闲
2. StateManager(状态管理模块)
- 维护用户当前状态(连续工作时间、今日统计等)
- 管理工作会话(Session)
- 处理休息状态切换
3. FatigueEngine(疲劳检测引擎)
4. NotificationScheduler(提醒调度器)
5. HealthSkillsAPI(Skills API)
- 标准化接口设计
- 支持 AI Agent 调用
- 返回结构化数据
6. DataStore(数据持久化)
- 使用 VSCode globalState 存储
- 自动检测新的一天并重置
- 支持历史数据查询(可扩展)
7. DashboardPanel(可视化面板)
- Webview 实现
- 实时数据更新(每5秒)
- 响应式设计
🧠 AI Skills 集成示例
在 AI 对话中使用
// 获取 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);
MCP 集成(未来扩展)
可以将 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"]
}
}
}
}
]
}
🔧 可扩展点
1. AI 使用行为感知
// 在 TimeTracker 中添加
vscode.extensions.onDidChange(() => {
// 检测 Copilot、ChatGPT 等扩展的使用
// 调用 skillsAPI.recordAIUsage()
});
2. 个性化提醒策略
// 在 FatigueEngine 中扩展
class PersonalizedFatigueEngine extends FatigueEngine {
// 基于用户历史数据学习最佳提醒时机
// 考虑用户的工作习惯、效率曲线等
}
3. 多设备同步
// 在 DataStore 中扩展
class CloudDataStore extends DataStore {
// 使用云存储同步多设备数据
// 支持跨设备统计
}
4. 健康数据导出
// 添加导出功能
export async function exportHealthData(format: 'json' | 'csv') {
// 导出历史数据用于分析
}
📊 数据结构
UserState
{
currentSession?: Session;
lastActivityTime: number;
continuousMinutes: number;
todayStats: DailyStats;
lastReminderTime?: number;
isOnBreak: boolean;
}
DailyStats
{
date: string;
totalActiveMinutes: number;
codingMinutes: number;
aiUsageMinutes: number;
breakMinutes: number;
sessions: Session[];
fatigueScore: number;
remindersShown: number;
}
🎯 使用场景
场景1:长时间编码
用户连续编码60分钟 → 插件显示提醒 → 用户选择"休息一下" → 插件显示休息建议 → 用户完成休息 → 重置连续工作时间
场景2:AI 对话中关心健康
用户与 AI 对话 → AI 调用 getTodayUsage() → 发现用户已工作3小时 → AI 主动提醒:"你今天已经工作3小时了,记得休息哦!"
场景3:番茄工作法
用户启用番茄模式 → 工作25分钟 → 插件提醒休息5分钟 → 自动循环
场景4:查看健康仪表盘
用户打开仪表盘 → 查看今日统计 → 了解疲劳指数 → 调整工作节奏
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License
🙏 致谢
感谢所有关注开发者健康的朋友们!
记住:健康的身体是高效编码的基础! 💪