Skill: eddylhb/find-ihg (version 2.2.1)

# 🏨 IHG酒店积分房查找技能 (find-ihg) ## 📋 技能概要 **技能ID**: `find-ihg` (原 ihg-monitor) **版本**: v2.2 **最后更新**: 2026-04-08 **开发者**: BobClaw (OpenClaw运维工程师) **兼容性**: OpenClaw 2026.4.2 - 2026.5.x ## 🎯 核心功能 智能查找江浙沪地区IHG酒店的积分房情况和优惠活动，为钻卡会员提供精准的酒店推荐和积分价值分析，优先推荐高性价比酒店。 ### 🗺️ **地理范围** - **覆盖区域**: 江浙沪3省市 (上海、江苏、浙江) - **酒店数量**: 45家精选酒店 (较v2.1增加22家) - **距离分类**: 上海市内/近距离(≤100km)/中等距离(100-200km)/远距离(200-300km) ### 🏷️ **品牌权重优化** - **皇冠假日** (Crowne Plaza): 权重系数 1.3x (优先推荐) - **华邑** (HUALUXE): 权重系数 1.2x (中式奢华优先) - **顶级奢华**: 洲际(InterContinental)、丽晶(Regent) - **精品设计**: 金普顿(Kimpton)、英迪格(Indigo) - **生活方式**: voco、逸衡(even) - **中端商务**: 假日(Holiday Inn) - **排除品牌**: 智选假日(Holiday Inn Express) ### 🍽️ **特色功能** - **行政酒廊筛选**: 支持必须有/必须无/不限三种模式 - **智能推荐算法**: 综合品牌权重、距离权重、积分段偏好、价值比、行政酒廊评分 - **积分段偏好**: ≤15,000积分(2.0x), 15,000-22,000积分(1.5x), >22,000积分(1.0x) - **距离权重**: 上海市内(1.8x), 近距离(1.5x), 中等距离(1.3x), 远距离(0.7x) - **价值分析**: 积分vs现金价值比计算，智能兑换建议 ## 📊 算法核心 ### 推荐评分公式 ``` 综合评分 = 基础分 × 品牌权重 × 距离权重 × (积分段权重 + 价值比分数 + 行政酒廊分数) ``` ### 权重体系 | 维度 | 权重类型 | 具体规则 | |------|----------|----------| | **品牌** | 乘法系数 | 皇冠假日×1.3, 华邑×1.2, 其他品牌×1.0, voco/假日×0.9 | | **距离** | 乘法系数 | 上海市内×1.8, 近距离×1.5, 中等距离×1.3, 远距离×0.7 | | **积分段** | 加法分数 | ≤15k:2.0, 15-22k:1.5, 22-30k:1.0, >30k:0.5 | | **价值比** | 加法分数 | >1.3:2.0, >1.1:1.5, >0.9:1.0, ≤0.9:0.5 | | **行政酒廊** | 加法分数 | 有:1.0, 无:0.0 | ### 距离分类标准 | 分类 | 距离范围 | 适用城市 | 权重系数 | |------|----------|----------|----------| | **上海市内** | 不限距离 | 仅限上海行政区内酒店 | ×1.8 | | **近距离** | ≤100km | 仅限非上海城市 | ×1.5 | | **中等距离** | 100-200km | 仅限非上海城市 | ×1.3 | | **远距离** | 200-300km | 仅限非上海城市 | ×0.7 | ## 🔧 使用方式 ### Gogo自然语言调用 ``` Gogo，查一下上海周边IHG积分房 Gogo，查找近距离皇冠假日酒店 Gogo，推荐有行政酒廊的华邑酒店 Gogo，IHG有什么优惠活动 ``` ### JSON参数查询 ```json { "distance_category": "上海市内", "brand_type": "华邑", "executive_lounge": "true", "count": 4 } ``` ### 命令行调用 ```bash python3 /home/node/.openclaw/scripts/ihg-monitor-python/query.py "上海周边" python3 /home/node/.openclaw/scripts/ihg-monitor-python/query.py "优惠信息" ``` ## 📁 文件结构 ### 技能目录 ``` ~/.openclaw/skills/find-ihg/ ├── skills.json # 技能元数据定义 (v2.2) ├── SKILL.md # 本说明文档 ├── GOGO_INSTRUCTIONS.md # Gogo调用指南 ├── references/ # 参考文档目录 └── scripts/ # 辅助脚本目录 ``` ### 执行脚本 ``` ~/.openclaw/scripts/ihg-monitor-python/ ├── query.py # 主查询脚本 (v2.2, 20791字节) └── hotels.json # 酒店数据文件 (45家, 29791字节) ``` ## 🔄 版本历史 ### v2.2 (2026-04-08) - 当前版本 - **技能重命名**: ihg-monitor → find-ihg - **数据扩展**: 23家 → 45家酒店 (+22家) - **品牌权重**: 皇冠假日1.3x, 华邑1.2x - **距离优化**: 新四级分类体系 - **积分段偏好**: 15-22k积分优先推荐 - **路径清理**: 删除早期监控文件，仅保留核心文件 - **文档统一**: 所有文件路径更新为find-ihg ### v2.1 (2026-04-07) - 上一版本 - OpenClaw 4.5完全兼容 - 增加品牌筛选、行政酒廊过滤 - 支持JSON参数查询 - 基本算法架构 ### v1.x (2026-04-07) - 初始版本 - Node.js定时任务系统 - 8家酒店基础监控 - 飞书推送功能 (已停用) ## 🎨 输出示例 ### 推荐输出格式 ``` 🏨 **上海市内IHG酒店精选推荐** ⏰ 查询时间: 2026-04-08 11:30 👑 会员等级: 钻卡会员 🔍 筛选条件: 距离: 上海市内 ## 1. **嘉定华邑酒店** 📍 城市: 上海 🚗 车程: 上海市内 (25km) ⭐ 品牌: 华邑酒店 (中式奢华, Tier 2) 🏷️ 积分需求: 16,266 💰 现金价格: ¥1265 📊 价值比: 1.48 🍽️ 行政酒廊: ✅ 有 📈 推荐评分: 10.99 ✅ 积分房: 可预订 💡 建议: 💎 **极佳兑换** (价值比 > 1.3) ``` ## ⚠️ 注意事项 1. **数据来源**: 当前为模拟数据，生产环境需对接真实API 2. **定期更新**: 酒店数据需定期维护和更新 3. **价值计算**: 积分价值基准为350元/万分 (可根据市场调整) 4. **品牌策略**: 排除智选假日(Holiday Inn Express)品牌 5. **距离标准**: 上海市内包含嘉定、松江等所有上海行政区 ## 📞 技术支持 **维护人**: BobClaw (OpenClaw运维工程师) **支持文档**: - `memory/ihg-skill-info.md` - 技术架构详解 - `memory/ihg-skill-history.md` - 技能演进历史 - `memory/TASKS.md` - 任务记录 **更新时间**: 2026-04-08 11:30 CST **升级状态**: ✅ 生产就绪

path: GOGO_INSTRUCTIONS.md
content: # 🏨 Gogo调用IHG江浙沪酒店查询技能指南 (增强版 v2.1.0)

