Skill: joeyoung310/ai-companion-diet (version 1.0.1)

--- name: ai-companion-diet version: 1.0.0 title: AI智能陪伴减肥助手 description: 基于热量差=目标步数的核心理念，通过定时提醒、饮食打卡、步数督促、数据分析、激励机制陪伴用户健康减肥。支持8+16断食、加餐记录、平台期解释、体重趋势预测和多轮对话优化。 author: joe runtime: bash tags: - health - fitness - weight-loss - diet - ai-companion - productivity dependencies: [] --- # AI智能陪伴减肥助手 ## 功能概述 这是一个专为健康减肥设计的AI陪伴技能，通过科学的热量差计算、智能提醒机制和数据分析，帮助用户建立健康的生活习惯。 ## 核心功能 ### 1. 热量差智能计算 - 基于用户基础数据（身高、体重、年龄、性别）计算基础代谢率（BMR） - 结合活动系数计算每日总能量消耗（TDEE） - 自动计算目标热量差和对应所需步数 - 支持8+16断食模式时间规划 ### 2. 定时提醒机制 - 早餐提醒（7:30-8:30） - 午餐提醒（11:30-12:30） - 晚餐提醒（17:30-18:30） - 步数督促提醒（10:00、15:00、20:00） - 睡前总结提醒（22:00） ### 3. 饮食打卡与分析 - 支持拍照识别食物热量 - 支持手动输入食物名称和重量 - 自动计算每餐热量和营养成分 - 生成每日营养摄入分析报告 - 支持加餐记录和统计 ### 4. 体重管理与趋势分析 - 自动记录每日体重数据 - 生成体重趋势图表 - 平台期智能识别与解释 - 基于历史数据预测减重趋势 - 计算BMI并给出健康建议 ### 5. 激励机制 - 每日达成目标后的正向反馈 - 周度总结与进步表彰 - 连续打卡奖励机制 - 个性化鼓励话语生成 ## 使用方法 ### 开始使用 ```bash # 初始化用户基础数据 init-user-data # 开始今日减肥计划 start-daily-plan ``` ### 日常操作 ```bash # 记录早餐 record-breakfast "食物描述" [重量] # 记录午餐 record-lunch "食物描述" [重量] # 记录晚餐 record-dinner "食物描述" [重量] # 记录加餐 record-snack "食物描述" [重量] # 记录今日步数 record-steps 步数 # 记录今日体重 record-weight 体重(kg) # 查看今日总结 daily-summary ``` ### 数据分析 ```bash # 查看体重趋势 weight-trend # 查看本周分析 weekly-analysis # 查看平台期分析 plateau-analysis # 预测减重趋势 predict-weight-loss ``` ## 配置说明 ### 用户基础数据配置 用户需要提供以下基础数据以获得更精准的计算： - 性别 - 年龄 - 身高（cm） - 初始体重（kg） - 目标体重（kg） - 日常活动水平（久坐/轻度/中度/重度） ### 提醒时间配置 可根据用户作息调整提醒时间，支持自定义提醒频率。 ## 数据存储 - 用户基础数据：`user_data.json` - 每日记录：`daily_records/{YYYYMMDD}.json` - 体重历史：`weight_history.json` - 步数历史：`steps_history.json` ## 注意事项 1. 本技能提供的减肥建议仅供参考，不构成医疗建议 2. 如有特殊健康状况，请在医生指导下使用 3. 建议每周减重不超过0.5-1kg，避免过度节食 4. 充足的睡眠和水分摄入对减肥同样重要 ## 更新日志 ### v1.0.0 (2026-05-18) - 初始版本发布 - 实现核心功能：热量计算、提醒机制、饮食打卡、体重管理 - 支持8+16断食模式 - 添加平台期分析功能 - 实现体重趋势预测

path: README.md
content: # AI智能陪伴减肥助手

> 基于热量差=目标步数的核心理念，通过定时提醒、饮食打卡、步数督促、数据分析、激励机制陪伴用户健康减肥。

## 🌟 功能特点

### 🧮 智能热量计算
- **BMR基础代谢率计算**：基于性别、年龄、身高、体重科学计算
- **TDEE总能量消耗**：结合活动水平精准估算每日消耗
- **目标步数换算**：自动计算达成热量差目标所需步数
- **食物热量估算**：内置常见食物热量表，快速估算摄入

