[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71JPF82PYTK0NYMJF8Y9E48":3,"skill-same:01M71JPF82PYTK0NYMJF8Y9E48":673},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":5,"forksCount":24,"repositoryHtmlUrl":25,"repositoryHomepageUrl":6,"ownerHtmlUrl":26,"ownerBlogUrl":6,"ownerDescription":27,"updatedAt":28,"install":29,"resources":42},"01M71JPF82PYTK0NYMJF8Y9E48","私家大厨",null,"FeatherHunter\u002FSKILLS","FeatherHunter","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F12967785?v=4","01M71JFD7JMNT8HWC3Y9JKMWGG","王辰浩","01M71JFD8DNYSPJPGX25Y4KX70",6,"MIT","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# 私家大厨 🍳\n\n## 管什么 \u002F 不管什么\n\n**管什么** —— 用户的私家菜谱本。录菜、查菜、做菜、采购清单、烹饪历史评分,一站管理。\n\n**不管什么** —— 不管食材采购下单(用户 2026-07-27 决策:**不实现**,本技能和居家管家都不实现)、不管个人热量与营养记录(那是卡路里)、不管外卖\u002F外送、不管自动烹饪设备。\n\n**一句话**:你的菜,这个本子全管;别的本子管的事,这个本子不碰。\n\n---\n\n## 跨 Skill 路由表(§03 铁律 3 · 显式声明)\n\n> 当用户唤醒词可能路由到多个 Skill 时,本表声明归属。AI 收到跨边界提问时,**严格按本表路由**,**禁止擅自跨 skill 调用**。\n\n### ✅ 已确定路由(11 项 · 基于现有实现)\n\n| 用户原话 | 归属 | 判定依据 |\n|----------|------|----------|\n| 采购清单 \u002F 生成清单 \u002F 排除可选 | **私家大厨** | shopping_manager.py 已实现 |\n| 录入食谱 \u002F 导入食谱 | **私家大厨** | recipe_import.py + orchestrator |\n| 做菜模式 \u002F 开始做菜 | **私家大厨** | cooking_render.py + cooking_mode.html |\n| 查看食谱 \u002F 查看食材 \u002F 查看步骤 \u002F 查看营养(菜本身)\u002F 查看背景 | **私家大厨** | recipe_render.py + recipe_view.html |\n| 记录做菜 \u002F 查看历史 \u002F 查看统计 | **私家大厨** | history_manager.py |\n| 添加派生关系 \u002F 查看派生关系 \u002F 从已有派生新菜 | **私家大厨** | relation_manager.py + 派生\u002F + render_派生.py(T12) |\n| 搜索食谱 \u002F 筛选 X | **私家大厨** | recipe_manager.py |\n| 修改食谱 \u002F 修改步骤 \u002F 修改食材 \u002F 修改难度 \u002F 修改份量 \u002F 废弃食谱 | **私家大厨** | 各 *_manager.py |\n| 体检 \u002F 批量改 \u002F 备份 | **私家大厨** | data_quality_report.py + render_batch_edit.py + export_backup.py(数据管理域) |\n| 记体重 \u002F 查体重 \u002F 查体重趋势 | **卡路里** | 卡路里 body_metrics 模块 |\n| 查热量 \u002F 查营养 \u002F 查营养结构 \u002F 查营养目标 \u002F 查健康报告 | **卡路里** | 卡路里主战场 |\n| 汇总作息 \u002F 查作息 \u002F 查日程 \u002F 商量计划 | **作息管家** | 作息管家 record + plan |\n\n### ✅ 已确定边界(4 项 · 用户 2026-07-27 拍板)\n\n| 用户原话 | 归属 | 边界判定 |\n|----------|------|---------|\n| \"查看营养 X\"(菜本身的营养) | **私家大厨** | 看 recipes.nutrition_info 表(每道菜独立营养);若用户说\"查营养\"或\"我的营养\" → 卡路里 |\n| \"采购清单 + 营养\" | **不联动**(默认) | 采购清单 = \"这次买菜要买啥\";卡路里食品库 = \"我常吃的食物\";除非用户明确说\"顺便存到食品库\"才联动 |\n| \"炊具\"(做菜需要哪些) | **私家大厨** | recipes.cookware 表(做菜角度,需要哪些炊具) |\n| \"炊具\"(实物管理) | **居家管家** | \"我家有几个炒锅\u002F锅在哪\" → 居家管家(实物角度) |\n| \"采购清单 + 核对库存\" | **居家管家**(联动) | 库存核对走居家管家「囤货盘点\u002F查物品」(G6 3a);**prompt 单工闭环,禁写死调用居家管家 CLI\u002F底层路径** |\n\n### ⚠️ 不实现(用户决策 · 2026-07-27)\n\n- **\"采购下单\"** —— 用户决策:**不实现**。本技能不实现,居家管家也不实现。SKILL.md 第 7 行\"不管食材采购下单(那是居家管家)\"声明**作废** —— 改为\"不管食材采购下单(用户决策:不实现)\"。\n\n**拍板原则**:按\"用户说 X 实际指向的实体归属\"判定,而不是按\"哪个 skill 有类似功能\"判定。\n\n---\n\n## ⚠️ HTML 同步规范（最高优先级）\n\n> **此规范优先级高于本文件中所有其他规定。**\n\n1. **全量同步**：该技能的所有优化和变动、脚本的所有变动都必须体现在 `私家大厨.html` 上。任何功能模块的新增、修改、删除，任何唤醒词的调整，任何 CLI 命令的变化，任何脚本逻辑的改动——都必须同步更新 HTML 页面中对应的内容。\n2. **最高优先级**：本条规定在所有规范中优先级最高。当其他流程或习惯与本条冲突时，以本条为准。\n3. **逐行确认**：对该技能的所有文件、脚本的任何一行修改，都需要明确得到用户的 1 次确认后方可执行。不得批量静默修改，不得跳过确认步骤。\n\n---\n\n> 版本：**v3** (2026-07-22 L1+L2+L3+L4+P1+P2+Scope 完整重构)\n> 设计：基于17张表(99 字段 \u002F 96 实际必填 \u002F 3 显式可空:step_ingredients.unit + tips.step_id + tips.ingredient_id),8大功能,35个唤醒词,无删除操作\n> 食材分类：v5.2 起 **11 类**(原 9 类拆出\"葱姜蒜\"和\"香草\"),见 `references\u002Fcategories.md`\n> 贴士分类：v3 P1 起 **8 类**(原 7 类增加\"其他\"兜底)\n> 火候枚举：5 值(微火\u002F小火\u002F中火\u002F大火\u002F猛火),`validators.validate_heat_level` 强校验\n> 贴士 scope(v3 P1.5 决策 2):**`step` \u002F `ingredient` \u002F `recipe` 三选一** 必填,通过 `--scope \u003C值>` 显式声明 tip 关联范围\n> 5层架构改造：\n> - v5.0 (2026-07-21) — 24\u002F24 + 30\u002F30 自检通过,见 `CHANGELOG.md` [5.1]\n> - **v3 L1** (2026-07-22) — DB NOT NULL 兜底墙,`init_db.py` + `migrations\u002F004_all_fields_not_null.sql`\n> - **v3 L2** (2026-07-22) — validators 占位符黑名单 + 18 manager 改 db.py + orchestrator.py 新建\n> - **v3 L3** (2026-07-22) — CLI 三段式统一 + `--human`\u002F`--json` 开关 + orchestrator 完整迁移\n> - **v3 L4** (2026-07-22) — 18 manager 函数体真迁 db.execute\u002Fquery\u002Ftransaction(`recipe_manager.export_json` 整体重构,4 处隐 bug 顺手修)\n> - **v3 P1** (2026-07-22) — 6 真 CLI bug 修复 + L1 哲学回归(无默认值兜底)+ `step_ingredients.unit` 改 NOT NULL(`migration 005`) + tips 加 `--scope` 值格式 flag + 加 7 个 validators(cookware\u002Frelation\u002Fserving_unit\u002Frating\u002Fpositive_int\u002Fdate_format\u002Farray_enum)\n> - **v3 P2** (2026-07-22) — `L4_verify.py` 盲点修复(加正信号 + import 完整性)\n> 详细变更见 `CHANGELOG.md`\n\n---\n\n## 唤醒词清单（39个）\n\n> 全部为动词+名词格式，指令化，不追求自然。\n> 总览词和细分词并列共存，互不冲突。\n>\n> **变体方向(§03 变体管理 · 2026-07-27 增):** 每个核心词配 2-3 个变体,3 方向:\n> - **S · 同义** — 换说法(查询\u002F找一下\u002F搜下)\n> - **O · 口语** — 加口语化 token(帮我\u002F给我看下\u002F呢\u002F哈\u002F一下)\n> - **F · 模糊** — 缺主语\u002F语法略错\u002F同音字(那 X 怎么找\u002FX 走起\u002FX 错字)\n>\n> **变体方向简写**:`✓` = 有此方向变体 \u002F `-` = 无明显变体。具体例子见 `references\u002Fwake_word_variants.md`。\n>\n> **5 核心词**(开始做菜\u002F查看食谱\u002F搜索食谱\u002F生成清单\u002F记录做菜)各 3 方向全覆盖(对应 P0-4 预演 9 个 fail prompt)。\n> **其他 34 唤醒词**至少 1 方向(基础覆盖)。\n\n### A. 做菜模式（2个）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 做菜模式 | 进入做菜模式，需配合菜名 | - | - | - |\n| 开始做菜 | \"开始做宫保虾球\" | ✓ 开火做\u002F下厨 | ✓ 帮我下厨哈\u002F给我做 | ✓ 走起\u002F搞\u002F整 |\n\n### B. 查看食谱（5个）\n\n> **机制说明**：「查看食材 \u002F 步骤 \u002F 营养 \u002F 背景」这 4 个细分唤醒词,是**给 AI 中介的路由提示**——AI 调 `recipe_render.py render \u003C菜名>` 渲染完整 HTML(包含食材\u002F步骤\u002F营养\u002F背景所有 section),用 `\u003Cmedia src=\"...html#section-{ingredients|steps|nutrition|background}\">` 标签推文件给用户。**禁止 AI 文字截取**(违反原则 11 HTML-First)。浏览器自动跳到指定 section。\n>\n> 这避免\"查看食材\"和\"查看食谱\"在用户感受上有差别,实际上**全量 HTML 已包含**所有 section,只需一份渲染 + URL 锚点跳转。\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|--------|--------|--------|\n| 查看食谱 | 调 recipe_render.py render 推完整 HTML | ✓ 搜下做法\u002F怎么弄\u002F查配方 | ✓ 给我看下呢\u002F怎么做呢 | ✓ 错字(宫暴→宫保) |\n| 查看食材 | 推 HTML + URL `#section-ingredients` 锚点 | ✓ X 用啥料\u002F要买啥 | ✓ 食材给我看下 | ✓ X 的料 |\n| 查看步骤 | 推 HTML + URL `#section-steps` 锚点 | ✓ X 怎么做\u002F咋做 | ✓ 步骤给我看下哈 | ✓ 怎么个流程 |\n| 查看营养 | 推 HTML + URL `#section-nutrition` 锚点 | ✓ X 多少卡\u002F热量 | ✓ 营养给我看下 | ✓ 卡路里多少(注意:个人→卡路里) |\n| 查看背景 | 推 HTML + URL `#section-background` 锚点 | ✓ X 的来历\u002F典故 | ✓ 背景说下呗 | ✓ X 是哪里的 |\n\n> **HTML 锚点协议(2026-07-27 修):** `recipe_view.html` 4 段各加 `id=\"section-*\"`,浏览器自动跳到该 section。AI 收到\"查看 X 菜\"时,推 `\u003Cmedia src=\"...html#section-ingredients\">`,**禁止只推 HTML 文件不拼锚点**(用户打开找不到 section)。\n\n### C. 搜索筛选（10个）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 搜索食谱 | 按菜名关键词搜索 | ✓ 找一下\u002F查\u002F搜下 | ✓ 帮我找 X 哈 | ✓ X 的菜有? |\n| 筛选菜系 | \"筛选川菜\" | ✓ 川菜\u002F粤菜 | ✓ 有啥川菜 | - |\n| 筛选食材 | \"筛选含虾的菜\" | ✓ 含 X 的\u002F有 X | ✓ 帮我找含 X | - |\n| 筛选难度 | \"筛选简单菜\" | ✓ 简单的\u002F好做的 | ✓ 来个简单的 | - |\n| 筛选时间 | \"筛选30分钟内的菜\" | ✓ 30分钟内\u002F快的 | ✓ 几分钟能搞 | - |\n| 筛选炊具 | \"筛选用砂锅的菜\" | ✓ 用 X 做的 | ✓ 帮我用 X 做的 | - |\n| 筛选口味 | \"筛选辣的菜\" | ✓ 辣的\u002F甜的 | ✓ 口味 X 味的 | - |\n| 筛选季节 | \"筛选适合夏天的菜\" | ✓ 夏天\u002F冬天吃 | ✓ 夏天吃啥 | - |\n| 筛选状态 | \"筛选已做的菜\" | ✓ 做过的\u002F没做过的 | ✓ 我做过哪些 | - |\n| 查看全部 | 列出所有食谱，无筛选条件 | ✓ 全部\u002F所有 | ✓ 都有啥 | ✓ 多少菜 |\n\n### D. 修改食谱（9个）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 修改食谱 | 通用修改入口 | ✓ 改 X | ✓ 帮我改 X | - |\n| 修改步骤 | 改步骤内容\u002F顺序 | ✓ 改 X 的第 N 步 | ✓ 第 N 步改下 | - |\n| 修改食材 | 改食材用量\u002F添加食材 | ✓ 加\u002F减 X | ✓ 帮我改下 X | - |\n| 修改难度 | 改难度等级 | ✓ 改难度\u002F难易 | ✓ 难度调下 | - |\n| 修改份量 | 改份数 | ✓ 改份数\u002F几人份 | ✓ 改下份数 | - |\n| 废弃食谱 | 标记为已废弃（只增不删） | ✓ 不要 X | ✓ X 不要了 | - |\n| 不想要 | (aliases 共享场景) | - | - | - |\n| 删掉 | (aliases 共享场景) | - | - | - |\n| 废弃 | (aliases 共享场景) | - | - | - |\n\n### E. 烹饪历史（3个）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 记录做菜 | 记录一次烹饪(评分+反馈) | ✓ 刚做完\u002F今天做了 | ✓ 哈,做完了 5 分 | ✓ 录下\u002F写 |\n| 查看历史 | 查看某道菜的烹饪历史 | ✓ 做过几次 | ✓ X 的记录 | - |\n| 查看统计 | 查看评分统计(均分\u002F次数);不带菜名=全局画像(hist-4:做过几道菜\u002F总次数\u002F最爱\u002F最近\u002F还没做过) | ✓ X 评分\u002F平均分 | ✓ 帮我看下统计 | ✓ 最近厨艺咋样 |\n\n### F. 采购清单（2个）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 生成清单 | 生成采购清单 | ✓ X 要买啥\u002F购物清单 | ✓ 帮我整下单子 | ✓ X 采购 |\n| 排除可选 | 生成不含可选食材的清单 | ✓ 不要可选\u002F就买必须的 | ✓ 不要可选项 | - |\n\n### G. 录入食谱（2个）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 录入食谱 | 录入新食谱(图片\u002F文本\u002FJSON) | ✓ 加个新菜 | ✓ 帮我录 X | - |\n| 导入食谱 | JSON文件导入 | ✓ 导入 JSON | ✓ 帮我导入下 | - |\n\n### H. 派生关系（3个，v5.1 新增 · v4.0 T12 增 rel-3）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|\n| 添加派生关系 | 标记一道菜的变体(派生\u002F变体\u002F改良) | ✓ 加个变体 | ✓ X 派生自 Y | - |\n| 查看派生关系 | 查看一道菜的家族树(祖先\u002F后代多代连链) | ✓ X 的家族 | ✓ X 跟谁有关 | - |\n| 从已有派生新菜 | 拉母本全字段按差异预填(标色)→ 改 → 确认 → 新菜谱+派生关系一次建成 | ✓ 类似 X 做 Y | ✓ 从 X 派生 Y | - |\n\n### I. 帮助（1个 · §07 HELP 契约 · 不展示自身）\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|--------|--------|--------|\n| 私家大厨 HELP | 调 `render_help.py` 渲染 HELP HTML，展示全部 35 业务唤醒词 + 61 场景（§07 §1 强制契约） | - | ✓ 菜谱 HELP\u002F能做什么 | ✓ 这能做啥 |\n\n> **HELP 唤醒词属性**：本身**不属于普通业务词**，**不出现在它自己生成的 HELP HTML 中**（防死循环，§07 §1）。\n> **触发机制**：用户说\"私家大厨 HELP\"或\"菜谱 HELP\" → AI 必须 invoke HELP HTML（原则 11 HTML-First），**禁止文字答**。\n\n### J. 数据管理（3个 · G10 定案 · 唤醒词 ≠ 场景名）\n\n> **唤醒词 = AI 路由准星**（准确即可，不要求口语化）；**场景名 = HELP 展示**（精简全面）。yaml 两字段分开设计。\n> **数据管理三卡底层均已实现**（render_quality_report \u002F render_batch_edit \u002F export_backup），本组为登记 + 增强（批量编辑对比确认 + 导出 ZIP）。\n\n| 唤醒词 | 说明 | 同义(S) | 口语(O) | 模糊(F) |\n|--------|------|--------|--------|--------|\n| 体检 | 数据质量报告（5 维度完整度评分，最差排前） | ✓ 数据体检\u002F质量报告 | ✓ 帮我体检下 | ✓ 看看库咋样 |\n| 批量改 | 3-tab 批量编辑（食材\u002F步骤\u002F标签）→ 改前\u002F改后对比确认 → 复制修改 prompt | ✓ 批量编辑 | ✓ 帮我批量改下 | - |\n| 备份 | 导出备份 ZIP（17 表 JSON + 三照片目录），恢复=解压+导入 | ✓ 导出备份\u002F打包下载 | ✓ 帮我备份下 | - |\n\n---\n\n## 依赖\n\n- Python 3.x\n- sqlite3（Python 内置）\n\n## CLI 输出格式(5 层架构:AI 可解析)\n\n> **L3 阶段声明(2026-07-22)**:18 个 `*_manager.py` 都支持 `--json`(**该声明实际是部分覆盖 · 2026-07-27 对抗式审查发现**)。\n> **真实情况(2026-07-27 对抗式审查补漏后)**:\n> - ✅ 支持 `--json`:recipe_manager \u002F history_manager \u002F shopping_manager \u002F **relation_manager**(本 commit 修复)\n> - ⚠️ 不支持 `--json`:**14 个 manager 仍只 print 文本**。错误信息走裸 print,无法被 render_data 等调用方解析。\n\n| 工具 | 默认输出 | 加 `--json` | 加 `--human` |\n|---|---|---|---|\n| 4 个 `*_manager.py`(recipe \u002F history \u002F shopping \u002F relation) | 中文友好文本 | JSON 三段式 `{status, data, message}` | (默认即人类) |\n| 14 个 `*_manager.py`(background \u002F category \u002F cooking_method \u002F cookware \u002F diet_tag \u002F flavor \u002F ingredient \u002F meal_type \u002F **(nutrition · 本 commit 修复)** \u002F season \u002F step \u002F step_ingredient \u002F technique \u002F tip) | 中文友好文本 | JSON 三段式(本 commit 修复后)\u002F ❌ 暂不支持 | (默认即人类) |\n| `recipe_import.py import` | **JSON 三段式** | (默认即 JSON) | 中文友好 |\n| `recipe_import.py validate` | JSON 三段式 | (默认) | 中文友好 |\n| `import_orchestrator.py` | JSON 三段式 | (默认) | (暂未支持) |\n\n**JSON 三段式示例**:\n```json\n{\n  \"status\": \"success\",\n  \"data\": {\n    \"recipe_id\": \"abc-123\",\n    \"name\": \"测试菜\",\n    \"child_ids\": {\n      \"recipes\": 1,\n      \"ingredients\": 11,\n      \"cooking_steps\": 6\n    }\n  },\n  \"message\": \"成功导入食谱「测试菜」(ID: abc-123...)\"\n}\n```\n\n**状态字段约定**:\n- `success` ✅ 操作成功\n- `error` ❌ 操作失败(有 `errors` 字段列明细)\n- `warning` ⚠️ 操作成功但有警告(如 tips 缺字段,`tips_warnings` 字段列出)\n- `dry_run` 🔍 校验通过但未写入\n\n**导入入口统一** —— 所有数据导入都走 `import_orchestrator.py`:\n```bash\npython scripts\u002Fimport_orchestrator.py \u003Cjson_file> [--dry-run] [--json]\n```\n\n---\n\n## 配置\n\n| 环境变量 | 说明 | 默认值 |\n|---------|------|--------|\n| `CHEF_OUTPUT_DIR` | HTML 输出目录 | `D:\u002FCookHub` |\n| `CHEF_OUTPUT_DIR_PREFIX` | 本地源食谱图片命名空间前缀 | `chef:\u002F\u002F` |\n\n## 📌 输出位置(遵守 V1.0 原则 12.A \u002F 12.B)\n\n> **总纲原则 12 V3 拆分**(2026-07-27):HTML 输出分两类,**A · 数据\u002F过程**(每次触发产生新数据)+ **B · HELP**(Skill 自描述能力目录)。\n\n| 类型 | 渲染器 | 输出路径 | 文件名格式 | V3 分类 |\n|------|--------|---------|-----------|---------|\n| 录入采集(三态表单) | `render_add.py collect` | `$CHEF_OUTPUT_DIR\u002F录入\u002F` | `录入采集_\u003Cslug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 录入回执(成功\u002F失败) | `render_add.py receipt` | `$CHEF_OUTPUT_DIR\u002F录入\u002F` | `录入回执_\u003C成功|失败>_\u003Cslug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 查看食谱 | `recipe_render.py` | `$CHEF_OUTPUT_DIR\u002Frecipes\u002F` | `\u003Crecipe_slug>.html` | **12.A** 数据\u002F过程 |\n| 做菜模式 | `cooking_render.py` | `$CHEF_OUTPUT_DIR\u002Fcooking\u002F` | `做菜模式_\u003Crecipe_slug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 采购清单 | `shopping_render.py` | `$CHEF_OUTPUT_DIR\u002Fshopping\u002F` | `采购清单_\u003Cslug_or_joined>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 搜索\u002F筛选\u002F查看全部 | `render_data.py search` | `$CHEF_OUTPUT_DIR\u002Flist\u002F` | `数据视图_search_\u003Cslug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 查看历史 | `render_data.py history` | `$CHEF_OUTPUT_DIR\u002Ftimeline\u002F` | `数据视图_history_\u003Cslug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 查看统计 | `render_data.py stats` | `$CHEF_OUTPUT_DIR\u002Fdashboard\u002F` | `数据视图_stats_\u003Cslug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 查看统计(不带菜名) | `render_历史.py global` | `$CHEF_OUTPUT_DIR\u002Fdashboard\u002F` | `数据视图_global_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 查看派生关系 | `render_派生.py tree` | `$CHEF_OUTPUT_DIR\u002F派生\u002F` | `家族树_\u003Cslug>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 体检(数据质量报告) | `render_quality_report.py` | `$CHEF_OUTPUT_DIR\u002Fquality\u002F` | `数据质量报告_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 批量改(批量编辑) | `render_batch_edit.py` | `$CHEF_OUTPUT_DIR\u002Fbatch_edit\u002F` | `批量编辑_\u003Crecipe_id8>_\u003CYYYYMMDD_HHMMSS>.html` | **12.A** 数据\u002F过程 |\n| 备份(导出 ZIP) | `export_backup.py` | `$CHEF_OUTPUT_DIR\u002Fbackup\u002F` | `私家大厨备份_\u003CYYYYMMDD_HHMMSS>.zip` + 回执 `备份回执_\u003Cts>.html` | **12.A** 数据\u002F过程 |\n| HELP 能力速查 | `render_help.py` | `$CHEF_OUTPUT_DIR\u002Fhelp\u002F` | `私家大厨_HELP_\u003CYYYYMMDD_HHMMSS>.html` | **12.B** HELP |\n\n> **冲突解决**：12.X 共同基础规定 `_N` 自动后缀(N=1 起步,绝不覆盖)。`render_help.py` 当前实现是单次覆盖(因 HELP 渲染幂等),不符合 12.X 严格规定——**Phase 1.7 待优化**(改用 `_N` 后缀)。\n>\n> **env 优先级**：`$SKILLS_DATA_DIR` > `$SKILLS_DB_PATH` > Skill 自带 fallback。**当前 `$CHEF_OUTPUT_DIR` 是 legacy 命名**,与 V3 不一致——**Phase 1.7 待对齐**(迁移到 `$SKILLS_DATA_DIR`)。\n\n### 4 类榜单 HTML 机制(2026-07-27 · P1-2 增)\n\n> C 类(搜索\u002F筛选\u002F查看全部)+ E 类(查看历史\u002F查看统计) 共 **10 唤醒词** 统一走 `render_data.py`(§04 原则 2 · 1 模板 3 type);H 类(查看派生关系)走 `render_派生.py tree`(家族树 · T12)。\n\n| 唤醒词类别 | 唤醒词数 | render_data.py 子命令 | 输出 type |\n|------------|---------|---------------------|-----------|\n| 搜索食谱\u002F筛选 X\u002F查看全部 | 11 | `search \u003C关键词>` | `list`(网格卡片) |\n| 查看历史 | 1 | `history \u003C菜名或ID>` | `timeline`(垂直时间线) |\n| 查看统计(带菜名) | 1 | `stats \u003C菜名或ID>` | `dashboard`(4-6 KPI 卡片) |\n| 查看统计(不带菜名) | 1 | `render_历史.py global` | `dashboard`(全局画像:做过几道菜\u002F总次数\u002F最爱\u002F最近\u002F还没做过) |\n| 查看派生关系 | 1 | `render_派生.py tree \u003C菜名或ID>` | `tree`(家族树 · 根=当前菜) |\n\n**统一模板**:`templates\u002Fdata_view.html`(3 type 切换 layout)· **统一渲染器**:`scripts\u002Frender_data.py`。\n**底层 CLI**:全部走 `recipe_manager.py` \u002F `history_manager.py` \u002F `relation_manager.py` 的 `--json` 返回结构化数据(§02 L3 三段式)。\n\n**AI 收到 C\u002FE\u002FH 类唤醒词时**:\n1. 调 `python scripts\u002Frender_data.py \u003C子命令> \u003Ckeyword>`\n2. 用 `\u003Cmedia>` 标签推生成的 HTML 文件\n3. **禁止文字答**(原则 11 HTML-First)\n\n## 一键安装\n\n复制以下内容发送给 AI：\n\n```\n帮我初始化私家大厨技能：\n1. 询问我 HTML 输出目录路径，然后帮我设置环境变量 CHEF_OUTPUT_DIR\n2. 显示当前环境变量配置\n3. 告诉我如何更改数据目录\n```\n\n---\n\n## ⚠️ 操作规范（强制）\n\n本技能所有数据操作必须通过 CLI，禁止直连数据库。\n\n---\n\n## AI使用规范（强制）\n\n### 全字段必填（硬规则 · 无跳过通道 · v4.0 缺字段拒绝制）\n\n> **录入食谱时,所有字段都必须有真实值:不允许 `null`,也不允许空字符串(2026-08-09 用户拍板)。AI 不得\"字段不重要就跳过\"。**\n\n1. **JSON 必须包含所有字段且值必须为真实数据** — 不允许 `null`、不允许 `\"\"`(空字符串);缺了 = 校验拒绝\n2. **缺字段 = 校验失败,一次列全** — `scripts\u002Fvalidators.py::validate_missing_manifest()` 把 null\u002F空串\u002F占位符\u002F步骤关联失效**一次列全**成缺失清单,AI 收到后必须逐项问用户补齐(早失败,不在写库阶段连环炸)\n3. **可显式 null 仅限 DB 可空字段,且不在 JSON 契约内** — `tips.step_id \u002F tips.ingredient_id` 由写库层从 `step_sequence` 派生,JSON 不携带;`steps[].ingredients_used[].unit` 缺时由 `ingredients[].unit` 兜底,两个都没有才报缺失\n4. **多个字段缺失时,一次性问用户** — 用一个问题把多个字段打包问,不要每个字段单独问(那太烦)\n5. **无真实值(如无照片)时,AI 必须问用户** — 用户显式确认后才可用占位图并注明(非系统自动填)\n6. **错误信息含\"字段名 + 当前值 + 期望值 + 怎么修\"** — 遵守\"可约束\"特性,让 AI 知道怎么改\n7. **早失败优于晚失败** — 在校验阶段直接拒,不要等到 SQL 报错\n8. **无 --force \u002F --skip-validation 通道** — AI 偷懒会立刻用上,设计上禁止\n\n### L1 NOT NULL 设计哲学(v3 P1 用户拍板)\n\n**L1 设计意图:DB NOT NULL 是故意拦截 AI 偷懒不传字段的。**\n\n| 场景 | 错误做法 | 正确做法 |\n|---|---|---|\n| CLI add 缺必填字段 | AI 看不到字段 → DB 崩 stacktrace | CLI 友好报错(含字段名 + 当前值 + 期望值 + 怎么修)→ AI 拿错误信息问用户 |\n| 缺字段时 | 给个\"中火\"\u002F\"适量\"\u002F\"完成\"默认值兜底(让 AI 跳过思考) | 让 AI 必须问用户拿到所有字段后再调 |\n| 字段看似可推算(如 quantity_text) | 自动从 quantity+unit 拼接 | 必须显式提供,即使是冗余也要 AI 主动思考 |\n\n**反例**(v3 P1 之前的 fix,被用户纠错):\n- ❌ `step_manager.add` 没传 heat_level\u002Ftemperature\u002Fexpected_result 时默认 \"中火\u002F常温\u002F完成\"\n- ❌ `ingredient_manager.add` 没传 substitute 时默认 \"无替代品\"\n- ❌ `quantity_text` 自动从 quantity+unit 拼接\n\n**正解**(v3 P1 重做):\n- ✅ 缺字段 → 友好报错,AI 拿错误信息问用户,重试\n- ✅ user 明确说 \"用豆腐代替\" → `--substitute \"豆腐\"`\n- ✅ user 明确说 \"无替代品\" → `--substitute \"无替代品\"`(显式传,不是默认)\n\n**适用范围**:所有 CLI add path(`ingredient_manager` \u002F `step_manager` \u002F `tip_manager` \u002F `recipe_manager`),不仅限录入食谱;做饭路径不强制(读路径字段可推算)。\n\n### tip scope 枚举(v3 P1.5 决策 2 · 方案 A+)\n\n`tips` 表的 `step_id` 和 `ingredient_id` 故意保留可空 — L1 哲学允许\"菜级 tip\"。但 L1 NOT NULL 设计意图要求 AI **显式声明** 这条 tip 关联什么。\n\n**`tip_manager.add` 必传 `--scope`**,枚举三选一,值直接跟字段语义挂钩 — AI 看到 `--scope recipe` 立刻明白\"这条 tip 的 scope 是 recipe\":\n\n| `--scope` 值 | 含义 | 必须字段 |\n|---|---|---|\n| `step` | 此 tip 关联某个步骤 | `--step_id` |\n| `ingredient` | 此 tip 关联某个食材 | `--ingredient_id` |\n| `recipe` | 此 tip 是整道菜级(常识\u002F保存等) | (都允许空) |\n\n**validator 强制规则**(`scripts\u002Fvalidators.py::validate_tip_scope`):\n- `scope='step'` 缺 `--step_id` → 友好报错\n- `scope='ingredient'` 缺 `--ingredient_id` → 友好报错\n- `scope` 非法值 → 报错列出合法值\n\n**JSON 路径**(`import_orchestrator.py`):JSON tip 必须有 `\"scope\": \"step|ingredient|recipe\"` 字段。\n\n**为什么选方案 A+**:0 schema 改动 + 值格式 flag 比 magic word(`--confirm-detached`)AI 一眼能懂 + DB schema 仍是 L1 一致(允许空)。\n\n### validators 9 个校验函数(v3 P1.5 决策 3)\n\n除原有占位符\u002Ftips 业务校验外,v3 P1.5 新增 7 个 enum\u002F范围\u002F格式校验函数(`scripts\u002Fvalidators.py`):\n\n| 函数 | 校验目标 | 合法值\u002F范围 |\n|---|---|---|\n| `validate_cookware_category` | `cookware.category` | 锅\u002F炉\u002F刀\u002F其他 |\n| `validate_relation_type` | `recipe_relations.relation_type` | 派生\u002F变体\u002F改良 |\n| `validate_serving_unit` | `nutrition_info.serving_unit` | g\u002Fml\u002F份\u002F杯 |\n| `validate_rating_range` | `recipe_history.rating` | 0-5(含小数) |\n| `validate_positive_int` | `recipe_history.cook_sequence` 等 | 正整数 > 0 |\n| `validate_date_format` | `recipe_history.cook_date` | YYYY-MM-DD |\n| `validate_array_enum` | 5 张 tag array | 各自 enum 值 |\n\n**集成方式**:CLI `*_manager.py::add()` 在 INSERT 前调用,JSON 路径 `validate_recipe_for_import()` 调用。\n\n### step_ingredients.unit NOT NULL(v3 P1.5 决策 1)\n\nL1 阶段 `migrations\u002F004_all_fields_not_null.sql` 漏设 `unit` NOT NULL,12 行数据实测全有值但仍有 schema 风险。`migrations\u002F005_step_ingredients_unit_not_null.sql` 用 SQLite recreate table 模式迁移:\n\n1. `CREATE TABLE step_ingredients_new (... unit TEXT NOT NULL ...)`\n2. `INSERT INTO step_ingredients_new SELECT * FROM step_ingredients WHERE unit IS NOT NULL`\n3. `DROP TABLE step_ingredients` + `RENAME`\n4. 重建索引\n\n**对应 CLI 改动**:`step_ingredient_manager.add` 加 friendly 报错(unit 缺\u002F缺 quantity_used\u002Fintroduced_at),`recipe_import.add_step_ingredients` 用 `name_unit_map`(从 ingredients.unit 兜底)。\n\n### 字段推算边界(AI 何时推算,何时问用户)\n\n> **按\"5 层架构\"+ 6 大特性\"可约束\"原则。AI 不知道什么时候该推算、什么时候该问,SKILL 给出明确边界。**\n\n| 分类 | 典型字段 | AI 行为 |\n|---|---|---|\n| 🔴 **必问用户** | 用户专属(口味偏好 \u002F 来源 \u002F 食材品牌 \u002F 这菜给谁吃) | 用 `validators.suggested_user_question()` 一次性打包问 |\n| 🟡 **必推算** | `diet_tags` 从 nutrition 推 \u002F `total_time` 从步骤求和 \u002F `cooking_methods` 从步骤动作推 | AI 主动算,过 validators 校验 |\n| 🟢 **可补常识** | `tips` \u002F `techniques` \u002F `background.origin_story` \u002F 经典菜起源 | AI 主动补常识,过 validators 校验(标\"AI 补\"在内容里) |\n| ⚪ **不允许 null\u002F空串**(v4.0) | 任何字段 | 缺了 = 校验拒绝 + 缺失清单一次列全;AI 必须问用户补齐;无真实值(如无照片)时用户显式确认后才可用占位图并注明;DB 可空字段(tips.step_id\u002Fingredient_id)由写库层从 step_sequence 派生,JSON 不携带 |\n\n**原则**:\n- 录入时**不主动问**用户\"这道菜 X 字段填什么\"——除非是用户专属信息\n- AI 推算\u002F补常识后**仍然过 validators 校验**(避免推算出\"香\"这种枚举外的值)\n- **v4.0 缺字段拒绝制**:不允许 `null`、不允许空字符串;用户说\"不知道\" → AI 如实问用户\u002F汇报缺失,不录入没有意义的菜谱\n\n### 调用任何manager前，必须：\n\n1. **展示完整参数示例** — 让用户知道这条命令会用哪些参数\n2. **对未提供字段进行合理推测** — 基于菜系特点\u002F常见值\u002F烹饪逻辑\n3. **推测不出时询问用户** — 不能留空不填\n\n### 字段推测规则（仅录入时使用）\n\n> 详见 `features\u002Fadd.md` — 仅在录入食谱时调用，查看\u002F做菜模式不需要此规则。\n\n### HTML 生成强制（v5.0 新增，v5.2 强化）\n\n**「查看食谱」** AI 收到时**必须自动**按以下 2 步走，**禁止只跑第 1 步**：\n\n```bash\n# 第 1 步:展示文本(必跑)\npython scripts\u002Frecipe_manager.py show \u003C菜名或ID>\n\n# 第 2 步:同步 HTML(必跑,紧跟第 1 步)\npython scripts\u002Frecipe_render.py render \u003C菜名或ID>\n```\n\n**4 条执行规则**:\n\n1. **两步必跑** —— 收到\"查看食谱 X\"时,**自动**依次跑 show + render,不要等用户追问\n2. **HTML 必发** —— render 成功后,**用 `\u003Cmedia>` 标签**把生成的 HTML 文件**推给用户**;只告诉路径不算交付\n3. **失败降级** —— render 失败时静默降级,只 stderr 一行\"HTML 同步跳过:{原因}\",show 文本照常展示\n4. **不调 render 也行** 的例外 —— 同一会话内刚跑过 render(\u003C5 分钟)且没改过菜谱,可跳过第 2 步直接发旧 HTML\n5. **HTML 文件命名固定** —— 三类 HTML 正式交付必须按统一命名表执行,禁止把 `recipe_view_辣椒炒肉_current.html`、`preview.html`、`test.html`、`current.html`、`final.html` 这类临时文件名作为正式交付\n\n**HTML 统一命名表**:\n\n| 类型 | 输出目录 | 文件名格式 | 示例 |\n|---|---|---|---|\n| 查看食谱 | `$CHEF_OUTPUT_DIR\u002Frecipes\u002F` | `\u003Crecipe_slug>.html` | `辣椒炒肉.html` |\n| 做菜模式 | `$CHEF_OUTPUT_DIR\u002Fcooking\u002F` | `做菜模式_\u003Crecipe_slug>_\u003CYYYYMMDD_HHMMSS>.html` | `做菜模式_辣椒炒肉_20260723_183000.html` |\n| 采购清单 | `$CHEF_OUTPUT_DIR\u002Fshopping\u002F` | `采购清单_\u003Crecipe_slug_or_joined_slugs>_\u003CYYYYMMDD_HHMMSS>.html` | `采购清单_辣椒炒肉_20260723_183000.html` |\n\n**禁止事项**:\n- 自行拼接 HTML 字符串\n- 调用 taste-skill \u002F ui-ux-pro-max-skill(已废弃,统一由模板服务)\n- 内联 CSS \u002F JS(已统一在 `templates\u002Frecipe_view.html`)\n- 只告诉用户 HTML 路径而不发文件(违反\"必发\"规则)\n\n**「做菜模式」** 收到时必须调用 `python scripts\u002Fcooking_render.py render \u003C菜名或ID>` 生成正式 HTML;禁止 AI 手动复制模板再临时命名。`cooking_render.py` 会自动 show --json、注入 `templates\u002Fcooking_mode.html`、输出 `$CHEF_OUTPUT_DIR\u002Fcooking\u002F做菜模式_\u003Crecipe_slug>_\u003CYYYYMMDD_HHMMSS>.html`。做饭页右侧\"剩余约 N 分钟\"必须按 `references\u002Fcooking_mode.md` 的剩余时间规则计算:当前步骤显示剩余分钟 + 后续所有步骤计划分钟之和;暂停保持、重做重置、归零\u002F超时时当前步骤最低按计划时长显示。\n\n**「断点续做」(T8 cook-4 · AI 会话记忆为主)** 用户说「我刚才做到第 N 步,继续帮我做完」→ AI 必须用 `python scripts\u002Fcooking_render.py render \u003C菜名或ID> --step N` 重新渲染,页面从第 N 步开始(URL 锚点 `#step=N`)。进度来源 = 用户粘贴做菜页「📋 复制进度」按钮生成的 prompt(AI 记住会话);localStorage 仅增强,不可用不阻塞。做菜页完结区 = 4 个单动作复制 prompt 按钮(⭐评分\u002F📝点评\u002F🤔反思\u002F📷完成拍照,拍照为预告式「【作品照片即将发送:】」);作品照片存 `work_photos\u002F` 目录,`chef:\u002F\u002F` 命名空间入库(三目录契约 + 值类型判定表见 `scripts\u002Fphoto_utils.py` 与 `references\u002Fcooking_mode.md` §4.3)。\n\n### 采购清单 HTML 强制（v5.2 新增 · T9 库存核对接入）\n\n**「生成清单 \u002F 排除可选」** AI 收到时**必须自动**按以下步骤走：\n\n```bash\n# 第 1 步:拿数据(必跑,可省略文本直接给 HTML)\npython scripts\u002Fshopping_manager.py generate \u003Crecipe_id1>[,\u003Crecipe_id2>,...]\n\n# 第 2 步:渲染 HTML(必跑)\npython scripts\u002Fshopping_render.py render \u003Crecipe_id1>[,\u003Crecipe_id2>,...] [库存核对参数]\n```\n\n**3 条执行规则**:\n\n1. **跨食谱合并自动跑** —— 用户说\"宫保虾球和辣炒虾球的采购清单\",AI **自动解析**所有菜名,一次性调 generate + render(逗号分隔)\n2. **HTML 必发** —— render 成功后,**用 `\u003Cmedia>` 标签**推给用户(同查看食谱规则)\n3. **失败降级** —— render 失败时静默降级,JSON 数据照常展示\n\n**核对库存(已有vs需买详情层 · G6 · 默认开启)**:\n\n用户未明确「不核对」→ AI **必须**执行库存核对,4 步:\n\n```bash\n# 1. 会话内加载「居家管家」技能查本次清单食材库存(唤醒词:囤货盘点 \u002F 查物品)\n#    ❌ 禁止在脚本中写死调用居家管家 CLI\u002F底层路径(跨技能物理隔离 · prompt 单工闭环)\n# 2. AI 对居家管家返回做同名\u002F同义匹配(鸡蛋↔鸡蛋;葱↔小葱 等)\n# 3. 把匹配结果传给 render(库存原文数量 + 名称里的单位线索;无线索省略 unit):\npython scripts\u002Fshopping_render.py render \u003Crecipe_id1>[,\u003Crecipe_id2>,...] \\\n  --stock-check --stock-json '{\"items\":[{\"name\":\"鸡蛋\",\"qty\":2,\"unit\":\"盒\"},{\"name\":\"葱\",\"qty\":1}]}'\n# 4. 无数据\u002F无匹配 → 只加 --stock-check 不带 --stock-json → 页面顶部淡提示「未核对库存(居家管家暂无数据)」,不打勾\n```\n\n4 条执行细则:\n\n1. **匹配由 AI 完成** —— `--stock-json` 的 name 必须等于清单食材名(AI 做完同义匹配),渲染器只做精确匹配,不做数量比较、不替用户决定(信息给全,够不够用户自己判断)\n2. **已有项 = 灰色勾 + 划线 + 「已有 N盒」标注,不进用户勾选进度**;进度条只统计需买项;顶部摘要显示「已有 N 项」\n3. **无数据降级** —— 居家管家无数据\u002F无匹配 → 不打勾 + 顶部淡提示;**本会话只提示一次**(AI 记住已提示过,后续生成不再重复),避免每次生成清单都啰嗦\n4. **不核对** —— 用户说「不核对」→ 不传 `--stock-check`,无提示无灰勾\n\n**features\u002Fshopping.md** 里 14 项 HTML 要求已由 `templates\u002Fshopping_view.html` 实现,AI 无需自写 HTML。\n\n---\n\n## 路由算法（核心）\n\n### 匹配流程\n\n```\n用户输入\n    ↓\n第1步：唤醒词识别\n    按 A>B>C>D>E>F>G 优先级，扫描唤醒词（动词+名词格式）\n    命中即确定意图，不再往下匹配\n    同优先级下，选最长匹配（\"查看食材\"优先于\"查看食谱\"）\n    ↓\n第2步：菜名\u002F条件提取\n    根据唤醒词在输入中的位置，按以下规则提取：\n\n    规则A：唤醒词在开头\n        \"开始做宫保虾球\" → 取唤醒词后面的文字 → \"宫保虾球\"\n        \"查看食材宫保虾球\" → 取唤醒词后面的文字 → \"宫保虾球\"\n        \"筛选川菜\" → 取唤醒词后面的文字 → \"川菜\"（筛选条件）\n\n    规则B：唤醒词在末尾\n        \"宫保虾球查看食谱\" → 取唤醒词前面的文字 → \"宫保虾球\"\n\n    规则C：唤醒词在中间\n        \"宫保虾球修改步骤\" → 取唤醒词前面的文字 → \"宫保虾球\"\n\n    清洗：提取后去掉首尾空格，去掉末尾的\"的\"、\"了\"、\"吧\"等语气词\n    过滤：菜名必须 ≥2 个字符，且不能是\"一个\"、\"一道\"、\"新菜\"等泛指短语\n    菜名缺失 → 追问用户（不能猜）\n    ↓\n第3步：功能分流\n    唤醒词 + 菜名\u002F条件 → 加载对应 features\u002F*.md\n    细分唤醒词（如\"查看食材\"）→ 告知 AI 推完整 HTML(原则 11 HTML-First),**禁止文字截取**,用户在 HTML 里自行定位\n    菜名缺失 → 追问用户（不能猜）\n    ↓\n第4步：兜底\n    没有任何唤醒词命中 → 默认走 search.md（可能是纯菜名输入）\n```\n\n### 匹配规则\n\n| # | 规则 | 说明 |\n|---|------|------|\n| R1 | 优先级排序 | A>B>C>D>E>F>G，高优先级命中直接分流 |\n| R2 | 最长匹配 | 同优先级下，选唤醒词最长的；同长度时，细分词优先于总览词（\"查看食材\"优先于\"查看食谱\"，\"修改步骤\"优先于\"修改食谱\"） |\n| R3 | 关键词独立 | 触发词是独立词，不是子串匹配 |\n| R4 | 菜名提取 | 触发词在开头→取后面文字；触发词在末尾或中间→取前面文字。提取后清洗语气词，过滤泛指短语 |\n| R5 | 兜底 search | 没有任何关键词命中 → 走 search.md |\n| R6 | 追问确认 | 菜名提取失败（\u003C2字符或为空）→ 追问用户 |\n| R7 | 泛指过滤 | 菜名提取结果为\"一个\u002F一道\u002F新菜\u002F什么\u002F哪些\"等泛指短语时，视为无效菜名，追问用户 |\n| R8 | 筛选条件提取 | \"筛选XX\"类唤醒词，XX后面的文字作为筛选条件，不作为菜名 |\n\n---\n\n## 路由表（39个唤醒词）\n\n> 全部为动词+名词格式。总览词和细分词并列共存，由 R2（最长匹配）保证不冲突。\n\n### A. 做菜模式 → `view.md`（功能二）\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 1 | 做菜模式 | 进入做菜模式，需配合菜名 | - | - | - |\n| 2 | 开始做菜 | \"开始做宫保虾球\" | ✓ 开火做\u002F下厨 | ✓ 帮我下厨哈\u002F给我做 | ✓ 走起\u002F搞\u002F整 |\n\n---\n\n### B. 查看食谱 → `view.md`\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 3 | 查看食谱 | 展示完整食谱（全部section），末尾问\"要开始做吗？\" |\n| 4 | 查看食材 | 仅展示食材清单 |\n| 5 | 查看步骤 | 仅展示烹饪步骤 |\n| 6 | 查看营养 | 仅展示营养信息 |\n| 7 | 查看背景 | 仅展示背景知识 |\n\n---\n\n### C. 搜索筛选 → `search.md`\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 8 | 搜索食谱 | 按菜名关键词搜索 | ✓ 找一下\u002F查\u002F搜下 | ✓ 帮我找 X 哈 | ✓ X 的菜有? |\n| 9 | 筛选菜系 | \"筛选川菜\"，按菜系筛选 |\n| 10 | 筛选食材 | \"筛选含虾的菜\"，按食材筛选 |\n| 11 | 筛选难度 | \"筛选简单菜\"，按难度筛选 |\n| 12 | 筛选时间 | \"筛选30分钟内的菜\"，按时间筛选 |\n| 13 | 筛选炊具 | \"筛选用砂锅的菜\"，按炊具筛选 |\n| 14 | 筛选口味 | \"筛选辣的菜\"，按口味筛选 |\n| 15 | 筛选季节 | \"筛选适合夏天的菜\"，按季节筛选 |\n| 16 | 筛选状态 | \"筛选已做的菜\"，按状态筛选 |\n| 17 | 查看全部 | 列出所有食谱，无筛选条件 | ✓ 全部\u002F所有 | ✓ 都有啥 | ✓ 多少菜 |\n\n---\n\n### D. 修改食谱 → `update.md`\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 18 | 修改食谱 | 通用修改入口，需配合菜名和具体修改内容 |\n| 19 | 修改步骤 | 改步骤内容\u002F顺序 | ✓ 改 X 的第 N 步 | ✓ 第 N 步改下 | - |\n| 20 | 修改食材 | 改食材用量\u002F添加食材 | ✓ 加\u002F减 X | ✓ 帮我改下 X | - |\n| 21 | 修改难度 | 改难度等级 | ✓ 改难度\u002F难易 | ✓ 难度调下 | - |\n| 22 | 修改份量 | 改份数 | ✓ 改份数\u002F几人份 | ✓ 改下份数 | - |\n| 23 | 废弃食谱 | 标记为已废弃（只增不删原则） |\n| 24 | 不想要 | (aliases 共享场景) | - | - | - |\n| 25 | 删掉 | (aliases 共享场景) | - | - | - |\n| 26 | 废弃 | (aliases 共享场景) | - | - | - |\n\n---\n\n### H. 派生关系 → `relation.md`（v5.1 新增 · v4.0 T12 扩 rel-3）\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 27 | 添加派生关系 | 标记一道菜的变体(派生\u002F变体\u002F改良) | ✓ 加个变体 | ✓ X 派生自 Y | - |\n| 28 | 查看派生关系 | 查看一道菜的家族树(祖先\u002F后代) | ✓ X 的家族 | ✓ X 跟谁有关 | - |\n| 29 | 从已有派生新菜 | 拉母本按差异预填(标色)→ 确认 → 新菜谱+关系一次建成 | ✓ 类似 X 做 Y | ✓ 从 X 派生 Y | - |\n\n### I. 帮助 → `scripts\u002Frender_help.py`（§07 HELP 契约 · 不展示自身）\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 29 | 私家大厨 HELP | 调 `render_help.py` 渲染 HELP HTML，输出 `$CHEF_OUTPUT_DIR\u002Fhelp\u002F私家大厨_HELP_\u003C时间戳>.html`，展示全部 35 业务唤醒词 + 61 场景（HELP 自身不出现在该 HTML 中） |\n\n---\n\n### E. 烹饪历史 → `history.md`\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 24 | 记录做菜 | 记录一次烹饪(评分+反馈) | ✓ 刚做完\u002F今天做了 | ✓ 哈,做完了 5 分 | ✓ 录下\u002F写 |\n| 25 | 查看历史 | 查看某道菜的烹饪历史 | ✓ 做过几次 | ✓ X 的记录 | - |\n| 26 | 查看统计 | 查看评分统计(均分\u002F次数);不带菜名=全局画像(hist-4:做过几道菜\u002F总次数\u002F最爱\u002F最近\u002F还没做过) | ✓ X 评分\u002F平均分 | ✓ 帮我看下统计 | ✓ 最近厨艺咋样 |\n\n---\n\n### F. 采购清单 → `shopping.md`\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 27 | 生成清单 | 生成采购清单，支持多菜名 |\n| 28 | 排除可选 | 生成不含可选食材的清单 | ✓ 不要可选\u002F就买必须的 | ✓ 不要可选项 | - |\n\n---\n\n### G. 录入食谱 → `add.md`\n\n| # | 唤醒词 | 说明 |\n|---|--------|------|\n| 29 | 录入食谱 | 录入新食谱（图片\u002F文本解析，信息完整时走JSON导入） |\n| 30 | 导入食谱 | JSON文件导入 | ✓ 导入 JSON | ✓ 帮我导入下 | - |\n\n---\n\n## 菜名提取示例\n\n| 用户输入 | 唤醒词 | 位置 | 提取菜名 | 路由 |\n|---------|--------|------|---------|------|\n| \"开始做红酒慢炖牛腩\" | 开始做菜 | 开头 | 红酒慢炖牛腩 | view.md（做菜模式） |\n| \"做菜模式宫保虾球\" | 做菜模式 | 开头 | 宫保虾球 | view.md（做菜模式） |\n| \"查看食谱宫保虾球\" | 查看食谱 | 开头 | 宫保虾球 | view.md（完整食谱） |\n| \"查看食材宫保虾球\" | 查看食材 | 开头 | 宫保虾球 | view.md（仅食材） |\n| \"查看步骤宫保虾球\" | 查看步骤 | 开头 | 宫保虾球 | view.md（仅步骤） |\n| \"查看营养宫保虾球\" | 查看营养 | 开头 | 宫保虾球 | view.md（仅营养） |\n| \"查看背景宫保虾球\" | 查看背景 | 开头 | 宫保虾球 | view.md（仅背景） |\n| \"搜索食谱排骨\" | 搜索食谱 | 开头 | 排骨 | search.md |\n| \"筛选川菜\" | 筛选菜系 | 开头 | 川菜（筛选条件） | search.md |\n| \"筛选含虾的菜\" | 筛选食材 | 开头 | 虾（筛选条件） | search.md |\n| \"筛选简单菜\" | 筛选难度 | 开头 | 简单（筛选条件） | search.md |\n| \"查看全部\" | 查看全部 | 完整 | 无 | search.md（列出全部） |\n| \"修改食谱宫保虾球\" | 修改食谱 | 开头 | 宫保虾球 | update.md |\n| \"修改步骤宫保虾球\" | 修改步骤 | 开头 | 宫保虾球 | update.md |\n| \"废弃食谱宫保虾球\" | 废弃食谱 | 开头 | 宫保虾球 | update.md |\n| \"不想要宫保虾球\" | 不想要 | 开头 | 宫保虾球 | update.md |\n| \"删掉宫保虾球\" | 删掉 | 开头 | 宫保虾球 | update.md |\n| \"废弃宫保虾球\" | 废弃 | 开头 | 宫保虾球 | update.md |\n| \"记录做菜宫保虾球\" | 记录做菜 | 开头 | 宫保虾球 | history.md |\n| \"查看历史宫保虾球\" | 查看历史 | 开头 | 宫保虾球 | history.md |\n| \"查看统计宫保虾球\" | 查看统计 | 开头 | 宫保虾球 | history.md |\n| \"生成清单宫保虾球\" | 生成清单 | 开头 | 宫保虾球 | shopping.md |\n| \"录入食谱宫保虾球\" | 录入食谱 | 开头 | 宫保虾球 | add.md |\n| \"导入食谱\" | 导入食谱 | 完整 | 无 | add.md（JSON导入） |\n| \"添加派生关系 宫保虾球 基于 上海排骨年糕\" | 添加派生关系 | 开头 | 宫保虾球 | relation.md |\n| \"查看派生关系 上海排骨年糕\" | 查看派生关系 | 开头 | 上海排骨年糕 | relation.md |\n| \"做咖喱鸡,类似咖喱牛腩\" | 从已有派生新菜 | 结尾 | 咖喱鸡(母本:咖喱牛腩) | relation.md |\n| \"宫保虾球\" | 无命中 | - | 宫保虾球 | search.md（兜底菜名搜索） |\n\n---\n\n## 快速导航\n\n| 功能 | 唤醒词数 | 参考文档 | 分类 |\n|------|----------|----------|------|\n| 做菜模式 | 2 | `features\u002Fview.md`（功能二） | A |\n| 查看食谱 | 5 | `features\u002Fview.md`（功能一） | B |\n| 搜索筛选 | 10 | `features\u002Fsearch.md` | C |\n| 修改食谱 | 9 | `features\u002Fupdate.md` | D |\n| 烹饪历史 | 3 | `features\u002Fhistory.md` | E |\n| 采购清单 | 2 | `features\u002Fshopping.md` | F |\n| 录入食谱 | 2 | `features\u002Fadd.md` | G |\n| 派生关系 | 3 | `features\u002Frelation.md` | H |\n| 数据库结构 | - | `references\u002Fdatabase_schema.md` | - |\n| 分类参考 | - | `references\u002Fcategories.md` | - |\n| CLI命令 | - | `references\u002Fcommands.md` | - |\n| 做菜模式(2026-07-23 新) | - | `references\u002Fcooking_mode.md` + `templates\u002Fcooking_mode.html` | - |\n\n---\n\n## JSON文件导入\n\n> 将10步CLI操作简化为1步JSON导入。适合信息完整的场景。\n\n```bash\n# 1. 查看模板\npython scripts\u002Frecipe_import.py template\n\n# 2. AI生成JSON文件\n\n# 3. 校验JSON\npython scripts\u002Frecipe_json_validate.py recipe.json\n\n# 4. 校验通过后导入\npython scripts\u002Frecipe_import.py import recipe.json\n```\n\n详细说明见 `references\u002Fcommands.md` 和 `features\u002Fadd.md`。\n\n---\n\n## 核心原则\n\n### 只增不删\n- 没有物理删除操作\n- 整道食谱废弃用 discard（status = '已废弃'），自动从列表\u002F搜索中过滤\n- 已废弃食谱可通过 show 查看简要信息\n\n### 交互确认\n- 所有写操作前必须展示，用户确认后执行\n- 多选项时让用户选择，不默认\n\n### 自然语言解析\n- AI 负责解析用户意图，转换为 CLI 命令\n- 信息不完整时追问，不猜测\n\n---\n\n## 表结构\n\n共17张表，详见 `references\u002Fdatabase_schema.md`\n\n---\n\n## 数据库并发支持\n\n- **WAL 模式**：允许并发读和单个写\n- **连接重试**：数据库锁定时自动重试（最多5次）\n- **上下文管理器**：自动关闭连接，异常时回滚\n- 详见 `scripts\u002Fdb_config.py`\n\n---\n\n## 与其他技能联动\n\n| 技能 | 联动场景 |\n|------|---------|\n| 卡路里 | 采购食品时可同步记录营养成分 |\n| 居家管家 | 炊具借用\u002F归位时参考 |\n\n**处理原则**：主动思考是否需要联动，先完成主技能，再询问用户。",{},"main","5b2b73ce2fbb69cd70597cfbbf24c99bc9e94b4c",1,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS","https:\u002F\u002Fgithub.com\u002FFeatherHunter","The Boy, The Man, The Human.","2026-09-12 20:33:55",{"source":7,"skillName":5,"commands":30,"prompt":40,"zipAvailable":41},[31,34,37],{"tool":32,"command":33},"npx","npx skills add FeatherHunter\u002FSKILLS --skill \"私家大厨\"",{"tool":35,"command":36},"bunx","bunx skills add FeatherHunter\u002FSKILLS --skill \"私家大厨\"",{"tool":38,"command":39},"pnpm","pnpm dlx skills add FeatherHunter\u002FSKILLS --skill \"私家大厨\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002FSKILL.md",true,[43,49,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325,329,333,337,341,345,349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417,421,425,429,433,437,441,445,449,453,457,461,465,469,473,477,481,485,489,493,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,625,629,633,637,641,645,649,653,657,661,665,669],{"path":44,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":47,"sourceHtmlUrl":48},"_meta.json","REFERENCE","参考文档",296,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002F_meta.json",{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},".gitignore","OTHER","其他",156,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002F.gitignore",{"path":56,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":57,"sourceHtmlUrl":58},"CHANGELOG.md",41708,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002FCHANGELOG.md",{"path":60,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":61,"sourceHtmlUrl":62},"fat_real_15_full_report.md",3879,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffat_real_15_full_report.md",{"path":64,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":65,"sourceHtmlUrl":66},"fat_real_report.md",2100,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffat_real_report.md",{"path":68,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":69,"sourceHtmlUrl":70},"fat_simulation_report.md",3234,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffat_simulation_report.md",{"path":72,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":73,"sourceHtmlUrl":74},"features\u002Fadd.md",15244,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Fadd.md",{"path":76,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":77,"sourceHtmlUrl":78},"features\u002Fhistory.md",5789,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Fhistory.md",{"path":80,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":81,"sourceHtmlUrl":82},"features\u002Frelation.md",5240,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Frelation.md",{"path":84,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":85,"sourceHtmlUrl":86},"features\u002Fsearch.md",6557,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Fsearch.md",{"path":88,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":89,"sourceHtmlUrl":90},"features\u002Fshopping.md",5840,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Fshopping.md",{"path":92,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":93,"sourceHtmlUrl":94},"features\u002Fupdate.md",9429,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Fupdate.md",{"path":96,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":97,"sourceHtmlUrl":98},"features\u002Fview.md",15698,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ffeatures\u002Fview.md",{"path":100,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":101,"sourceHtmlUrl":102},"phase_audit.html",16806,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_audit.html",{"path":104,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":105,"sourceHtmlUrl":106},"phase_commit_style.html",9392,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_commit_style.html",{"path":108,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":109,"sourceHtmlUrl":110},"phase_explain.html",11731,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_explain.html",{"path":112,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":113,"sourceHtmlUrl":114},"phase_insight.html",10637,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_insight.html",{"path":116,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":117,"sourceHtmlUrl":118},"phase_manager_audit.html",12114,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_manager_audit.html",{"path":120,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":121,"sourceHtmlUrl":122},"phase_next.html",8895,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_next.html",{"path":124,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":125,"sourceHtmlUrl":126},"phase_p0_2.html",10667,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p0_2.html",{"path":128,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":129,"sourceHtmlUrl":130},"phase_p0_3.html",9997,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p0_3.html",{"path":132,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":133,"sourceHtmlUrl":134},"phase_p0_4.html",11546,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p0_4.html",{"path":136,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":137,"sourceHtmlUrl":138},"phase_p1_1.html",8672,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p1_1.html",{"path":140,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":141,"sourceHtmlUrl":142},"phase_p1_2.html",9443,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p1_2.html",{"path":144,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":145,"sourceHtmlUrl":146},"phase_p1_3.html",9759,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p1_3.html",{"path":148,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":149,"sourceHtmlUrl":150},"phase_p1_done.html",7791,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_p1_done.html",{"path":152,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":153,"sourceHtmlUrl":154},"phase_q5_design.html",15122,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_q5_design.html",{"path":156,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":157,"sourceHtmlUrl":158},"phase_qa_5q.html",14968,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_qa_5q.html",{"path":160,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":161,"sourceHtmlUrl":162},"phase_repair.html",9388,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_repair.html",{"path":164,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":165,"sourceHtmlUrl":166},"phase_status.html",10129,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_status.html",{"path":168,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":169,"sourceHtmlUrl":170},"phase_today.html",7761,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fphase_today.html",{"path":172,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":173,"sourceHtmlUrl":174},"PLAN.md",10988,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002FPLAN.md",{"path":176,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":177,"sourceHtmlUrl":178},"pytest.ini",75,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fpytest.ini",{"path":180,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":181,"sourceHtmlUrl":182},"references\u002Fcategories.md",5488,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fcategories.md",{"path":184,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":185,"sourceHtmlUrl":186},"references\u002Fcommands.md",30574,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fcommands.md",{"path":188,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":189,"sourceHtmlUrl":190},"references\u002Fcooking_mode.md",11640,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fcooking_mode.md",{"path":192,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":193,"sourceHtmlUrl":194},"references\u002Fdatabase_schema.md",12094,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fdatabase_schema.md",{"path":196,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":199,"sourceHtmlUrl":200},"references\u002Fenums.py","SCRIPT","脚本",9484,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fenums.py",{"path":202,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":203,"sourceHtmlUrl":204},"references\u002Ffat_preview.md",4106,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Ffat_preview.md",{"path":206,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":207,"sourceHtmlUrl":208},"references\u002Fscenarios.yaml",30854,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fscenarios.yaml",{"path":210,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":211,"sourceHtmlUrl":212},"references\u002Ftest_prompts.yaml",10315,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Ftest_prompts.yaml",{"path":214,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":215,"sourceHtmlUrl":216},"references\u002Fwake_word_variants.md",6724,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freferences\u002Fwake_word_variants.md",{"path":218,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":219,"sourceHtmlUrl":220},"review_summary.html",22586,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Freview_summary.html",{"path":222,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":223,"sourceHtmlUrl":224},"scenes\u002F修改.yaml",6625,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F修改.yaml",{"path":226,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":227,"sourceHtmlUrl":228},"scenes\u002F做菜.yaml",6440,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F做菜.yaml",{"path":230,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":231,"sourceHtmlUrl":232},"scenes\u002F历史.yaml",5915,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F历史.yaml",{"path":234,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":235,"sourceHtmlUrl":236},"scenes\u002F开始使用.yaml",2394,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F开始使用.yaml",{"path":238,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":239,"sourceHtmlUrl":240},"scenes\u002F录入.yaml",4900,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F录入.yaml",{"path":242,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":243,"sourceHtmlUrl":244},"scenes\u002F搜索筛选.yaml",8614,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F搜索筛选.yaml",{"path":246,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":247,"sourceHtmlUrl":248},"scenes\u002F数据管理.yaml",5464,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F数据管理.yaml",{"path":250,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":251,"sourceHtmlUrl":252},"scenes\u002F查看.yaml",5985,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F查看.yaml",{"path":254,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":255,"sourceHtmlUrl":256},"scenes\u002F派生.yaml",6221,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F派生.yaml",{"path":258,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":259,"sourceHtmlUrl":260},"scenes\u002F采购.yaml",6399,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscenes\u002F采购.yaml",{"path":262,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":263,"sourceHtmlUrl":264},"scripts\u002Falign_08.py",10748,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Falign_08.py",{"path":266,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":267,"sourceHtmlUrl":268},"scripts\u002Fbackground_manager.py",5395,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fbackground_manager.py",{"path":270,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":271,"sourceHtmlUrl":272},"scripts\u002Fcategory_manager.py",6930,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fcategory_manager.py",{"path":274,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":275,"sourceHtmlUrl":276},"scripts\u002Fcleanup_test_history.py",870,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fcleanup_test_history.py",{"path":278,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":279,"sourceHtmlUrl":280},"scripts\u002Fcli_formatter.py",7606,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fcli_formatter.py",{"path":282,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":283,"sourceHtmlUrl":284},"scripts\u002Fcooking_method_manager.py",4551,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fcooking_method_manager.py",{"path":286,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":287,"sourceHtmlUrl":288},"scripts\u002Fcooking_render.py",7817,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fcooking_render.py",{"path":290,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":291,"sourceHtmlUrl":292},"scripts\u002Fcookware_manager.py",6186,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fcookware_manager.py",{"path":294,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":295,"sourceHtmlUrl":296},"scripts\u002Fdata_quality_report.py",8075,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fdata_quality_report.py",{"path":298,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":299,"sourceHtmlUrl":300},"scripts\u002Fdb_config.py",6746,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fdb_config.py",{"path":302,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":303,"sourceHtmlUrl":304},"scripts\u002Fdb.py",8166,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fdb.py",{"path":306,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":307,"sourceHtmlUrl":308},"scripts\u002Fdiet_tag_manager.py",4450,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fdiet_tag_manager.py",{"path":310,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":311,"sourceHtmlUrl":312},"scripts\u002Fexport_backup.py",16590,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fexport_backup.py",{"path":314,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":315,"sourceHtmlUrl":316},"scripts\u002Fexport_recipes.py",7185,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fexport_recipes.py",{"path":318,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":319,"sourceHtmlUrl":320},"scripts\u002Ffat_simulate.py",6373,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Ffat_simulate.py",{"path":322,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":323,"sourceHtmlUrl":324},"scripts\u002Fflavor_manager.py",4375,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fflavor_manager.py",{"path":326,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":327,"sourceHtmlUrl":328},"scripts\u002Fhistory_manager.py",17519,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fhistory_manager.py",{"path":330,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":331,"sourceHtmlUrl":332},"scripts\u002Fimport_orchestrator.py",10147,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fimport_orchestrator.py",{"path":334,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":335,"sourceHtmlUrl":336},"scripts\u002Fingredient_manager.py",8219,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fingredient_manager.py",{"path":338,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":339,"sourceHtmlUrl":340},"scripts\u002Finit_db.py",15457,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Finit_db.py",{"path":342,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":343,"sourceHtmlUrl":344},"scripts\u002Fmeal_type_manager.py",4471,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmeal_type_manager.py",{"path":346,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":347,"sourceHtmlUrl":348},"scripts\u002Fmigrations\u002F001_add_step_ingredients_unit.sql",456,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F001_add_step_ingredients_unit.sql",{"path":350,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":351,"sourceHtmlUrl":352},"scripts\u002Fmigrations\u002F001_rollback.sql",449,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F001_rollback.sql",{"path":354,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":355,"sourceHtmlUrl":356},"scripts\u002Fmigrations\u002F002_rollback.sql",122,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F002_rollback.sql",{"path":358,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":359,"sourceHtmlUrl":360},"scripts\u002Fmigrations\u002F002_shopping_index.sql",923,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F002_shopping_index.sql",{"path":362,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":363,"sourceHtmlUrl":364},"scripts\u002Fmigrations\u002F003_ingredient_category_v11.sql",1257,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F003_ingredient_category_v11.sql",{"path":366,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":367,"sourceHtmlUrl":368},"scripts\u002Fmigrations\u002F003_rollback.sql",352,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F003_rollback.sql",{"path":370,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":371,"sourceHtmlUrl":372},"scripts\u002Fmigrations\u002F004_all_fields_not_null.sql",7836,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F004_all_fields_not_null.sql",{"path":374,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":375,"sourceHtmlUrl":376},"scripts\u002Fmigrations\u002F005_step_ingredients_unit_not_null.sql",1585,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fmigrations\u002F005_step_ingredients_unit_not_null.sql",{"path":378,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":379,"sourceHtmlUrl":380},"scripts\u002Fnutrition_manager.py",10951,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fnutrition_manager.py",{"path":382,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":383,"sourceHtmlUrl":384},"scripts\u002Foutput_config.py",1835,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Foutput_config.py",{"path":386,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":387,"sourceHtmlUrl":388},"scripts\u002Fphoto_utils.py",5535,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fphoto_utils.py",{"path":390,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":391,"sourceHtmlUrl":392},"scripts\u002Frecipe_import.py",29311,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frecipe_import.py",{"path":394,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":395,"sourceHtmlUrl":396},"scripts\u002Frecipe_json_validate.py",23209,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frecipe_json_validate.py",{"path":398,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":399,"sourceHtmlUrl":400},"scripts\u002Frecipe_manager.py",47066,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frecipe_manager.py",{"path":402,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":403,"sourceHtmlUrl":404},"scripts\u002Frecipe_render.py",10261,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frecipe_render.py",{"path":406,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":407,"sourceHtmlUrl":408},"scripts\u002Frelation_manager.py",13917,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frelation_manager.py",{"path":410,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":411,"sourceHtmlUrl":412},"scripts\u002Frender_add.py",5699,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_add.py",{"path":414,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":415,"sourceHtmlUrl":416},"scripts\u002Frender_batch_edit.py",10017,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_batch_edit.py",{"path":418,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":419,"sourceHtmlUrl":420},"scripts\u002Frender_data.py",14406,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_data.py",{"path":422,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":423,"sourceHtmlUrl":424},"scripts\u002Frender_help.py",9740,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_help.py",{"path":426,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":427,"sourceHtmlUrl":428},"scripts\u002Frender_quality_report.py",4359,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_quality_report.py",{"path":430,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":431,"sourceHtmlUrl":432},"scripts\u002Frender_修改.py",6506,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_修改.py",{"path":434,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":435,"sourceHtmlUrl":436},"scripts\u002Frender_历史.py",7284,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_历史.py",{"path":438,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":439,"sourceHtmlUrl":440},"scripts\u002Frender_开始使用.py",13185,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_开始使用.py",{"path":442,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":443,"sourceHtmlUrl":444},"scripts\u002Frender_搜索筛选.py",14237,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_搜索筛选.py",{"path":446,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":447,"sourceHtmlUrl":448},"scripts\u002Frender_派生.py",7970,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Frender_派生.py",{"path":450,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":451,"sourceHtmlUrl":452},"scripts\u002Fseason_manager.py",4465,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fseason_manager.py",{"path":454,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":455,"sourceHtmlUrl":456},"scripts\u002Fshopping_manager.py",13320,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fshopping_manager.py",{"path":458,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":459,"sourceHtmlUrl":460},"scripts\u002Fshopping_render.py",11411,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fshopping_render.py",{"path":462,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":463,"sourceHtmlUrl":464},"scripts\u002Fstep_ingredient_manager.py",6772,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fstep_ingredient_manager.py",{"path":466,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":467,"sourceHtmlUrl":468},"scripts\u002Fstep_manager.py",9878,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fstep_manager.py",{"path":470,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":471,"sourceHtmlUrl":472},"scripts\u002Ftechnique_manager.py",7132,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Ftechnique_manager.py",{"path":474,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":475,"sourceHtmlUrl":476},"scripts\u002Ftip_manager.py",12321,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Ftip_manager.py",{"path":478,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":479,"sourceHtmlUrl":480},"scripts\u002Fvalidators.py",51509,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002Fvalidators.py",{"path":482,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":483,"sourceHtmlUrl":484},"scripts\u002F场景合并.py",6432,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F场景合并.py",{"path":486,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":487,"sourceHtmlUrl":488},"scripts\u002F开始使用\u002F__init__.py",0,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F开始使用\u002F__init__.py",{"path":490,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":491,"sourceHtmlUrl":492},"scripts\u002F开始使用\u002Fcli.py",2407,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F开始使用\u002Fcli.py",{"path":494,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":495,"sourceHtmlUrl":496},"scripts\u002F开始使用\u002Fops.py",8521,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F开始使用\u002Fops.py",{"path":498,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":499,"sourceHtmlUrl":500},"scripts\u002F搜索筛选\u002F__init__.py",69,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F搜索筛选\u002F__init__.py",{"path":502,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":503,"sourceHtmlUrl":504},"scripts\u002F搜索筛选\u002Fcli.py",4560,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F搜索筛选\u002Fcli.py",{"path":506,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":507,"sourceHtmlUrl":508},"scripts\u002F搜索筛选\u002Fops.py",7376,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F搜索筛选\u002Fops.py",{"path":510,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":511,"sourceHtmlUrl":512},"scripts\u002F派生\u002F__init__.py",37,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F派生\u002F__init__.py",{"path":514,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":515,"sourceHtmlUrl":516},"scripts\u002F派生\u002Fcli.py",3638,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F派生\u002Fcli.py",{"path":518,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":519,"sourceHtmlUrl":520},"scripts\u002F派生\u002Fops.py",13278,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Fscripts\u002F派生\u002Fops.py",{"path":522,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":523,"sourceHtmlUrl":524},"templates\u002Fbackup_receipt.html",9589,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fbackup_receipt.html",{"path":526,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":527,"sourceHtmlUrl":528},"templates\u002Fbatch_edit.html",24199,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fbatch_edit.html",{"path":530,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":531,"sourceHtmlUrl":532},"templates\u002Fcooking_mode.html",54904,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fcooking_mode.html",{"path":534,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":535,"sourceHtmlUrl":536},"templates\u002Fdata_quality_report.html",9190,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fdata_quality_report.html",{"path":538,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":539,"sourceHtmlUrl":540},"templates\u002Fdata_view.html",12741,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fdata_view.html",{"path":542,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":543,"sourceHtmlUrl":544},"templates\u002Fhelp.html",19938,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fhelp.html",{"path":546,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":547,"sourceHtmlUrl":548},"templates\u002Frecipe_schema.json",7736,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Frecipe_schema.json",{"path":550,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":551,"sourceHtmlUrl":552},"templates\u002Frecipe_template.json",2555,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Frecipe_template.json",{"path":554,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":555,"sourceHtmlUrl":556},"templates\u002Frecipe_view.html",47872,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Frecipe_view.html",{"path":558,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":559,"sourceHtmlUrl":560},"templates\u002Fshopping_view.html",32933,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002Fshopping_view.html",{"path":562,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":563,"sourceHtmlUrl":564},"templates\u002F修改\u002Fdiscard_receipt.html",18179,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F修改\u002Fdiscard_receipt.html",{"path":566,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":567,"sourceHtmlUrl":568},"templates\u002F修改\u002Fupdate_compare.html",24414,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F修改\u002Fupdate_compare.html",{"path":570,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":571,"sourceHtmlUrl":572},"templates\u002F历史\u002Fdata_view_global.html",14156,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F历史\u002Fdata_view_global.html",{"path":574,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":575,"sourceHtmlUrl":576},"templates\u002F历史\u002Frecord_receipt.html",16022,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F历史\u002Frecord_receipt.html",{"path":578,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":579,"sourceHtmlUrl":580},"templates\u002F开始使用\u002Ffirst_use_wizard.html",10091,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F开始使用\u002Ffirst_use_wizard.html",{"path":582,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":583,"sourceHtmlUrl":584},"templates\u002F录入\u002F回执.html",15103,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F录入\u002F回执.html",{"path":586,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":587,"sourceHtmlUrl":588},"templates\u002F录入\u002F采集.html",15866,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F录入\u002F采集.html",{"path":590,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":591,"sourceHtmlUrl":592},"templates\u002F搜索筛选\u002Fdata_view.html",15181,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F搜索筛选\u002Fdata_view.html",{"path":594,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":595,"sourceHtmlUrl":596},"templates\u002F派生\u002Fderive_edit.html",17796,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F派生\u002Fderive_edit.html",{"path":598,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":599,"sourceHtmlUrl":600},"templates\u002F派生\u002Frelation_confirm.html",12359,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F派生\u002Frelation_confirm.html",{"path":602,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":603,"sourceHtmlUrl":604},"templates\u002F派生\u002Frelation_tree.html",12435,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F派生\u002Frelation_tree.html",{"path":606,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":607,"sourceHtmlUrl":608},"templates\u002F派生\u002F回执.html",15471,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftemplates\u002F派生\u002F回执.html",{"path":610,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":611,"sourceHtmlUrl":612},"tests\u002Fconftest.py",1511,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Fconftest.py",{"path":614,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":615,"sourceHtmlUrl":616},"tests\u002Ftest_add.py",17278,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_add.py",{"path":618,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":619,"sourceHtmlUrl":620},"tests\u002Ftest_align_08.py",7491,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_align_08.py",{"path":622,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":623,"sourceHtmlUrl":624},"tests\u002Ftest_imports.py",6897,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_imports.py",{"path":626,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":627,"sourceHtmlUrl":628},"tests\u002Ftest_render_data.py",4026,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_render_data.py",{"path":630,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":631,"sourceHtmlUrl":632},"tests\u002Ftest_shopping.py",10041,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_shopping.py",{"path":634,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":635,"sourceHtmlUrl":636},"tests\u002Ftest_validators.py",3315,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_validators.py",{"path":638,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":639,"sourceHtmlUrl":640},"tests\u002Ftest_修改.py",16589,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_修改.py",{"path":642,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":643,"sourceHtmlUrl":644},"tests\u002Ftest_做菜.py",12820,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_做菜.py",{"path":646,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":647,"sourceHtmlUrl":648},"tests\u002Ftest_历史.py",14678,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_历史.py",{"path":650,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":651,"sourceHtmlUrl":652},"tests\u002Ftest_开始使用.py",11164,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_开始使用.py",{"path":654,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":655,"sourceHtmlUrl":656},"tests\u002Ftest_搜索筛选.py",16392,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_搜索筛选.py",{"path":658,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":659,"sourceHtmlUrl":660},"tests\u002Ftest_数据管理.py",14130,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_数据管理.py",{"path":662,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":663,"sourceHtmlUrl":664},"tests\u002Ftest_查看.py",11775,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_查看.py",{"path":666,"resourceType":197,"resourceTypeDesc":198,"sizeBytes":667,"sourceHtmlUrl":668},"tests\u002Ftest_派生.py",18697,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002Ftests\u002Ftest_派生.py",{"path":670,"resourceType":45,"resourceTypeDesc":46,"sizeBytes":671,"sourceHtmlUrl":672},"私家大厨.html",63901,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002F私家大厨.html",[674,694,703,712,722,732],{"skillNo":675,"name":676,"nameZh":6,"description":677,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":678,"categories":679,"keywords":680,"publishedAt":18},"01M71JPWVNC5JZ2FD4CSR3SZC1","饼干记账","记账技能。写入类:记支出、记收入、拍账单、批量录入、改记录、撤销、恢复、记报销、记退款、记借出、记借入、记收回、记偿还、记分期。查询类:查今天、查某天、查月、查区间、查分类、搜备注、查标签、查账户、查账本、查欠款、查待报销。分析类:看月度、看总览、看分类、看对比、看趋势、看大额、做统计、看洞察、看借贷。目标\u002F账户\u002F联动:设定预算、看预算、设定目标、看目标、新增账户、改账户、账户转账、看账户汇总、买东西联动、吃饭联动。**所有查询\u002F分析类唤醒词默认 invoke HTML 工作流**(scripts\u002Fbill_inject.py + templates),写入类保持文字回执。能力速查:说「饼干记账 HELP」\u002F「查帮助」\u002F「能做什么」。完整 70 个唤醒词见 references\u002F路由表.md","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F饼干记账\u002FSKILL.md",[],[676,681,682,683,684,685,686,687,688,689,690,691,692,693],"记账","账单","help","支出","scripts","收入","预算","文字","templates","invoke","统计","html","references",{"skillNo":695,"name":696,"nameZh":6,"description":697,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":698,"categories":699,"keywords":700,"publishedAt":18},"01M71JPS100K4E2JN8R3B0F9NR","贴心助理","真实助手 - 主动分析用户状态，关心用户，提供帮助与提醒。不偷懒地联动所有技能，真正像个朋友一样陪伴。","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F贴心助理\u002FSKILL.md",[],[696,701,702],"朋友","陪伴",{"skillNo":704,"name":705,"nameZh":6,"description":706,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":707,"categories":708,"keywords":709,"publishedAt":18},"01M71JPPN0WZ1ARA081J0JDNPC","美团","安装美团旅游技能(meituan-travel)向导 - 检查 mtskills 商店并安装 meituan-travel","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F美团\u002FSKILL.md",[],[705,710,711],"meituan","travel",{"skillNo":713,"name":714,"nameZh":6,"description":715,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":716,"categories":717,"keywords":718,"publishedAt":18},"01M71JPN921TSX62DXEFY1B8FJ","网易云音乐","安装网易云音乐 CLI 工具(@music163\u002Fncm-cli) - 通过 npm 全局安装","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F网易云音乐\u002FSKILL.md",[],[714,719,720,721],"工具","cli","npm",{"skillNo":723,"name":724,"nameZh":6,"description":725,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":726,"categories":727,"keywords":728,"publishedAt":18},"01M71JPCK6Z5NT3G258NFKEJGG","目录树","目录树技能 - 递归扫描给定目录，输出所有目录和文件的树状结构清单","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002FSKILL.md",[],[724,729,730,731],"目录","文件","文件导航",{"skillNo":733,"name":734,"nameZh":6,"description":735,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":736,"categories":737,"keywords":738,"publishedAt":18},"01M71JPADTYH476Q2M2CQ62WSD","百科采集","全网百科知识采集技能。 用户提及采集百科、指定领域、搜索百科、深度搜索、备用搜索、切换引擎、 生成百科、精简百科、扩展知识、百科评语、批量采集、迭代采集时触发。 支持22个预设领域的百科知识采集，Tavily\u002FMiniMax双引擎搜索。","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F百科采集\u002FSKILL.md",[],[734,739,740,741],"搜索","生成","tavily"]