## 📋 技能基本信息
- **技能ID**: `ihg-monitor`
- **技能名称**: IHG江浙沪积分房查询
- **技能版本**: v2.1.0 (OpenClaw 4.5兼容版)
- **功能描述**: 查询江浙沪地区IHG酒店积分房情况和优惠活动，支持品牌筛选、行政酒廊过滤、智能推荐
- **覆盖范围**: 江浙沪3省市，23家酒店，8个品牌类型
- **最后更新**: 2026-04-08

---

## 🎯 核心功能亮点

### 1. 🗺️ **地理范围扩展**
- **江浙沪全覆盖**: 上海、江苏、浙江三省市
- **三级距离体系**: 
  - **近程** (1-2小时): 上海本地及昆山、太仓等
  - **中程** (2-3小时): 苏州、无锡、宁波、嘉兴、绍兴、湖州
  - **远程** (3-4小时): 杭州、南京、常州、镇江、扬州、南通
- **23家精选酒店**: 涵盖IHG全品牌体系

### 2. 🏷️ **品牌完整支持**
- **顶级奢华**: 洲际(InterContinental)、丽晶(Regent)
- **中式奢华**: 华邑(HUALUXE)
- **精品设计**: 金普顿(Kimpton)、英迪格(Indigo)
- **高端商务**: 皇冠假日(Crowne Plaza)
- **生活方式**: voco、逸衡(even)
- **中端商务**: 假日(Holiday Inn)
- **❌ 排除**: 智选假日(Holiday Inn Express)

### 3. 🍽️ **行政酒廊筛选**
- **明确标识**: 13家有行政酒廊，10家无行政酒廊
- **智能筛选**: 支持"必须有/必须无/不限"三种模式
- **商务友好**: 快速筛选适合商务出行的酒店

### 4. 🧠 **智能推荐系统**
- **综合评分算法**: 品牌等级+行政酒廊+距离+价值比
- **精选推荐**: 每次返回3-4家最优酒店
- **品牌多样性**: 自动保证不同品牌选择
- **价值分析**: 积分vs现金价值比计算与建议

---

## 💬 自然语言调用示例

### 🎪 基础查询（无需了解具体参数）
```
# 地域查询
Gogo，查一下上海周边IHG积分房
Gogo，江浙沪有什么好的IHG酒店
Gogo，杭州IHG酒店推荐

# 品牌查询  
Gogo，推荐几个洲际酒店
Gogo，华邑酒店怎么样
Gogo，voco设计酒店有哪些

# 特征查询
Gogo，有行政酒廊的酒店
Gogo，推荐带行政酒廊的洲际

# 综合查询
Gogo，江浙沪带行政酒廊的洲际酒店推荐
Gogo，近程华邑酒店有行政酒廊吗
```

### 🎯 精准查询（了解筛选维度）
```
# 距离筛选
Gogo，近程IHG酒店推荐
Gogo，中程IHG有什么好选择
Gogo，远程IHG度假酒店

# 组合筛选
Gogo，远程洲际酒店有行政酒廊吗
Gogo，近程皇冠假日推荐3家
Gogo，中程voco酒店怎么样

# 优惠活动
Gogo，IHG最近有什么优惠
Gogo，钻卡会员专属活动
Gogo，双倍积分季到了吗
```

### 🧪 测试查询
```
# 功能验证
Gogo，测试IHG技能
Gogo，IHG技能能查什么
Gogo，IHG查询帮助
```

---

## 🔍 Gogo意图识别与参数映射

### 📝 关键词到参数的自动映射
Gogo会自动识别以下关键词并映射为相应的查询参数：

#### 地域关键词映射
| 用户说 | Gogo理解 | 映射参数 |
|--------|----------|----------|
| "上海"、"浦东"、"静安" | 近程上海地区 | `distance_category=近程` |
| "江浙沪"、"华东" | 全范围查询 | `distance_category=全部` |
| "杭州"、"苏州"、"南京" | 对应城市所在距离分类 | 自动判断近/中/远程 |

#### 品牌关键词映射
| 用户说 | Gogo理解 | 映射参数 |
|--------|----------|----------|
| "洲际"、"丽晶" | 顶级奢华品牌 | `brand_type=洲际` / `brand_type=丽晶` |
| "华邑" | 中式奢华品牌 | `brand_type=华邑` |
| "皇冠"、"皇冠假日" | 高端商务品牌 | `brand_type=皇冠` |
| "voco" | 生活方式品牌 | `brand_type=voco` |
| "even"、"逸衡" | 健康生活品牌 | `brand_type=even` |
| "英迪格" | 设计生活方式品牌 | `brand_type=英迪格` |
| "金普顿" | 精品奢华品牌 | `brand_type=金普顿` |

#### 特征关键词映射  
| 用户说 | Gogo理解 | 映射参数 |
|--------|----------|----------|
| "行政酒廊"、"行政待遇"、"酒廊" | 需要行政酒廊 | `executive_lounge=true` |
| "商务出行"、"商务酒店" | 商务友好型 | `executive_lounge=true`, `brand_type=洲际/皇冠` |
| "设计"、"时尚"、"精品" | 设计型酒店 | `brand_type=英迪格/voco/金普顿` |
| "健康"、"运动"、"健身" | 健康型酒店 | `brand_type=even` |
| "度假"、"休闲"、"旅游" | 度假型酒店 | `distance_category=远程`, 优选有特色酒店 |

#### 数量关键词映射
| 用户说 | Gogo理解 | 映射参数 |
|--------|----------|----------|
| "推荐几家"、"推荐几个" | 默认4家 | `count=4` (默认) |
| "推荐3家"、"找3个" | 指定3家 | `count=3` |
| "最好的1家"、"最佳选择" | 只推荐最佳 | `count=1` |

### 🔧 复合意图识别示例
```
用户: "Gogo，推荐江浙沪有行政酒廊的洲际酒店"

Gogo解析:
1. 地域: "江浙沪" → distance_category=全部
2. 特征: "有行政酒廊" → executive_lounge=true  
3. 品牌: "洲际酒店" → brand_type=洲际
4. 意图: "推荐" → count=4 (默认)

最终参数: {
  "distance_category": "全部",
  "brand_type": "洲际", 
  "executive_lounge": "true",
  "count": 4
}
```

```
用户: "Gogo，上海周边voco酒店怎么样"

Gogo解析:  
1. 地域: "上海周边" → distance_category=近程
2. 品牌: "voco酒店" → brand_type=voco
3. 意图: "怎么样" → 查询详情

最终参数: {
  "distance_category": "近程",
  "brand_type": "voco"
}
```

---

## 📊 技能返回信息详解

### 🏨 酒店查询返回格式
```markdown
🏨 **江浙沪IHG酒店精选推荐 (距离: 近程 | 品牌: 洲际 | 行政酒廊: 有行政酒廊)**

⏰ 查询时间: 2026-04-08 02:15
👑 会员等级: 钻卡会员
🔍 筛选条件: 距离: 近程, 品牌: 洲际, 行政酒廊: 有行政酒廊

## 1. **上海浦东丽晶酒店**
   📍 城市: 上海
   🚗 车程: 1-2小时 (近程, 10km)
   ⭐ 品牌: 洲际酒店 (奢华商务, Tier 1)
   🏷️ 积分需求: 37,540
   💰 现金价格: ¥1,662
   📊 价值比: 1.26
   🍽️ 行政酒廊: ✅ 有
   📈 推荐评分: 9.11
   ✅ 积分房: 可预订
   💡 建议: ✅ **推荐兑换** (价值比 > 1.1)
   📝 陆家嘴核心区，俯瞰黄浦江，钻卡首选
   🎁 钻卡权益: 免费早餐, 房型升级, 行政酒廊

## 2. **上海世博洲际酒店**
   ...

🏆 **今日最佳推荐**
上海浦东丽晶酒店 - 近程奢华商务体验，价值比优良

💡 **使用技巧**:
1. 价值比 >1.2 时优先使用积分
2. 洲际/丽晶钻卡会员享免费早餐和房型升级
3. 行政酒廊适合商务出行和品质旅行
4. 近程适合短途，中远程适合周末度假
5. 关注季度促销活动可获额外积分
```