### ⏰ 定时提醒机制
- 🌅 早餐提醒 (7:30-8:30)
- ☀️ 午餐提醒 (11:30-12:30)  
- 🌙 晚餐提醒 (17:30-18:30)
- 🏃 步数督促 (10:00, 15:00, 20:00)
- 💤 睡前总结 (22:00)
- 💧 饮水提醒 (每2小时)

### 📝 饮食打卡系统
- ✅ 支持早、午、晚三餐记录
- 🍪 加餐单独统计
- 📊 自动累加每日总热量
- 🎯 实时进度反馈

### 📈 体重管理分析
- 📉 体重趋势图表展示
- 🔍 平台期智能识别分析
- 🎯 BMI计算与健康分类
- 🔮 减重趋势预测

### 💪 激励机制
- 🎉 每日达标正向反馈
- 🏆 周度总结进步表彰
- 🔥 连续打卡奖励机制
- 💬 个性化鼓励话语

## 🚀 快速开始

### 1. 初始化用户数据
```bash
init-user-data
```
按照提示输入：性别、年龄、身高、初始体重、目标体重、活动水平

### 2. 开始今日计划
```bash
start-daily-plan
```
系统会根据你的基础数据生成今日目标

### 3. 日常记录
```bash
# 记录饮食
record-breakfast "牛奶+面包" 200
record-lunch "米饭+鸡胸肉+青菜" 400
record-dinner "粥+小菜" 250
record-snack "苹果" 150

# 记录运动
record-steps 8000

# 记录体重
record-weight 68.5
```

### 4. 查看总结
```bash
# 今日总结
daily-summary

# 体重趋势
weight-trend

# 平台期分析
plateau-analysis

# 减重预测
predict-weight-loss
```

## 📁 数据存储

所有用户数据保存在技能目录下的 `data/` 文件夹中：

```
data/
├── user_data.json          # 用户基础数据
├── weight_history.json     # 体重历史记录
└── daily_records/         # 每日记录
    ├── 20260518.json
    ├── 20260519.json
    └── ...
```

## ⚙️ 8+16断食模式

支持8+16轻断食模式：
- **进食窗口**：12:00 - 20:00（8小时）
- **禁食窗口**：20:00 - 次日12:00（16小时）

> 💡 建议：循序渐进，从12+12开始，逐步过渡到8+16。身体适应期间如有不适，请及时恢复正常饮食。

## 📊 健康标准

### BMI参考标准
| BMI范围 | 分类 | 建议 |
|---------|------|------|
| < 18.5 | 偏瘦 | 适当增加营养摄入 |
| 18.5 - 24 | 正常 | 继续保持健康生活 |
| 24 - 28 | 超重 | 建议开始控制饮食+运动 |
| ≥ 28 | 肥胖 | 建议在专业指导下减重 |

### 健康减重速度
- ✅ **推荐**：每周减重 0.5-1 kg
- ⚠️ **注意**：过快减重可能影响健康
- 💡 **建议**：设置合理的目标，循序渐进

## 🔧 技术实现

本技能使用纯Bash脚本开发，配合Python进行JSON数据处理，无需额外依赖，可在任何Linux/Unix环境运行。

核心组件：
- `calculator.sh` - 热量计算引擎
- `recorder.sh` - 数据记录模块
- `analyzer.sh` - 数据分析模块
- `notifier.sh` - 提醒通知模块

## ⚠️ 注意事项

1. **仅供参考**：本技能提供的建议不构成医疗建议
2. **个体差异**：每个人身体状况不同，请根据实际情况调整
3. **健康第一**：如有不适，请立即停止并咨询专业人士
4. **循序渐进**：不要追求速成，健康减重才是可持续的

## 📄 更新日志

### v1.0.0 (2026-05-18)
- ✨ 初始版本发布
- ✅ 核心功能完整实现
- 🧮 热量计算引擎
- 📝 饮食打卡系统
- 📈 体重趋势分析
- 🔔 智能提醒机制
- 💪 激励反馈系统

---

**健康减肥，快乐生活！** 🌟
*记住，减肥不是目的，健康才是终点。愿每个人都能找到适合自己的健康生活方式！*


path: main.sh
content: #!/bin/bash

# AI智能陪伴减肥助手 - 主入口脚本
# 版本: 1.0.0

SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DATA_DIR="$SKILL_DIR/data"

# 初始化数据目录
mkdir -p "$DATA_DIR/daily_records"

# 加载功能模块
source "$SKILL_DIR/modules/calculator.sh"
source "$SKILL_DIR/modules/recorder.sh"
source "$SKILL_DIR/modules/analyzer.sh"
source "$SKILL_DIR/modules/notifier.sh"

# 显示帮助信息
show_help() {
    echo "AI智能陪伴减肥助手 v1.0.0"
    echo ""
    echo "使用方法:"
    echo "  init-user-data              初始化用户基础数据"
    echo "  start-daily-plan            开始今日减肥计划"
    echo "  record-breakfast <描述> [重量]  记录早餐"
    echo "  record-lunch <描述> [重量]      记录午餐"
    echo "  record-dinner <描述> [重量]     记录晚餐"
    echo "  record-snack <描述> [重量]      记录加餐"
    echo "  record-steps <步数>              记录今日步数"
    echo "  record-weight <体重(kg)>         记录今日体重"
    echo "  daily-summary                      查看今日总结"
    echo "  weight-trend                       查看体重趋势"
    echo "  weekly-analysis                    查看本周分析"
    echo "  plateau-analysis                   平台期分析"
    echo "  predict-weight-loss                预测减重趋势"
    echo "  help                               显示此帮助信息"
    echo ""
}

# 主命令分发
main() {
    local cmd="$1"
    shift

    case "$cmd" in
        init-user-data)
            init_user_data "$@"
            ;;
        start-daily-plan)
            start_daily_plan
            ;;
        record-breakfast)
            record_meal "breakfast" "$@"
            ;;
        record-lunch)
            record_meal "lunch" "$@"
            ;;
        record-dinner)
            record_meal "dinner" "$@"
            ;;
        record-snack)
            record_meal "snack" "$@"
            ;;
        record-steps)
            record_steps "$@"
            ;;
        record-weight)
            record_weight "$@"
            ;;
        daily-summary)
            show_daily_summary
            ;;
        weight-trend)
            show_weight_trend
            ;;
        weekly-analysis)
            show_weekly_analysis
            ;;
        plateau-analysis)
            analyze_plateau
            ;;
        predict-weight-loss)
            predict_weight_loss
            ;;
        help|--help|-h)
            show_help
            ;;
        *)
            echo "未知命令: $cmd"
            echo "使用 'help' 查看帮助信息"
            return 1
            ;;
    esac
}

# 如果直接执行此脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi


path: modules/analyzer.sh
content: #!/bin/bash

# 数据分析模块

source "$SKILL_DIR/modules/calculator.sh"

# 显示今日总结
show_daily_summary() {
    local today=$(date +%Y%m%d)
    local daily_file="$DATA_DIR/daily_records/${today}.json"
    
    if [[ ! -f "$daily_file" ]]; then
        echo "今日还没有记录，请先开始: start-daily-plan"
        return 1
    fi
    
    python3 << EOF
import json

with open("$daily_file", 'r', encoding='utf-8') as f:
    data = json.load(f)

print("=" * 50)
print("📊 今日减肥总结 - $(date +%Y年%m月%d日)")
print("=" * 50)
print()

# 步数统计
steps = data['steps']
target_steps = data['target_steps']
steps_progress = min(100, int(steps / target_steps * 100))
print(f"🚶 今日步数: {steps} / {target_steps} 步")
print(f"   进度: [{'█' * (steps_progress // 10)}{'░' * (10 - steps_progress // 10)}] {steps_progress}%")
print()

# 热量统计
total_calories = data['total_calories']
target_deficit = data['target_calorie_deficit']
print(f"🍽️  今日摄入总热量: {total_calories} kcal")
print(f"   目标热量差: {target_deficit} kcal")
print()

# 详细餐食记录
meal_names = {'breakfast': '🌅 早餐', 'lunch': '☀️ 午餐', 'dinner': '🌙 晚餐', 'snack': '🍪 加餐'}
for meal_type in ['breakfast', 'lunch', 'dinner', 'snack']:
    meals = data['meals'][meal_type]
    if meals:
        meal_calories = sum(m['calories'] for m in meals)
        print(f"{meal_names[meal_type]} ({meal_calories} kcal):")
        for meal in meals:
            print(f"   - {meal['name']}: {meal['calories']} kcal ({meal['time']})")
        print()

# 体重
if data['weight']:
    print(f"⚖️  今日体重: {data['weight']} kg")
    print()

# 鼓励语
if steps >= target_steps and total_calories < 2000:
    print("🎉 完美的一天！继续保持，你离目标越来越近了！")
elif steps >= target_steps:
    print("👍 运动达标了！注意控制一下饮食哦～")
elif total_calories < 2000:
    print("💪 饮食控制得不错！再多走几步就更好了！")
else:
    print("🎯 明天继续加油！相信自己一定可以！")

print("=" * 50)
EOF
}