### 🎯 优惠查询返回格式
```markdown
🎯 **当前IHG优惠活动**

🎁 **Q2 双倍积分活动**
   📅 2026-04-01 至 2026-06-30
   📝 2026年第二季度，所有房晚享双倍积分

💎 **钻卡会员专属优惠**
   📅 2026-04-01 至 2026-05-31
   📝 入住洲际/丽晶酒店享额外5000积分

🎁 **江浙沪闪促**
   📅 2026-04-07 至 2026-04-14
   📝 上海、杭州、苏州、南京指定酒店闪促优惠

🎁 **华邑品牌特色活动**
   📅 2026年4-6月
   📝 入住华邑酒店享免费茶道体验和欢迎礼遇

💡 **参与建议**:
1. 钻卡会员优先参与专属活动
2. 华邑品牌活动适合体验中式奢华
3. 持续关注IHG官方渠道获取最新促销
```

---

## 🛠️ 技能技术细节

### 🔌 技能调用方式
```bash
# 1. Gogo自然语言调用 (推荐)
Gogo，查一下上海周边IHG积分房

# 2. 直接技能调用
ihg-monitor 上海周边

# 3. JSON参数调用  
ihg-monitor '{"distance_category":"近程","brand_type":"洲际"}'

# 4. 环境变量调用 (OpenClaw标准方式)
export OPENCLAW_SKILL_INPUT='{"executive_lounge":"true","count":3}'
ihg-monitor
```

### ⚙️ 执行命令详情
```bash
# 实际执行的命令
python3 /home/node/.openclaw/scripts/ihg-monitor-python/query.py {{参数}}

# 脚本位置
/home/node/.openclaw/scripts/ihg-monitor-python/query.py

# 数据文件位置  
/home/node/.openclaw/scripts/ihg-monitor-python/hotels.json (23家酒店)
```

### 📋 完整参数清单
```json
{
  "query": "传统查询关键词，如'上海周边'、'优惠信息'",
  "distance_category": "距离分类: '近程'、'中程'、'远程'、'全部'",
  "brand_type": "品牌类型: '洲际'、'丽晶'、'皇冠'、'华邑'、'voco'、'even'、'英迪格'、'金普顿'、'全部'", 
  "executive_lounge": "行政酒廊: 'true'(必须有)、'false'(必须无)、'不限'",
  "count": "返回数量: 1-10, 默认4",
  "type": "查询类型: 'hotels'(酒店查询)、'promotions'(优惠查询), 默认'hotels'"
}
```

---

## ✅ 验证与测试

### 🧪 Gogo测试命令
```bash
# 基础功能测试
Gogo，测试IHG技能 - 上海周边查询
Gogo，测试IHG技能 - 优惠信息查询

# 高级功能测试  
Gogo，测试IHG技能 - 远程华邑酒店
Gogo，测试IHG技能 - 行政酒廊筛选
Gogo，测试IHG技能 - 品牌筛选

# 边界测试
Gogo，测试IHG技能 - 不存在的品牌
Gogo，测试IHG技能 - 无效参数
```

### 📈 预期返回验证

**成功返回特征**:
- ✅ 包含"🏨 **江浙沪IHG酒店精选推荐**"标题
- ✅ 显示查询时间和会员等级
- ✅ 有具体酒店详情（至少1家）
- ✅ 包含价值比计算和兑换建议
- ✅ 有使用技巧提示

**错误返回特征**:
- ❌ 返回以"❌"开头的错误信息
- ❌ 提示"未找到符合筛选条件的酒店"
- ❌ JSON解析错误提示

### 🔄 兼容性测试
```bash
# 向后兼容测试 (确保v1.0用户不受影响)
Gogo，上海周边有哪些IHG酒店
Gogo，IHG最近有什么优惠活动
Gogo，上海浦东的IHG怎么样

# 新功能测试
Gogo，江浙沪洲际酒店有行政酒廊吗
Gogo，推荐几个近程voco酒店
Gogo，远程皇冠假日怎么样
```

---

## 🔄 技能状态与维护

### 📅 版本信息
- **当前版本**: v2.1.0
- **发布时间**: 2026-04-08
- **兼容OpenClaw**: 2026.4.2 - 2026.5.x
- **开发人员**: BobClaw (OpenClaw运维工程师)

### 🛡️ 技能状态检查
```bash
# 快速状态检查
cd /home/node/.openclaw/scripts/ihg-monitor-python
python3 query.py "测试" 2>&1 | head -5

# 数据完整性检查
python3 -c "
import json
with open('hotels.json', 'r') as f:
    data = json.load(f)
print(f'✅ 数据正常: {len(data)}家酒店')
"
```

### 🔧 故障排除

#### 常见问题
1. **无返回结果**
   - 原因: 筛选条件过于严格
   - 解决: 放宽条件，如`distance_category=全部`

2. **返回错误信息**  
   - 原因: 参数格式错误
   - 解决: 检查JSON格式或使用自然语言

3. **Gogo未识别**
   - 原因: 技能未加载
   - 解决: 重启OpenClaw或重新加载技能

#### 诊断命令
```bash
# 检查技能是否加载
openclaw skills list | grep ihg-monitor

# 检查脚本权限
ls -la /home/node/.openclaw/scripts/ihg-monitor-python/query.py

# 测试直接调用
cd /home/node/.openclaw/scripts/ihg-monitor-python
python3 query.py "上海周边"
```

---

## 📈 技能使用最佳实践

### 🎯 给用户的建议
1. **清晰表达需求**: "我想找...有...的...酒店"
2. **利用关键词**: "行政酒廊"、"洲际"、"近程"、"推荐"
3. **组合查询**: "江浙沪 + 行政酒廊 + 洲际"
4. **数量控制**: "推荐3家"、"最好的1家"

### 🔧 给维护者的建议  
1. **定期数据更新**: 每季度检查酒店积分基准值
2. **监控性能**: 查询响应时间应<500ms
3. **备份策略**: 每次修改前备份hotels.json和query.py
4. **文档同步**: 功能变更时更新此指南

### 🚀 给开发者的建议
1. **扩展思路**: 添加更多城市、支持日期查询
2. **优化方向**: 对接真实IHG API、个性化推荐
3. **集成可能**: 与日历、行程规划技能联动

---

## 📞 支持与反馈

### 🆘 获取帮助
1. **技能问题**: 检查本指南"故障排除"部分
2. **数据问题**: 确认hotels.json数据完整性
3. **集成问题**: 验证OpenClaw技能加载状态
4. **功能建议**: 记录并反馈给维护者

### 📝 反馈渠道
- **紧急问题**: 联系BobClaw直接处理
- **功能建议**: 记录在技能需求清单中
- **数据纠错**: 提交酒店数据更新请求