# 显示体重趋势
show_weight_trend() {
    local weight_history="$DATA_DIR/weight_history.json"
    
    if [[ ! -f "$weight_history" ]]; then
        echo "还没有体重记录数据"
        return 1
    fi
    
    python3 << EOF
import json

with open("$weight_history", 'r', encoding='utf-8') as f:
    history = json.load(f)

if len(history) < 2:
    print("需要至少2条记录才能显示趋势")
else:
    history.sort(key=lambda x: x['date'])
    
    print("=" * 50)
    print("📈 体重变化趋势")
    print("=" * 50)
    print()
    
    first = history[0]
    last = history[-1]
    total_change = last['weight'] - first['weight']
    
    print(f"起始体重: {first['weight']} kg ({first['date']})")
    print(f"最新体重: {last['weight']} kg ({last['date']})")
    print(f"总体重变化: {'+' if total_change > 0 else ''}{total_change:.2f} kg")
    print()
    
    print("最近7天记录:")
    for record in history[-7:]:
        change = ""
        idx = history.index(record)
        if idx > 0:
            prev = history[idx - 1]
            diff = record['weight'] - prev['weight']
            change = f" ({'+' if diff > 0 else ''}{diff:.2f} kg)"
        print(f"  {record['date']}: {record['weight']} kg{change}")
    
    print()
    if total_change < 0:
        print("🎉 恭喜减重成功！继续保持！")
    elif total_change == 0:
        print("⚖️  体重保持稳定")
    else:
        print("💪 加油，还有进步空间！")
    print("=" * 50)
EOF
}

# 周度分析
show_weekly_analysis() {
    echo "📅 周度分析功能（开发中）"
    echo "将包含："
    echo "- 本周平均步数统计"
    echo "- 本周平均热量摄入"
    echo "- 本周减重/增重情况"
    echo "- 下周目标建议"
}

# 平台期分析
analyze_plateau() {
    local weight_history="$DATA_DIR/weight_history.json"
    
    if [[ ! -f "$weight_history" ]]; then
        echo "还没有足够的体重数据进行分析"
        return 1
    fi
    
    python3 << EOF
import json

with open("$weight_history", 'r', encoding='utf-8') as f:
    history = json.load(f)

if len(history) < 14:
    print("需要至少14天的数据才能分析平台期")
else:
    history.sort(key=lambda x: x['date'])
    recent = history[-14:]
    weights = [h['weight'] for h in recent]
    weight_range = max(weights) - min(weights)
    
    print("=" * 50)
    print("🔍 平台期分析")
    print("=" * 50)
    print()
    print(f"最近14天体重波动范围: {weight_range:.2f} kg")
    print()
    
    if weight_range < 0.5:
        print("⚠️  检测到可能处于平台期")
        print()
        print("平台期建议:")
        print("1. 增加运动强度或改变运动方式")
        print("2. 调整饮食结构，增加蛋白质摄入")
        print("3. 保证充足睡眠（7-8小时）")
        print("4. 增加饮水量（每天2-3升）")
        print("5. 保持耐心，平台期是正常现象")
        print("6. 可以尝试轻断食（如8+16模式）")
    else:
        print("✅ 体重在正常波动范围内，未检测到平台期")
        print("继续保持良好的饮食和运动习惯！")
    print("=" * 50)
EOF
}