### 🔄 更新通知
- **版本更新**: 通过OpenClaw系统通知
- **数据更新**: 季度性更新，不频繁变更
- **紧急修复**: 立即通知并自动更新

---

## 🎉 使用愉快！

本技能已为江浙沪地区IHG钻卡会员优化，提供精准、智能的酒店推荐服务。如有任何问题或建议，请随时反馈。

**最后提醒**: 
- 积分价值会波动，建议出行前再次确认
- 钻卡权益以酒店实际执行为准
- 关注IHG官方渠道获取最新促销信息

祝您积分兑换愉快！ ✨

path: SKILL_OLD.md
content: # 🏨 IHG江浙沪酒店积分房查询技能

## 📋 技能概要
**技能ID**: `ihg-monitor`  
**版本**: v2.1.0  
**最后更新**: 2026-04-08  
**开发者**: BobClaw (OpenClaw运维工程师)  
**兼容性**: OpenClaw 2026.4.2 - 2026.5.x  

## 🎯 核心功能
智能查询江浙沪地区IHG酒店的积分房情况和优惠活动，为钻卡会员提供精准的酒店推荐和积分价值分析。

### 🗺️ **地理范围**
- **覆盖区域**: 江浙沪3省市 (上海、江苏、浙江)
- **酒店数量**: 23家精选酒店
- **距离分类**: 近程(1-2h)/中程(2-3h)/远程(3-4h)三级体系

### 🏷️ **品牌支持**
- **顶级奢华**: 洲际(InterContinental)、丽晶(Regent)
- **中式奢华**: 华邑(HUALUXE)  
- **精品设计**: 金普顿(Kimpton)、英迪格(Indigo)
- **高端商务**: 皇冠假日(Crowne Plaza)
- **生活方式**: voco、逸衡(even)
- **中端商务**: 假日(Holiday Inn)
- **排除品牌**: 智选假日(Holiday Inn Express)

### 🍽️ **特色功能**
- **行政酒廊筛选**: 支持必须有/必须无/不限三种模式
- **智能推荐**: 综合品牌、距离、价值比、行政酒廊评分算法
- **价值分析**: 积分vs现金价值比计算，智能兑换建议
- **品牌多样性**: 自动保证推荐结果的品牌多样性

## 💬 使用方式

### Gogo自然语言调用
```
# 基础查询
Gogo，查一下上海周边IHG积分房
Gogo，江浙沪有什么好的IHG酒店
Gogo，IHG最近有什么优惠活动

# 高级筛选
Gogo，推荐几个带行政酒廊的洲际酒店
Gogo，近程华邑酒店怎么样
Gogo，远程voco设计酒店

# 品牌专查
Gogo，洲际酒店推荐
Gogo，华邑酒店有行政酒廊吗
Gogo，推荐几家皇冠假日
```

### 技能直接调用
```bash
# 传统查询模式
ihg-monitor "上海周边"
ihg-monitor "优惠信息"

# JSON参数模式
ihg-monitor '{"distance_category":"近程","brand_type":"洲际"}'
ihg-monitor '{"executive_lounge":"true","count":3}'
```

## 🔧 技术实现

### 脚本架构
```
query.py (v2.1.0)
├── 多输入源支持 (命令行/环境变量/JSON)
├── 智能推荐算法 (综合评分系统)
├── 多维度筛选器 (距离/品牌/行政酒廊)
├── 价值比计算引擎
├── 格式化报告生成器
└── 优惠活动查询模块
```

### 数据模型
```json
// hotels.json (23家酒店)
{
  "name": "上海浦东丽晶酒店",
  "city": "上海",
  "distance_category": "近程",
  "category": "InterContinental",
  "brand": "洲际酒店", 
  "tier": 1,
  "executive_lounge": true,
  "brand_type": "奢华商务",
  "base_points": 35000,
  "cash_price_range": [1600, 2200],
  "diamond_benefits": ["免费早餐", "房型升级", "行政酒廊"],
  "description": "陆家嘴核心区，俯瞰黄浦江，钻卡首选"
}
```

### 智能算法
**推荐评分公式**:
```
评分 = 品牌等级分×1.0 + 行政酒廊分×0.5 + 距离分数×0.3 + 价值比分数×1.5
```

**价值比建议标准**:
- >1.3: 💎 **极佳兑换** (强烈推荐积分)
- 1.1-1.3: ✅ **推荐兑换** (优先选择积分)  
- 0.9-1.1: ℹ️ **可考虑兑换** (视情况选择)
- <0.9: ⚠️ **建议使用现金** (现金更划算)

## 📁 文件结构

### 技能目录
```
~/.openclaw/skills/ihg-monitor/
├── 📄 SKILL.md                    # 技能说明文档 (本文件)
├── 📄 skills.json                # 技能定义 (OpenClaw skill v1格式)
├── 📄 GOGO_INSTRUCTIONS.md       # Gogo调用详细指南
├── 📄 skills_enhanced.json       # 增强版技能定义 (备份)
├── 📁 references/                # 参考文档
│   ├── 📄 CHANGELOG.md          # 版本变更历史
│   └── 📄 audit_report.json     # 审计报告
├── 📁 scripts/                  # 维护脚本
│   └── 📄 version_audit.py     # 版本审计工具
└── 📁 legacy/                   # 历史版本备份
```

### 脚本目录  
```
~/.openclaw/scripts/ihg-monitor-python/
├── 📄 query.py                 # 主查询脚本 (v2.1.0)
├── 📄 query_v2.py              # 功能完整版 (备份)
├── 📄 query_v1.py              # 原始版本 (备份)
├── 📄 hotels.json             # 酒店数据文件 (23家)
├── 📄 hotels.json.backup.*    # 数据备份版本
├── 📄 config.yaml            # 配置文件 (保留兼容)
├── 📄 monitor.py             # 原始监控系统 (保留)
└── 📄 diagnose.py           # 诊断工具脚本
```

## 🛠️ 技能维护

### 定期维护任务
| 任务 | 频率 | 操作 |
|------|------|------|
| **数据验证** | 每月 | 检查酒店积分基准值和现金价格区间 |
| **功能测试** | 每季度 | 运行全功能测试验证技能正常 |
| **版本审计** | 版本变更时 | 检查版本一致性和文件完整性 |
| **完整备份** | 每半年 | 备份完整技能包到外部存储 |

### 数据更新流程
1. **备份当前数据**: `cp hotels.json hotels.json.backup.$(date +%Y%m%d)`
2. **修改酒店信息**: 更新积分基准值、现金价格、行政酒廊状态
3. **验证数据完整性**: 运行`python3 -c "import json; print('数据有效')"`
4. **测试查询功能**: `python3 query.py "上海周边" | head -20`
5. **更新变更记录**: 在CHANGELOG.md中记录变更

### 故障诊断
```bash
# 快速诊断命令
cd /home/node/.openclaw/scripts/ihg-monitor-python

# 1. 检查Python环境
python3 --version

# 2. 检查数据文件
python3 -c "import json; print('数据正常')" < hotels.json

# 3. 测试基础功能
python3 query.py "测试查询"

# 4. 使用诊断工具
python3 diagnose.py
```

## 🔄 版本管理

### 版本命名规范
- **主版本 (vX)**: 架构重大变更或不向后兼容的变更
- **次版本 (vX.Y)**: 功能增强、新品牌添加、算法优化
- **修订版 (vX.Y.Z)**: Bug修复、性能优化、数据更新