# 预测减重趋势
predict_weight_loss() {
    local weight_history="$DATA_DIR/weight_history.json"
    
    if [[ ! -f "$weight_history" ]]; then
        echo "还没有足够的体重数据进行预测"
        return 1
    fi
    
    python3 << EOF
import json
import numpy as np

with open("$weight_history", 'r', encoding='utf-8') as f:
    history = json.load(f)

if len(history) < 7:
    print("需要至少7天的数据才能进行预测")
else:
    history.sort(key=lambda x: x['date'])
    weights = [h['weight'] for h in history]
    
    # 简单线性回归预测
    x = np.arange(len(weights))
    slope, intercept = np.polyfit(x, weights, 1)
    
    # 计算平均每周减重
    weekly_loss = abs(slope * 7)
    
    # 读取目标体重
    with open("$DATA_DIR/user_data.json", 'r', encoding='utf-8') as f:
        user_data = json.load(f)
    
    target_weight = user_data['target_weight']
    current_weight = weights[-1]
    
    print("=" * 50)
    print("🔮 减重趋势预测")
    print("=" * 50)
    print()
    print(f"当前体重: {current_weight} kg")
    print(f"目标体重: {target_weight} kg")
    print(f"还需减重: {current_weight - target_weight:.2f} kg")
    print()
    
    if slope < 0:
        print(f"📉 平均每周减重: {weekly_loss:.2f} kg")
        if weekly_loss > 0:
            weeks_needed = (current_weight - target_weight) / weekly_loss
            print(f"⏱️  预计还需要: {weeks_needed:.1f} 周达到目标")
            print()
            print("💡 建议:")
            if weekly_loss > 1:
                print("- 减重速度偏快，建议适当放缓，注意身体健康")
            elif weekly_loss < 0.25:
                print("- 减重速度较慢，可以适当增加运动量或调整饮食")
            else:
                print("- 减重速度在健康范围内，继续保持！")
    else:
        print("📈 体重呈上升趋势，建议调整饮食和运动计划")
    
    print("=" * 50)
EOF
}


path: modules/calculator.sh
content: #!/bin/bash

# 热量计算模块

# 计算BMR (基础代谢率)
# 参数: 性别 年龄 身高(cm) 体重(kg)
calculate_bmr() {
    local gender="$1"
    local age="$2"
    local height="$3"
    local weight="$4"
    
    if [[ "$gender" == "male" ]]; then
        # 男性: BMR = 88.362 + (13.397 × 体重kg) + (4.799 × 身高cm) - (5.677 × 年龄)
        echo "scale=2; 88.362 + (13.397 * $weight) + (4.799 * $height) - (5.677 * $age)" | bc
    else
        # 女性: BMR = 447.593 + (9.247 × 体重kg) + (3.098 × 身高cm) - (4.330 × 年龄)
        echo "scale=2; 447.593 + (9.247 * $weight) + (3.098 * $height) - (4.330 * $age)" | bc
    fi
}

# 计算TDEE (每日总能量消耗)
# 参数: BMR 活动系数
calculate_tdee() {
    local bmr="$1"
    local activity_level="$2"
    
    local activity_factor
    case "$activity_level" in
        sedentary)    activity_factor="1.2" ;;  # 久坐
        light)        activity_factor="1.375" ;; # 轻度活动
        moderate)     activity_factor="1.55" ;;  # 中度活动
        heavy)        activity_factor="1.725" ;; # 重度活动
        *)            activity_factor="1.375" ;; # 默认轻度活动
    esac
    
    echo "scale=2; $bmr * $activity_factor" | bc
}

# 计算目标热量差对应的步数
# 参数: 热量差(kcal)
calculate_target_steps() {
    local calorie_deficit="$1"
    # 每走1000步约消耗30-40千卡，取平均值35
    echo "scale=0; ($calorie_deficit * 1000) / 35" | bc
}

# 估算食物热量
# 参数: 食物名称 [重量(g)]
estimate_food_calories() {
    local food_name="$1"
    local weight="${2:-100}"  # 默认100g
    
    # 常见食物热量表（每100g）
    declare -A food_calories=(
        ["米饭"]=116 ["面条"]=284 ["馒头"]=221 ["面包"]=312
        ["鸡蛋"]=144 ["牛奶"]=54 ["豆浆"]=16 ["酸奶"]=72
        ["苹果"]=52 ["香蕉"]=91 ["橙子"]=47 ["西瓜"]=25
        ["鸡肉"]=167 ["牛肉"]=125 ["猪肉"]=143 ["鱼肉"]=113
        ["青菜"]=20 ["白菜"]=17 ["菠菜"]=24 ["西兰花"]=34
        ["西红柿"]=18 ["黄瓜"]=15 ["土豆"]=77 ["红薯"]=86
        ["豆腐"]=70 ["豆浆"]=16 ["豆皮"]=245 ["豆干"]=140
        ["油"]=900 ["盐"]=0 ["糖"]=400 ["酱油"]=63
    )
    
    local calories_per_100g="${food_calories[$food_name]}"
    
    if [[ -z "$calories_per_100g" ]]; then
        # 如果不在列表中，使用AI估算或提示用户
        echo "100"  # 默认值，实际应调用AI分析
    else
        echo "scale=2; $calories_per_100g * $weight / 100" | bc
    fi
}