### 版本历史
- **v1.0.0** (2026-04-07): 初始版本，上海周边6家酒店基础查询
- **v2.0.0** (2026-04-08): 增强版，江浙沪23家酒店，支持品牌筛选、行政酒廊过滤
- **v2.1.0** (2026-04-08): OpenClaw 4.5兼容版，支持环境变量输入，优化错误处理

### 变更审计
技能包含完整的版本审计系统:
```bash
# 运行版本审计
cd /home/node/.openclaw/skills/ihg-monitor
python3 scripts/version_audit.py

# 查看审计报告
cat references/audit_report.json | python3 -m json.tool

# 查看变更历史
cat references/CHANGELOG.md
```

## ⚙️ 配置参数

### 技能输入参数
```json
{
  "query": "传统查询关键词 ('上海周边'/'优惠信息')",
  "distance_category": "'近程'/'中程'/'远程'/'全部'",
  "brand_type": "'洲际'/'丽晶'/'皇冠'/'华邑'/'voco'/'even'/'英迪格'/'金普顿'/'全部'",
  "executive_lounge": "'true'/'false'/'不限'",
  "count": "推荐数量 (1-10, 默认4)"
}
```

### 环境要求
- **Python版本**: 3.8+
- **内存需求**: <50MB
- **执行时间**: <500ms (95%查询)
- **文件权限**: 需要读取hotels.json和执行Python的权限

## 📞 支持信息

### 故障排除指南
| 问题现象 | 可能原因 | 解决方案 |
|----------|----------|----------|
| 查询无返回 | 筛选条件太严格 | 放宽条件，如`distance_category=全部` |
| 返回错误信息 | 参数格式错误 | 使用JSON格式或自然语言查询 |
| Gogo未识别 | 技能未加载 | 重启OpenClaw或重新加载技能 |
| 推荐不合理 | 数据过期 | 更新hotels.json中的酒店信息 |

### 获取帮助
1. **查看详细指南**: `/home/node/.openclaw/skills/ihg-monitor/GOGO_INSTRUCTIONS.md`
2. **使用诊断工具**: `/home/node/.openclaw/scripts/ihg-monitor-python/diagnose.py`
3. **检查技能状态**: `openclaw skills list | grep ihg-monitor`
4. **联系维护者**: BobClaw (OpenClaw运维工程师)

### 反馈与建议
- **功能建议**: 记录在技能需求清单中
- **数据纠错**: 提交酒店信息更新请求
- **紧急问题**: 直接联系维护者处理

## 📈 性能指标

### 服务质量标准
- **查询成功率**: >99%
- **平均响应时间**: <300ms (不含网络延迟)
- **错误率**: <1%
- **数据新鲜度**: 酒店数据每季度更新

### 监控指标
```bash
# 性能测试命令
time python3 query.py "上海周边" > /dev/null

# 内存使用测试
python3 -c "
import resource, sys
sys.argv = ['query.py', '上海周边']
exec(open('query.py').read())
usage = resource.getrusage(resource.RUSAGE_SELF)
print(f'峰值内存: {usage.ru_maxrss/1024:.1f} MB')
"
```

## 🔮 未来规划

### 短期规划 (3个月内)
1. **扩展更多城市**: 北京、广州、深圳等一线城市
2. **日期查询支持**: 支持指定入住日期查询积分房
3. **历史趋势分析**: 积分需求变化趋势图表

### 中期规划 (6个月内)
1. **真实数据对接**: 对接IHG官方API获取实时数据
2. **个性化推荐**: 基于用户历史偏好推荐酒店
3. **价格提醒**: 设置积分价值阈值提醒

### 长期愿景 (1年内)
1. **全品牌覆盖**: IHG全球酒店数据支持
2. **智能行程规划**: 结合日历和行程的酒店推荐
3. **多平台集成**: 与机票、租车等旅行服务集成

---

## 🎉 技能状态
✅ **当前状态**: 正常运行，v2.1.0版本已稳定部署  
📅 **最后验证**: 2026-04-08 (版本升级时)  
🔍 **下次维护**: 2026-05-08 (月度数据检查)  

技能已就绪，为江浙沪地区IHG钻卡会员提供专业、智能的酒店推荐服务！

---
*本技能由BobClaw开发维护，定期更新以确保服务质量。*

path: _meta.json
content: ownerId: kn74sh43zy17mydgtdb3r6hszh82znam
slug: find-ihg
version: 2.2.0
publishedAt: 1776005133630

path: references/CHANGELOG.md
content: # IHG积分房查询技能 - 变更日志

## v2.0.0 (2026-04-07)
### 🚀 重大更新
- **架构重构**: 从Node.js定时任务系统迁移到Python按需查询系统
- **性能优化**: 查询响应时间从分钟级提升到<100ms
- **资源节省**: 取消定时推送，改为按需查询，节省系统资源
- **数据模拟**: 使用模拟数据代替真实API调用，避免反爬限制

### 🔧 技术变更
- **主脚本**: 从 `monitor.js` 迁移到 `query.py`
- **执行方式**: 从定时任务改为技能调用
- **数据源**: 从真实查询改为智能模拟数据
- **集成方式**: 通过OpenClaw技能框架与Gogo深度集成

### 📊 功能改进
- **价值计算**: 优化积分vs现金价值比算法
- **结果格式**: 改进输出格式，增强可读性
- **酒店列表**: 精简到6家核心酒店
- **参数映射**: 支持自然语言参数识别

### 🐛 Bug修复
- 修复了积分需求波动算法中的异常值
- 优化了现金价格模拟范围
- 修正了价值比计算公式

### 🔗 相关文件
1. `skills.json` - 技能元数据定义 (v2)
2. `query.py` - 主查询脚本 (Python)
3. `GOGO_INSTRUCTIONS.md` - Gogo调用指南
4. 废弃: `monitor.js`, `cron配置`等

---

## v1.0.0 (2026-04-07)
### 🎯 初始版本
- **架构**: Node.js定时任务系统
- **功能**: 定时检查优惠活动和积分房
- **推送**: 通过飞书定时推送结果
- **监控**: 6家酒店，3个定时任务
- **局限性**: 资源消耗大，响应慢

### ⏰ 定时任务配置
- 优惠检查: 6:00, 12:00, 18:00
- 积分房检查: 8:00, 20:00  
- 周报生成: 周一10:00

### 📁 文件结构
- `monitor.js` - 主监控脚本
- `config.json` - 配置文件
- `hotels.json` - 酒店数据
- `cron配置` - 定时任务设置

---

## 🎯 版本命名规范
- **主版本号 (vX)**: 重大架构变更或功能重构
- **次版本号 (vX.Y)**: 功能增强、新酒店添加
- **修订号 (vX.Y.Z)**: Bug修复、性能优化

---

## 📈 未来版本规划
### v2.1.0 (规划中)
- 添加更多城市支持 (北京、广州、深圳)
- 实现房型区分查询
- 添加特定日期查询功能

### v2.2.0 (规划中)  
- 对接IHG真实数据源
- 实现价格历史趋势分析
- 添加个性化推荐算法

### v3.0.0 (长期规划)
- 多品牌酒店支持 (万豪、希尔顿等)
- 智能比价引擎
- 用户偏好学习系统

path: references/audit_report.json
content: {
  "audit_time": "2026-04-07T21:53:23.473775",
  "skill_name": "ihg-monitor",
  "status": "PASS",
  "checks": [
    {
      "check": "文件存在性: 技能主文档",
      "file": "SKILL.md",
      "status": "PASS",
      "details": "文件存在"
    },
    {
      "check": "文件存在性: 技能配置文件",
      "file": "skills.json",
      "status": "PASS",
      "details": "文件存在"
    },
    {
      "check": "文件存在性: Gogo调用指南",
      "file": "GOGO_INSTRUCTIONS.md",
      "status": "PASS",
      "details": "文件存在"
    },
    {
      "check": "文件存在性: 变更日志",
      "file": "references/CHANGELOG.md",
      "status": "PASS",
      "details": "文件存在"
    },
    {
      "check": "文件存在性: 版本审计脚本",
      "file": "scripts/version_audit.py",
      "status": "PASS",
      "details": "文件存在"
    },
    {
      "check": "版本一致性检查",
      "status": "PASS",
      "details": "SKILL.md: v2.0.0, CHANGELOG.md: v2.0.0"
    },
    {
      "check": "skills.json配置验证",
      "status": "PASS",
      "details": "技能ID: ihg-monitor, 名称: IHG积分房查询"
    },
    {
      "check": "目录结构扫描",
      "status": "PASS",
      "details": "共扫描 3 个目录"
    }
  ],
  "warnings": [],
  "errors": [],
  "directory_structure": {
    "根目录": {
      "directories": [
        "references",
        "scripts"
      ],
      "files": [
        "skills.json",
        "SKILL.md",
        "GOGO_INSTRUCTIONS.md"
      ],
      "file_count": 3,
      "file_hashes": {
        "skills.json": "e7d92b0a",
        "SKILL.md": "1b0d60c4",
        "GOGO_INSTRUCTIONS.md": "228a4751"
      }
    },
    "references": {
      "directories": [],
      "files": [
        "CHANGELOG.md",
        "audit_report.json"
      ],
      "file_count": 2,
      "file_hashes": {
        "references/CHANGELOG.md": "a381e840",
        "references/audit_report.json": "61f77317"
      }
    },
    "scripts": {
      "directories": [],
      "files": [
        "version_audit.py"
      ],
      "file_count": 1,
      "file_hashes": {
        "scripts/version_audit.py": "99f40fa7"
      }
    }
  },
  "summary": {
    "total_checks": 8,
    "passed_checks": 8,
    "warn_checks": 0,
    "fail_checks": 0,
    "warning_count": 0,
    "error_count": 0
  }
}

path: scripts/backup.sh
content: #!/bin/bash
# IHG技能备份脚本
# 用法: ./backup.sh [版本标签]

set -e

VERSION=${1:-"v2.2-$(date +%Y%m%d)"}
BACKUP_ROOT="/home/node/.openclaw/backups"
SKILLS_DIR="/home/node/.openclaw/skills/find-ihg"
SCRIPTS_DIR="/home/node/.openclaw/scripts/ihg-monitor-python"
BACKUP_DIR="$BACKUP_ROOT/find-ihg-$VERSION"

echo "💾 开始备份版本: $VERSION"

# 创建备份目录
mkdir -p "$BACKUP_DIR/skills"
mkdir -p "$BACKUP_DIR/scripts"

echo "📥 备份技能文件..."
cp -r "$SKILLS_DIR/"* "$BACKUP_DIR/skills/" 2>/dev/null || true

echo "📥 备份脚本文件..."
cp -r "$SCRIPTS_DIR/"* "$BACKUP_DIR/scripts/" 2>/dev/null || true

# 创建版本信息文件
cat > "$BACKUP_DIR/version.info" << EOF
version: $VERSION
backup_time: $(date +"%Y-%m-%d %H:%M:%S")
openclaw_version: $(openclaw --version 2>/dev/null || echo "unknown")
files:
  - skills: $(find "$BACKUP_DIR/skills" -type f | wc -l)
  - scripts: $(find "$BACKUP_DIR/scripts" -type f | wc -l)
description: IHG技能v2.2生产版本备份
EOF

echo "✅ 备份完成!"
echo "📊 备份统计:"
echo "   - 备份目录: $BACKUP_DIR"
echo "   - 技能文件: $(find "$BACKUP_DIR/skills" -type f | wc -l) 个"
echo "   - 脚本文件: $(find "$BACKUP_DIR/scripts" -type f | wc -l) 个"
echo "   - 总大小: $(du -sh "$BACKUP_DIR" | cut -f1)"

# 显示备份列表
echo "📋 可用备份:"
ls -la "$BACKUP_ROOT/" 2>/dev/null || echo "无备份"

path: scripts/health_check.py
content: #!/usr/bin/env python3
"""
IHG技能健康检查脚本
检查技能响应时间、数据完整性和基本功能
"""

import sys
import os
import time
import json
sys.path.insert(0, '/home/node/.openclaw/scripts/ihg-monitor-python')

try:
    from query import execute_query
except ImportError as e:
    print(f"❌ 导入失败: {e}")
    sys.exit(1)

def check_response_time():
    """检查响应时间"""
    test_cases = [
        {"query": "上海周边", "type": "hotels"},
        {"query": "优惠信息", "type": "hotels"},
        {"query": "", "type": "hotels", "distance_category": "上海市内"}
    ]
    
    print("⏱️  响应时间测试...")
    times = []
    
    for i, test in enumerate(test_cases, 1):
        try:
            start = time.time()
            result = execute_query(test)
            end = time.time()
            elapsed = (end - start) * 1000  # 毫秒
            times.append(elapsed)
            
            if "error" not in result.lower():
                print(f"  ✅ 测试{i}: {elapsed:.1f}ms - 查询 '{test.get('query', '默认')}' 成功")
            else:
                print(f"  ❌ 测试{i}: 查询失败 - {result[:100]}")
                return False
        except Exception as e:
            print(f"  💥 测试{i}: 异常 - {str(e)}")
            return False
    
    avg_time = sum(times) / len(times)
    print(f"📊 平均响应时间: {avg_time:.1f}ms")
    
    # 阈值检查
    if avg_time < 150:
        print("✅ 响应时间符合要求 (<150ms)")
        return True
    else:
        print(f"⚠️ 响应时间较长 ({avg_time:.1f}ms > 150ms)")
        return False

def check_data_integrity():
    """检查数据完整性"""
    print("\n📊 数据完整性检查...")
    
    hotels_file = '/home/node/.openclaw/scripts/ihg-monitor-python/hotels.json'
    try:
        with open(hotels_file, 'r', encoding='utf-8') as f:
            hotels = json.load(f)
        
        total = len(hotels)
        shanghai = sum(1 for h in hotels if h.get('city') == '上海')
        hualuxe = sum(1 for h in hotels if h.get('brand') == '华邑酒店')
        crowne = sum(1 for h in hotels if h.get('brand') == '皇冠假日酒店')
        
        print(f"  ✅ 酒店总数: {total}家")
        print(f"  ✅ 上海酒店: {shanghai}家 ({shanghai/total*100:.1f}%)")
        print(f"  ✅ 华邑酒店: {hualuxe}家 ({hualuxe/total*100:.1f}%)")
        print(f"  ✅ 皇冠假日: {crowne}家 ({crowne/total*100:.1f}%)")
        
        # 基本验证
        if total >= 40 and shanghai >= 8 and hualuxe >= 8 and crowne >= 8:
            print("✅ 数据完整性检查通过")
            return True
        else:
            print("❌ 数据完整性检查失败")
            return False
            
    except Exception as e:
        print(f"❌ 数据文件读取失败: {e}")
        return False