# 计算BMI
# 参数: 体重(kg) 身高(cm)
calculate_bmi() {
    local weight="$1"
    local height_cm="$2"
    local height_m=$(echo "scale=4; $height_cm / 100" | bc)
    echo "scale=2; $weight / ($height_m * $height_m)" | bc
}

# 获取BMI分类
get_bmi_category() {
    local bmi="$1"
    
    if (( $(echo "$bmi < 18.5" | bc -l) )); then
        echo "偏瘦"
    elif (( $(echo "$bmi < 24" | bc -l) )); then
        echo "正常"
    elif (( $(echo "$bmi < 28" | bc -l) )); then
        echo "超重"
    else
        echo "肥胖"
    fi
}


path: modules/notifier.sh
content: #!/bin/bash

# 提醒模块

# 发送提醒消息
send_reminder() {
    local message="$1"
    echo "🔔 提醒: $message"
}

# 早餐提醒
breakfast_reminder() {
    send_reminder "早餐时间到了！记得吃一顿营养丰富的早餐哦～🍳"
    echo "   建议: 搭配蛋白质（鸡蛋、牛奶）和碳水（面包、燕麦）"
}

# 午餐提醒
lunch_reminder() {
    send_reminder "午餐时间到了！吃饱了才有力气减肥哦～🥗"
    echo "   建议: 多吃蔬菜，适量主食和蛋白质，七分饱刚刚好"
}

# 晚餐提醒
dinner_reminder() {
    send_reminder "晚餐时间到了！记得早点吃晚餐，睡前3小时不进食哦～🥣"
    echo "   建议: 清淡为主，避免高油高糖食物"
}

# 步数提醒
steps_reminder() {
    local today=$(date +%Y%m%d)
    local daily_file="$DATA_DIR/daily_records/${today}.json"
    
    if [[ -f "$daily_file" ]]; then
        local current_steps=$(grep -o '"steps": [0-9]*' "$daily_file" | grep -o '[0-9]*')
        local target_steps=$(grep -o '"target_steps": [0-9]*' "$daily_file" | grep -o '[0-9]*')
        
        if (( current_steps < target_steps * 5 / 10 )); then
            send_reminder "目前只走了${current_steps}步，距离目标还差$((target_steps - current_steps))步！🏃"
            echo "   起来活动一下吧，久坐伤身哦～"
        elif (( current_steps < target_steps * 8 / 10 )); then
            send_reminder "已经走了${current_steps}步，还差$((target_steps - current_steps))步就达标了！💪"
        else
            send_reminder "太棒了！已经走了${current_steps}步，快达标了！🎉"
        fi
    else
        send_reminder "记得记录今日步数哦！健康生活从走路开始～🚶"
    fi
}

# 睡前总结提醒
bedtime_summary_reminder() {
    send_reminder "一天快要结束了！来看看今天的成果吧～🌙"
    echo ""
    show_daily_summary
    echo ""
    echo "💤 早点休息，充足的睡眠对减肥也很重要哦！"
    echo "明天继续加油！晚安～😴"
}

# 饮水提醒
water_reminder() {
    send_reminder "该喝水啦！保持充足的水分摄入有助于新陈代谢哦～💧"
    echo "   建议: 每天喝2-3升水，每隔1-2小时喝一杯"
}