def main():
    print("🔍 IHG技能健康检查")
    print("=" * 50)
    
    # 运行检查
    time_ok = check_response_time()
    data_ok = check_data_integrity()
    
    print("\n" + "=" * 50)
    print("📋 检查总结:")
    
    if time_ok and data_ok:
        print("✅ 所有检查通过！技能状态健康")
        return 0
    else:
        print("❌ 部分检查失败，需要关注")
        return 1

if __name__ == "__main__":
    sys.exit(main())

path: scripts/rollback.sh
content: #!/bin/bash
# IHG技能回滚脚本
# 用法: ./rollback.sh [版本号]
#   v2.1 - 回滚到v2.1版本
#   v2.0 - 回滚到v2.0版本

set -e

VERSION=${1:-"v2.1"}
BACKUP_ROOT="/home/node/.openclaw/backups"
SKILLS_DIR="/home/node/.openclaw/skills/find-ihg"
SCRIPTS_DIR="/home/node/.openclaw/scripts/ihg-monitor-python"
BACKUP_DIR="$BACKUP_ROOT/find-ihg-$VERSION"

echo "🔄 开始回滚到 $VERSION 版本..."

# 检查备份是否存在
if [ ! -d "$BACKUP_DIR" ]; then
    echo "❌ 备份目录不存在: $BACKUP_DIR"
    exit 1
fi

echo "📦 备份目录内容:"
ls -la "$BACKUP_DIR"

# 询问确认
read -p "⚠️  确认要回滚到 $VERSION 版本吗？(y/N): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo "❌ 用户取消回滚"
    exit 0
fi

# 执行回滚
echo "📤 回滚技能文件..."
cp -r "$BACKUP_DIR/skills/"* "$SKILLS_DIR/" 2>/dev/null || true

echo "📤 回滚脚本文件..."
cp -r "$BACKUP_DIR/scripts/"* "$SCRIPTS_DIR/" 2>/dev/null || true

echo "✅ 回滚完成！"
echo "📝 版本信息:"
echo "   - 技能目录: $SKILLS_DIR"
echo "   - 脚本目录: $SCRIPTS_DIR"
echo "   - 回滚版本: $VERSION"

# 验证回滚
echo "🔍 验证回滚..."
if [ -f "$SKILLS_DIR/skills.json" ]; then
    echo "✅ 技能配置已恢复"
else
    echo "❌ 技能配置恢复失败"
fi

path: scripts/version_audit.py
content: #!/usr/bin/env python3
"""
IHG技能版本审计脚本
用于检查技能版本状态、文件完整性、变更历史
"""

import os
import json
import hashlib
import datetime
from pathlib import Path

class SkillAuditor:
    def __init__(self, skill_dir):
        self.skill_dir = Path(skill_dir)
        self.results = {
            "audit_time": datetime.datetime.now().isoformat(),
            "skill_name": "ihg-monitor",
            "status": "PASS",
            "checks": [],
            "warnings": [],
            "errors": []
        }
    
    def check_file_exists(self, file_path, description):
        """检查文件是否存在"""
        full_path = self.skill_dir / file_path
        exists = full_path.exists()
        
        check = {
            "check": f"文件存在性: {description}",
            "file": str(file_path),
            "status": "PASS" if exists else "FAIL",
            "details": f"文件{'存在' if exists else '不存在'}"
        }
        
        self.results["checks"].append(check)
        
        if not exists:
            self.results["warnings"].append(f"缺失文件: {file_path} - {description}")
        
        return exists
    
    def get_file_hash(self, file_path):
        """获取文件哈希值"""
        full_path = self.skill_dir / file_path
        
        if not full_path.exists():
            return None
        
        with open(full_path, 'rb') as f:
            return hashlib.md5(f.read()).hexdigest()[:8]
    
    def check_version_consistency(self):
        """检查版本一致性"""
        # 从SKILL.md提取版本
        skill_md_path = self.skill_dir / "SKILL.md"
        version_skills = "unknown"
        
        if skill_md_path.exists():
            with open(skill_md_path, 'r', encoding='utf-8') as f:
                content = f.read()
                import re
                match = re.search(r'版本\s*[vV]?(\d+\.\d+\.\d+)', content)
                if match:
                    version_skills = match.group(1)
        
        # 从CHANGELOG.md获取最新版本
        changelog_path = self.skill_dir / "references" / "CHANGELOG.md"
        version_changelog = "unknown"
        
        if changelog_path.exists():
            with open(changelog_path, 'r', encoding='utf-8') as f:
                content = f.read()
                import re
                match = re.search(r'## v(\d+\.\d+\.\d+)', content)
                if match:
                    version_changelog = match.group(1)
        
        check = {
            "check": "版本一致性检查",
            "status": "PASS" if version_skills == version_changelog else "WARN",
            "details": f"SKILL.md: v{version_skills}, CHANGELOG.md: v{version_changelog}"
        }
        
        self.results["checks"].append(check)
        
        if version_skills != version_changelog:
            self.results["warnings"].append(f"版本不一致: SKILL.md(v{version_skills}) ≠ CHANGELOG.md(v{version_changelog})")
    
    def check_skill_json(self):
        """检查skills.json配置"""
        json_path = self.skill_dir / "skills.json"
        
        if not json_path.exists():
            self.results["errors"].append("skills.json文件不存在")
            return
        
        try:
            with open(json_path, 'r', encoding='utf-8') as f:
                data = json.load(f)
                
            skill = data.get("skills", [{}])[0]
            
            check = {
                "check": "skills.json配置验证",
                "status": "PASS",
                "details": f"技能ID: {skill.get('id')}, 名称: {skill.get('name')}"
            }
            
            self.results["checks"].append(check)
            
            # 检查执行命令
            exec_cmd = skill.get('exec', '')
            if 'query.py' not in exec_cmd:
                self.results["warnings"].append(f"执行命令可能不正确: {exec_cmd}")
                
        except Exception as e:
            self.results["errors"].append(f"skills.json解析错误: {str(e)}")
    
    def scan_directory_structure(self):
        """扫描目录结构"""
        file_tree = {}
        
        for root, dirs, files in os.walk(self.skill_dir):
            rel_root = Path(root).relative_to(self.skill_dir)
            
            # 跳过隐藏文件和目录
            dirs[:] = [d for d in dirs if not d.startswith('.')]
            files = [f for f in files if not f.startswith('.')]
            
            if str(rel_root) == '.':
                rel_root_str = "根目录"
            else:
                rel_root_str = str(rel_root)
            
            file_tree[rel_root_str] = {
                "directories": dirs,
                "files": files,
                "file_count": len(files)
            }
            
            # 记录文件哈希
            for file in files:
                file_path = Path(root) / file
                rel_path = file_path.relative_to(self.skill_dir)
                file_hash = self.get_file_hash(rel_path)
                
                if file_hash:
                    key = f"{rel_root_str}/{file}" if rel_root_str != "根目录" else file
                    file_tree[rel_root_str].setdefault("file_hashes", {})[key] = file_hash
        
        check = {
            "check": "目录结构扫描",
            "status": "PASS",
            "details": f"共扫描 {len(file_tree)} 个目录"
        }
        
        self.results["checks"].append(check)
        self.results["directory_structure"] = file_tree
    
    def generate_report(self):
        """生成审计报告"""
        # 更新总体状态
        if self.results["errors"]:
            self.results["status"] = "FAIL"
        elif self.results["warnings"]:
            self.results["status"] = "WARN"
        
        # 统计
        self.results["summary"] = {
            "total_checks": len(self.results["checks"]),
            "passed_checks": len([c for c in self.results["checks"] if c["status"] == "PASS"]),
            "warn_checks": len([c for c in self.results["checks"] if c["status"] == "WARN"]),
            "fail_checks": len([c for c in self.results["checks"] if c["status"] == "FAIL"]),
            "warning_count": len(self.results["warnings"]),
            "error_count": len(self.results["errors"])
        }
        
        return self.results
    
    def run_full_audit(self):
        """运行完整审计"""
        print("🔍 开始IHG技能版本审计...")
        
        # 检查核心文件
        self.check_file_exists("SKILL.md", "技能主文档")
        self.check_file_exists("skills.json", "技能配置文件")
        self.check_file_exists("GOGO_INSTRUCTIONS.md", "Gogo调用指南")
        self.check_file_exists("references/CHANGELOG.md", "变更日志")
        
        # 检查脚本文件 (如果存在)
        self.check_file_exists("scripts/version_audit.py", "版本审计脚本")
        
        # 执行各项检查
        self.check_version_consistency()
        self.check_skill_json()
        self.scan_directory_structure()
        
        # 生成报告
        report = self.generate_report()
        
        print(f"✅ 审计完成 - 状态: {report['status']}")
        print(f"   检查项: {report['summary']['total_checks']}个")
        print(f"   通过: {report['summary']['passed_checks']}个")
        
        if report['warnings']:
            print(f"\n⚠️  警告 ({len(report['warnings'])}个):")
            for warning in report['warnings']:
                print(f"   - {warning}")
        
        if report['errors']:
            print(f"\n❌ 错误 ({len(report['errors'])}个):")
            for error in report['errors']:
                print(f"   - {error}")
        
        return report

def main():
    """主函数"""
    # 获取技能目录
    script_dir = Path(__file__).parent
    skill_dir = script_dir.parent
    
    # 创建审计器并运行
    auditor = SkillAuditor(skill_dir)
    report = auditor.run_full_audit()
    
    # 保存报告到JSON文件
    report_file = skill_dir / "references" / "audit_report.json"
    
    import json
    with open(report_file, 'w', encoding='utf-8') as f:
        json.dump(report, f, ensure_ascii=False, indent=2)
    
    print(f"\n📊 详细报告已保存至: {report_file.relative_to(skill_dir)}")
    
    # 返回状态码
    return 0 if report['status'] != 'FAIL' else 1

if __name__ == "__main__":
    exit(main())

path: simple_skills.json
content: {
  "schema": "openclaw.skill.v1",
  "skills": [
    {
      "id": "find-ihg",
      "name": "IHG积分房查找",
      "description": "查找江浙沪地区IHG酒店的积分房和优惠活动",
      "brief": "查找IHG酒店积分房",
      "examples": ["查一下上海周边IHG积分房"],
      "version": "2.2",
      "inputs": [
        {
          "name": "query",
          "type": "string",
          "description": "查询内容",
          "required": true
        }
      ],
      "exec": {
        "command": "python3",
        "args": [
          "/home/node/.openclaw/scripts/ihg-monitor-python/query.py",
          "{{query}}"
        ]
      },
      "metadata": {
        "category": "travel",
        "author": "OpenClaw",
        "created": "2026-04-07"
      }
    }
  ]
}

path: skills.json
content: {
  "schema": "openclaw.skill.v1",
  "skills": [
    {
      "id": "find-ihg",
      "name": "find-ihg",
      "action": "find",
      "object": "ihg",
      "icon": "🏨",
      "description": "查找江浙沪地区IHG酒店积分房。支持按距离、品牌筛选，透明显示数据质量，智能推荐高性价比&家庭友好选择",
      "brief": "IHG家庭度假助手 · 数据透明 · 智能推荐",
      "examples": [
        "查一下上海周边IHG积分房",
        "找有行政酒廊的华邑酒店",
        "推荐几个近距离皇冠假日酒店",
        "IHG有什么优惠活动",
        "查看杭州市内IHG酒店"
      ],
      "version": "2.2",
      "compatibility": {
        "minVersion": "2026.4.2",
        "maxVersion": "2026.5.x"
      },
      "inputs": [
        {
          "name": "query",
          "type": "string",
          "description": "传统查询模式关键词：'上海周边'、'上海浦东'、'优惠信息'，或者JSON格式的高级查询",
          "required": false,
          "default": ""
        },
        {
          "name": "distance_category",
          "type": "string",
          "description": "距离分类：'上海市内'(仅上海行政区)、'近距离'(≤100km/≤1h)、'中等距离'(100-200km/1-2h)、'远距离'(200-300km/2-3h)、'全部'",
          "required": false,
          "default": "全部",
          "enum": ["上海市内", "近距离", "中等距离", "远距离", "全部"]
        },
        {
          "name": "brand_type", 
          "type": "string",
          "description": "品牌类型：'洲际'、'丽晶'、'皇冠'、'华邑'、'voco'、'even'、'英迪格'、'金普顿'、'全部'",
          "required": false,
          "default": "全部",
          "enum": ["洲际", "丽晶", "皇冠", "华邑", "voco", "even", "英迪格", "金普顿", "全部"]
        },
        {
          "name": "executive_lounge",
          "type": "string",
          "description": "行政酒廊筛选：'true'(必须有)、'false'(必须无)、'不限'",
          "required": false, 
          "default": "不限",
          "enum": ["true", "false", "不限"]
        },
        {
          "name": "count",
          "type": "number",
          "description": "返回推荐数量：3-4家精品酒店",
          "required": false,
          "default": 4,
          "minimum": 1,
          "maximum": 10
        }
      ],
      "outputs": [
        {
          "name": "result",
          "type": "string",
          "description": "格式化查询结果，包含酒店详情、价值比分析、推荐建议"
        }
      ],
      "exec": {
        "command": "python3",
        "args": [
          "./scripts/query.py",
          "{{query}}"
        ],
        "env": {
          "PYTHONUNBUFFERED": "1"
        }
      },
      "metadata": {
    "version_label": "v2.2 透明信任里程碑版",
        "category": "travel",
        "tags": ["IHG", "酒店", "积分房", "优惠", "旅行", "酒店预订", "find", "查询"],
        "author": "BobClaw",
        "created": "2026-04-07",
        "updated": "2026-04-08",
        "development_path": "/home/node/.openclaw/workspace/skills/find-ihg-dev/",
        "keywords": ["IHG", "酒店", "积分房", "优惠", "查找", "搜索", "查询", "预订", "上海", "江浙沪", "近距离", "上海市内"],
        "patterns": [
          "^查一下?.*IHG.*(积分房|酒店)",
          "^查找.*IHG.*酒店$",
          "^推荐.*IHG.*积分$",
          "^IHG.*优惠.*活动?$"
        ]
      },
      "permissions": {
        "files": ["./scripts/hotels.json"],
        "exec": ["python3"]
      }
    }
  ]
}

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