# 鼓励消息
encouragement_message() {
    local messages=(
        "你做得很棒！继续保持，目标就在前方！🌟"
        "每一步都算数，每一天都在进步！💪"
        "相信自己，你可以做到的！✨"
        "坚持就是胜利，今天也是元气满满的一天！🌈"
        "健康减肥，快乐生活！为你骄傲！🎉"
        "不要着急，慢慢来，好身材需要时间沉淀～🌱"
        "今天的努力是明天的收获，加油！🏆"
    )
    
    local random_index=$((RANDOM % ${#messages[@]}))
    echo "💬 ${messages[$random_index]}"
}

# 检查提醒时间（供定时任务调用）
check_reminder_time() {
    local hour=$(date +%H)
    local minute=$(date +%M)
    
    # 早餐提醒 7:30-8:30
    if (( hour == 7 && minute >= 30 )) || (( hour == 8 && minute < 30 )); then
        breakfast_reminder
    fi
    
    # 午餐提醒 11:30-12:30
    if (( hour == 11 && minute >= 30 )) || (( hour == 12 && minute < 30 )); then
        lunch_reminder
    fi
    
    # 晚餐提醒 17:30-18:30
    if (( hour == 17 && minute >= 30 )) || (( hour == 18 && minute < 30 )); then
        dinner_reminder
    fi
    
    # 步数提醒 10:00, 15:00, 20:00
    if (( hour == 10 && minute < 10 )) || (( hour == 15 && minute < 10 )) || (( hour == 20 && minute < 10 )); then
        steps_reminder
    fi
    
    # 睡前总结 22:00
    if (( hour == 22 && minute < 10 )); then
        bedtime_summary_reminder
    fi
}


path: modules/recorder.sh
content: #!/bin/bash

# 数据记录模块

source "$SKILL_DIR/modules/calculator.sh"

# 初始化用户数据
init_user_data() {
    local user_data_file="$DATA_DIR/user_data.json"
    
    if [[ -f "$user_data_file" ]]; then
        echo "用户数据已存在，是否覆盖？(y/n)"
        read -r confirm
        if [[ "$confirm" != "y" ]]; then
            echo "已取消初始化"
            return
        fi
    fi
    
    echo "=== 用户基础数据初始化 ==="
    read -p "请输入性别 (male/female): " gender
    read -p "请输入年龄: " age
    read -p "请输入身高 (cm): " height
    read -p "请输入初始体重 (kg): " initial_weight
    read -p "请输入目标体重 (kg): " target_weight
    read -p "请输入日常活动水平 (sedentary/light/moderate/heavy): " activity_level
    
    local bmr=$(calculate_bmr "$gender" "$age" "$height" "$initial_weight")
    local tdee=$(calculate_tdee "$bmr" "$activity_level")
    local target_calorie_deficit=500  # 目标每天500大卡热量差
    local target_steps=$(calculate_target_steps "$target_calorie_deficit")
    
    cat > "$user_data_file" << EOF
{
    "gender": "$gender",
    "age": $age,
    "height": $height,
    "initial_weight": $initial_weight,
    "target_weight": $target_weight,
    "activity_level": "$activity_level",
    "bmr": $bmr,
    "tdee": $tdee,
    "target_calorie_deficit": $target_calorie_deficit,
    "target_steps": $target_steps,
    "created_at": "$(date +%Y-%m-%d)"
}
EOF
    
    echo "用户数据初始化完成！"
    echo "基础代谢率 (BMR): $bmr kcal"
    echo "每日总能量消耗 (TDEE): $tdee kcal"
    echo "每日目标步数: $target_steps 步"
}

# 开始今日计划
start_daily_plan() {
    local today=$(date +%Y%m%d)
    local daily_file="$DATA_DIR/daily_records/${today}.json"
    
    if [[ ! -f "$DATA_DIR/user_data.json" ]]; then
        echo "请先初始化用户数据: init-user-data"
        return 1
    fi
    
    if [[ -f "$daily_file" ]]; then
        echo "今日计划已存在，查看今日总结请使用: daily-summary"
        return
    fi
    
    local user_data=$(cat "$DATA_DIR/user_data.json")
    local target_steps=$(echo "$user_data" | grep -o '"target_steps": [0-9]*' | grep -o '[0-9]*')
    local target_calorie_deficit=$(echo "$user_data" | grep -o '"target_calorie_deficit": [0-9]*' | grep -o '[0-9]*')
    
    cat > "$daily_file" << EOF
{
    "date": "$today",
    "meals": {
        "breakfast": [],
        "lunch": [],
        "dinner": [],
        "snack": []
    },
    "steps": 0,
    "weight": null,
    "target_steps": $target_steps,
    "target_calorie_deficit": $target_calorie_deficit,
    "total_calories": 0
}
EOF
    
    echo "=== 今日减肥计划已开始 ==="
    echo "日期: $(date +%Y年%m月%d日)"
    echo "目标步数: $target_steps 步"
    echo "目标热量差: ${target_calorie_deficit} kcal"
    echo ""
    echo "记得按时记录饮食和运动情况哦！💪"
}

# 记录饮食
# 参数: 餐别 食物描述 [重量]
record_meal() {
    local meal_type="$1"
    local food_desc="$2"
    local weight="${3:-100}"
    
    local today=$(date +%Y%m%d)
    local daily_file="$DATA_DIR/daily_records/${today}.json"
    
    if [[ ! -f "$daily_file" ]]; then
        echo "请先开始今日计划: start-daily-plan"
        return 1
    fi
    
    local estimated_calories=$(estimate_food_calories "$food_desc" "$weight")
    
    # 更新每日记录
    local daily_data=$(cat "$daily_file")
    
    # 创建新的餐食记录
    local meal_record="{\"name\": \"$food_desc\", \"weight\": $weight, \"calories\": $estimated_calories, \"time\": \"$(date +%H:%M)\"}"
    
    # 使用Python更新JSON（简化处理）
    python3 << EOF
import json
import sys

with open("$daily_file", 'r', encoding='utf-8') as f:
    data = json.load(f)

meal_record = json.loads('$meal_record')
data['meals']['$meal_type'].append(meal_record)
data['total_calories'] = sum(
    meal['calories'] 
    for meal_type in ['breakfast', 'lunch', 'dinner', 'snack']
    for meal in data['meals'][meal_type]
)

with open("$daily_file", 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
EOF
    
    local meal_name=""
    case "$meal_type" in
        breakfast) meal_name="早餐" ;;
        lunch) meal_name="午餐" ;;
        dinner) meal_name="晚餐" ;;
        snack) meal_name="加餐" ;;
    esac
    
    echo "✅ 已记录$meal_name: $food_desc"
    echo "   估算热量: ${estimated_calories} kcal"
    
    # 鼓励语
    if (( $(echo "$estimated_calories < 400" | bc -l) )); then
        echo "   很棒！选择了健康的食物！🌟"
    fi
}

# 记录步数
record_steps() {
    local steps="$1"
    
    local today=$(date +%Y%m%d)
    local daily_file="$DATA_DIR/daily_records/${today}.json"
    
    if [[ ! -f "$daily_file" ]]; then
        echo "请先开始今日计划: start-daily-plan"
        return 1
    fi
    
    python3 << EOF
import json

with open("$daily_file", 'r', encoding='utf-8') as f:
    data = json.load(f)

data['steps'] = $steps

with open("$daily_file", 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
EOF
    
    echo "✅ 已记录今日步数: $steps 步"
    
    # 检查是否达标
    local target_steps=$(grep -o '"target_steps": [0-9]*' "$daily_file" | grep -o '[0-9]*')
    if (( steps >= target_steps )); then
        echo "🎉 太棒了！今日步数已达标！继续保持！"
    elif (( steps >= target_steps * 8 / 10 )); then
        echo "💪 已经完成80%了！再加把劲就达标了！"
    else
        echo "🏃 目前完成了$((steps * 100 / target_steps))%，动起来吧！"
    fi
}

# 记录体重
record_weight() {
    local weight="$1"
    
    local today=$(date +%Y%m%d)
    local daily_file="$DATA_DIR/daily_records/${today}.json"
    local weight_history="$DATA_DIR/weight_history.json"
    
    if [[ ! -f "$daily_file" ]]; then
        echo "请先开始今日计划: start-daily-plan"
        return 1
    fi
    
    # 更新今日记录
    python3 << EOF
import json

with open("$daily_file", 'r', encoding='utf-8') as f:
    data = json.load(f)

data['weight'] = $weight

with open("$daily_file", 'w', encoding='utf-8') as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
EOF
    
    # 更新体重历史
    if [[ ! -f "$weight_history" ]]; then
        echo "[]" > "$weight_history"
    fi
    
    python3 << EOF
import json

with open("$weight_history", 'r', encoding='utf-8') as f:
    history = json.load(f)

# 移除同一天的旧记录
history = [h for h in history if h['date'] != '$today']
history.append({'date': '$today', 'weight': $weight})

with open("$weight_history", 'w', encoding='utf-8') as f:
    json.dump(history, f, ensure_ascii=False, indent=2)
EOF
    
    echo "✅ 已记录今日体重: ${weight} kg"
    
    # 计算BMI
    local user_data=$(cat "$DATA_DIR/user_data.json")
    local height=$(echo "$user_data" | grep -o '"height": [0-9]*' | grep -o '[0-9]*')
    local bmi=$(calculate_bmi "$weight" "$height")
    local bmi_category=$(get_bmi_category "$bmi")
    
    echo "   当前BMI: ${bmi} (${bmi_category})"
}


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal:  | SkillSpector: suspicious (MEDIUM)