[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71JMZN56RTSAZM607GZ2AZD":3,"skill-same:01M71JMZN56RTSAZM607GZ2AZD":1272},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":54,"commitSha":55,"skillDirectory":5,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":6,"ownerHtmlUrl":58,"ownerBlogUrl":6,"ownerDescription":59,"updatedAt":60,"install":61,"resources":74},"01M71JMZN56RTSAZM607GZ2AZD","居家管家",null,"家庭物品全生命周期管理技能。当用户使用以下指令时触发： 查物品、看物品（搜索\u002F查看详情）、 录物品、拍物品（文字录入\u002F拍照录入）、 改物品、移物品、补物品、减物品、标物品、废物品、借物品、修物品（更新类）、 盘物品、盘全部（盘点）、 穿什么（穿搭推荐）、 带物品、归物品（旅游归位）、 统物品、查高频、查低频（频率统计）、 查过期（过期检查）、 看标签、合标签（标签管理）、 查快递（快递查询）、 查购买记录、查上月购买、查今年花费、查退货窗口、登记购买记录（购买记录管理）、 查保修状态、登记保修、记录维修、设置保养周期、执行保养（保修与保养）、 查证件到期、登记证件、证件归档、更新证件（证件管理）、 查账号、存账号、改账号、看密码（账号密码·脱敏）、 批量录入、补录（批量\u002F历史录入）、 紧急定位、筛选浏览、拍照找物品、查重复（查找进阶）、 数量变更、状态变更、合并物品、撤销操作、物品关联（更新进阶）、 管标签、管分类、整理建议（标签分类管理）、 查看照片、管照片、照片墙（照片档案）、 盘点记录、差异处理、搬家盘点（盘点进阶）、 历史（物品历史）、 借用、家人档案（家庭协作）、 查闲置（闲置检测）、盘点统计（盘点统计与建议）、 联动总览、记到卡路里、记到记账（跨技能联动）、 首次使用（初始化工作流）、备份导出（数据资产）、导入恢复（迁移）、 查异常（数据健康检查）。 所有操作通过 Python CLI 执行数据库读写，AI 负责解析自然语言和交互确认；录物品\u002F拍物品流程在写入前生成 HTML 预览供用户确认。","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",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40],"cli","html","协作","搜索","cryptography","文字","卡路里","数据","初始化","交互","统计","python cli","生成","整理","密码","python","记账","2026-11-10 10:12:30",false,"---\nname: 居家管家\ndescription: >\n  家庭物品全生命周期管理技能。当用户使用以下指令时触发：\n  查物品、看物品（搜索\u002F查看详情）、\n  录物品、拍物品（文字录入\u002F拍照录入）、\n  改物品、移物品、补物品、减物品、标物品、废物品、借物品、修物品（更新类）、\n  盘物品、盘全部（盘点）、\n  穿什么（穿搭推荐）、\n  带物品、归物品（旅游归位）、\n  统物品、查高频、查低频（频率统计）、\n  查过期（过期检查）、\n  看标签、合标签（标签管理）、\n  查快递（快递查询）、\n  查购买记录、查上月购买、查今年花费、查退货窗口、登记购买记录（购买记录管理）、\n  查保修状态、登记保修、记录维修、设置保养周期、执行保养（保修与保养）、\n  查证件到期、登记证件、证件归档、更新证件（证件管理）、\n  查账号、存账号、改账号、看密码（账号密码·脱敏）、\n  批量录入、补录（批量\u002F历史录入）、\n  紧急定位、筛选浏览、拍照找物品、查重复（查找进阶）、\n  数量变更、状态变更、合并物品、撤销操作、物品关联（更新进阶）、\n  管标签、管分类、整理建议（标签分类管理）、\n  查看照片、管照片、照片墙（照片档案）、\n  盘点记录、差异处理、搬家盘点（盘点进阶）、\n  历史（物品历史）、\n  借用、家人档案（家庭协作）、\n  查闲置（闲置检测）、盘点统计（盘点统计与建议）、\n  联动总览、记到卡路里、记到记账（跨技能联动）、\n  首次使用（初始化工作流）、备份导出（数据资产）、导入恢复（迁移）、\n  查异常（数据健康检查）。\n  所有操作通过 Python CLI 执行数据库读写，AI 负责解析自然语言和交互确认；录物品\u002F拍物品流程在写入前生成 HTML 预览供用户确认。\nmetadata:\n  openclaw:\n    emoji: 🏠\n    requires:\n      python: \">=3.7\"\n      pip:\n        - cryptography\n  help_wake_word: \"居家管家 帮助\"\n---\n\n## 📘 关于 `居家管家.html`(总纲 04 §原则 4 · 镜像)\n\n**本 HTML 文件就是 `python3 scripts\u002Fhome_manager.py help` 输出的精确副本。**\n\n- 修改唤醒词\u002F场景 → 改 `references\u002Fscenarios.yaml` → 跑 `python3 scripts\u002Fbuild_manual.py` 同步。\n- 不要手动编辑 `居家管家.html`(脚本会覆盖)。\n- 测试 `tests\u002Ftest_manual_sync.py` 用 SHA256 哈希断言字节一致,**若有人忘了同步,测试失败报警**(不阻断 commit,只报警)。\n- 同步脚本自动注入 `HELP_FIXED_TIMESTAMP=\"0000-00-00 00:00 (快照)\"`,确保可重现生成(不被 `datetime.now()` 干扰)。\n\n> **总纲 04 §原则 4(本 skill 改造版,2026-07-27)**: 每个技能目录都需要有 `{技能名}.html` 文件,**该文件就是技能 HELP HTML 最新版本的复制品**。\n\n\n**🔗 联动提示：** 完成本技能主操作后，检查技能路由器（`图片路由\u002FSKILL.md`）的联动规则，判断是否需要联动其他技能（如用户提到物品价格→询问是否记录支出；物品是食品\u002F饮料→询问是否记录卡路里）。详见路由器的联动规则表。\n\n## ⚠️ HTML 同步规范（最高优先级）\n\n> **此规范优先级高于本文件中所有其他规定。**\n\n1. **全量同步**：该技能的所有优化和变动、脚本的所有变动都必须体现在 `居家管家.html` 上。任何功能模块的新增、修改、删除，任何唤醒词的调整，任何 CLI 命令的变化，任何脚本逻辑的改动——都必须同步更新 HTML 页面中对应的内容。\n2. **最高优先级**：本条规定在所有规范中优先级最高。当其他流程或习惯与本条冲突时，以本条为准。\n3. **逐行确认**：对该技能的所有文件、脚本的任何一行修改，都需要明确得到用户的 1 次确认后方可执行。不得批量静默修改，不得跳过确认步骤。\n\n---\n\n## ⚠️ Commit 硬规则（强制）\n\n> 优先级与\"HTML 同步规范\"平级，所有写代码的 AI \u002F 协作者必须遵守。\n\n1. **禁止** `git commit --no-verify` —— 会跳过 pre-commit hook 测试\n2. **禁止** 使用 git 库（`gitpython` \u002F `simple-git` \u002F `libgit2` 等）直接 API 调用 —— 绕过 shell，hook 不触发\n3. **必须** 通过 pre-commit hook 的 71 个 pytest 测试才能 commit\n4. **新机器首次使用本 skill 前**，必须执行 `bash scripts\u002Finstall_hooks.sh` 配置本地 hook\n\n**hook 工作机制**（SKILLS\u002F 是单 git 仓库，多 skill 子目录）：\n- git 仓库根：`SKILLS\u002F.githooks\u002Fpre-commit`\n- 改动路径含 `居家管家\u002F*` → 自动跑 `居家管家\u002Ftests\u002F` 下的 71 个 pytest\n- 改动路径含 `卡路里\u002F*` → 跑 `卡路里\u002Ftests\u002F`\n- 其他改动（文档\u002FHTML 手册\u002F架构规范）→ 跳过测试\n\n**为什么需要这层约束**：本地 `.githooks\u002Fpre-commit` 跑 pytest 是 CI 的本地替代方案。详见 `git-hooks-security-analysis.html`（已归档于 opencode output 目录）。\n\n---\n\n## ⚠️ 操作规范（强制）\n\n本技能所有数据操作必须通过 CLI，禁止直连数据库。\n\n---\n\n## ⚠️ 分类命名规范（强制）\n\n**所有写入 categories 表的 name 字段必须满足以下规则。违规会被 `category_manager.py` 拒收，不入库。**\n\n### 规则\n\n| # | 规则 | 违规示例 | 原因 |\n|---|---|---|---|\n| 1 | 非空,strip 后 1-30 字 | `\"\"` \u002F `\"   \"` | 占位\u002F空白无意义 |\n| 2 | **禁数字前缀** | `3. 家居` \u002F `2 衣物` \u002F `[1]数码` \u002F `(2)图书` | DB id 137\u002F138\u002F205-210 已是天然编号,name 再加 = 双重编号 = 装饰 |\n| 3 | 禁 emoji | `🎉 食物` | 装饰,破坏纯文本 |\n| 4 | 同 parent 下 name 唯一 | 两个同名二级 | 防止 merge 漏掉产生歧义 |\n\n### 第一性\n\n- 数字编号是 **DB id 的事**,name 负责语义\n- 8 顶级 name **统一不带前缀**:`食物与饮品` \u002F `衣物与穿戴` \u002F `家居与陈设` \u002F `工具与器材` \u002F `数码与电子` \u002F `健康与医药` \u002F `文体与娱乐` \u002F `资产与凭证`\n- 跨次加节点时,先看现有 name 风格,跟齐\n\n### 实现位置\n\n`scripts\u002Fcategory_manager.py` 的 `_validate_name(name, parent_name, conn)` 函数,被 `cmd_import` \u002F 未来 `cmd_add` 调用。\n\n---\n\n## 路由表\n\nAI 收到用户输入后，按以下表匹配唤醒词，命中即加载对应功能。\n\n| # | 唤醒词 | 功能 | 加载文件 | 需要物品名？ |\n|---|--------|------|----------|-------------|\n| 1 | **居家管家 帮助** | **技能速查（HELP）** | `python3 scripts\u002Fhome_manager.py help`（生成 HELP HTML） | 否 |\n| 2 | 查物品 | 物品搜索 | features\u002Fsearch.md | 可选（无则列全部） |\n| 3 | 看物品 | 物品详情 | features\u002Fsearch.md → detail | 是（多件时让用户选） |\n| 4 | 录物品 | 文字录入 | features\u002Fadd.md | 否（AI 解析描述） |\n| 5 | 拍物品 | 拍照录入 | features\u002Fadd.md → 图片子流程 | 否（从图片提取） |\n| 6 | 改物品 | 通用更新 | features\u002Fupdate.md | 是 |\n| 7 | 移物品 | 位置移动 | features\u002Fupdate.md → 位置移动 | 是 |\n| 8 | 补物品 | 数量增加 | features\u002Fupdate.md → 数量变更 | 是 |\n| 9 | 减物品 | 数量减少 | features\u002Fupdate.md → 数量变更 | 是 |\n| 10 | 标物品 | 标签更新 | features\u002Fupdate.md → 标签更新 | 是 |\n| 11 | 废物品 | 标记废弃 | features\u002Fupdate.md → 状态变更 | 是 |\n| 12 | 借物品 | 标记借出 | features\u002Fupdate.md → 状态变更 | 是 |\n| 13 | 修物品 | 标记维修 | features\u002Fupdate.md → 状态变更 | 是 |\n| 14 | 盘物品 | 按位置盘点 | features\u002Finventory.md | 是（位置） |\n| 15 | 盘全部 | 全屋盘点 | features\u002Finventory.md | 否 |\n| 16 | 穿什么 | 穿搭推荐 | `python3 scripts\u002Fhome_manager.py sm3-outfit [--temperature N] [--occasion X] [--limit N]` → 穿搭\u002Foutfit_picker.html（拼贴卡相册风） | 否 |\n| 17 | 带物品 | 出门标记 | `python3 scripts\u002Fhome_manager.py sm3-trip [--trip-type X] [--days N] [--plan-type X] [--exercises X]` → 穿搭\u002Ftravel_trip.html（行程规则\u002F健身联动\u002F出发核对） | 否 |\n| 18 | 归物品 | 回家归位 | `python3 scripts\u002Fhome_manager.py sm3-trip --mode return` → 穿搭\u002Ftravel_trip.html（旅游中清单逐个确认归位） | 否（查所有旅游中） |\n| 19 | 统物品 | 总体统计 | features\u002Fstats.md → summary | 否 |\n| 20 | 查高频 | 高频物品（并入物品总览） | features\u002Fstats.md → summary（T5 裁决：并入总览高频 TOP 区块） | 否 |\n| 21 | 查低频 | 低频物品（并入闲置检测） | features\u002Fstats.md → idle（T5 裁决：语义由查闲置承接） | 否 |\n| 22 | 查过期 | 过期检查 | features\u002Fstats.md → expiring | 否 |\n| 23 | 看标签 | 列出标签 | features\u002Ftags.md → 列表 | 否 |\n| 24 | 合标签 | 合并标签 | features\u002Ftags.md → 合并 | 是（from\u002Fto） |\n| 25 | 查快递 | 快递跟踪（查\u002F超时\u002F收货确认） | `python3 scripts\u002F快递购物\u002Fcli.py express [--timeout-days 7]` → 快递购物\u002Fexpress.html | 否 |\n| 26 | 推位置 | 位置推荐 | features\u002Fadd.md → Step 2.5 | 是（category-id 整数） |\n| 27 | 找位置 | 参考锚定 | features\u002Fadd.md → Step 2.6 | 是（reference） |\n| 28 | 查账号 | 查看账号（密码脱敏·类型组织） | `python3 scripts\u002F票据凭证\u002Fcli.py account list` \u002F `show --platform \"XX\" --master-key \"XX\"` → 票据凭证\u002Faccounts.html | 是（平台名，无则列全部） |\n| 29 | 存账号 | 新增账号（密码加密存储） | `python3 scripts\u002F票据凭证\u002Fcli.py account add --platform \"XX\" --user \"XX\" --pass \"XX\" --master-key \"XX\" [--type 购物\\|银行\\|社交\\|其他]` | 是 |\n| 30 | 改账号 | 更新账号（重新录入语义） | `python3 scripts\u002F票据凭证\u002Fcli.py account update --platform \"XX\" --master-key \"XX\" [--user] [--pass] [--type]` | 是（平台名） |\n| 31 | 看密码 | 查看密码（敏感回显·仅对话） | `python3 scripts\u002F票据凭证\u002Fcli.py account show --platform \"XX\" --master-key \"XX\"` → 回执 JSON（仅对话回显,不进 HTML） | 是（平台名+主密钥） |\n| 32 | 查异常 | 数据健康检查 | `python3 scripts\u002F开始使用\u002Fcli.py lint` → 开始使用\u002Fhealth_report.html | 否 |\n| 33 | 查物品(HTML) | 物品搜索(默认输出 HTML) | features\u002Fsearch.md → Step 4 | 可选（无则列全部） |\n| 34 | 看物品(HTML) | 物品详情(默认输出 HTML) | features\u002Fsearch.md → Step 4 | 是（多件时先选） |\n| 35 | 统物品(HTML) | 总体统计(默认输出 HTML) | features\u002Fsearch.md → Step 4 | 否 |\n| 36 | 借用 | 借用管理（借出\u002F借入\u002F归还\u002F催还） | `python3 scripts\u002Fhome_manager.py family --action borrow-list` → family_borrow.html | 否（登记时选\u002F填） |\n| 37 | 家人档案 | 家人档案（成员\u002F物品归属标记） | `python3 scripts\u002Fhome_manager.py family --action member-list` → family_members.html | 否 |\n| 38 | 管位置 | 位置管理（查看\u002F新建\u002F改名\u002F合并） | features\u002F位置.md → 管位置 | 否（操作+详情） |\n| 39 | 固定位 | 设置固定位（常用件锚定） | features\u002F位置.md → 固定位 | 是（物品） |\n| 40 | 收纳建议 | 收纳位置建议（AI 推荐） | features\u002F位置.md → 收纳建议 | 否（可多件\u002F批量） |\n| 41 | 空间视图 | 空间视图浏览（位置树下钻） | features\u002F位置.md → 空间视图 | 否（位置可选） |\n| 42 | 查闲置 | 闲置物品检测 | `python3 scripts\u002Fhome_manager.py stats --type idle [--days 90|180|365] [--category-id N] --output` → stats\u002Fidle.html | 否 |\n| 43 | 盘点统计 | 盘点统计与建议 | `python3 scripts\u002Fhome_manager.py stats --type inventory-stat --output` → stats\u002Finventory_stat.html | 否 |\n| 44 | 首次使用 | 首次使用初始化（6 步向导，幂等可重试） | `python3 scripts\u002F开始使用\u002Fcli.py check` \u002F `init` \u002F `init-status` → 开始使用\u002Ffirst_use_wizard.html | 是（路径确认，默认即确认） |\n| 45 | 备份导出 | 备份与导出（数据资产） | `python3 scripts\u002F开始使用\u002Fcli.py backup` \u002F `backup-list` \u002F `export --format json\\|csv` → 开始使用\u002Fbackup_receipt.html | 是（操作\u002F格式） |\n| 46 | 导入恢复 | 导入与恢复（迁移，预告式文件） | `python3 scripts\u002F开始使用\u002Fcli.py import-preview --file X` \u002F `import --file X [--mode skip\\|overwrite]` → 开始使用\u002Fimport_restore.html | 是（文件预告式） |\n| 47 | 批量录入 | 批量录入多件物品（清单\u002F照片） | `python3 scripts\u002Fhome_manager.py sm1-add-batch --json-file X [--commit]` → 物品\u002Fadd_form.html | 否 |\n| 48 | 补录 | 补录历史物品（指定日期） | `python3 scripts\u002Fhome_manager.py sm1-add --backfill-date YYYY-MM-DD` → 物品\u002Fadd_form.html | 否（AI 解析描述） |\n| 49 | 紧急定位 | 紧急查找物品位置（一屏直达） | `python3 scripts\u002Fhome_manager.py sm1-locate --name X` → 物品\u002Flocate.html | 是（名称\u002F描述） |\n| 50 | 筛选浏览 | 按条件筛选浏览物品（分组\u002F排序） | `python3 scripts\u002Fhome_manager.py sm1-browse [--group-by] [--location] [--tag]` → 物品\u002Fbrowse.html | 否 |\n| 51 | 拍照找物品 | 拍照反向查找物品（图搜） | `python3 scripts\u002Fhome_manager.py sm1-search --name X`（AI 图搜 → 关键词）→ 物品\u002Fsearch_list.html | 否（照片） |\n| 52 | 查重复 | 检查重复物品 | `python3 scripts\u002Fhome_manager.py sm1-duplicates` → 物品\u002Fduplicates.html | 否 |\n| 53 | 合并物品 | 合并重复物品（保留主条\u002F数量相加） | `python3 scripts\u002Fhome_manager.py sm1-merge --target N --sources 1,2` → 物品\u002Freceipt.html | 是（target\u002F源） |\n| 54 | 撤销操作 | 撤销最近操作（一次性回滚） | `python3 scripts\u002Fhome_manager.py sm1-undo-list` \u002F `sm1-undo --event-id N` → 物品\u002Fundo_select.html | 否 |\n| 55 | 物品关联 | 设置\u002F解除物品关联（配件等） | `python3 scripts\u002Fhome_manager.py sm1-relate --id N --related M [--action unlink]` → 物品\u002Frelations.html | 是 |\n| 56 | 管标签 | 标签管理（总览\u002F改名\u002F合并\u002F清理） | `python3 scripts\u002Fhome_manager.py sm1-tag-overview` \u002F `tag-merge` → 物品\u002Ftag_manage.html | 否 |\n| 57 | 管分类 | 分类管理（树\u002F新建\u002F改名\u002F合并） | `python3 scripts\u002Fhome_manager.py sm1-category [--action add\\|rename\\|merge]` → 物品\u002Fcategory_manage.html | 否 |\n| 58 | 整理建议 | 标签分类整理建议（AI 检测相近） | `python3 scripts\u002Fhome_manager.py sm1-similar-tags` → 物品\u002Ftag_manage.html | 否 |\n| 59 | 查看照片 | 查看物品照片（含类型筛选） | `python3 scripts\u002Fhome_manager.py sm1-photos --id N` → 物品\u002Fphotos.html | 是 |\n| 60 | 管照片 | 管理物品照片（排序\u002F主图\u002F类型） | `python3 scripts\u002Fhome_manager.py sm1-photo-update --id N --json-file X` → 物品\u002Fphotos.html | 是 |\n| 61 | 照片墙 | 照片墙浏览（分类\u002F位置\u002F类型） | `python3 scripts\u002Fhome_manager.py sm1-photo-wall [--group-by] [--type]` → 物品\u002Fphoto_wall.html | 否 |\n| 62 | 盘点记录 | 查看盘点记录（含复查入口） | `python3 scripts\u002Fhome_manager.py sm1-inventory-records` → 物品\u002Finventory_records.html | 否 |\n| 63 | 差异处理 | 处理盘点差异（缺\u002F多\u002F异\u002F待确认） | `python3 scripts\u002Fhome_manager.py sm1-inventory-diff [--record-id N]` \u002F `sm1-inventory-resolve` → 物品\u002Finventory_diff.html | 否（记录级） |\n| 64 | 搬家盘点 | 搬家打包盘点（带走\u002F不带走） | `python3 scripts\u002Fhome_manager.py sm1-move-checklist` \u002F `sm1-move-commit` → 物品\u002Fmove_checklist.html | 否 |\n| 65 | 历史 | 查看物品历史（时间线\u002F轨迹） | `python3 scripts\u002Fhome_manager.py sm1-history --id N` → 物品\u002Fhistory.html | 是 |\n| 66 | 数量变更 | 变更物品数量（补充\u002F消耗\u002F用完） | `python3 scripts\u002Fhome_manager.py sm1-qty --id N [--plus\\|--minus\\|--set]` → 物品\u002Freceipt.html | 是 |\n| 67 | 状态变更 | 变更物品状态（废弃\u002F借出\u002F维修\u002F恢复，状态机守卫） | `python3 scripts\u002Fhome_manager.py sm1-status --id N --status X` → 物品\u002Freceipt.html | 是 |\n| 68 | 盘点 | 盘点核对（按位置\u002F分类\u002F全屋，产生差异集） | `python3 scripts\u002Fhome_manager.py sm1-inventory-round [--scope location\\|category\\|all]` → 物品\u002Finventory_round.html | 否（可指定范围） |\n| 69 | 购物清单 | 购物清单（组织\u002F例行\u002F采购闭环） | `python3 scripts\u002F快递购物\u002Fcli.py list` → 快递购物\u002Flist.html | 否（可带条目） |\n| 70 | 缺货检测 | 缺货检测（自动进清单） | `python3 scripts\u002F快递购物\u002Fcli.py missing [--category-id N]` → 快递购物\u002Fmissing.html | 否（可选范围） |\n| 71 | 囤货盘点 | 囤货盘点（库存\u002F阈值\u002F不足检测） | `python3 scripts\u002F快递购物\u002Fcli.py stock` → 快递购物\u002Fstock.html | 否 |\n| 72 | 联动总览 | 跨技能联动能力索引 + 偏好设置 | `python3 scripts\u002F联动\u002Fcli.py sm9-overview` → 联动\u002Flink_overview.html（或 home_manager.py sm9-overview，T2 注册后） | 否 |\n| 73 | 记到卡路里 | 食品联动（记到今日饮食\u002F查热量） | features\u002F联动.md → 食品联动 | 是（先查物品确认） |\n| 74 | 记到记账 | 价格联动（记支出\u002F记收入） | features\u002F联动.md → 价格联动 | 是（先查物品确认） |\n| 75 | 查购买记录 | 查购买记录（全量\u002F按物品\u002F按时间） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list [--item-id N] [--year YYYY] [--month MM] [--scene SM6-1]` → 票据凭证\u002Fpurchase_records.html | 否（物品\u002F时间可选） |\n| 76 | 查上月购买 | 查上月购买（时间预填·零填写） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --year YYYY --month MM --scene SM6-2` → 票据凭证\u002Fpurchase_records.html | 否 |\n| 77 | 查今年花费 | 查今年花费（年度消费统计） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase stats --year YYYY --scene SM6-3` → 票据凭证\u002Fpurchase_records.html | 否 |\n| 78 | 查退货窗口 | 查退货窗口（物品必填·退货截止日） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --item-id N --scene SM6-4` → 票据凭证\u002Fpurchase_records.html | 是（物品） |\n| 79 | 登记购买记录 | 登记购买记录（录入） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase add --item-id N --date D [--price] [--channel] [--scene SM6-5]` → 回执 JSON | 是（物品+日期） |\n| 80 | 查保修状态 | 查保修状态（在保\u002F将到期\u002F已过） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty list [--status 在保\\|即将到期\\|已过\\|全部] [--scene SM6-6]` → 票据凭证\u002Fwarranty.html | 否 |\n| 81 | 登记保修 | 登记保修（录入保修期） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保修 --start-date D --duration-days N [--scene SM6-7]` → 回执 JSON | 是（物品+起始日+时长） |\n| 82 | 记录维修 | 记录维修（维修历史） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty repair --warranty-id N --date D [--cost] [--scene SM6-8]` → 回执 JSON | 是（保修ID+日期） |\n| 83 | 设置保养周期 | 设置保养周期（定期保养） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保养 --start-date D --duration-days N [--scene SM6-9]` → 回执 JSON | 是（物品+周期） |\n| 84 | 执行保养 | 执行保养（刷新下次日） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty maintain --warranty-id N --date D [--scene SM6-10]` → 回执 JSON | 是（保养ID+日期） |\n| 85 | 查证件到期 | 查证件到期（按到期排序·脱敏） | `python3 scripts\u002F票据凭证\u002Fcli.py cert list [--scene SM6-11]` → 票据凭证\u002Fcertificates.html | 否 |\n| 86 | 登记证件 | 登记证件（录入） | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --type 护照\\|身份证\\|驾照\\|签证\\|保险单\\|其他 --expires-at D [--scene SM6-12]` → 回执 JSON | 是（类型+到期日） |\n| 87 | 证件归档 | 证件归档（照片） | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --photo P [--scene SM6-13]` → 回执 JSON | 否（照片必附） |\n| 88 | 更新证件 | 更新证件（改到期\u002F持有人\u002F号码） | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --scene SM6-14`（重登记语义·只改填写字段） → 回执 JSON | 是（证件ID） |\n| 89 | 查账号 | 查账号（密码脱敏） | `python3 scripts\u002F票据凭证\u002Fcli.py account list [--scene SM6-15]` → 票据凭证\u002Faccounts.html（密码 ******；复制数据默认不含密码） | 否 |\n| 90 | 存账号 | 存账号（加密存储） | `python3 scripts\u002F票据凭证\u002Fcli.py account add --platform P --user U --pass X --master-key M [--scene SM6-16]` → 回执 JSON | 是（平台+用户名+密码+主密钥） |\n| 91 | 改账号 | 改账号（更新录入） | `python3 scripts\u002F票据凭证\u002Fcli.py account update --platform P --master-key M [--scene SM6-17]` → 回执 JSON | 是（平台+主密钥） |\n| 92 | 看密码 | 看密码（敏感回显） | `python3 scripts\u002F票据凭证\u002Fcli.py account show --platform P --master-key M [--scene SM6-18]` → 回执 JSON（仅对话回显） | 是（平台+主密钥） |\n| 93 | 衣橱分析 | 衣橱闲置分析（结构诊断\u002F断舍离） | `python3 scripts\u002Fhome_manager.py sm3-wardrobe` → 穿搭\u002Fwardrobe_analyze.html | 否 |\n| 94 | 换季 | 换季收纳（季节衣物批量收纳\u002F拿出） | `python3 scripts\u002Fhome_manager.py sm3-season [--season 夏季\\|冬季\\|春秋] [--action 收纳\\|拿出]` → 穿搭\u002Fwardrobe_season.html | 否 |\n| 95 | 旅行穿搭 | 旅行穿搭计划（天数+天气·每日组合） | `python3 scripts\u002Fhome_manager.py sm3-trip-plan [--days N] [--destination X] [--temps N,N]` → 穿搭\u002Ftrip_outfit_plan.html | 否 |\n\n### 匹配规则\n\n1. **精确匹配**：用户输入包含表中唤醒词即命中\n2. **最长匹配**：同时命中多个时，取最长的（如\"查高频\"优先于\"查\"）\n3. **物品名提取**：唤醒词前后的文字作为物品名\u002F参数\n4. **缺失物品名**：需要物品名但用户未提供时，追问\n5. **变体匹配（v0.1 · 语料储备,行为待激活）**：用户输入若包含 `references\u002Fscenarios.yaml` 中某 scenario 的 `variants[].phrase`,视为命中该 scenario 的 `wake_word`,走对应 CLI 命令\n   - **当前状态(2026-07-28)**:变体语料已入库(TOP 5 核心词 × 每词 6 变体),但**匹配行为尚未在 AI 路由层生效**——AI 读取本规则后应自觉执行变体匹配,但无代码强制。`tests\u002Ftest_variants.py` 只锁数据结构(direction\u002Fphrase\u002F非空\u002F无禁用字符),不锁匹配行为。\n   - **激活路径**:未来若加代码层硬执行(改 home_manager.py 路由层读 variants 字段做匹配),本规则从\"语料储备\"升级为\"硬规则\"。\n   - **示例**:用户说\"帮我找找\" → 匹配 `查物品` scenario 的 `variants[direction=口语].phrase=\"帮我找找\"` → 视为命中 `查物品` → 走 `search --name \"XX\"` 等\n   - **变体方向**(总纲 §钩子 3 · 3 方向):\n     - `同义` — 正式唤醒词的等价表达(如\"搜索物品\" → 查物品)\n     - `口语` — 自然口语化(如\"帮我找找\" → 查物品)\n     - `模糊` — 意图模糊但可推断(如\"那个啥在哪\" → 查物品)\n   - **歧义处理**:若变体同时匹配多个唤醒词(如\"看看\"可能匹配 `看物品` 或 `查物品`),AI 必须询问用户确认,不得私自选择(沿用规则 4)\n\n\n   **FAT 暴露的边界 case 处理(v0.1 · 2026-07-28 fresh agent 跑后补)**:\n\n   - **容错规则(规则 5a)**:变体匹配默认**精确子串包含**(`prompt.includes(phrase)`)。不支持近似\u002F同义词替换——如\"那件东西的信息\"不能自动匹配变体\"那个东西的信息\"(一字之差)。若用户输入与变体仅一字之差但语义同,AI 可**主动建议**该变体(\"您是想看物品详情吗?\"),但不算命中,需用户确认。这避免误匹配,代价是 fresh agent 对一字之差无法自洽——这是有意的,防止\"差不多就路由\"导致误操作。\n\n   - **混合输入处理(规则 5b)**:当 prompt = 变体短语 + 解释性从句时(如\"那个啥在哪,就是我上次买的蓝牙耳机\"),AI 应:\n     1. 先用变体短语(\"那个啥在哪\")判定命中 `查物品`\n     2. 再从**解释性从句**(\"就是我上次买的蓝牙耳机\")提取有效参数(\"蓝牙耳机\" 作为物品名)\n     3. 若从句无法提取明确参数,走规则 4(缺失物品名 → 追问)\n\n   - **未命中变体但语义近似(规则 5c)**:若 prompt 未匹配任何变体短语,但语义上明显属于某唤醒词的范畴(如\"统计一下\"未在变体清单但语义近 `统物品` 的\"统计物品\"),AI **不得**自动路由(防止误匹配),应**追问用户**:\"您是想看家里物品总览(统物品)吗?\"——这比规则 4 的\"缺失物品名追问\"更具体,是变体未覆盖时的兜底。**未来扩充变体语料**时,这类近义项应正式登记为新变体。\n\n   - **变体覆盖不足的 fail mode**:若同一核心词的近义项反复出现(如\"统计一下\"\"整体看下\"\"总览一下\"都未在 `统物品` 变体清单),说明变体语料不足,应扩充 `scenarios.yaml` 的 variants 字段(加新 phrase),而非依赖规则 5c 的追问兜底。这是**变体管理的反馈循环**——FAT 暴露覆盖缺口 → 扩充语料 → 下次 FAT 验证。\n> ⚠️ **变体匹配的 fail mode**:若 AI 读了本规则但仍只用精确匹配(忽略 variants),视为 §⛓ HTML-First 协议的 silent failure(用户口语化 prompt 无法命中唤醒词 = 行为 fail mode)。commit 前自检清单的 `html-first-n\u002Fa` 不适用本场景——变体匹配是路由层行为,不是 HTML 层。\n\n### 唤醒词 CLI 映射\n\n| 唤醒词 | CLI 命令 |\n|--------|---------|\n| **居家管家 帮助** | `python3 scripts\u002Fhome_manager.py help`（生成 HELP HTML） |\n| 查物品 | `search --name \"XX\"` 或 `search --location \"XX\"` 或 `search --tag \"XX\"` |\n| 看物品 | `detail --id {ID}` |\n| 录物品 | `add --name \"XX\" --category-id N --location \"XX\"` (category-id 必填,从 categories 表查) |\n| 拍物品 | 先看图并保存到 `HOME_PHOTOS_DIR` → `add --name \"XX\" --category-id N --location \"XX\" --tags \"...≥10\" --remark \"...\" --photo \"XX\"` 一次写入 |\n| 改物品 | `update --id {ID}` + 对应参数 |\n| 移物品 | `update --id {ID} --new-location \"新位置\" --location \"原位置\"` |\n| 补物品 | `update --id {ID} --plus N` |\n| 减物品 | `update --id {ID} --minus N` |\n| 标物品 | `update --id {ID} --tags \"新标签\"` |\n| 废物品 | `update --id {ID} --location-status \"已废弃\"` |\n| 借物品 | `update --id {ID} --location-status \"借用中\"` |\n| 修物品 | `update --id {ID} --location-status \"维修中\"` |\n| 盘物品 | `inventory --location \"位置\" [--output PATH]` (--output 走 inventory_check.html) |\n| 盘全部 | `list`（无筛选条件） |\n| 穿什么 | `sm3-outfit [--temperature N] [--occasion X] [--limit N]` → 穿搭\u002Foutfit_picker.html |\n| 带物品 | `sm3-trip [--trip-type X] [--days N] [--plan-type X] [--exercises X]` → 穿搭\u002Ftravel_trip.html |\n| 归物品 | `sm3-trip --mode return` → 穿搭\u002Ftravel_trip.html |\n| 统物品 | `stats --type overview --output`（物品总览 HTML，含状态\u002F分类\u002F位置\u002F价值TOP\u002F高频TOP\u002F趋势） |\n| 查高频 | `stats --type overview --output`（T5 裁决：并入物品总览高频 TOP 区块） |\n| 查低频 | `stats --type idle [--days 90] --output`（T5 裁决：语义由闲置检测承接） |\n| 查闲置 | `stats --type idle [--days 90|180|365] [--category-id N] [--output PATH]` (--output 走 stats\u002Fidle.html) |\n| 查过期 | `stats --type expiring [--days 30] [--expired-only] [--category-id N] [--output PATH]` (--output 走 stats\u002Fexpiring.html) |\n| 盘点统计 | `stats --type inventory-stat [--output PATH]` (--output 走 stats\u002Finventory_stat.html) |\n| 看标签 | `tag-list` |\n| 合标签 | `tag-merge --from \"旧\" --to \"新\"` |\n| 查快递 | `python3 scripts\u002F快递购物\u002Fcli.py express [--timeout-days 7] [--output PATH]` → 快递购物\u002Fexpress.html（含超时提醒\u002F收货确认闭环） |\n| 购物清单 | `python3 scripts\u002F快递购物\u002Fcli.py list`（HTML 视图）\\| `list-add --name \"XX\" --quantity N [--routine 每周\\|每月]` \\| `list-check --ids 1,2` |\n| 缺货检测 | `python3 scripts\u002F快递购物\u002Fcli.py missing [--category-id N]`（HTML 视图）\\| `missing-to-list --ids 1,2` |\n| 囤货盘点 | `python3 scripts\u002F快递购物\u002Fcli.py stock`（HTML 视图）\\| `stock-set-threshold --id N --threshold M` \\| `stock-fix --id N --quantity M` |\n| 推位置 | `suggest-locations --category-id N [--with-examples]` |\n| 找位置 | `find-location --reference \"XX\"` |\n| 查账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account list [--scene SM6-15]`（清单 HTML·密码脱敏）或 `account show --platform \"XX\" --master-key \"XX\" [--scene SM6-18]`（敏感回显） |\n| 存账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account add --platform \"XX\" --user \"XX\" --pass \"XX\" --master-key \"XX\" [--type 购物\\|银行\\|社交\\|其他] [--scene SM6-16]`（加密存储） |\n| 改账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account update --platform \"XX\" --master-key \"XX\" [--user] [--pass] [--type] [--scene SM6-17]`（重新录入语义） |\n| 查异常 | `python3 scripts\u002F开始使用\u002Fcli.py lint` (数据检查 8 项, 走 开始使用\u002Fhealth_report.html) |\n| 首次使用 | `python3 scripts\u002F开始使用\u002Fcli.py check` → `init`(建库+种子 60 节点)→ `init-status`(幂等) |\n| 备份导出 | `python3 scripts\u002F开始使用\u002Fcli.py backup` \u002F `backup-list` \u002F `export --format json\\|csv` |\n| 导入恢复 | `python3 scripts\u002F开始使用\u002Fcli.py import-preview --file X` → `import --file X [--mode skip\\|overwrite]` |\n| 查物品 | `search --name \"XX\"` 默认输出 HTML |\n| 看物品 | `detail --id {ID}` 默认输出 HTML |\n| 统物品 | `list` 默认输出 HTML |\n| 管位置 | `sm2-manage --action view`（查看）· `--action create --path \"XX\"`（新建）· `--action rename --old \"XX\" --new \"YY\"`（改名）· `--action merge --src \"XX\" --tgt \"YY\"`（合并）· `--action delete --path \"XX\"`（删除）· `--action similar`（相似检测） |\n| 固定位 | `sm2-fixed --action list`（清单）· `--action set --item-id N --location \"XX\"`（设置）· `--action clear --item-id N`（解除） |\n| 收纳建议 | `sm2-suggest --item-id N`（单件）· `--item-ids \"1,2\"`（指定多件）· `--batch [--limit N]`（批量:没固定位的常用件） |\n| 空间视图 | `sm2-view [--path \"XX\"]`（缺省=顶层） |\n| 联动总览 | `python3 scripts\u002F联动\u002Fcli.py sm9-overview`（能力索引+偏好 HTML；`sm9-prefs --key food\\|price --value ask\\|remember\\|off` 设偏好） |\n| 记到卡路里 | `python3 scripts\u002F联动\u002Fcli.py sm9-food --item-id N [--action log\\|query]`（log=记到今日饮食, query=查热量） |\n| 记到记账 | `python3 scripts\u002F联动\u002Fcli.py sm9-price --item-id N [--direction expense\\|income]`（expense=支出, income=收入\u002F退货退款） |\n| 借用 | `family --action borrow-list [--output PATH]`(清单 HTML·双向区隔\u002F超期\u002F催还) · `--action borrow-add --direction 借出\\|借入 --item-id N 或 --item-name \"XX\" --object \"XX\" [--borrowed-at D] [--due-date D]`(登记·借出自动改状态借用中) · `--action borrow-return --borrow-id N`(归还·状态回在家) · `--action borrow-remind --borrow-id N`(催还文案纯文本) |\n| 家人档案 | `family --action member-list [--output PATH]`(成员 HTML·归属统计) · `--action member-add --name \"XX\" [--relation \"XX\"] [--note \"XX\"]`(添加) · `--action member-remove --name \"XX\"`(移除·归属回使用者) · `--action member-assign --name \"XX\" --item-ids \"1,2,3\"`(批量标记归属) |\n| 查购买记录 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list [--item-id N] [--year YYYY] [--month MM] [--scene SM6-1]`（清单 HTML·退货窗口计算）· `purchase add --item-id N --date D [--price X] [--channel] [--scene SM6-5]`（登记·票据照片预告式）· `purchase stats [--year YYYY] [--scene SM6-3]`（消费统计） |\n| 查上月购买 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --year YYYY --month MM [--scene SM6-2]`（时间预填·零填写） |\n| 查今年花费 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase stats --year YYYY [--scene SM6-3]`（年度统计） |\n| 查退货窗口 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --item-id N [--scene SM6-4]`（物品必填·退货截止日） |\n| 登记购买记录 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase add --item-id N --date D [--price X] [--channel] [--scene SM6-5]`（登记·票据照片预告式） |\n| 查保修状态 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty list [--status 在保\\|即将到期\\|已过\\|到期未做\\|全部] [--scene SM6-6]`（清单 HTML·状态徽章·维修记录） |\n| 登记保修 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保修 --start-date D --duration-days N [--scene SM6-7]`（登记保修期） |\n| 记录维修 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty repair --warranty-id N --date D [--cost X] [--scene SM6-8]`（维修记录） |\n| 设置保养周期 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保养 --start-date D --duration-days N [--scene SM6-9]`（设置保养周期） |\n| 执行保养 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty maintain --warranty-id N --date D [--scene SM6-10]`（保养执行·刷新下次日） |\n| 查证件到期 | `python3 scripts\u002F票据凭证\u002Fcli.py cert list [--scene SM6-11]`（清单 HTML·号码 ****后4位·按到期排序） |\n| 登记证件 | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --type 护照\\|身份证\\|驾照\\|签证\\|保险单\\|其他 --expires-at D [--holder] [--number] [--scene SM6-12]`（登记·脱敏存储） |\n| 证件归档 | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --photo P [--scene SM6-13]`（照片归档） |\n| 更新证件 | `python3 scripts\u002F票据凭证\u002Fcli.py cert add [--scene SM6-14]`（重登记语义·只改填写字段） |\n| 账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account list [--scene SM6-15]`（清单 HTML·密码 ******·类型分组）· `account init-master --master-key M`（首设主密钥）· `account add`（加密存储）· `account show`（敏感回显）· `account update`（修改）· `account set-master`（换密钥） |\n\n---\n\n## 🧩 变体管理（总纲 §钩子 3 · 变体）\n\n> 引用 [SKILL 开发总纲 §钩子 3](..\u002FSKILL开发总纲V1.0\u002F03-触发词设计v2.md)：每个核心唤醒词配 2-3 个自然语言等价表达,覆盖 3 方向(同义 \u002F 口语 \u002F 模糊)。SKILL.md 只标方向,不写具体话(避免硬编码语料);具体话术在 `references\u002Fscenarios.yaml` 的 `variants` 字段。\n\n### TOP 5 核心唤醒词变体方向\n\n按 audit 使用频率(grilling Q7=audit),TOP 5 核心词均已配齐 3 方向变体:\n\n| 唤醒词 | 变体方向 | 变体示例(完整见 scenarios.yaml) |\n|--------|---------|------------------------------|\n| 查物品 | 同义 + 口语 + 模糊 | 搜索物品 \u002F 帮我找找 \u002F 那个啥在哪 |\n| 看物品 | 同义 + 口语 + 模糊 | 查看物品 \u002F 给我看看这个 \u002F 那个东西的信息 |\n| 录物品 | 同义 + 口语 + 模糊 | 登记物品 \u002F 帮我记一下 \u002F 这个收进来 |\n| 盘物品 | 同义 + 口语 + 模糊 | 清点物品 \u002F 数数这里 \u002F 看看齐不齐 |\n| 统物品 | 同义 + 口语 + 模糊 | 统计物品 \u002F 家里都有啥 \u002F 一共多少件 |\n\n> **变体数量说明**:总纲 §CONTEXT.md `变体` 定义为\"配 2-3 个自然语言等价表达,覆盖 3 方向\"。本 Skill 在 scenarios.yaml 中每 TOP 5 唤醒词存 6 变体(每方向 2 个)作为语料储备,SKILL.md 上表只展示每方向 1 个代表。`tests\u002Ftest_variants.py` 锁下限(≥ 2 direction)不锁上限,允许语料扩充。\n\n### 单一事实源\n\n变体清单的唯一事实源是 `references\u002Fscenarios.yaml` 的 `variants` 字段(每个 variant = `{direction: str, phrase: str}`)。`tests\u002Ftest_variants.py` 用 5 个测试锁住结构契约(direction ∈ {同义,口语,模糊} \u002F 每 TOP 5 ≥ 2 direction \u002F phrase 非空 \u002F 无禁用字符)。\n\n### ⚠️ Risk B:新增 TOP 核心词需同步标注变体方向\n\n**新增 TOP 核心词时,必须同步在 `scenarios.yaml` 加 `variants` 字段,否则视为 incomplete scenario**——因为缺变体的核心词无法匹配口语化 prompt,违反钩子 3。`tests\u002Ftest_variants.py` 的 TOP5 列表当前是硬编码,新增 TOP 核心词时需同步更新该列表。\n\n---\n\n## 安装与配置\n\n**依赖**：Python 3.x\n\n**环境变量**（可选）：\n- `SKILLS_DB_PATH`：数据库目录\n- `HOME_PHOTOS_DIR`：照片目录\n\n**网页版**：[SkillBoard](https:\u002F\u002Ffeatherhunter.github.io\u002FStudyNotes\u002Fskillboard\u002F) - 通过浏览器使用本系统，支持电脑和手机。使用时选择 `home.db` 文件即可。\n\n**一键安装**：复制以下 prompt 给 AI：\n```\n帮我安装\"居家管家\"技能：\n1. 检查 Python 环境\n2. 引导我配置环境变量\n3. 显示当前环境变量配置\n4. 告诉我如何更改数据目录\n```\n\n---\n\n## 📌 输出位置\n\n本 Skill 的 HTML 输出遵循 [SKILL 开发总纲 §原则 12](..\u002FSKILL开发总纲V1.0\u002F04-可视化与注入v2.md)（HTML 输出路径约定），分类标 12.A（数据\u002F过程）和 12.B（HELP）。\n\n### 路径根与子目录\n\n路径根按 env 链解析（总纲 12.X 优先级）：\n\n```\n$SKILLS_DATA_DIR  >  $SKILLS_DB_PATH  >  Skill 自带 fallback (Windows: D:\\.db\\ \u002F WSL: \u002Fmnt\u002Fd\u002F.db\u002F)\n```\n\n所有 HTML 输出落在 `\u003C根>\u002Fhome_manager_html\u002F` 子目录下（Skill 标识 = `home_manager`，与 Python 包名一致）。\n\n### 12.A 数据\u002F过程 HTML\n\n**命名形态**：`\u003C根>\u002Fhome_manager_html\u002F\u003Ccommand_cn>_\u003CYYYYMMDD>_\u003CHHMMSS>.html`\n\n**command_cn** 中文前缀来自 render 层的 `template → command_cn` 静态映射表（继承 SKILL §触发词速览表字面）：\n\n| template | command_cn |\n|----------|-----------|\n| `search_results.html` | 查物品 |\n| `delivery_check.html` | 查快递 |\n| `add_preview.html` | 录物品 |\n| `item_detail.html` | 看物品 |\n| `list_overview.html` | 统物品（v1，保留给盘全部） |\n| `inventory_check.html` | 盘物品 |\n| `expiring_alert.html` | 查过期（v1，已迁移至 stats\u002Fexpiring.html） |\n| `outfit_picker.html` | 穿什么 |\n| `travel_trip.html` | 出行清单（涵盖带物品 pack + 归物品 return） |\n| `位置\u002Fspace_view.html` | 空间视图 |\n| `位置\u002Flocation_manage.html` | 管位置 |\n| `位置\u002Ffixed_spot.html` | 固定位 |\n| `位置\u002Fsuggest_storage.html` | 收纳建议 |\n| `stats\u002Foverview.html` | 统物品（v2 物品总览，T5） |\n| `stats\u002Fidle.html` | 查闲置（T5） |\n| `stats\u002Fexpiring.html` | 查过期（v2，T5） |\n| `stats\u002Finventory_stat.html` | 盘点统计（T5） |\n| `票据凭证\u002Fpurchase_records.html` | 购买记录域 5 场景（查购买记录\u002F查上月购买\u002F查今年花费\u002F查退货窗口\u002F登记购买记录 · #250） |\n| `票据凭证\u002Fwarranty.html` | 保修域 5 场景（查保修状态\u002F登记保修\u002F记录维修\u002F设置保养周期\u002F执行保养 · #250） |\n| `票据凭证\u002Fcertificates.html` | 证件域 4 场景（查证件到期\u002F登记证件\u002F证件归档\u002F更新证件 · #250） |\n| `票据凭证\u002Faccounts.html` | 账号域 4 场景（查账号\u002F存账号\u002F改账号\u002F看密码 · #250） |\n\n例子：`home_manager_html\u002F查物品_20260728_171500.html`\n\n### 12.B HELP HTML\n\n**命名形态**：`\u003C根>\u002Fhome_manager_html\u002F居家管家_HELP_\u003CYYYYMMDD>_\u003CHHMMSS>.html`\n\n以 `_HELP_` 为保留字（中段，可被 grep 一抓出来）。`\u003Cskill 中文名>` 前缀 = `居家管家`（SKILL.md frontmatter 声明）。\n\n例子：`home_manager_html\u002F居家管家_HELP_20260728_171500.html`\n\n### 显式 override\n\n`--output \u003Cpath>` 仍可绕过自动命名，直接写到指定路径（不强制走 `home_manager_html\u002F` 子目录）。\n\n### ⚠️ 与总纲 12.X 的偏离\n\n本 Skill 在以下两项与总纲 12.X 显式偏离,**详见 [ADR-0001](.\u002Fdocs\u002Fadr\u002F0001-local-time-over-utc-for-html-filenames.md)**（单一真相,Q4=A 决策）：\n\n- **本地时间**(非 UTC):用户看文件名时间戳期望与钟表一致\n- **直接覆盖**(无 `_N` 后缀):本场景无保留历史输出需求,运行产物已 `.gitignore`\n\n本节不重复 ADR 细节,如需修改偏离请改 ADR-0001 并保持 SKILL.md 引用指向。\n\n---\n\n## 🧪 FAT 协议（总纲 §钩子 6 · Fresh Agent 黑盒测试）\n\n> 引用 [SKILL 开发总纲 §05 工程仪式 · FAT 协议](..\u002FSKILL开发总纲V1.0\u002F05-工程仪式.md) + [§钩子 6](..\u002FSKILL开发总纲V1.0\u002F02-5层骨架.md)：commit 前的商用级关卡。由零上下文 agent 执行唤醒词(3-5 个核心 × 每个 ≥ 3 个人类 prompt),对比预期工作流。fail → 改 SKILL.md 不改代码,循环 ≤ 3 次。\n\n### 分级 Tested-By 规则\n\ncommit message 必含 `Tested-By:` 字段,分级如下:\n\n| 改动类型 | Tested-By 取值 | 门槛 |\n|---------|---------------|------|\n| **改代码 \u002F 数据 \u002F CLI** | `pytest-pass-YYYY-MM-DD` | `python -m pytest` 全 PASS 即可 commit |\n| **改 SKILL.md**(触发词 \u002F 路由表 \u002F 说明 \u002F frontmatter \u002F 行为契约) | `fresh-agent-v1` | 必须 fresh agent 实际跑过 FAT 9 步 |\n| **豁免**(typo \u002F 格式调整 \u002F 注释) | `exempt` + 豁免依据 | 1 行说明为何豁免 |\n\n**分级理由(Q2=yes)**:接受分级而非 strict-only,因 SKILL.md 改动多属文档契约,pytest 测不到;但代码改动用 pytest 足够。分级子规则防止 SKILL.md 退化(改 SKILL.md 必 fresh agent,不能拿 pytest 充数)。\n\n### FAT 9 步协议(引用总纲 §05)\n\n完整 9 步协议见 [总纲 §05 工程仪式 · FAT 9 步协议](..\u002FSKILL开发总纲V1.0\u002F05-工程仪式.md)。摘要:\n\n1. 选 3-5 个核心唤醒词(高频 + 复杂 + 易错)\n2. 准备 fresh context(新会话,不保留开发记忆)\n3. 最小化加载(只给 SKILL.md + 必要 scripts)\n4. 每核心词 ≥ 3 个人类 prompt(含口语化\u002F略错,非 AI 风格)\n5. 捕获执行证据(命令\u002F数据\u002F输出)\n6. 对比预期工作流 vs 实际\n7. 判定 pass\u002Ffail(工作流一致 + 输出一致 + 无副作用 = PASS)\n8. fail → 改 SKILL.md 不改代码,再循环(≤ 3 次)\n9. 人工抽查 ≥ 1 个测试结果(防 AI 自评漏)\n\n**循环上限**:SKILL.md 改 3 次仍未通过 → 暂停,人工介入(可能 SKILL 设计问题 \u002F 测试选择不当 \u002F 代码 bug)。\n\n### ⚠️ Risk C:Tested-By 流于形式\n\n**Tested-By 字段缺失 \u002F 错误标签 \u002F 与 commit 内容不符 = 总纲 [`02-5层骨架.md §8 反模式 #4 静默失败`](..\u002FSKILL开发总纲V1.0\u002F02-5层骨架.md)`(except: pass` 风格的协议级沉默),需立即补全或 revert。例:\n- 改了 SKILL.md 触发词却标 `pytest-pass-2026-07-28`(应 `fresh-agent-v1`)→ silent failure\n- 改了代码却标 `fresh-agent-v1`(应 `pytest-pass`)→ 标签错配\n- 完全不标 Tested-By → 协议不完整,等同豁免依据缺失\n\n引用总纲 §8 反模式 #4 静默失败让 AI 有 external 压力,不流于形式。\n\n---\n\n## HTML 渲染器（Phase 7 重构）\n\n所有 HTML 模板的注入渲染由 `scripts\u002Frender\u002F` 包提供，与 home_manager 数据\u002F操作层解耦：\n\n| 模板 | 触发命令 | 交互 |\n|---|---|---|\n| `add_preview.html` | `add --preview` | 静态预览 + 复制 CLI |\n| `search_results.html` | `search` | 只读卡片 |\n| `delivery_check.html` | `search --status \"快递中\"` | 已收到\u002F废弃\u002F维修 + 回执 |\n| `item_detail.html` | `detail` | 只读详情 |\n| `list_overview.html` | `list` | 只读统计（含状态\u002F分类分布） |\n| `inventory_check.html` | `inventory --output` | 状态\u002F数量变更 + 回执 |\n| `expiring_alert.html` | `stats --type expiring --output` | 已处理\u002F废弃 + 回执 |\n| `stats\u002Foverview.html` | `stats --type overview --output` | 物品总览（指标\u002F分布图表\u002F价值TOP\u002F高频TOP\u002F趋势下钻）+ 复制数据\u002F日志 |\n| `stats\u002Fidle.html` | `stats --type idle --output` | 闲置勾选处理（废弃\u002F送人\u002F先不处理）+ 复制数据\u002F日志 |\n| `stats\u002Fexpiring.html` | `stats --type expiring --output` | 过期勾选处理（用完\u002F废弃\u002F忽略）+ 复制数据\u002F日志 |\n| `stats\u002Finventory_stat.html` | `stats --type inventory-stat --output` | 盘点统计（趋势\u002F差异\u002F建议复查）+ 复制数据\u002F日志 |\n\n**架构**：渲染器在 `scripts\u002Frender\u002F__init__.py`（独立包）；home_manager 包不再反向依赖。详见 `scripts\u002Frender\u002F__init__.py` 文档字符串。\n\n**硬规则**（与《预置HTML并注入数据指导手册》v2 对齐）：\n- 模板必须包含恰好 1 个 `\u003C!--INJECT-DATA-->` 占位符\n- 注入前校验 `payload.status === 'ok'`，非 ok 拒收\n- 模板 JS 守门 `validate(payload)`，渲染前再校验一次\n\n---\n\n## 功能概述\n\n- **物品录入**：自然语言描述物品，AI 解析后写入数据库\n- **物品查找**：按名称\u002F位置\u002F标签\u002F分类\u002F状态搜索\n- **物品更新**：位置变动、状态变更、数量调整、标签修改\n- **物品盘点**：按需盘点指定位置的所有物品\n- **穿搭推荐**：根据天气+标签推荐今日穿搭\n- **旅游归位**：出门带物+回家归位的完整流程\n- **频率统计**：区分高频\u002F低频物品，识别长期未用物品\n- **标签管理**：合并相似标签\n- **照片管理**：支持配置照片存储路径（环境变量 `HOME_PHOTOS_DIR`，默认为技能目录\u002Fphotos）\n- **购买记录**：购买日期\u002F价格\u002F渠道\u002F商家客服\u002F退货窗口计算\u002F票据照片归档 + 消费统计（按年\u002F分类聚合）\n- **保修与保养**：保修期登记与状态计算（在保\u002F即将到期\u002F已过）+ 维修记录 + 保养周期与执行状态\n- **证件管理**：证件登记（护照\u002F身份证\u002F驾照\u002F签证\u002F保险单）按到期排序，号码脱敏显示，照片归档\n- **账号密码**：主密钥 Fernet 加密存储，类型组织（购物\u002F银行\u002F社交\u002F其他），密码全脱敏，复制数据默认不含密码\n- **🖼 单图架构**：一件物品 = 一张照片（`item.photo` 是单字段）。\n  - **多图录入**：用户发多张图时，**第 1 张 = DB 主图（必须存 photos 目录）**，**后续图 = 只读不复制**（信息整合到 `tags` + `remark`，不再重复存档到文件系统）\n  - **套装共享**：多件商品共用 1 张图时，每件复制一份并分别命名，各自 DB 存 1 个主图\n  - **命名规范**：`YYYYMMDD_{ID}_{中文描述}.jpg`，无 `'` \u002F `:` \u002F `\u002F` 等 Windows 非法字符；`add --photo` 会在内部拿到 ID 后复制为该规范名并写入 `item.photo`\n\n## 快速导航\n\n| 唤醒词 | 功能 | 参考文档 |\n|--------|------|----------|\n| 查物品 | 物品搜索 | features\u002Fsearch.md |\n| 看物品 | 物品详情 | features\u002Fsearch.md |\n| 录物品 | 物品录入 | features\u002Fadd.md |\n| 拍物品 | 拍照录入 | features\u002Fadd.md |\n| 改物品 | 通用更新 | features\u002Fupdate.md |\n| 移物品 | 位置移动 | features\u002Fupdate.md |\n| 补物品 | 数量增加 | features\u002Fupdate.md |\n| 减物品 | 数量减少 | features\u002Fupdate.md |\n| 标物品 | 标签更新 | features\u002Fupdate.md |\n| 废物品 | 标记废弃 | features\u002Fupdate.md |\n| 借物品 | 标记借出 | features\u002Fupdate.md |\n| 修物品 | 标记维修 | features\u002Fupdate.md |\n| 盘物品 | 按位置盘点 | features\u002Finventory.md |\n| 盘全部 | 全屋盘点 | features\u002Finventory.md |\n| 穿什么 | 穿搭推荐 | features\u002F穿搭.md（拼贴卡相册风） |\n| 带物品 | 出门标记 | features\u002F穿搭.md → 出行清单 |\n| 归物品 | 回家归位 | features\u002F穿搭.md → 归位 |\n| 衣橱分析 | 衣橱闲置分析 | features\u002F穿搭.md → 衣橱分析 |\n| 换季 | 换季收纳 | features\u002F穿搭.md → 换季 |\n| 旅行穿搭 | 旅行穿搭计划 | features\u002F穿搭.md → 旅行穿搭 |\n| 统物品 | 总体统计 | features\u002Fstats.md |\n| 查高频 | 高频物品 | features\u002Fstats.md |\n| 查低频 | 低频物品 | features\u002Fstats.md |\n| 查过期 | 过期检查 | features\u002Fstats.md |\n| 看标签 | 列出标签 | features\u002Ftags.md |\n| 合标签 | 合并标签 | features\u002Ftags.md |\n| 查快递 | 快递跟踪 | scripts\u002F快递购物\u002Fcli.py |\n| 购物清单 | 购物清单管理 | scripts\u002F快递购物\u002Fcli.py |\n| 缺货检测 | 缺货自动进清单 | scripts\u002F快递购物\u002Fcli.py |\n| 囤货盘点 | 库存阈值管理 | scripts\u002F快递购物\u002Fcli.py |\n| 推位置 | 位置推荐 | features\u002Fadd.md |\n| 找位置 | 参考锚定 | features\u002Fadd.md |\n| 查账号 | 查看账号（密码脱敏） | scripts\u002F票据凭证\u002Fcli.py |\n| 存账号 | 新增账号（加密存储） | scripts\u002F票据凭证\u002Fcli.py |\n| 改账号 | 更新账号（重新录入） | scripts\u002F票据凭证\u002Fcli.py |\n| 看密码 | 查看密码（敏感回显） | scripts\u002F票据凭证\u002Fcli.py |\n| 查购买记录 | 购买记录全量查询 | scripts\u002F票据凭证\u002Fcli.py |\n| 查上月购买 | 上月购买（时间预填） | scripts\u002F票据凭证\u002Fcli.py |\n| 查今年花费 | 年度消费统计 | scripts\u002F票据凭证\u002Fcli.py |\n| 查退货窗口 | 退货截止日查询 | scripts\u002F票据凭证\u002Fcli.py |\n| 登记购买记录 | 登记购买（录入） | scripts\u002F票据凭证\u002Fcli.py |\n| 查保修状态 | 保修状态（在保\u002F将到期\u002F已过） | scripts\u002F票据凭证\u002Fcli.py |\n| 登记保修 | 登记保修期 | scripts\u002F票据凭证\u002Fcli.py |\n| 记录维修 | 维修记录 | scripts\u002F票据凭证\u002Fcli.py |\n| 设置保养周期 | 定期保养周期 | scripts\u002F票据凭证\u002Fcli.py |\n| 执行保养 | 执行保养 | scripts\u002F票据凭证\u002Fcli.py |\n| 查证件到期 | 证件到期查询（脱敏） | scripts\u002F票据凭证\u002Fcli.py |\n| 登记证件 | 证件登记（录入） | scripts\u002F票据凭证\u002Fcli.py |\n| 证件归档 | 证件照片归档 | scripts\u002F票据凭证\u002Fcli.py |\n| 更新证件 | 证件更新（重登记） | scripts\u002F票据凭证\u002Fcli.py |\n| 查异常 | 数据健康检查 | SKILL.md（Lint 检查） |\n| 查物品 | 物品搜索→HTML | features\u002Fsearch.md |\n| 看物品 | 物品详情→HTML | features\u002Fsearch.md |\n| 统物品 | 总体统计→HTML | features\u002Fsearch.md |\n| 管位置 | 位置管理→HTML | features\u002F位置.md |\n| 固定位 | 固定位清单→HTML | features\u002F位置.md |\n| 收纳建议 | 收纳建议→HTML | features\u002F位置.md |\n| 空间视图 | 空间视图→HTML | features\u002F位置.md |\n\n---\n\n## ⚠️ 核心使用原则\n\n1. **任何写操作前必须交互确认**：AI 先展示将要执行的操作，用户说\"对\"才执行\n2. **多物品冲突时让用户选**：搜到多个同名物品，列出来让用户选，不默认选任何一个\n3. **物品只增不删，可修改**：物品不会物理删除。item_locations 中 quantity=0 时自动删除该位置记录；位置状态为\"已用完\"或\"已废弃\"时需用户明确表态\n4. **AI 不得自行推断**：当用户意图存在多种可能时，AI 必须询问确认，不得私自选择\n5. **库存补充必须问**：搜索到名称相同的\"已用完\"或\"已废弃\"物品时，AI 必须询问用户是\"补充到现有记录\"还是\"新建记录\"，用户确认前不得写入数据库\n\n---\n\n## ⛓ HTML-First 行为契约（总纲 §原则 11 · 强约定）\n\n> 引用 [SKILL 开发总纲 §原则 11](..\u002FSKILL开发总纲V1.0\u002F04-可视化与注入v2.md)：唤醒词命中 SKILL 后,若 SKILL 声明有 HTML 输出路径,**默认行为 = invoke HTML 工作流**。文字答是 fail mode,不是 fallback。与 §原则 10 互补(10 管出向 · 复制 prompt,11 管入向 · 默认 HTML)。\n\n### 必须 invoke HTML 的唤醒词（16 个）\n\n命中下列唤醒词后,**必须** invoke HTML 工作流,文字答视为 fail mode:\n\n| 类别 | 唤醒词 |\n|------|--------|\n| 查看类 | `查物品` \u002F `看物品` |\n| 盘点类 | `盘物品` \u002F `盘全部` |\n| 统计类 | `统物品` \u002F `查高频` \u002F `查低频` \u002F `查过期` |\n| 出行类 | `查快递` \u002F `穿什么` \u002F `带物品` \u002F `归物品` \u002F `衣橱分析` \u002F `换季` \u002F `旅行穿搭` |\n| 空间类 | `管位置` \u002F `固定位` \u002F `收纳建议` \u002F `空间视图` |\n| 票据凭证类 | `购买记录` \u002F `保修` \u002F `证件` \u002F `账号`（SM6 域 CLI 默认输出 HTML） |\n\n这些唤醒词的 HTML 输出路径见 [§📌 输出位置](#-输出位置) 的 `template → command_cn` 映射表。\n\n### 优雅降级\n\n若 HTML 生成失败(磁盘满 \u002F 模板错 \u002F 渲染异常),fallback 到**结构化文本 + 错误回执**,不要直接报错中断。结构化文本应包含:操作名 \u002F 关键数据 \u002F 失败原因 \u002F 建议下一步。用户看到错误回执后可手动重试或反馈。\n\n> **fail mode 判定**:`查物品` 命中后只回一行文字\"找到 3 件物品:...\"而不生成 HTML = fail mode,需立即补 invoke HTML。\n\n### fail mode 自检清单(commit 前必跑)\n\n> 本清单是软规则 §HTML-First 的硬执行替代——没有代码强制,但 AI 在每次涉及 12 唤醒词的 commit 前**必须自检**,未过自检不得 commit。这是对抗式审查后补的(P1-3),解决\"强约定无硬执行\"的空壳问题。\n\n**自检步骤**(AI 在 commit message 的 Tested-By 字段记录结果):\n\n1. **本轮是否触发了 12 唤醒词中的任意一个?**\n   - 否 → 本清单不适用,跳过\n   - 是 → 继续\n\n2. **每个被触发的唤醒词,本轮是否 invoke 了 HTML 工作流?**\n   - 是 → PASS,记录 `html-first-pass`\n   - 否 → 进入 fail mode 处理\n\n3. **fail mode 处理(命中但未 invoke HTML)**:\n   - 检查是否有 HTML 生成失败(磁盘满 \u002F 模板错 \u002F 渲染异常)\n   - 失败 → 走优雅降级(结构化文本 + 错误回执),记录 `html-first-fallback + 原因`\n   - 未失败但没 invoke → **silent failure**,不得 commit,先补 invoke HTML\n\n**Tested-By 字段标法**(与 §🧪 FAT 协议 分级规则互补):\n- `html-first-pass` — 12 唤醒词命中后都 invoke 了 HTML\n- `html-first-fallback + 原因` — HTML 失败走了优雅降级\n- `html-first-n\u002Fa` — 本轮未触发 12 唤醒词(纯文档 \u002F 纯测试改动)\n- 不标 → 视为 silent failure,等同 §8 反模式 #4\n\n**示例**:\n- 改 SKILL.md §HTML-First 章节(commit 4):`Tested-By: html-first-n\u002Fa (纯文档,未触发 12 唤醒词)`\n- 改 search 命令的 HTML 模板:`Tested-By: html-first-pass (查物品 命中后 invoke search_results.html)`\n- 查物品 命中但只回文字:`Tested-By: html-first-fail (silent failure,不得 commit)`\n\n---\n\n## 联动说明（SM9 联动功能域 · 双入口单实现）\n\n联动逻辑已集中到技能路由器（`图片路由\u002FSKILL.md`），本技能不再单独维护联动规则。完成主操作后请检查路由器的联动规则表。\n\n**SM9 场景**（3 个，流程详见 `features\u002F联动.md`）：\n\n| 唤醒词 | 场景 | CLI | 说明 |\n|--------|------|-----|------|\n| 联动总览 | 联动功能总览 | `sm9-overview` | 能力索引（食品→卡路里\u002F价格→饼干记账\u002F健身→出行清单）+ 偏好频控 |\n| 记到卡路里 | 食品联动 | `sm9-food --item-id N [--action log\\|query]` | 物品确认 → 动作选择 → 复制 prompt 到卡路里（单工闭环） |\n| 记到记账 | 价格联动 | `sm9-price --item-id N [--direction expense\\|income]` | 物品确认（含价格）→ 方向选择 → 复制 prompt 到饼干记账 |\n\n**双入口顺路建议（G6 第 3 层 · 规格硬要求）**：\n\n- **独立触发**：用户直接说「记到卡路里 \u002F 记到记账 \u002F 联动总览」→ 按上表路由\n- **录入顺路建议**：完成「录物品\u002F拍物品」（1-1\u002F1-2）回执后，AI 检查联动偏好（`sm9-prefs` 设置，存 `$SKILLS_DB_PATH\u002Flink_prefs.json`）：\n  - `ask`（每次询问）→ 始终在回执顺路提醒区给出联动建议\n  - `remember`（记住上次选择）→ 按上次用户是否接受联动决定\n  - `off`（关闭）→ 不打扰，不回执建议\n  - 食品\u002F饮品物品 → 建议「记到卡路里」（查热量或记一餐）；有价格物品 → 建议「记到记账」（记支出\u002F收入）\n  - 建议内容 = 调用 `sm9-food \u002F sm9-price` 生成的 prompt，附在回执 HTML 顺路提醒区\n\n**执行边界**：联动执行 = 复制 prompt 到对应技能（卡路里\u002F饼干记账），居家管家不直接调用对方 CLI（跨技能物理隔离，单工闭环）。\n\n---\n\n## Lint 检查（数据健康检查 · SM8 开始使用域）\n\n**唤醒词**：`查异常`\n\n### 执行方式(SM8 实施后 · 2026-08-05)\n\n`python3 scripts\u002F开始使用\u002Fcli.py lint` → 结构化 JSON → 渲染 `templates\u002F开始使用\u002Fhealth_report.html`(查看+选择)。\n输出 = 环境信息头部 + 8 检查项(问题\u002F涉及数\u002F严重度)+ 勾选复制修复引导。\n\n### 检查项(8 项 · v2.0)\n\n1. **无标签物品** — item_tags 无记录 → 修复引导:改物品补标签\n2. **无位置物品** — 无 item_locations 行(盘点会漏)→ 修复引导:改物品补位置\n3. **状态长期未更新** — 快递中>7 天 \u002F 旅游中>30 天 \u002F 维修中>30 天 \u002F 借用中>30 天\n4. **单级位置** — 位置路径不含 `\u002F`(如只有\"客厅\")→ 修复引导:移物品规范化\n5. **无照片物品** — photo 为空 → 修复引导:拍物品补拍(预告式)\n6. **未录价格** — purchase_price 为空 → 修复引导:改物品补价格(联动 SM4 价格覆盖率)\n7. **无购买\u002F过期日期** — item_locations 无日期 → 修复引导:改物品补日期\n8. **相似位置未合并** — 去掉分隔符后同名(如 `卧室\u002F东南角` vs `卧室东南角`)→ 修复引导:移物品合并\n\n### 处理原则\n\n- 发现问题后列出清单，让用户勾选确认(HTML 勾选 → 复制修复引导)\n- **只建议不自动改**：AI 不得直接修改数据,只能复制对应场景 prompt 引导用户\n- 用户说\"检查一下\"时执行，不主动触发\n\n---\n\n## 开始使用域流程(SM8 · 首次使用\u002F备份导出\u002F导入恢复)\n\n**唤醒词**：`首次使用` \u002F `备份导出` \u002F `导入恢复`\n\n### 首次使用(初始化工作流 · 6 步)\n\n1. 环境检测:`python3 scripts\u002F开始使用\u002Fcli.py check`(OS\u002FPython\u002F目录可写\u002FDB 状态)\n2. 路径确认:展示 check 输出的 `db_path`(AI 预填建议路径),**必须征求用户确认**,不静默\n3. 建库+建分类:`python3 scripts\u002F开始使用\u002Fcli.py init`(幂等:已有库\u002F已有分类 → 跳过)\n4. 状态确认:`python3 scripts\u002F开始使用\u002Fcli.py init-status`(未初始化\u002F库已建\u002F已初始化)\n5. 渲染向导 HTML:`render_开始使用.emit_sm8(\"first_use_wizard.html\", ...)`(6 步步骤条 + 环境信息 + 建库结果 + 下一步按钮)\n6. 完成:提示可录第一批(建议拍物品);失败 → `emit_error` 错误回执 HTML(步骤\u002F原因\u002F建议)+ 一键重试\n\n### 备份导出(数据资产)\n\n1. 查询历史:`cli.py backup-list [--keep-n N]`(备份文件\u002F大小\u002F时间\u002F距上次备份天数)\n2. 确认备份:用户确认 → `cli.py backup`(db+照片全量打包 zip,自动保留 N 份清理最旧)\n3. 导出(可选):`cli.py export --format json|csv [--output 路径]`\n4. 渲染:`emit_sm8(\"backup_receipt.html\", ...)`(备份结果 + 历史列表 + 距上次备份天数 + 导出按钮)\n5. 删除旧备份:确认式 `cli.py backup-delete --file 文件名`;失败 → 错误回执 + 重试\n\n### 导入恢复(迁移 · 预告式文件)\n\n1. 预告式:按钮复制「【导入文件即将发送:】」→ AI 进入等待态 → 用户发文件\n2. 校验+冲突预览:`cli.py import-preview --file X`(格式\u002F版本兼容 + 同名冲突计数)\n3. 确认导入:`cli.py import --file X [--mode skip|overwrite]`(导入前自动备份,失败回滚数据不变)\n4. 渲染:`emit_sm8(\"import_restore.html\", ...)`(步骤条 + 校验结果 + 冲突预览 + 确认\u002F撤销按钮)\n5. 撤销(确认式):`python3 scripts\u002F开始使用\u002Fcli.py import-undo --file \u003C导入前备份>`(覆盖前自动再备份当前库为安全网;非法备份 → 错误回执)\n\n---\n\n## 快递购物域流程(SM5 · 购物清单\u002F缺货检测\u002F快递跟踪\u002F囤货盘点)\n\n**唤醒词**：`购物清单` \u002F `缺货检测` \u002F `查快递` \u002F `囤货盘点`\n\n### 购物清单(组织\u002F例行\u002F采购闭环)\n\n1. 视图:`python3 scripts\u002F快递购物\u002Fcli.py list` → 快递购物\u002Flist.html（条目 + 来源标注:手动\u002F缺货检测\u002F例行+周期 + 清单内查重提示 + 例行到期顺路提醒）\n2. 添加:`cli.py list-add --name \"XX\" --quantity N [--source 手动|缺货检测|例行] [--routine 每周|每月]`（同名「待买」重复添加 → 拒绝并提示合并）\n3. 销项(勾选已买):`cli.py list-check --ids 1,2`（例行条目记 last_done_at,超周期自动重新激活为待买 + 顺路提醒「本周采购清单已生成」）\n4. 采购闭环(按钮复制 prompt → AI 引导):新物品 → 录物品(1-1);已有物品 → 补数量(3-3)\n5. 空态:引导缺货检测自动填清单\n\n### 缺货检测(自动进清单)\n\n1. 检测:`cli.py missing [--category-id N]` → 快递购物\u002Fmissing.html（当前数量+阈值+建议量「当前 0\u002F阈值 1\u002F建议买 2」）\n2. 阈值来源:囤货设置(`stock-set-threshold`);未设置 → 默认 1 估算并标注「默认」\n3. 一键进清单(勾选):`cli.py missing-to-list --ids 1,2`（按建议量入清单;已在待买 → 跳过并提示合并）\n4. 空态:库存充足\n\n### 快递跟踪(查\u002F超时\u002F收货确认)\n\n1. 视图:`cli.py express [--timeout-days 7]` → 快递购物\u002Fexpress.html（照片+名称+数量+「快递中」+已等 N 天+超时红色徽章+顺路提醒）\n2. 确认收货(勾选):`cli.py express-receive --id N [--to 在家|备用]`（状态变更 + 写 item_events）\n3. 超时处理:按钮复制 prompt → AI 联系卖家\u002F标记遗失\n\n### 囤货盘点(库存\u002F阈值\u002F不足检测)\n\n1. 视图:`cli.py stock` → 快递购物\u002Fstock.html（名称+当前数量+阈值+库存状态:充足\u002F低\u002F空）\n2. 设置阈值:`cli.py stock-set-threshold --id N --threshold M`（缺货检测的阈值数据源）\n3. 修正数量(勾选 → 3-3):`cli.py stock-fix --id N --quantity M`（写数量变更事件）\n4. 空态:引导为常用物品设阈值（高频无阈值物品提示）\n\n---\n\n## 错误处理\n\n| 场景 | AI 处理方式 |\n|------|------------|\n| 搜不到物品 | 告知用户，询问是否换个关键词或新建物品 |\n| 搜到多个同名物品 | 列出让用户选择，不默认选任何一个 |\n| 录入时发现同名\"已用完\u002F已废弃\"物品 | 列出选项让用户选择，不能自动决定 |\n| 补充库存时原物品状态为\"已用完\u002F已废弃\" | 询问用户新状态是什么（在家\u002F备用\u002F快递中\u002F其他） |\n| 用户输入模糊无法解析 | 追问确认 |\n| 数据库写入失败 | 告知用户失败原因，询问重试 |\n| 首次使用（无数据库） | 走 SM8 初始化工作流:`check` → 路径确认 → `init`(建库+种子 60 节点),失败=错误回执 HTML+重试 |\n| 初始化已存在库 | 幂等跳过建库建分类,提示「已初始化,直接使用」 |\n| 备份失败 | 错误回执 HTML(原因\u002F建议)+ 一键重试;备份前不动原数据 |\n| 导入文件不兼容 | 校验失败 → 错误回执;导入失败自动回滚,数据不变 |\n| 盘点中途退出 | 已确认的已写入，未确认的保持原样 |\n| 穿搭推荐无匹配 | 告知无匹配衣物，建议扩展标签或录入 |\n| 天气数据获取失败 | 告知无法获取天气，改用纯标签筛选 |\n| 标签合并不存在 | 脚本输出\"标签不存在\"，AI 告知用户 |\n| 购物清单添加重复条目 | 脚本拒绝并提示「已在购物清单中,可改数量」,AI 转告用户,不自动合并 |\n| 收货确认时无快递中记录 | 脚本报错「没有快递中位置记录」,AI 告知无需确认收货 |\n| 囤货修正无库存位置 | 脚本报错,AI 提示先录入或确认收货后再修正 |\n","## 📘 关于 `居家管家.html`(总纲 04 §原则 4 · 镜像)\n\n**本 HTML 文件就是 `python3 scripts\u002Fhome_manager.py help` 输出的精确副本。**\n\n- 修改唤醒词\u002F场景 → 改 `references\u002Fscenarios.yaml` → 跑 `python3 scripts\u002Fbuild_manual.py` 同步。\n- 不要手动编辑 `居家管家.html`(脚本会覆盖)。\n- 测试 `tests\u002Ftest_manual_sync.py` 用 SHA256 哈希断言字节一致,**若有人忘了同步,测试失败报警**(不阻断 commit,只报警)。\n- 同步脚本自动注入 `HELP_FIXED_TIMESTAMP=\"0000-00-00 00:00 (快照)\"`,确保可重现生成(不被 `datetime.now()` 干扰)。\n\n> **总纲 04 §原则 4(本 skill 改造版,2026-07-27)**: 每个技能目录都需要有 `{技能名}.html` 文件,**该文件就是技能 HELP HTML 最新版本的复制品**。\n\n\n**🔗 联动提示：** 完成本技能主操作后，检查技能路由器（`图片路由\u002FSKILL.md`）的联动规则，判断是否需要联动其他技能（如用户提到物品价格→询问是否记录支出；物品是食品\u002F饮料→询问是否记录卡路里）。详见路由器的联动规则表。\n\n## ⚠️ HTML 同步规范（最高优先级）\n\n> **此规范优先级高于本文件中所有其他规定。**\n\n1. **全量同步**：该技能的所有优化和变动、脚本的所有变动都必须体现在 `居家管家.html` 上。任何功能模块的新增、修改、删除，任何唤醒词的调整，任何 CLI 命令的变化，任何脚本逻辑的改动——都必须同步更新 HTML 页面中对应的内容。\n2. **最高优先级**：本条规定在所有规范中优先级最高。当其他流程或习惯与本条冲突时，以本条为准。\n3. **逐行确认**：对该技能的所有文件、脚本的任何一行修改，都需要明确得到用户的 1 次确认后方可执行。不得批量静默修改，不得跳过确认步骤。\n\n---\n\n## ⚠️ Commit 硬规则（强制）\n\n> 优先级与\"HTML 同步规范\"平级，所有写代码的 AI \u002F 协作者必须遵守。\n\n1. **禁止** `git commit --no-verify` —— 会跳过 pre-commit hook 测试\n2. **禁止** 使用 git 库（`gitpython` \u002F `simple-git` \u002F `libgit2` 等）直接 API 调用 —— 绕过 shell，hook 不触发\n3. **必须** 通过 pre-commit hook 的 71 个 pytest 测试才能 commit\n4. **新机器首次使用本 skill 前**，必须执行 `bash scripts\u002Finstall_hooks.sh` 配置本地 hook\n\n**hook 工作机制**（SKILLS\u002F 是单 git 仓库，多 skill 子目录）：\n- git 仓库根：`SKILLS\u002F.githooks\u002Fpre-commit`\n- 改动路径含 `居家管家\u002F*` → 自动跑 `居家管家\u002Ftests\u002F` 下的 71 个 pytest\n- 改动路径含 `卡路里\u002F*` → 跑 `卡路里\u002Ftests\u002F`\n- 其他改动（文档\u002FHTML 手册\u002F架构规范）→ 跳过测试\n\n**为什么需要这层约束**：本地 `.githooks\u002Fpre-commit` 跑 pytest 是 CI 的本地替代方案。详见 `git-hooks-security-analysis.html`（已归档于 opencode output 目录）。\n\n---\n\n## ⚠️ 操作规范（强制）\n\n本技能所有数据操作必须通过 CLI，禁止直连数据库。\n\n---\n\n## ⚠️ 分类命名规范（强制）\n\n**所有写入 categories 表的 name 字段必须满足以下规则。违规会被 `category_manager.py` 拒收，不入库。**\n\n### 规则\n\n| # | 规则 | 违规示例 | 原因 |\n|---|---|---|---|\n| 1 | 非空,strip 后 1-30 字 | `\"\"` \u002F `\"   \"` | 占位\u002F空白无意义 |\n| 2 | **禁数字前缀** | `3. 家居` \u002F `2 衣物` \u002F `[1]数码` \u002F `(2)图书` | DB id 137\u002F138\u002F205-210 已是天然编号,name 再加 = 双重编号 = 装饰 |\n| 3 | 禁 emoji | `🎉 食物` | 装饰,破坏纯文本 |\n| 4 | 同 parent 下 name 唯一 | 两个同名二级 | 防止 merge 漏掉产生歧义 |\n\n### 第一性\n\n- 数字编号是 **DB id 的事**,name 负责语义\n- 8 顶级 name **统一不带前缀**:`食物与饮品` \u002F `衣物与穿戴` \u002F `家居与陈设` \u002F `工具与器材` \u002F `数码与电子` \u002F `健康与医药` \u002F `文体与娱乐` \u002F `资产与凭证`\n- 跨次加节点时,先看现有 name 风格,跟齐\n\n### 实现位置\n\n`scripts\u002Fcategory_manager.py` 的 `_validate_name(name, parent_name, conn)` 函数,被 `cmd_import` \u002F 未来 `cmd_add` 调用。\n\n---\n\n## 路由表\n\nAI 收到用户输入后，按以下表匹配唤醒词，命中即加载对应功能。\n\n| # | 唤醒词 | 功能 | 加载文件 | 需要物品名？ |\n|---|--------|------|----------|-------------|\n| 1 | **居家管家 帮助** | **技能速查（HELP）** | `python3 scripts\u002Fhome_manager.py help`（生成 HELP HTML） | 否 |\n| 2 | 查物品 | 物品搜索 | features\u002Fsearch.md | 可选（无则列全部） |\n| 3 | 看物品 | 物品详情 | features\u002Fsearch.md → detail | 是（多件时让用户选） |\n| 4 | 录物品 | 文字录入 | features\u002Fadd.md | 否（AI 解析描述） |\n| 5 | 拍物品 | 拍照录入 | features\u002Fadd.md → 图片子流程 | 否（从图片提取） |\n| 6 | 改物品 | 通用更新 | features\u002Fupdate.md | 是 |\n| 7 | 移物品 | 位置移动 | features\u002Fupdate.md → 位置移动 | 是 |\n| 8 | 补物品 | 数量增加 | features\u002Fupdate.md → 数量变更 | 是 |\n| 9 | 减物品 | 数量减少 | features\u002Fupdate.md → 数量变更 | 是 |\n| 10 | 标物品 | 标签更新 | features\u002Fupdate.md → 标签更新 | 是 |\n| 11 | 废物品 | 标记废弃 | features\u002Fupdate.md → 状态变更 | 是 |\n| 12 | 借物品 | 标记借出 | features\u002Fupdate.md → 状态变更 | 是 |\n| 13 | 修物品 | 标记维修 | features\u002Fupdate.md → 状态变更 | 是 |\n| 14 | 盘物品 | 按位置盘点 | features\u002Finventory.md | 是（位置） |\n| 15 | 盘全部 | 全屋盘点 | features\u002Finventory.md | 否 |\n| 16 | 穿什么 | 穿搭推荐 | `python3 scripts\u002Fhome_manager.py sm3-outfit [--temperature N] [--occasion X] [--limit N]` → 穿搭\u002Foutfit_picker.html（拼贴卡相册风） | 否 |\n| 17 | 带物品 | 出门标记 | `python3 scripts\u002Fhome_manager.py sm3-trip [--trip-type X] [--days N] [--plan-type X] [--exercises X]` → 穿搭\u002Ftravel_trip.html（行程规则\u002F健身联动\u002F出发核对） | 否 |\n| 18 | 归物品 | 回家归位 | `python3 scripts\u002Fhome_manager.py sm3-trip --mode return` → 穿搭\u002Ftravel_trip.html（旅游中清单逐个确认归位） | 否（查所有旅游中） |\n| 19 | 统物品 | 总体统计 | features\u002Fstats.md → summary | 否 |\n| 20 | 查高频 | 高频物品（并入物品总览） | features\u002Fstats.md → summary（T5 裁决：并入总览高频 TOP 区块） | 否 |\n| 21 | 查低频 | 低频物品（并入闲置检测） | features\u002Fstats.md → idle（T5 裁决：语义由查闲置承接） | 否 |\n| 22 | 查过期 | 过期检查 | features\u002Fstats.md → expiring | 否 |\n| 23 | 看标签 | 列出标签 | features\u002Ftags.md → 列表 | 否 |\n| 24 | 合标签 | 合并标签 | features\u002Ftags.md → 合并 | 是（from\u002Fto） |\n| 25 | 查快递 | 快递跟踪（查\u002F超时\u002F收货确认） | `python3 scripts\u002F快递购物\u002Fcli.py express [--timeout-days 7]` → 快递购物\u002Fexpress.html | 否 |\n| 26 | 推位置 | 位置推荐 | features\u002Fadd.md → Step 2.5 | 是（category-id 整数） |\n| 27 | 找位置 | 参考锚定 | features\u002Fadd.md → Step 2.6 | 是（reference） |\n| 28 | 查账号 | 查看账号（密码脱敏·类型组织） | `python3 scripts\u002F票据凭证\u002Fcli.py account list` \u002F `show --platform \"XX\" --master-key \"XX\"` → 票据凭证\u002Faccounts.html | 是（平台名，无则列全部） |\n| 29 | 存账号 | 新增账号（密码加密存储） | `python3 scripts\u002F票据凭证\u002Fcli.py account add --platform \"XX\" --user \"XX\" --pass \"XX\" --master-key \"XX\" [--type 购物\\|银行\\|社交\\|其他]` | 是 |\n| 30 | 改账号 | 更新账号（重新录入语义） | `python3 scripts\u002F票据凭证\u002Fcli.py account update --platform \"XX\" --master-key \"XX\" [--user] [--pass] [--type]` | 是（平台名） |\n| 31 | 看密码 | 查看密码（敏感回显·仅对话） | `python3 scripts\u002F票据凭证\u002Fcli.py account show --platform \"XX\" --master-key \"XX\"` → 回执 JSON（仅对话回显,不进 HTML） | 是（平台名+主密钥） |\n| 32 | 查异常 | 数据健康检查 | `python3 scripts\u002F开始使用\u002Fcli.py lint` → 开始使用\u002Fhealth_report.html | 否 |\n| 33 | 查物品(HTML) | 物品搜索(默认输出 HTML) | features\u002Fsearch.md → Step 4 | 可选（无则列全部） |\n| 34 | 看物品(HTML) | 物品详情(默认输出 HTML) | features\u002Fsearch.md → Step 4 | 是（多件时先选） |\n| 35 | 统物品(HTML) | 总体统计(默认输出 HTML) | features\u002Fsearch.md → Step 4 | 否 |\n| 36 | 借用 | 借用管理（借出\u002F借入\u002F归还\u002F催还） | `python3 scripts\u002Fhome_manager.py family --action borrow-list` → family_borrow.html | 否（登记时选\u002F填） |\n| 37 | 家人档案 | 家人档案（成员\u002F物品归属标记） | `python3 scripts\u002Fhome_manager.py family --action member-list` → family_members.html | 否 |\n| 38 | 管位置 | 位置管理（查看\u002F新建\u002F改名\u002F合并） | features\u002F位置.md → 管位置 | 否（操作+详情） |\n| 39 | 固定位 | 设置固定位（常用件锚定） | features\u002F位置.md → 固定位 | 是（物品） |\n| 40 | 收纳建议 | 收纳位置建议（AI 推荐） | features\u002F位置.md → 收纳建议 | 否（可多件\u002F批量） |\n| 41 | 空间视图 | 空间视图浏览（位置树下钻） | features\u002F位置.md → 空间视图 | 否（位置可选） |\n| 42 | 查闲置 | 闲置物品检测 | `python3 scripts\u002Fhome_manager.py stats --type idle [--days 90|180|365] [--category-id N] --output` → stats\u002Fidle.html | 否 |\n| 43 | 盘点统计 | 盘点统计与建议 | `python3 scripts\u002Fhome_manager.py stats --type inventory-stat --output` → stats\u002Finventory_stat.html | 否 |\n| 44 | 首次使用 | 首次使用初始化（6 步向导，幂等可重试） | `python3 scripts\u002F开始使用\u002Fcli.py check` \u002F `init` \u002F `init-status` → 开始使用\u002Ffirst_use_wizard.html | 是（路径确认，默认即确认） |\n| 45 | 备份导出 | 备份与导出（数据资产） | `python3 scripts\u002F开始使用\u002Fcli.py backup` \u002F `backup-list` \u002F `export --format json\\|csv` → 开始使用\u002Fbackup_receipt.html | 是（操作\u002F格式） |\n| 46 | 导入恢复 | 导入与恢复（迁移，预告式文件） | `python3 scripts\u002F开始使用\u002Fcli.py import-preview --file X` \u002F `import --file X [--mode skip\\|overwrite]` → 开始使用\u002Fimport_restore.html | 是（文件预告式） |\n| 47 | 批量录入 | 批量录入多件物品（清单\u002F照片） | `python3 scripts\u002Fhome_manager.py sm1-add-batch --json-file X [--commit]` → 物品\u002Fadd_form.html | 否 |\n| 48 | 补录 | 补录历史物品（指定日期） | `python3 scripts\u002Fhome_manager.py sm1-add --backfill-date YYYY-MM-DD` → 物品\u002Fadd_form.html | 否（AI 解析描述） |\n| 49 | 紧急定位 | 紧急查找物品位置（一屏直达） | `python3 scripts\u002Fhome_manager.py sm1-locate --name X` → 物品\u002Flocate.html | 是（名称\u002F描述） |\n| 50 | 筛选浏览 | 按条件筛选浏览物品（分组\u002F排序） | `python3 scripts\u002Fhome_manager.py sm1-browse [--group-by] [--location] [--tag]` → 物品\u002Fbrowse.html | 否 |\n| 51 | 拍照找物品 | 拍照反向查找物品（图搜） | `python3 scripts\u002Fhome_manager.py sm1-search --name X`（AI 图搜 → 关键词）→ 物品\u002Fsearch_list.html | 否（照片） |\n| 52 | 查重复 | 检查重复物品 | `python3 scripts\u002Fhome_manager.py sm1-duplicates` → 物品\u002Fduplicates.html | 否 |\n| 53 | 合并物品 | 合并重复物品（保留主条\u002F数量相加） | `python3 scripts\u002Fhome_manager.py sm1-merge --target N --sources 1,2` → 物品\u002Freceipt.html | 是（target\u002F源） |\n| 54 | 撤销操作 | 撤销最近操作（一次性回滚） | `python3 scripts\u002Fhome_manager.py sm1-undo-list` \u002F `sm1-undo --event-id N` → 物品\u002Fundo_select.html | 否 |\n| 55 | 物品关联 | 设置\u002F解除物品关联（配件等） | `python3 scripts\u002Fhome_manager.py sm1-relate --id N --related M [--action unlink]` → 物品\u002Frelations.html | 是 |\n| 56 | 管标签 | 标签管理（总览\u002F改名\u002F合并\u002F清理） | `python3 scripts\u002Fhome_manager.py sm1-tag-overview` \u002F `tag-merge` → 物品\u002Ftag_manage.html | 否 |\n| 57 | 管分类 | 分类管理（树\u002F新建\u002F改名\u002F合并） | `python3 scripts\u002Fhome_manager.py sm1-category [--action add\\|rename\\|merge]` → 物品\u002Fcategory_manage.html | 否 |\n| 58 | 整理建议 | 标签分类整理建议（AI 检测相近） | `python3 scripts\u002Fhome_manager.py sm1-similar-tags` → 物品\u002Ftag_manage.html | 否 |\n| 59 | 查看照片 | 查看物品照片（含类型筛选） | `python3 scripts\u002Fhome_manager.py sm1-photos --id N` → 物品\u002Fphotos.html | 是 |\n| 60 | 管照片 | 管理物品照片（排序\u002F主图\u002F类型） | `python3 scripts\u002Fhome_manager.py sm1-photo-update --id N --json-file X` → 物品\u002Fphotos.html | 是 |\n| 61 | 照片墙 | 照片墙浏览（分类\u002F位置\u002F类型） | `python3 scripts\u002Fhome_manager.py sm1-photo-wall [--group-by] [--type]` → 物品\u002Fphoto_wall.html | 否 |\n| 62 | 盘点记录 | 查看盘点记录（含复查入口） | `python3 scripts\u002Fhome_manager.py sm1-inventory-records` → 物品\u002Finventory_records.html | 否 |\n| 63 | 差异处理 | 处理盘点差异（缺\u002F多\u002F异\u002F待确认） | `python3 scripts\u002Fhome_manager.py sm1-inventory-diff [--record-id N]` \u002F `sm1-inventory-resolve` → 物品\u002Finventory_diff.html | 否（记录级） |\n| 64 | 搬家盘点 | 搬家打包盘点（带走\u002F不带走） | `python3 scripts\u002Fhome_manager.py sm1-move-checklist` \u002F `sm1-move-commit` → 物品\u002Fmove_checklist.html | 否 |\n| 65 | 历史 | 查看物品历史（时间线\u002F轨迹） | `python3 scripts\u002Fhome_manager.py sm1-history --id N` → 物品\u002Fhistory.html | 是 |\n| 66 | 数量变更 | 变更物品数量（补充\u002F消耗\u002F用完） | `python3 scripts\u002Fhome_manager.py sm1-qty --id N [--plus\\|--minus\\|--set]` → 物品\u002Freceipt.html | 是 |\n| 67 | 状态变更 | 变更物品状态（废弃\u002F借出\u002F维修\u002F恢复，状态机守卫） | `python3 scripts\u002Fhome_manager.py sm1-status --id N --status X` → 物品\u002Freceipt.html | 是 |\n| 68 | 盘点 | 盘点核对（按位置\u002F分类\u002F全屋，产生差异集） | `python3 scripts\u002Fhome_manager.py sm1-inventory-round [--scope location\\|category\\|all]` → 物品\u002Finventory_round.html | 否（可指定范围） |\n| 69 | 购物清单 | 购物清单（组织\u002F例行\u002F采购闭环） | `python3 scripts\u002F快递购物\u002Fcli.py list` → 快递购物\u002Flist.html | 否（可带条目） |\n| 70 | 缺货检测 | 缺货检测（自动进清单） | `python3 scripts\u002F快递购物\u002Fcli.py missing [--category-id N]` → 快递购物\u002Fmissing.html | 否（可选范围） |\n| 71 | 囤货盘点 | 囤货盘点（库存\u002F阈值\u002F不足检测） | `python3 scripts\u002F快递购物\u002Fcli.py stock` → 快递购物\u002Fstock.html | 否 |\n| 72 | 联动总览 | 跨技能联动能力索引 + 偏好设置 | `python3 scripts\u002F联动\u002Fcli.py sm9-overview` → 联动\u002Flink_overview.html（或 home_manager.py sm9-overview，T2 注册后） | 否 |\n| 73 | 记到卡路里 | 食品联动（记到今日饮食\u002F查热量） | features\u002F联动.md → 食品联动 | 是（先查物品确认） |\n| 74 | 记到记账 | 价格联动（记支出\u002F记收入） | features\u002F联动.md → 价格联动 | 是（先查物品确认） |\n| 75 | 查购买记录 | 查购买记录（全量\u002F按物品\u002F按时间） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list [--item-id N] [--year YYYY] [--month MM] [--scene SM6-1]` → 票据凭证\u002Fpurchase_records.html | 否（物品\u002F时间可选） |\n| 76 | 查上月购买 | 查上月购买（时间预填·零填写） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --year YYYY --month MM --scene SM6-2` → 票据凭证\u002Fpurchase_records.html | 否 |\n| 77 | 查今年花费 | 查今年花费（年度消费统计） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase stats --year YYYY --scene SM6-3` → 票据凭证\u002Fpurchase_records.html | 否 |\n| 78 | 查退货窗口 | 查退货窗口（物品必填·退货截止日） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --item-id N --scene SM6-4` → 票据凭证\u002Fpurchase_records.html | 是（物品） |\n| 79 | 登记购买记录 | 登记购买记录（录入） | `python3 scripts\u002F票据凭证\u002Fcli.py purchase add --item-id N --date D [--price] [--channel] [--scene SM6-5]` → 回执 JSON | 是（物品+日期） |\n| 80 | 查保修状态 | 查保修状态（在保\u002F将到期\u002F已过） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty list [--status 在保\\|即将到期\\|已过\\|全部] [--scene SM6-6]` → 票据凭证\u002Fwarranty.html | 否 |\n| 81 | 登记保修 | 登记保修（录入保修期） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保修 --start-date D --duration-days N [--scene SM6-7]` → 回执 JSON | 是（物品+起始日+时长） |\n| 82 | 记录维修 | 记录维修（维修历史） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty repair --warranty-id N --date D [--cost] [--scene SM6-8]` → 回执 JSON | 是（保修ID+日期） |\n| 83 | 设置保养周期 | 设置保养周期（定期保养） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保养 --start-date D --duration-days N [--scene SM6-9]` → 回执 JSON | 是（物品+周期） |\n| 84 | 执行保养 | 执行保养（刷新下次日） | `python3 scripts\u002F票据凭证\u002Fcli.py warranty maintain --warranty-id N --date D [--scene SM6-10]` → 回执 JSON | 是（保养ID+日期） |\n| 85 | 查证件到期 | 查证件到期（按到期排序·脱敏） | `python3 scripts\u002F票据凭证\u002Fcli.py cert list [--scene SM6-11]` → 票据凭证\u002Fcertificates.html | 否 |\n| 86 | 登记证件 | 登记证件（录入） | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --type 护照\\|身份证\\|驾照\\|签证\\|保险单\\|其他 --expires-at D [--scene SM6-12]` → 回执 JSON | 是（类型+到期日） |\n| 87 | 证件归档 | 证件归档（照片） | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --photo P [--scene SM6-13]` → 回执 JSON | 否（照片必附） |\n| 88 | 更新证件 | 更新证件（改到期\u002F持有人\u002F号码） | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --scene SM6-14`（重登记语义·只改填写字段） → 回执 JSON | 是（证件ID） |\n| 89 | 查账号 | 查账号（密码脱敏） | `python3 scripts\u002F票据凭证\u002Fcli.py account list [--scene SM6-15]` → 票据凭证\u002Faccounts.html（密码 ******；复制数据默认不含密码） | 否 |\n| 90 | 存账号 | 存账号（加密存储） | `python3 scripts\u002F票据凭证\u002Fcli.py account add --platform P --user U --pass X --master-key M [--scene SM6-16]` → 回执 JSON | 是（平台+用户名+密码+主密钥） |\n| 91 | 改账号 | 改账号（更新录入） | `python3 scripts\u002F票据凭证\u002Fcli.py account update --platform P --master-key M [--scene SM6-17]` → 回执 JSON | 是（平台+主密钥） |\n| 92 | 看密码 | 看密码（敏感回显） | `python3 scripts\u002F票据凭证\u002Fcli.py account show --platform P --master-key M [--scene SM6-18]` → 回执 JSON（仅对话回显） | 是（平台+主密钥） |\n| 93 | 衣橱分析 | 衣橱闲置分析（结构诊断\u002F断舍离） | `python3 scripts\u002Fhome_manager.py sm3-wardrobe` → 穿搭\u002Fwardrobe_analyze.html | 否 |\n| 94 | 换季 | 换季收纳（季节衣物批量收纳\u002F拿出） | `python3 scripts\u002Fhome_manager.py sm3-season [--season 夏季\\|冬季\\|春秋] [--action 收纳\\|拿出]` → 穿搭\u002Fwardrobe_season.html | 否 |\n| 95 | 旅行穿搭 | 旅行穿搭计划（天数+天气·每日组合） | `python3 scripts\u002Fhome_manager.py sm3-trip-plan [--days N] [--destination X] [--temps N,N]` → 穿搭\u002Ftrip_outfit_plan.html | 否 |\n\n### 匹配规则\n\n1. **精确匹配**：用户输入包含表中唤醒词即命中\n2. **最长匹配**：同时命中多个时，取最长的（如\"查高频\"优先于\"查\"）\n3. **物品名提取**：唤醒词前后的文字作为物品名\u002F参数\n4. **缺失物品名**：需要物品名但用户未提供时，追问\n5. **变体匹配（v0.1 · 语料储备,行为待激活）**：用户输入若包含 `references\u002Fscenarios.yaml` 中某 scenario 的 `variants[].phrase`,视为命中该 scenario 的 `wake_word`,走对应 CLI 命令\n   - **当前状态(2026-07-28)**:变体语料已入库(TOP 5 核心词 × 每词 6 变体),但**匹配行为尚未在 AI 路由层生效**——AI 读取本规则后应自觉执行变体匹配,但无代码强制。`tests\u002Ftest_variants.py` 只锁数据结构(direction\u002Fphrase\u002F非空\u002F无禁用字符),不锁匹配行为。\n   - **激活路径**:未来若加代码层硬执行(改 home_manager.py 路由层读 variants 字段做匹配),本规则从\"语料储备\"升级为\"硬规则\"。\n   - **示例**:用户说\"帮我找找\" → 匹配 `查物品` scenario 的 `variants[direction=口语].phrase=\"帮我找找\"` → 视为命中 `查物品` → 走 `search --name \"XX\"` 等\n   - **变体方向**(总纲 §钩子 3 · 3 方向):\n     - `同义` — 正式唤醒词的等价表达(如\"搜索物品\" → 查物品)\n     - `口语` — 自然口语化(如\"帮我找找\" → 查物品)\n     - `模糊` — 意图模糊但可推断(如\"那个啥在哪\" → 查物品)\n   - **歧义处理**:若变体同时匹配多个唤醒词(如\"看看\"可能匹配 `看物品` 或 `查物品`),AI 必须询问用户确认,不得私自选择(沿用规则 4)\n\n\n   **FAT 暴露的边界 case 处理(v0.1 · 2026-07-28 fresh agent 跑后补)**:\n\n   - **容错规则(规则 5a)**:变体匹配默认**精确子串包含**(`prompt.includes(phrase)`)。不支持近似\u002F同义词替换——如\"那件东西的信息\"不能自动匹配变体\"那个东西的信息\"(一字之差)。若用户输入与变体仅一字之差但语义同,AI 可**主动建议**该变体(\"您是想看物品详情吗?\"),但不算命中,需用户确认。这避免误匹配,代价是 fresh agent 对一字之差无法自洽——这是有意的,防止\"差不多就路由\"导致误操作。\n\n   - **混合输入处理(规则 5b)**:当 prompt = 变体短语 + 解释性从句时(如\"那个啥在哪,就是我上次买的蓝牙耳机\"),AI 应:\n     1. 先用变体短语(\"那个啥在哪\")判定命中 `查物品`\n     2. 再从**解释性从句**(\"就是我上次买的蓝牙耳机\")提取有效参数(\"蓝牙耳机\" 作为物品名)\n     3. 若从句无法提取明确参数,走规则 4(缺失物品名 → 追问)\n\n   - **未命中变体但语义近似(规则 5c)**:若 prompt 未匹配任何变体短语,但语义上明显属于某唤醒词的范畴(如\"统计一下\"未在变体清单但语义近 `统物品` 的\"统计物品\"),AI **不得**自动路由(防止误匹配),应**追问用户**:\"您是想看家里物品总览(统物品)吗?\"——这比规则 4 的\"缺失物品名追问\"更具体,是变体未覆盖时的兜底。**未来扩充变体语料**时,这类近义项应正式登记为新变体。\n\n   - **变体覆盖不足的 fail mode**:若同一核心词的近义项反复出现(如\"统计一下\"\"整体看下\"\"总览一下\"都未在 `统物品` 变体清单),说明变体语料不足,应扩充 `scenarios.yaml` 的 variants 字段(加新 phrase),而非依赖规则 5c 的追问兜底。这是**变体管理的反馈循环**——FAT 暴露覆盖缺口 → 扩充语料 → 下次 FAT 验证。\n> ⚠️ **变体匹配的 fail mode**:若 AI 读了本规则但仍只用精确匹配(忽略 variants),视为 §⛓ HTML-First 协议的 silent failure(用户口语化 prompt 无法命中唤醒词 = 行为 fail mode)。commit 前自检清单的 `html-first-n\u002Fa` 不适用本场景——变体匹配是路由层行为,不是 HTML 层。\n\n### 唤醒词 CLI 映射\n\n| 唤醒词 | CLI 命令 |\n|--------|---------|\n| **居家管家 帮助** | `python3 scripts\u002Fhome_manager.py help`（生成 HELP HTML） |\n| 查物品 | `search --name \"XX\"` 或 `search --location \"XX\"` 或 `search --tag \"XX\"` |\n| 看物品 | `detail --id {ID}` |\n| 录物品 | `add --name \"XX\" --category-id N --location \"XX\"` (category-id 必填,从 categories 表查) |\n| 拍物品 | 先看图并保存到 `HOME_PHOTOS_DIR` → `add --name \"XX\" --category-id N --location \"XX\" --tags \"...≥10\" --remark \"...\" --photo \"XX\"` 一次写入 |\n| 改物品 | `update --id {ID}` + 对应参数 |\n| 移物品 | `update --id {ID} --new-location \"新位置\" --location \"原位置\"` |\n| 补物品 | `update --id {ID} --plus N` |\n| 减物品 | `update --id {ID} --minus N` |\n| 标物品 | `update --id {ID} --tags \"新标签\"` |\n| 废物品 | `update --id {ID} --location-status \"已废弃\"` |\n| 借物品 | `update --id {ID} --location-status \"借用中\"` |\n| 修物品 | `update --id {ID} --location-status \"维修中\"` |\n| 盘物品 | `inventory --location \"位置\" [--output PATH]` (--output 走 inventory_check.html) |\n| 盘全部 | `list`（无筛选条件） |\n| 穿什么 | `sm3-outfit [--temperature N] [--occasion X] [--limit N]` → 穿搭\u002Foutfit_picker.html |\n| 带物品 | `sm3-trip [--trip-type X] [--days N] [--plan-type X] [--exercises X]` → 穿搭\u002Ftravel_trip.html |\n| 归物品 | `sm3-trip --mode return` → 穿搭\u002Ftravel_trip.html |\n| 统物品 | `stats --type overview --output`（物品总览 HTML，含状态\u002F分类\u002F位置\u002F价值TOP\u002F高频TOP\u002F趋势） |\n| 查高频 | `stats --type overview --output`（T5 裁决：并入物品总览高频 TOP 区块） |\n| 查低频 | `stats --type idle [--days 90] --output`（T5 裁决：语义由闲置检测承接） |\n| 查闲置 | `stats --type idle [--days 90|180|365] [--category-id N] [--output PATH]` (--output 走 stats\u002Fidle.html) |\n| 查过期 | `stats --type expiring [--days 30] [--expired-only] [--category-id N] [--output PATH]` (--output 走 stats\u002Fexpiring.html) |\n| 盘点统计 | `stats --type inventory-stat [--output PATH]` (--output 走 stats\u002Finventory_stat.html) |\n| 看标签 | `tag-list` |\n| 合标签 | `tag-merge --from \"旧\" --to \"新\"` |\n| 查快递 | `python3 scripts\u002F快递购物\u002Fcli.py express [--timeout-days 7] [--output PATH]` → 快递购物\u002Fexpress.html（含超时提醒\u002F收货确认闭环） |\n| 购物清单 | `python3 scripts\u002F快递购物\u002Fcli.py list`（HTML 视图）\\| `list-add --name \"XX\" --quantity N [--routine 每周\\|每月]` \\| `list-check --ids 1,2` |\n| 缺货检测 | `python3 scripts\u002F快递购物\u002Fcli.py missing [--category-id N]`（HTML 视图）\\| `missing-to-list --ids 1,2` |\n| 囤货盘点 | `python3 scripts\u002F快递购物\u002Fcli.py stock`（HTML 视图）\\| `stock-set-threshold --id N --threshold M` \\| `stock-fix --id N --quantity M` |\n| 推位置 | `suggest-locations --category-id N [--with-examples]` |\n| 找位置 | `find-location --reference \"XX\"` |\n| 查账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account list [--scene SM6-15]`（清单 HTML·密码脱敏）或 `account show --platform \"XX\" --master-key \"XX\" [--scene SM6-18]`（敏感回显） |\n| 存账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account add --platform \"XX\" --user \"XX\" --pass \"XX\" --master-key \"XX\" [--type 购物\\|银行\\|社交\\|其他] [--scene SM6-16]`（加密存储） |\n| 改账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account update --platform \"XX\" --master-key \"XX\" [--user] [--pass] [--type] [--scene SM6-17]`（重新录入语义） |\n| 查异常 | `python3 scripts\u002F开始使用\u002Fcli.py lint` (数据检查 8 项, 走 开始使用\u002Fhealth_report.html) |\n| 首次使用 | `python3 scripts\u002F开始使用\u002Fcli.py check` → `init`(建库+种子 60 节点)→ `init-status`(幂等) |\n| 备份导出 | `python3 scripts\u002F开始使用\u002Fcli.py backup` \u002F `backup-list` \u002F `export --format json\\|csv` |\n| 导入恢复 | `python3 scripts\u002F开始使用\u002Fcli.py import-preview --file X` → `import --file X [--mode skip\\|overwrite]` |\n| 查物品 | `search --name \"XX\"` 默认输出 HTML |\n| 看物品 | `detail --id {ID}` 默认输出 HTML |\n| 统物品 | `list` 默认输出 HTML |\n| 管位置 | `sm2-manage --action view`（查看）· `--action create --path \"XX\"`（新建）· `--action rename --old \"XX\" --new \"YY\"`（改名）· `--action merge --src \"XX\" --tgt \"YY\"`（合并）· `--action delete --path \"XX\"`（删除）· `--action similar`（相似检测） |\n| 固定位 | `sm2-fixed --action list`（清单）· `--action set --item-id N --location \"XX\"`（设置）· `--action clear --item-id N`（解除） |\n| 收纳建议 | `sm2-suggest --item-id N`（单件）· `--item-ids \"1,2\"`（指定多件）· `--batch [--limit N]`（批量:没固定位的常用件） |\n| 空间视图 | `sm2-view [--path \"XX\"]`（缺省=顶层） |\n| 联动总览 | `python3 scripts\u002F联动\u002Fcli.py sm9-overview`（能力索引+偏好 HTML；`sm9-prefs --key food\\|price --value ask\\|remember\\|off` 设偏好） |\n| 记到卡路里 | `python3 scripts\u002F联动\u002Fcli.py sm9-food --item-id N [--action log\\|query]`（log=记到今日饮食, query=查热量） |\n| 记到记账 | `python3 scripts\u002F联动\u002Fcli.py sm9-price --item-id N [--direction expense\\|income]`（expense=支出, income=收入\u002F退货退款） |\n| 借用 | `family --action borrow-list [--output PATH]`(清单 HTML·双向区隔\u002F超期\u002F催还) · `--action borrow-add --direction 借出\\|借入 --item-id N 或 --item-name \"XX\" --object \"XX\" [--borrowed-at D] [--due-date D]`(登记·借出自动改状态借用中) · `--action borrow-return --borrow-id N`(归还·状态回在家) · `--action borrow-remind --borrow-id N`(催还文案纯文本) |\n| 家人档案 | `family --action member-list [--output PATH]`(成员 HTML·归属统计) · `--action member-add --name \"XX\" [--relation \"XX\"] [--note \"XX\"]`(添加) · `--action member-remove --name \"XX\"`(移除·归属回使用者) · `--action member-assign --name \"XX\" --item-ids \"1,2,3\"`(批量标记归属) |\n| 查购买记录 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list [--item-id N] [--year YYYY] [--month MM] [--scene SM6-1]`（清单 HTML·退货窗口计算）· `purchase add --item-id N --date D [--price X] [--channel] [--scene SM6-5]`（登记·票据照片预告式）· `purchase stats [--year YYYY] [--scene SM6-3]`（消费统计） |\n| 查上月购买 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --year YYYY --month MM [--scene SM6-2]`（时间预填·零填写） |\n| 查今年花费 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase stats --year YYYY [--scene SM6-3]`（年度统计） |\n| 查退货窗口 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase list --item-id N [--scene SM6-4]`（物品必填·退货截止日） |\n| 登记购买记录 | `python3 scripts\u002F票据凭证\u002Fcli.py purchase add --item-id N --date D [--price X] [--channel] [--scene SM6-5]`（登记·票据照片预告式） |\n| 查保修状态 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty list [--status 在保\\|即将到期\\|已过\\|到期未做\\|全部] [--scene SM6-6]`（清单 HTML·状态徽章·维修记录） |\n| 登记保修 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保修 --start-date D --duration-days N [--scene SM6-7]`（登记保修期） |\n| 记录维修 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty repair --warranty-id N --date D [--cost X] [--scene SM6-8]`（维修记录） |\n| 设置保养周期 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty register --item-id N --kind 保养 --start-date D --duration-days N [--scene SM6-9]`（设置保养周期） |\n| 执行保养 | `python3 scripts\u002F票据凭证\u002Fcli.py warranty maintain --warranty-id N --date D [--scene SM6-10]`（保养执行·刷新下次日） |\n| 查证件到期 | `python3 scripts\u002F票据凭证\u002Fcli.py cert list [--scene SM6-11]`（清单 HTML·号码 ****后4位·按到期排序） |\n| 登记证件 | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --type 护照\\|身份证\\|驾照\\|签证\\|保险单\\|其他 --expires-at D [--holder] [--number] [--scene SM6-12]`（登记·脱敏存储） |\n| 证件归档 | `python3 scripts\u002F票据凭证\u002Fcli.py cert add --photo P [--scene SM6-13]`（照片归档） |\n| 更新证件 | `python3 scripts\u002F票据凭证\u002Fcli.py cert add [--scene SM6-14]`（重登记语义·只改填写字段） |\n| 账号 | `python3 scripts\u002F票据凭证\u002Fcli.py account list [--scene SM6-15]`（清单 HTML·密码 ******·类型分组）· `account init-master --master-key M`（首设主密钥）· `account add`（加密存储）· `account show`（敏感回显）· `account update`（修改）· `account set-master`（换密钥） |\n\n---\n\n## 🧩 变体管理（总纲 §钩子 3 · 变体）\n\n> 引用 [SKILL 开发总纲 §钩子 3](..\u002FSKILL开发总纲V1.0\u002F03-触发词设计v2.md)：每个核心唤醒词配 2-3 个自然语言等价表达,覆盖 3 方向(同义 \u002F 口语 \u002F 模糊)。SKILL.md 只标方向,不写具体话(避免硬编码语料);具体话术在 `references\u002Fscenarios.yaml` 的 `variants` 字段。\n\n### TOP 5 核心唤醒词变体方向\n\n按 audit 使用频率(grilling Q7=audit),TOP 5 核心词均已配齐 3 方向变体:\n\n| 唤醒词 | 变体方向 | 变体示例(完整见 scenarios.yaml) |\n|--------|---------|------------------------------|\n| 查物品 | 同义 + 口语 + 模糊 | 搜索物品 \u002F 帮我找找 \u002F 那个啥在哪 |\n| 看物品 | 同义 + 口语 + 模糊 | 查看物品 \u002F 给我看看这个 \u002F 那个东西的信息 |\n| 录物品 | 同义 + 口语 + 模糊 | 登记物品 \u002F 帮我记一下 \u002F 这个收进来 |\n| 盘物品 | 同义 + 口语 + 模糊 | 清点物品 \u002F 数数这里 \u002F 看看齐不齐 |\n| 统物品 | 同义 + 口语 + 模糊 | 统计物品 \u002F 家里都有啥 \u002F 一共多少件 |\n\n> **变体数量说明**:总纲 §CONTEXT.md `变体` 定义为\"配 2-3 个自然语言等价表达,覆盖 3 方向\"。本 Skill 在 scenarios.yaml 中每 TOP 5 唤醒词存 6 变体(每方向 2 个)作为语料储备,SKILL.md 上表只展示每方向 1 个代表。`tests\u002Ftest_variants.py` 锁下限(≥ 2 direction)不锁上限,允许语料扩充。\n\n### 单一事实源\n\n变体清单的唯一事实源是 `references\u002Fscenarios.yaml` 的 `variants` 字段(每个 variant = `{direction: str, phrase: str}`)。`tests\u002Ftest_variants.py` 用 5 个测试锁住结构契约(direction ∈ {同义,口语,模糊} \u002F 每 TOP 5 ≥ 2 direction \u002F phrase 非空 \u002F 无禁用字符)。\n\n### ⚠️ Risk B:新增 TOP 核心词需同步标注变体方向\n\n**新增 TOP 核心词时,必须同步在 `scenarios.yaml` 加 `variants` 字段,否则视为 incomplete scenario**——因为缺变体的核心词无法匹配口语化 prompt,违反钩子 3。`tests\u002Ftest_variants.py` 的 TOP5 列表当前是硬编码,新增 TOP 核心词时需同步更新该列表。\n\n---\n\n## 安装与配置\n\n**依赖**：Python 3.x\n\n**环境变量**（可选）：\n- `SKILLS_DB_PATH`：数据库目录\n- `HOME_PHOTOS_DIR`：照片目录\n\n**网页版**：[SkillBoard](https:\u002F\u002Ffeatherhunter.github.io\u002FStudyNotes\u002Fskillboard\u002F) - 通过浏览器使用本系统，支持电脑和手机。使用时选择 `home.db` 文件即可。\n\n**一键安装**：复制以下 prompt 给 AI：\n```\n帮我安装\"居家管家\"技能：\n1. 检查 Python 环境\n2. 引导我配置环境变量\n3. 显示当前环境变量配置\n4. 告诉我如何更改数据目录\n```\n\n---\n\n## 📌 输出位置\n\n本 Skill 的 HTML 输出遵循 [SKILL 开发总纲 §原则 12](..\u002FSKILL开发总纲V1.0\u002F04-可视化与注入v2.md)（HTML 输出路径约定），分类标 12.A（数据\u002F过程）和 12.B（HELP）。\n\n### 路径根与子目录\n\n路径根按 env 链解析（总纲 12.X 优先级）：\n\n```\n$SKILLS_DATA_DIR  >  $SKILLS_DB_PATH  >  Skill 自带 fallback (Windows: D:\\.db\\ \u002F WSL: \u002Fmnt\u002Fd\u002F.db\u002F)\n```\n\n所有 HTML 输出落在 `\u003C根>\u002Fhome_manager_html\u002F` 子目录下（Skill 标识 = `home_manager`，与 Python 包名一致）。\n\n### 12.A 数据\u002F过程 HTML\n\n**命名形态**：`\u003C根>\u002Fhome_manager_html\u002F\u003Ccommand_cn>_\u003CYYYYMMDD>_\u003CHHMMSS>.html`\n\n**command_cn** 中文前缀来自 render 层的 `template → command_cn` 静态映射表（继承 SKILL §触发词速览表字面）：\n\n| template | command_cn |\n|----------|-----------|\n| `search_results.html` | 查物品 |\n| `delivery_check.html` | 查快递 |\n| `add_preview.html` | 录物品 |\n| `item_detail.html` | 看物品 |\n| `list_overview.html` | 统物品（v1，保留给盘全部） |\n| `inventory_check.html` | 盘物品 |\n| `expiring_alert.html` | 查过期（v1，已迁移至 stats\u002Fexpiring.html） |\n| `outfit_picker.html` | 穿什么 |\n| `travel_trip.html` | 出行清单（涵盖带物品 pack + 归物品 return） |\n| `位置\u002Fspace_view.html` | 空间视图 |\n| `位置\u002Flocation_manage.html` | 管位置 |\n| `位置\u002Ffixed_spot.html` | 固定位 |\n| `位置\u002Fsuggest_storage.html` | 收纳建议 |\n| `stats\u002Foverview.html` | 统物品（v2 物品总览，T5） |\n| `stats\u002Fidle.html` | 查闲置（T5） |\n| `stats\u002Fexpiring.html` | 查过期（v2，T5） |\n| `stats\u002Finventory_stat.html` | 盘点统计（T5） |\n| `票据凭证\u002Fpurchase_records.html` | 购买记录域 5 场景（查购买记录\u002F查上月购买\u002F查今年花费\u002F查退货窗口\u002F登记购买记录 · #250） |\n| `票据凭证\u002Fwarranty.html` | 保修域 5 场景（查保修状态\u002F登记保修\u002F记录维修\u002F设置保养周期\u002F执行保养 · #250） |\n| `票据凭证\u002Fcertificates.html` | 证件域 4 场景（查证件到期\u002F登记证件\u002F证件归档\u002F更新证件 · #250） |\n| `票据凭证\u002Faccounts.html` | 账号域 4 场景（查账号\u002F存账号\u002F改账号\u002F看密码 · #250） |\n\n例子：`home_manager_html\u002F查物品_20260728_171500.html`\n\n### 12.B HELP HTML\n\n**命名形态**：`\u003C根>\u002Fhome_manager_html\u002F居家管家_HELP_\u003CYYYYMMDD>_\u003CHHMMSS>.html`\n\n以 `_HELP_` 为保留字（中段，可被 grep 一抓出来）。`\u003Cskill 中文名>` 前缀 = `居家管家`（SKILL.md frontmatter 声明）。\n\n例子：`home_manager_html\u002F居家管家_HELP_20260728_171500.html`\n\n### 显式 override\n\n`--output \u003Cpath>` 仍可绕过自动命名，直接写到指定路径（不强制走 `home_manager_html\u002F` 子目录）。\n\n### ⚠️ 与总纲 12.X 的偏离\n\n本 Skill 在以下两项与总纲 12.X 显式偏离,**详见 [ADR-0001](.\u002Fdocs\u002Fadr\u002F0001-local-time-over-utc-for-html-filenames.md)**（单一真相,Q4=A 决策）：\n\n- **本地时间**(非 UTC):用户看文件名时间戳期望与钟表一致\n- **直接覆盖**(无 `_N` 后缀):本场景无保留历史输出需求,运行产物已 `.gitignore`\n\n本节不重复 ADR 细节,如需修改偏离请改 ADR-0001 并保持 SKILL.md 引用指向。\n\n---\n\n## 🧪 FAT 协议（总纲 §钩子 6 · Fresh Agent 黑盒测试）\n\n> 引用 [SKILL 开发总纲 §05 工程仪式 · FAT 协议](..\u002FSKILL开发总纲V1.0\u002F05-工程仪式.md) + [§钩子 6](..\u002FSKILL开发总纲V1.0\u002F02-5层骨架.md)：commit 前的商用级关卡。由零上下文 agent 执行唤醒词(3-5 个核心 × 每个 ≥ 3 个人类 prompt),对比预期工作流。fail → 改 SKILL.md 不改代码,循环 ≤ 3 次。\n\n### 分级 Tested-By 规则\n\ncommit message 必含 `Tested-By:` 字段,分级如下:\n\n| 改动类型 | Tested-By 取值 | 门槛 |\n|---------|---------------|------|\n| **改代码 \u002F 数据 \u002F CLI** | `pytest-pass-YYYY-MM-DD` | `python -m pytest` 全 PASS 即可 commit |\n| **改 SKILL.md**(触发词 \u002F 路由表 \u002F 说明 \u002F frontmatter \u002F 行为契约) | `fresh-agent-v1` | 必须 fresh agent 实际跑过 FAT 9 步 |\n| **豁免**(typo \u002F 格式调整 \u002F 注释) | `exempt` + 豁免依据 | 1 行说明为何豁免 |\n\n**分级理由(Q2=yes)**:接受分级而非 strict-only,因 SKILL.md 改动多属文档契约,pytest 测不到;但代码改动用 pytest 足够。分级子规则防止 SKILL.md 退化(改 SKILL.md 必 fresh agent,不能拿 pytest 充数)。\n\n### FAT 9 步协议(引用总纲 §05)\n\n完整 9 步协议见 [总纲 §05 工程仪式 · FAT 9 步协议](..\u002FSKILL开发总纲V1.0\u002F05-工程仪式.md)。摘要:\n\n1. 选 3-5 个核心唤醒词(高频 + 复杂 + 易错)\n2. 准备 fresh context(新会话,不保留开发记忆)\n3. 最小化加载(只给 SKILL.md + 必要 scripts)\n4. 每核心词 ≥ 3 个人类 prompt(含口语化\u002F略错,非 AI 风格)\n5. 捕获执行证据(命令\u002F数据\u002F输出)\n6. 对比预期工作流 vs 实际\n7. 判定 pass\u002Ffail(工作流一致 + 输出一致 + 无副作用 = PASS)\n8. fail → 改 SKILL.md 不改代码,再循环(≤ 3 次)\n9. 人工抽查 ≥ 1 个测试结果(防 AI 自评漏)\n\n**循环上限**:SKILL.md 改 3 次仍未通过 → 暂停,人工介入(可能 SKILL 设计问题 \u002F 测试选择不当 \u002F 代码 bug)。\n\n### ⚠️ Risk C:Tested-By 流于形式\n\n**Tested-By 字段缺失 \u002F 错误标签 \u002F 与 commit 内容不符 = 总纲 [`02-5层骨架.md §8 反模式 #4 静默失败`](..\u002FSKILL开发总纲V1.0\u002F02-5层骨架.md)`(except: pass` 风格的协议级沉默),需立即补全或 revert。例:\n- 改了 SKILL.md 触发词却标 `pytest-pass-2026-07-28`(应 `fresh-agent-v1`)→ silent failure\n- 改了代码却标 `fresh-agent-v1`(应 `pytest-pass`)→ 标签错配\n- 完全不标 Tested-By → 协议不完整,等同豁免依据缺失\n\n引用总纲 §8 反模式 #4 静默失败让 AI 有 external 压力,不流于形式。\n\n---\n\n## HTML 渲染器（Phase 7 重构）\n\n所有 HTML 模板的注入渲染由 `scripts\u002Frender\u002F` 包提供，与 home_manager 数据\u002F操作层解耦：\n\n| 模板 | 触发命令 | 交互 |\n|---|---|---|\n| `add_preview.html` | `add --preview` | 静态预览 + 复制 CLI |\n| `search_results.html` | `search` | 只读卡片 |\n| `delivery_check.html` | `search --status \"快递中\"` | 已收到\u002F废弃\u002F维修 + 回执 |\n| `item_detail.html` | `detail` | 只读详情 |\n| `list_overview.html` | `list` | 只读统计（含状态\u002F分类分布） |\n| `inventory_check.html` | `inventory --output` | 状态\u002F数量变更 + 回执 |\n| `expiring_alert.html` | `stats --type expiring --output` | 已处理\u002F废弃 + 回执 |\n| `stats\u002Foverview.html` | `stats --type overview --output` | 物品总览（指标\u002F分布图表\u002F价值TOP\u002F高频TOP\u002F趋势下钻）+ 复制数据\u002F日志 |\n| `stats\u002Fidle.html` | `stats --type idle --output` | 闲置勾选处理（废弃\u002F送人\u002F先不处理）+ 复制数据\u002F日志 |\n| `stats\u002Fexpiring.html` | `stats --type expiring --output` | 过期勾选处理（用完\u002F废弃\u002F忽略）+ 复制数据\u002F日志 |\n| `stats\u002Finventory_stat.html` | `stats --type inventory-stat --output` | 盘点统计（趋势\u002F差异\u002F建议复查）+ 复制数据\u002F日志 |\n\n**架构**：渲染器在 `scripts\u002Frender\u002F__init__.py`（独立包）；home_manager 包不再反向依赖。详见 `scripts\u002Frender\u002F__init__.py` 文档字符串。\n\n**硬规则**（与《预置HTML并注入数据指导手册》v2 对齐）：\n- 模板必须包含恰好 1 个 `\u003C!--INJECT-DATA-->` 占位符\n- 注入前校验 `payload.status === 'ok'`，非 ok 拒收\n- 模板 JS 守门 `validate(payload)`，渲染前再校验一次\n\n---\n\n## 功能概述\n\n- **物品录入**：自然语言描述物品，AI 解析后写入数据库\n- **物品查找**：按名称\u002F位置\u002F标签\u002F分类\u002F状态搜索\n- **物品更新**：位置变动、状态变更、数量调整、标签修改\n- **物品盘点**：按需盘点指定位置的所有物品\n- **穿搭推荐**：根据天气+标签推荐今日穿搭\n- **旅游归位**：出门带物+回家归位的完整流程\n- **频率统计**：区分高频\u002F低频物品，识别长期未用物品\n- **标签管理**：合并相似标签\n- **照片管理**：支持配置照片存储路径（环境变量 `HOME_PHOTOS_DIR`，默认为技能目录\u002Fphotos）\n- **购买记录**：购买日期\u002F价格\u002F渠道\u002F商家客服\u002F退货窗口计算\u002F票据照片归档 + 消费统计（按年\u002F分类聚合）\n- **保修与保养**：保修期登记与状态计算（在保\u002F即将到期\u002F已过）+ 维修记录 + 保养周期与执行状态\n- **证件管理**：证件登记（护照\u002F身份证\u002F驾照\u002F签证\u002F保险单）按到期排序，号码脱敏显示，照片归档\n- **账号密码**：主密钥 Fernet 加密存储，类型组织（购物\u002F银行\u002F社交\u002F其他），密码全脱敏，复制数据默认不含密码\n- **🖼 单图架构**：一件物品 = 一张照片（`item.photo` 是单字段）。\n  - **多图录入**：用户发多张图时，**第 1 张 = DB 主图（必须存 photos 目录）**，**后续图 = 只读不复制**（信息整合到 `tags` + `remark`，不再重复存档到文件系统）\n  - **套装共享**：多件商品共用 1 张图时，每件复制一份并分别命名，各自 DB 存 1 个主图\n  - **命名规范**：`YYYYMMDD_{ID}_{中文描述}.jpg`，无 `'` \u002F `:` \u002F `\u002F` 等 Windows 非法字符；`add --photo` 会在内部拿到 ID 后复制为该规范名并写入 `item.photo`\n\n## 快速导航\n\n| 唤醒词 | 功能 | 参考文档 |\n|--------|------|----------|\n| 查物品 | 物品搜索 | features\u002Fsearch.md |\n| 看物品 | 物品详情 | features\u002Fsearch.md |\n| 录物品 | 物品录入 | features\u002Fadd.md |\n| 拍物品 | 拍照录入 | features\u002Fadd.md |\n| 改物品 | 通用更新 | features\u002Fupdate.md |\n| 移物品 | 位置移动 | features\u002Fupdate.md |\n| 补物品 | 数量增加 | features\u002Fupdate.md |\n| 减物品 | 数量减少 | features\u002Fupdate.md |\n| 标物品 | 标签更新 | features\u002Fupdate.md |\n| 废物品 | 标记废弃 | features\u002Fupdate.md |\n| 借物品 | 标记借出 | features\u002Fupdate.md |\n| 修物品 | 标记维修 | features\u002Fupdate.md |\n| 盘物品 | 按位置盘点 | features\u002Finventory.md |\n| 盘全部 | 全屋盘点 | features\u002Finventory.md |\n| 穿什么 | 穿搭推荐 | features\u002F穿搭.md（拼贴卡相册风） |\n| 带物品 | 出门标记 | features\u002F穿搭.md → 出行清单 |\n| 归物品 | 回家归位 | features\u002F穿搭.md → 归位 |\n| 衣橱分析 | 衣橱闲置分析 | features\u002F穿搭.md → 衣橱分析 |\n| 换季 | 换季收纳 | features\u002F穿搭.md → 换季 |\n| 旅行穿搭 | 旅行穿搭计划 | features\u002F穿搭.md → 旅行穿搭 |\n| 统物品 | 总体统计 | features\u002Fstats.md |\n| 查高频 | 高频物品 | features\u002Fstats.md |\n| 查低频 | 低频物品 | features\u002Fstats.md |\n| 查过期 | 过期检查 | features\u002Fstats.md |\n| 看标签 | 列出标签 | features\u002Ftags.md |\n| 合标签 | 合并标签 | features\u002Ftags.md |\n| 查快递 | 快递跟踪 | scripts\u002F快递购物\u002Fcli.py |\n| 购物清单 | 购物清单管理 | scripts\u002F快递购物\u002Fcli.py |\n| 缺货检测 | 缺货自动进清单 | scripts\u002F快递购物\u002Fcli.py |\n| 囤货盘点 | 库存阈值管理 | scripts\u002F快递购物\u002Fcli.py |\n| 推位置 | 位置推荐 | features\u002Fadd.md |\n| 找位置 | 参考锚定 | features\u002Fadd.md |\n| 查账号 | 查看账号（密码脱敏） | scripts\u002F票据凭证\u002Fcli.py |\n| 存账号 | 新增账号（加密存储） | scripts\u002F票据凭证\u002Fcli.py |\n| 改账号 | 更新账号（重新录入） | scripts\u002F票据凭证\u002Fcli.py |\n| 看密码 | 查看密码（敏感回显） | scripts\u002F票据凭证\u002Fcli.py |\n| 查购买记录 | 购买记录全量查询 | scripts\u002F票据凭证\u002Fcli.py |\n| 查上月购买 | 上月购买（时间预填） | scripts\u002F票据凭证\u002Fcli.py |\n| 查今年花费 | 年度消费统计 | scripts\u002F票据凭证\u002Fcli.py |\n| 查退货窗口 | 退货截止日查询 | scripts\u002F票据凭证\u002Fcli.py |\n| 登记购买记录 | 登记购买（录入） | scripts\u002F票据凭证\u002Fcli.py |\n| 查保修状态 | 保修状态（在保\u002F将到期\u002F已过） | scripts\u002F票据凭证\u002Fcli.py |\n| 登记保修 | 登记保修期 | scripts\u002F票据凭证\u002Fcli.py |\n| 记录维修 | 维修记录 | scripts\u002F票据凭证\u002Fcli.py |\n| 设置保养周期 | 定期保养周期 | scripts\u002F票据凭证\u002Fcli.py |\n| 执行保养 | 执行保养 | scripts\u002F票据凭证\u002Fcli.py |\n| 查证件到期 | 证件到期查询（脱敏） | scripts\u002F票据凭证\u002Fcli.py |\n| 登记证件 | 证件登记（录入） | scripts\u002F票据凭证\u002Fcli.py |\n| 证件归档 | 证件照片归档 | scripts\u002F票据凭证\u002Fcli.py |\n| 更新证件 | 证件更新（重登记） | scripts\u002F票据凭证\u002Fcli.py |\n| 查异常 | 数据健康检查 | SKILL.md（Lint 检查） |\n| 查物品 | 物品搜索→HTML | features\u002Fsearch.md |\n| 看物品 | 物品详情→HTML | features\u002Fsearch.md |\n| 统物品 | 总体统计→HTML | features\u002Fsearch.md |\n| 管位置 | 位置管理→HTML | features\u002F位置.md |\n| 固定位 | 固定位清单→HTML | features\u002F位置.md |\n| 收纳建议 | 收纳建议→HTML | features\u002F位置.md |\n| 空间视图 | 空间视图→HTML | features\u002F位置.md |\n\n---\n\n## ⚠️ 核心使用原则\n\n1. **任何写操作前必须交互确认**：AI 先展示将要执行的操作，用户说\"对\"才执行\n2. **多物品冲突时让用户选**：搜到多个同名物品，列出来让用户选，不默认选任何一个\n3. **物品只增不删，可修改**：物品不会物理删除。item_locations 中 quantity=0 时自动删除该位置记录；位置状态为\"已用完\"或\"已废弃\"时需用户明确表态\n4. **AI 不得自行推断**：当用户意图存在多种可能时，AI 必须询问确认，不得私自选择\n5. **库存补充必须问**：搜索到名称相同的\"已用完\"或\"已废弃\"物品时，AI 必须询问用户是\"补充到现有记录\"还是\"新建记录\"，用户确认前不得写入数据库\n\n---\n\n## ⛓ HTML-First 行为契约（总纲 §原则 11 · 强约定）\n\n> 引用 [SKILL 开发总纲 §原则 11](..\u002FSKILL开发总纲V1.0\u002F04-可视化与注入v2.md)：唤醒词命中 SKILL 后,若 SKILL 声明有 HTML 输出路径,**默认行为 = invoke HTML 工作流**。文字答是 fail mode,不是 fallback。与 §原则 10 互补(10 管出向 · 复制 prompt,11 管入向 · 默认 HTML)。\n\n### 必须 invoke HTML 的唤醒词（16 个）\n\n命中下列唤醒词后,**必须** invoke HTML 工作流,文字答视为 fail mode:\n\n| 类别 | 唤醒词 |\n|------|--------|\n| 查看类 | `查物品` \u002F `看物品` |\n| 盘点类 | `盘物品` \u002F `盘全部` |\n| 统计类 | `统物品` \u002F `查高频` \u002F `查低频` \u002F `查过期` |\n| 出行类 | `查快递` \u002F `穿什么` \u002F `带物品` \u002F `归物品` \u002F `衣橱分析` \u002F `换季` \u002F `旅行穿搭` |\n| 空间类 | `管位置` \u002F `固定位` \u002F `收纳建议` \u002F `空间视图` |\n| 票据凭证类 | `购买记录` \u002F `保修` \u002F `证件` \u002F `账号`（SM6 域 CLI 默认输出 HTML） |\n\n这些唤醒词的 HTML 输出路径见 [§📌 输出位置](#-输出位置) 的 `template → command_cn` 映射表。\n\n### 优雅降级\n\n若 HTML 生成失败(磁盘满 \u002F 模板错 \u002F 渲染异常),fallback 到**结构化文本 + 错误回执**,不要直接报错中断。结构化文本应包含:操作名 \u002F 关键数据 \u002F 失败原因 \u002F 建议下一步。用户看到错误回执后可手动重试或反馈。\n\n> **fail mode 判定**:`查物品` 命中后只回一行文字\"找到 3 件物品:...\"而不生成 HTML = fail mode,需立即补 invoke HTML。\n\n### fail mode 自检清单(commit 前必跑)\n\n> 本清单是软规则 §HTML-First 的硬执行替代——没有代码强制,但 AI 在每次涉及 12 唤醒词的 commit 前**必须自检**,未过自检不得 commit。这是对抗式审查后补的(P1-3),解决\"强约定无硬执行\"的空壳问题。\n\n**自检步骤**(AI 在 commit message 的 Tested-By 字段记录结果):\n\n1. **本轮是否触发了 12 唤醒词中的任意一个?**\n   - 否 → 本清单不适用,跳过\n   - 是 → 继续\n\n2. **每个被触发的唤醒词,本轮是否 invoke 了 HTML 工作流?**\n   - 是 → PASS,记录 `html-first-pass`\n   - 否 → 进入 fail mode 处理\n\n3. **fail mode 处理(命中但未 invoke HTML)**:\n   - 检查是否有 HTML 生成失败(磁盘满 \u002F 模板错 \u002F 渲染异常)\n   - 失败 → 走优雅降级(结构化文本 + 错误回执),记录 `html-first-fallback + 原因`\n   - 未失败但没 invoke → **silent failure**,不得 commit,先补 invoke HTML\n\n**Tested-By 字段标法**(与 §🧪 FAT 协议 分级规则互补):\n- `html-first-pass` — 12 唤醒词命中后都 invoke 了 HTML\n- `html-first-fallback + 原因` — HTML 失败走了优雅降级\n- `html-first-n\u002Fa` — 本轮未触发 12 唤醒词(纯文档 \u002F 纯测试改动)\n- 不标 → 视为 silent failure,等同 §8 反模式 #4\n\n**示例**:\n- 改 SKILL.md §HTML-First 章节(commit 4):`Tested-By: html-first-n\u002Fa (纯文档,未触发 12 唤醒词)`\n- 改 search 命令的 HTML 模板:`Tested-By: html-first-pass (查物品 命中后 invoke search_results.html)`\n- 查物品 命中但只回文字:`Tested-By: html-first-fail (silent failure,不得 commit)`\n\n---\n\n## 联动说明（SM9 联动功能域 · 双入口单实现）\n\n联动逻辑已集中到技能路由器（`图片路由\u002FSKILL.md`），本技能不再单独维护联动规则。完成主操作后请检查路由器的联动规则表。\n\n**SM9 场景**（3 个，流程详见 `features\u002F联动.md`）：\n\n| 唤醒词 | 场景 | CLI | 说明 |\n|--------|------|-----|------|\n| 联动总览 | 联动功能总览 | `sm9-overview` | 能力索引（食品→卡路里\u002F价格→饼干记账\u002F健身→出行清单）+ 偏好频控 |\n| 记到卡路里 | 食品联动 | `sm9-food --item-id N [--action log\\|query]` | 物品确认 → 动作选择 → 复制 prompt 到卡路里（单工闭环） |\n| 记到记账 | 价格联动 | `sm9-price --item-id N [--direction expense\\|income]` | 物品确认（含价格）→ 方向选择 → 复制 prompt 到饼干记账 |\n\n**双入口顺路建议（G6 第 3 层 · 规格硬要求）**：\n\n- **独立触发**：用户直接说「记到卡路里 \u002F 记到记账 \u002F 联动总览」→ 按上表路由\n- **录入顺路建议**：完成「录物品\u002F拍物品」（1-1\u002F1-2）回执后，AI 检查联动偏好（`sm9-prefs` 设置，存 `$SKILLS_DB_PATH\u002Flink_prefs.json`）：\n  - `ask`（每次询问）→ 始终在回执顺路提醒区给出联动建议\n  - `remember`（记住上次选择）→ 按上次用户是否接受联动决定\n  - `off`（关闭）→ 不打扰，不回执建议\n  - 食品\u002F饮品物品 → 建议「记到卡路里」（查热量或记一餐）；有价格物品 → 建议「记到记账」（记支出\u002F收入）\n  - 建议内容 = 调用 `sm9-food \u002F sm9-price` 生成的 prompt，附在回执 HTML 顺路提醒区\n\n**执行边界**：联动执行 = 复制 prompt 到对应技能（卡路里\u002F饼干记账），居家管家不直接调用对方 CLI（跨技能物理隔离，单工闭环）。\n\n---\n\n## Lint 检查（数据健康检查 · SM8 开始使用域）\n\n**唤醒词**：`查异常`\n\n### 执行方式(SM8 实施后 · 2026-08-05)\n\n`python3 scripts\u002F开始使用\u002Fcli.py lint` → 结构化 JSON → 渲染 `templates\u002F开始使用\u002Fhealth_report.html`(查看+选择)。\n输出 = 环境信息头部 + 8 检查项(问题\u002F涉及数\u002F严重度)+ 勾选复制修复引导。\n\n### 检查项(8 项 · v2.0)\n\n1. **无标签物品** — item_tags 无记录 → 修复引导:改物品补标签\n2. **无位置物品** — 无 item_locations 行(盘点会漏)→ 修复引导:改物品补位置\n3. **状态长期未更新** — 快递中>7 天 \u002F 旅游中>30 天 \u002F 维修中>30 天 \u002F 借用中>30 天\n4. **单级位置** — 位置路径不含 `\u002F`(如只有\"客厅\")→ 修复引导:移物品规范化\n5. **无照片物品** — photo 为空 → 修复引导:拍物品补拍(预告式)\n6. **未录价格** — purchase_price 为空 → 修复引导:改物品补价格(联动 SM4 价格覆盖率)\n7. **无购买\u002F过期日期** — item_locations 无日期 → 修复引导:改物品补日期\n8. **相似位置未合并** — 去掉分隔符后同名(如 `卧室\u002F东南角` vs `卧室东南角`)→ 修复引导:移物品合并\n\n### 处理原则\n\n- 发现问题后列出清单，让用户勾选确认(HTML 勾选 → 复制修复引导)\n- **只建议不自动改**：AI 不得直接修改数据,只能复制对应场景 prompt 引导用户\n- 用户说\"检查一下\"时执行，不主动触发\n\n---\n\n## 开始使用域流程(SM8 · 首次使用\u002F备份导出\u002F导入恢复)\n\n**唤醒词**：`首次使用` \u002F `备份导出` \u002F `导入恢复`\n\n### 首次使用(初始化工作流 · 6 步)\n\n1. 环境检测:`python3 scripts\u002F开始使用\u002Fcli.py check`(OS\u002FPython\u002F目录可写\u002FDB 状态)\n2. 路径确认:展示 check 输出的 `db_path`(AI 预填建议路径),**必须征求用户确认**,不静默\n3. 建库+建分类:`python3 scripts\u002F开始使用\u002Fcli.py init`(幂等:已有库\u002F已有分类 → 跳过)\n4. 状态确认:`python3 scripts\u002F开始使用\u002Fcli.py init-status`(未初始化\u002F库已建\u002F已初始化)\n5. 渲染向导 HTML:`render_开始使用.emit_sm8(\"first_use_wizard.html\", ...)`(6 步步骤条 + 环境信息 + 建库结果 + 下一步按钮)\n6. 完成:提示可录第一批(建议拍物品);失败 → `emit_error` 错误回执 HTML(步骤\u002F原因\u002F建议)+ 一键重试\n\n### 备份导出(数据资产)\n\n1. 查询历史:`cli.py backup-list [--keep-n N]`(备份文件\u002F大小\u002F时间\u002F距上次备份天数)\n2. 确认备份:用户确认 → `cli.py backup`(db+照片全量打包 zip,自动保留 N 份清理最旧)\n3. 导出(可选):`cli.py export --format json|csv [--output 路径]`\n4. 渲染:`emit_sm8(\"backup_receipt.html\", ...)`(备份结果 + 历史列表 + 距上次备份天数 + 导出按钮)\n5. 删除旧备份:确认式 `cli.py backup-delete --file 文件名`;失败 → 错误回执 + 重试\n\n### 导入恢复(迁移 · 预告式文件)\n\n1. 预告式:按钮复制「【导入文件即将发送:】」→ AI 进入等待态 → 用户发文件\n2. 校验+冲突预览:`cli.py import-preview --file X`(格式\u002F版本兼容 + 同名冲突计数)\n3. 确认导入:`cli.py import --file X [--mode skip|overwrite]`(导入前自动备份,失败回滚数据不变)\n4. 渲染:`emit_sm8(\"import_restore.html\", ...)`(步骤条 + 校验结果 + 冲突预览 + 确认\u002F撤销按钮)\n5. 撤销(确认式):`python3 scripts\u002F开始使用\u002Fcli.py import-undo --file \u003C导入前备份>`(覆盖前自动再备份当前库为安全网;非法备份 → 错误回执)\n\n---\n\n## 快递购物域流程(SM5 · 购物清单\u002F缺货检测\u002F快递跟踪\u002F囤货盘点)\n\n**唤醒词**：`购物清单` \u002F `缺货检测` \u002F `查快递` \u002F `囤货盘点`\n\n### 购物清单(组织\u002F例行\u002F采购闭环)\n\n1. 视图:`python3 scripts\u002F快递购物\u002Fcli.py list` → 快递购物\u002Flist.html（条目 + 来源标注:手动\u002F缺货检测\u002F例行+周期 + 清单内查重提示 + 例行到期顺路提醒）\n2. 添加:`cli.py list-add --name \"XX\" --quantity N [--source 手动|缺货检测|例行] [--routine 每周|每月]`（同名「待买」重复添加 → 拒绝并提示合并）\n3. 销项(勾选已买):`cli.py list-check --ids 1,2`（例行条目记 last_done_at,超周期自动重新激活为待买 + 顺路提醒「本周采购清单已生成」）\n4. 采购闭环(按钮复制 prompt → AI 引导):新物品 → 录物品(1-1);已有物品 → 补数量(3-3)\n5. 空态:引导缺货检测自动填清单\n\n### 缺货检测(自动进清单)\n\n1. 检测:`cli.py missing [--category-id N]` → 快递购物\u002Fmissing.html（当前数量+阈值+建议量「当前 0\u002F阈值 1\u002F建议买 2」）\n2. 阈值来源:囤货设置(`stock-set-threshold`);未设置 → 默认 1 估算并标注「默认」\n3. 一键进清单(勾选):`cli.py missing-to-list --ids 1,2`（按建议量入清单;已在待买 → 跳过并提示合并）\n4. 空态:库存充足\n\n### 快递跟踪(查\u002F超时\u002F收货确认)\n\n1. 视图:`cli.py express [--timeout-days 7]` → 快递购物\u002Fexpress.html（照片+名称+数量+「快递中」+已等 N 天+超时红色徽章+顺路提醒）\n2. 确认收货(勾选):`cli.py express-receive --id N [--to 在家|备用]`（状态变更 + 写 item_events）\n3. 超时处理:按钮复制 prompt → AI 联系卖家\u002F标记遗失\n\n### 囤货盘点(库存\u002F阈值\u002F不足检测)\n\n1. 视图:`cli.py stock` → 快递购物\u002Fstock.html（名称+当前数量+阈值+库存状态:充足\u002F低\u002F空）\n2. 设置阈值:`cli.py stock-set-threshold --id N --threshold M`（缺货检测的阈值数据源）\n3. 修正数量(勾选 → 3-3):`cli.py stock-fix --id N --quantity M`（写数量变更事件）\n4. 空态:引导为常用物品设阈值（高频无阈值物品提示）\n\n---\n\n## 错误处理\n\n| 场景 | AI 处理方式 |\n|------|------------|\n| 搜不到物品 | 告知用户，询问是否换个关键词或新建物品 |\n| 搜到多个同名物品 | 列出让用户选择，不默认选任何一个 |\n| 录入时发现同名\"已用完\u002F已废弃\"物品 | 列出选项让用户选择，不能自动决定 |\n| 补充库存时原物品状态为\"已用完\u002F已废弃\" | 询问用户新状态是什么（在家\u002F备用\u002F快递中\u002F其他） |\n| 用户输入模糊无法解析 | 追问确认 |\n| 数据库写入失败 | 告知用户失败原因，询问重试 |\n| 首次使用（无数据库） | 走 SM8 初始化工作流:`check` → 路径确认 → `init`(建库+种子 60 节点),失败=错误回执 HTML+重试 |\n| 初始化已存在库 | 幂等跳过建库建分类,提示「已初始化,直接使用」 |\n| 备份失败 | 错误回执 HTML(原因\u002F建议)+ 一键重试;备份前不动原数据 |\n| 导入文件不兼容 | 校验失败 → 错误回执;导入失败自动回滚,数据不变 |\n| 盘点中途退出 | 已确认的已写入，未确认的保持原样 |\n| 穿搭推荐无匹配 | 告知无匹配衣物，建议扩展标签或录入 |\n| 天气数据获取失败 | 告知无法获取天气，改用纯标签筛选 |\n| 标签合并不存在 | 脚本输出\"标签不存在\"，AI 告知用户 |\n| 购物清单添加重复条目 | 脚本拒绝并提示「已在购物清单中,可改数量」,AI 转告用户,不自动合并 |\n| 收货确认时无快递中记录 | 脚本报错「没有快递中位置记录」,AI 告知无需确认收货 |\n| 囤货修正无库存位置 | 脚本报错,AI 提示先录入或确认收货后再修正 |\n",{"name":5,"metadata":46,"description":53},{"openclaw":47,"help_wake_word":52},{"emoji":48,"requires":49},"🏠",{"pip":50,"python":51},[28],">=3.7","居家管家 帮助","家庭物品全生命周期管理技能。当用户使用以下指令时触发： 查物品、看物品（搜索\u002F查看详情）、 录物品、拍物品（文字录入\u002F拍照录入）、 改物品、移物品、补物品、减物品、标物品、废物品、借物品、修物品（更新类）、 盘物品、盘全部（盘点）、 穿什么（穿搭推荐）、 带物品、归物品（旅游归位）、 统物品、查高频、查低频（频率统计）、 查过期（过期检查）、 看标签、合标签（标签管理）、 查快递（快递查询）、 查购买记录、查上月购买、查今年花费、查退货窗口、登记购买记录（购买记录管理）、 查保修状态、登记保修、记录维修、设置保养周期、执行保养（保修与保养）、 查证件到期、登记证件、证件归档、更新证件（证件管理）、 查账号、存账号、改账号、看密码（账号密码·脱敏）、 批量录入、补录（批量\u002F历史录入）、 紧急定位、筛选浏览、拍照找物品、查重复（查找进阶）、 数量变更、状态变更、合并物品、撤销操作、物品关联（更新进阶）、 管标签、管分类、整理建议（标签分类管理）、 查看照片、管照片、照片墙（照片档案）、 盘点记录、差异处理、搬家盘点（盘点进阶）、 历史（物品历史）、 借用、家人档案（家庭协作）、 查闲置（闲置检测）、盘点统计（盘点统计与建议）、 联动总览、记到卡路里、记到记账（跨技能联动）、 首次使用（初始化工作流）、备份导出（数据资产）、导入恢复（迁移）、 查异常（数据健康检查）。 所有操作通过 Python CLI 执行数据库读写，AI 负责解析自然语言和交互确认；录物品\u002F拍物品流程在写入前生成 HTML 预览供用户确认。\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":8,"skillName":5,"commands":62,"prompt":72,"zipAvailable":73},[63,66,69],{"tool":64,"command":65},"npx","npx skills add FeatherHunter\u002FSKILLS --skill \"居家管家\"",{"tool":67,"command":68},"bunx","bunx skills add FeatherHunter\u002FSKILLS --skill \"居家管家\"",{"tool":70,"command":71},"pnpm","pnpm dlx skills add FeatherHunter\u002FSKILLS --skill \"居家管家\"","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002FSKILL.md",true,[75,81,85,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,155,159,163,169,175,179,183,186,189,193,197,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,448,451,455,458,462,465,469,472,476,479,483,487,491,495,499,503,507,511,515,519,523,527,531,535,539,543,547,551,555,559,563,567,571,575,579,583,587,591,595,599,603,607,611,615,619,623,627,631,635,639,643,647,651,655,659,663,667,671,675,679,683,687,691,695,699,703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,771,775,779,783,787,791,795,799,803,807,810,814,818,822,826,830,834,838,842,846,850,854,858,862,866,870,874,878,882,886,890,894,898,902,906,910,914,918,922,926,930,934,938,942,946,950,954,958,962,966,970,974,978,982,986,990,994,998,1002,1006,1010,1014,1018,1022,1026,1030,1034,1038,1042,1046,1049,1053,1057,1061,1064,1068,1072,1076,1080,1084,1088,1092,1096,1100,1104,1108,1112,1116,1120,1124,1128,1132,1136,1140,1144,1148,1152,1156,1160,1164,1168,1172,1176,1180,1184,1188,1192,1196,1200,1204,1208,1212,1216,1220,1224,1228,1232,1236,1240,1244,1248,1252,1256,1260,1264,1268],{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"_grilling\u002Fgrilling-round-1_2026-07-28.html","REFERENCE","参考文档",36752,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F_grilling\u002Fgrilling-round-1_2026-07-28.html",{"path":82,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":83,"sourceHtmlUrl":84},"_meta.json",386,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F_meta.json",{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},".gitignore","OTHER","其他",773,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.gitignore",{"path":92,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":93,"sourceHtmlUrl":94},".notes\u002Faudit-2026-07-27.html",24831,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Faudit-2026-07-27.html",{"path":96,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":97,"sourceHtmlUrl":98},".notes\u002Fdiffs\u002Fpatch-P0-1.md",4330,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P0-1.md",{"path":100,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":101,"sourceHtmlUrl":102},".notes\u002Fdiffs\u002Fpatch-P0-2.md",487,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P0-2.md",{"path":104,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":105,"sourceHtmlUrl":106},".notes\u002Fdiffs\u002Fpatch-P0-3.md",2834,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P0-3.md",{"path":108,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":109,"sourceHtmlUrl":110},".notes\u002Fdiffs\u002Fpatch-P0-4.md",2905,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P0-4.md",{"path":112,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":113,"sourceHtmlUrl":114},".notes\u002Fdiffs\u002Fpatch-P0-6.md",845,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P0-6.md",{"path":116,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":117,"sourceHtmlUrl":118},".notes\u002Fdiffs\u002Fpatch-P0-7.md",256,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P0-7.md",{"path":120,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":121,"sourceHtmlUrl":122},".notes\u002Fdiffs\u002Fpatch-P1-10.md",1064,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-10.md",{"path":124,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":125,"sourceHtmlUrl":126},".notes\u002Fdiffs\u002Fpatch-P1-3-4-5.md",937,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-3-4-5.md",{"path":128,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":129,"sourceHtmlUrl":130},".notes\u002Fdiffs\u002Fpatch-P1-6.md",1112,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-6.md",{"path":132,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":133,"sourceHtmlUrl":134},".notes\u002Fdiffs\u002Fpatch-P1-7.md",885,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-7.md",{"path":136,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":137,"sourceHtmlUrl":138},".notes\u002Fdiffs\u002Fpatch-P1-9a.md",757,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-9a.md",{"path":140,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":141,"sourceHtmlUrl":142},".notes\u002Fdiffs\u002Fpatch-P1-9c-fix-2.md",2798,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-9c-fix-2.md",{"path":144,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":145,"sourceHtmlUrl":146},".notes\u002Fdiffs\u002Fpatch-P1-9c-fix.md",1391,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-9c-fix.md",{"path":148,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":149,"sourceHtmlUrl":150},".notes\u002Fdiffs\u002Fpatch-P1-9c.md",2019,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fdiffs\u002Fpatch-P1-9c.md",{"path":152,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":153,"sourceHtmlUrl":154},".notes\u002FHELP_demo_FINAL.html",17761,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_demo_FINAL.html",{"path":156,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":157,"sourceHtmlUrl":158},".notes\u002FHELP_demo.html",17637,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_demo.html",{"path":160,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":161,"sourceHtmlUrl":162},".notes\u002FHELP_fixed.html",18446,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_fixed.html",{"path":164,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":167,"sourceHtmlUrl":168},".notes\u002FHELP_playwright_test.py","SCRIPT","脚本",10896,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_playwright_test.py",{"path":170,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":173,"sourceHtmlUrl":174},".notes\u002FHELP_shots\u002F00_full_page.png","ASSET","资产文件",226968,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F00_full_page.png",{"path":176,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":177,"sourceHtmlUrl":178},".notes\u002FHELP_shots\u002F01_initial.png",74170,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F01_initial.png",{"path":180,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":181,"sourceHtmlUrl":182},".notes\u002FHELP_shots\u002F02_after_toggle.png",112223,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F02_after_toggle.png",{"path":184,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":181,"sourceHtmlUrl":185},".notes\u002FHELP_shots\u002F03_after_toc_jump.png","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F03_after_toc_jump.png",{"path":187,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":173,"sourceHtmlUrl":188},".notes\u002FHELP_shots\u002F04_after_copy.png","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F04_after_copy.png",{"path":190,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":191,"sourceHtmlUrl":192},".notes\u002FHELP_shots\u002F05_mobile.png",201841,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F05_mobile.png",{"path":194,"resourceType":171,"resourceTypeDesc":172,"sizeBytes":195,"sourceHtmlUrl":196},".notes\u002FHELP_shots\u002F07_prompt_empty.png",1977,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002F07_prompt_empty.png",{"path":198,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":199,"sourceHtmlUrl":200},".notes\u002FHELP_shots\u002FREPORT.md",966,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP_shots\u002FREPORT.md",{"path":202,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":203,"sourceHtmlUrl":204},".notes\u002FHELP-audit-2.html",7794,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP-audit-2.html",{"path":206,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":207,"sourceHtmlUrl":208},".notes\u002FHELP-audit-3.html",5275,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP-audit-3.html",{"path":210,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":211,"sourceHtmlUrl":212},".notes\u002FHELP-audit-4.html",6713,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP-audit-4.html",{"path":214,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":215,"sourceHtmlUrl":216},".notes\u002FHELP-audit.html",7498,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FHELP-audit.html",{"path":218,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":219,"sourceHtmlUrl":220},".notes\u002FPLAN-A-final.html",7056,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FPLAN-A-final.html",{"path":222,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":223,"sourceHtmlUrl":224},".notes\u002FPLAN-grouping-collapse.html",7135,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FPLAN-grouping-collapse.html",{"path":226,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":227,"sourceHtmlUrl":228},".notes\u002FPLAN-html-unify.html",7422,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FPLAN-html-unify.html",{"path":230,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":231,"sourceHtmlUrl":232},".notes\u002FPLAN-label-options.html",6261,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FPLAN-label-options.html",{"path":234,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":235,"sourceHtmlUrl":236},".notes\u002FPLAN-RESTRUCTURE.html",6771,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002FPLAN-RESTRUCTURE.html",{"path":238,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":239,"sourceHtmlUrl":240},".notes\u002Fq-N.html",10054,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fq-N.html",{"path":242,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":243,"sourceHtmlUrl":244},".notes\u002Fq-P0-3.html",5674,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fq-P0-3.html",{"path":246,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":247,"sourceHtmlUrl":248},".notes\u002Fq-plan-stop.html",4195,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fq-plan-stop.html",{"path":250,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":251,"sourceHtmlUrl":252},".notes\u002Fq-sync-auto.html",4582,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.notes\u002Fq-sync-auto.html",{"path":254,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":255,"sourceHtmlUrl":256},".out-of-scope\u002FREADME.md",1382,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.out-of-scope\u002FREADME.md",{"path":258,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":259,"sourceHtmlUrl":260},".scratch\u002Fhtml-output-naming\u002Fissues\u002F01-env-chain-and-12a-naming-tracer.md",3177,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fhtml-output-naming\u002Fissues\u002F01-env-chain-and-12a-naming-tracer.md",{"path":262,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":263,"sourceHtmlUrl":264},".scratch\u002Fhtml-output-naming\u002Fissues\u002F02-template-mapping-and-12b-help-naming.md",2801,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fhtml-output-naming\u002Fissues\u002F02-template-mapping-and-12b-help-naming.md",{"path":266,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":267,"sourceHtmlUrl":268},".scratch\u002Fhtml-output-naming\u002Fissues\u002F03-skill-md-output-section-and-cleanup.md",2829,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fhtml-output-naming\u002Fissues\u002F03-skill-md-output-section-and-cleanup.md",{"path":270,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":271,"sourceHtmlUrl":272},".scratch\u002Fhtml-output-naming\u002Fspec.md",14188,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fhtml-output-naming\u002Fspec.md",{"path":274,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":275,"sourceHtmlUrl":276},".scratch\u002Fskill-spec-alignment\u002Fissues\u002F01-context-skill-identifier-and-term-reference.md",1161,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fissues\u002F01-context-skill-identifier-and-term-reference.md",{"path":278,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":279,"sourceHtmlUrl":280},".scratch\u002Fskill-spec-alignment\u002Fissues\u002F02-adr-0001-expand-combine-overwrite-deviation.md",1327,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fissues\u002F02-adr-0001-expand-combine-overwrite-deviation.md",{"path":282,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":283,"sourceHtmlUrl":284},".scratch\u002Fskill-spec-alignment\u002Fissues\u002F03-skill-md-html-first-section.md",1291,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fissues\u002F03-skill-md-html-first-section.md",{"path":286,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":287,"sourceHtmlUrl":288},".scratch\u002Fskill-spec-alignment\u002Fissues\u002F04-skill-md-frontmatter-help-wake-word-and-route-first-row.md",1435,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fissues\u002F04-skill-md-frontmatter-help-wake-word-and-route-first-row.md",{"path":290,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":291,"sourceHtmlUrl":292},".scratch\u002Fskill-spec-alignment\u002Fissues\u002F05-scenarios-yaml-variants-with-tests-tdd.md",2412,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fissues\u002F05-scenarios-yaml-variants-with-tests-tdd.md",{"path":294,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":295,"sourceHtmlUrl":296},".scratch\u002Fskill-spec-alignment\u002Fissues\u002F06-skill-md-fat-protocol-and-tested-by-tiers.md",1867,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fissues\u002F06-skill-md-fat-protocol-and-tested-by-tiers.md",{"path":298,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":299,"sourceHtmlUrl":300},".scratch\u002Fskill-spec-alignment\u002Fspec.md",18420,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F.scratch\u002Fskill-spec-alignment\u002Fspec.md",{"path":302,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":303,"sourceHtmlUrl":304},"AGENTS.md",373,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002FAGENTS.md",{"path":306,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":307,"sourceHtmlUrl":308},"config-home-manager.ts",28214,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fconfig-home-manager.ts",{"path":310,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":311,"sourceHtmlUrl":312},"CONTEXT.md",3880,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002FCONTEXT.md",{"path":314,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":315,"sourceHtmlUrl":316},"docs\u002Fadr\u002F0001-local-time-over-utc-for-html-filenames.md",2544,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Fadr\u002F0001-local-time-over-utc-for-html-filenames.md",{"path":318,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":319,"sourceHtmlUrl":320},"docs\u002Fadr\u002F0002-copy-button-contract-v2.md",3514,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Fadr\u002F0002-copy-button-contract-v2.md",{"path":322,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":323,"sourceHtmlUrl":324},"docs\u002Fagents\u002Fdomain.md",862,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Fagents\u002Fdomain.md",{"path":326,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":327,"sourceHtmlUrl":328},"docs\u002Fagents\u002Fissue-tracker.md",1310,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Fagents\u002Fissue-tracker.md",{"path":330,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":331,"sourceHtmlUrl":332},"docs\u002Fagents\u002Ftriage-labels.md",1163,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Fagents\u002Ftriage-labels.md",{"path":334,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":335,"sourceHtmlUrl":336},"docs\u002Freviews\u002F103-D1对账-起点盲区澄清.html",16032,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F103-D1对账-起点盲区澄清.html",{"path":338,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":339,"sourceHtmlUrl":340},"docs\u002Freviews\u002F103-D1收编-执行交付.html",10103,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F103-D1收编-执行交付.html",{"path":342,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":343,"sourceHtmlUrl":344},"docs\u002Freviews\u002F103-D1收编-拍板确认.html",5780,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F103-D1收编-拍板确认.html",{"path":346,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":347,"sourceHtmlUrl":348},"docs\u002Freviews\u002F103-D1收编-收尾完成.html",4128,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F103-D1收编-收尾完成.html",{"path":350,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":351,"sourceHtmlUrl":352},"docs\u002Freviews\u002F103-D1收编-补对抗审查.html",8386,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F103-D1收编-补对抗审查.html",{"path":354,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":355,"sourceHtmlUrl":356},"docs\u002Freviews\u002F118-SM4统计总览域验收报告.html",12172,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F118-SM4统计总览域验收报告.html",{"path":358,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":359,"sourceHtmlUrl":360},"docs\u002Freviews\u002F121-SM5快递购物域验收报告.html",7553,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F121-SM5快递购物域验收报告.html",{"path":362,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":363,"sourceHtmlUrl":364},"docs\u002Freviews\u002F122-SM2空间与位置域验收报告.html",4871,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F122-SM2空间与位置域验收报告.html",{"path":366,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":367,"sourceHtmlUrl":368},"docs\u002Freviews\u002F123-场景234prompt格式248对齐.html",7821,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-场景234prompt格式248对齐.html",{"path":370,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":371,"sourceHtmlUrl":372},"docs\u002Freviews\u002F123-场景234现状汇报.html",7615,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-场景234现状汇报.html",{"path":374,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":375,"sourceHtmlUrl":376},"docs\u002Freviews\u002F123-复制prompt参数化意图分析.html",8771,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-复制prompt参数化意图分析.html",{"path":378,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":379,"sourceHtmlUrl":380},"docs\u002Freviews\u002F123-审查报告.html",9567,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-审查报告.html",{"path":382,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":383,"sourceHtmlUrl":384},"docs\u002Freviews\u002F123-新手首次使用全流程.html",9971,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-新手首次使用全流程.html",{"path":386,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":387,"sourceHtmlUrl":388},"docs\u002Freviews\u002F123-首次使用流程对抗式审查.html",12455,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-首次使用流程对抗式审查.html",{"path":390,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":391,"sourceHtmlUrl":392},"docs\u002Freviews\u002F123-首次使用环境变量设计分析.html",8053,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F123-首次使用环境变量设计分析.html",{"path":394,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":395,"sourceHtmlUrl":396},"docs\u002Freviews\u002F126-SM1物品管理域验收报告.html",7231,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F126-SM1物品管理域验收报告.html",{"path":398,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":399,"sourceHtmlUrl":400},"docs\u002Freviews\u002F243-HELP箭头-修复交付.html",7273,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F243-HELP箭头-修复交付.html",{"path":402,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":403,"sourceHtmlUrl":404},"docs\u002Freviews\u002F243-HELP箭头-执行偏离拍板.html",6731,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F243-HELP箭头-执行偏离拍板.html",{"path":406,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":407,"sourceHtmlUrl":408},"docs\u002Freviews\u002F243-HELP箭头-收尾完成.html",3098,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F243-HELP箭头-收尾完成.html",{"path":410,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":411,"sourceHtmlUrl":412},"docs\u002Freviews\u002F243-HELP箭头-起点盲区澄清.html",9379,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F243-HELP箭头-起点盲区澄清.html",{"path":414,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":415,"sourceHtmlUrl":416},"docs\u002Freviews\u002F244-HELP点击高亮-implement结论.html",6101,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F244-HELP点击高亮-implement结论.html",{"path":418,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":419,"sourceHtmlUrl":420},"docs\u002Freviews\u002F250-18场景拆分方案.html",8774,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景拆分方案.html",{"path":422,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":423,"sourceHtmlUrl":424},"docs\u002Freviews\u002F250-18场景演示\u002F01-查购买记录.html",28941,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F01-查购买记录.html",{"path":426,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":427,"sourceHtmlUrl":428},"docs\u002Freviews\u002F250-18场景演示\u002F02-查上月购买.html",27864,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F02-查上月购买.html",{"path":430,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":431,"sourceHtmlUrl":432},"docs\u002Freviews\u002F250-18场景演示\u002F03-查今年花费.html",28901,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F03-查今年花费.html",{"path":434,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":435,"sourceHtmlUrl":436},"docs\u002Freviews\u002F250-18场景演示\u002F04-查退货窗口.html",27867,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F04-查退货窗口.html",{"path":438,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":439,"sourceHtmlUrl":440},"docs\u002Freviews\u002F250-18场景演示\u002F05-登记购买记录.html",29288,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F05-登记购买记录.html",{"path":442,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":443,"sourceHtmlUrl":444},"docs\u002Freviews\u002F250-18场景演示\u002F06-查保修状态.html",22232,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F06-查保修状态.html",{"path":446,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":443,"sourceHtmlUrl":447},"docs\u002Freviews\u002F250-18场景演示\u002F07-登记保修.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F07-登记保修.html",{"path":449,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":443,"sourceHtmlUrl":450},"docs\u002Freviews\u002F250-18场景演示\u002F08-记录维修.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F08-记录维修.html",{"path":452,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":453,"sourceHtmlUrl":454},"docs\u002Freviews\u002F250-18场景演示\u002F09-设置保养周期.html",22751,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F09-设置保养周期.html",{"path":456,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":453,"sourceHtmlUrl":457},"docs\u002Freviews\u002F250-18场景演示\u002F10-执行保养.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F10-执行保养.html",{"path":459,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":460,"sourceHtmlUrl":461},"docs\u002Freviews\u002F250-18场景演示\u002F11-查证件到期.html",20644,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F11-查证件到期.html",{"path":463,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":460,"sourceHtmlUrl":464},"docs\u002Freviews\u002F250-18场景演示\u002F12-登记证件.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F12-登记证件.html",{"path":466,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":467,"sourceHtmlUrl":468},"docs\u002Freviews\u002F250-18场景演示\u002F13-证件归档.html",21226,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F13-证件归档.html",{"path":470,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":467,"sourceHtmlUrl":471},"docs\u002Freviews\u002F250-18场景演示\u002F14-更新证件.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F14-更新证件.html",{"path":473,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":474,"sourceHtmlUrl":475},"docs\u002Freviews\u002F250-18场景演示\u002F15-查账号.html",19187,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F15-查账号.html",{"path":477,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":474,"sourceHtmlUrl":478},"docs\u002Freviews\u002F250-18场景演示\u002F16-存账号.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F16-存账号.html",{"path":480,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":481,"sourceHtmlUrl":482},"docs\u002Freviews\u002F250-18场景演示\u002F17-改账号.html",19193,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-18场景演示\u002F17-改账号.html",{"path":484,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":485,"sourceHtmlUrl":486},"docs\u002Freviews\u002F250-253-交付完成.html",6979,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-253-交付完成.html",{"path":488,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":489,"sourceHtmlUrl":490},"docs\u002Freviews\u002F250-253-收尾完成.html",3689,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-253-收尾完成.html",{"path":492,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":493,"sourceHtmlUrl":494},"docs\u002Freviews\u002F250-253-起点盲区澄清.html",9957,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-253-起点盲区澄清.html",{"path":496,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":497,"sourceHtmlUrl":498},"docs\u002Freviews\u002F250-票据凭证域现状盘点.html",8478,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F250-票据凭证域现状盘点.html",{"path":500,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":501,"sourceHtmlUrl":502},"docs\u002Freviews\u002Fhandoff-居家管家-SM2-20260810.md",3736,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002Fhandoff-居家管家-SM2-20260810.md",{"path":504,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":505,"sourceHtmlUrl":506},"docs\u002Freviews\u002Fhandoff-居家管家-SM4-20260810.md",3813,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002Fhandoff-居家管家-SM4-20260810.md",{"path":508,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":509,"sourceHtmlUrl":510},"docs\u002Freviews\u002Fhandoff-居家管家-SM5-20260810.md",2941,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002Fhandoff-居家管家-SM5-20260810.md",{"path":512,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":513,"sourceHtmlUrl":514},"docs\u002Freviews\u002Ftriage-243-253-完成.html",3961,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002Ftriage-243-253-完成.html",{"path":516,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":517,"sourceHtmlUrl":518},"docs\u002Freviews\u002Ftriage-243-253-推荐.html",7578,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002Ftriage-243-253-推荐.html",{"path":520,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":521,"sourceHtmlUrl":522},"docs\u002Freviews\u002F交付完整性审计-20260811.html",7583,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fdocs\u002Freviews\u002F交付完整性审计-20260811.html",{"path":524,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":525,"sourceHtmlUrl":526},"features\u002Fadd.md",16371,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Fadd.md",{"path":528,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":529,"sourceHtmlUrl":530},"features\u002Ffashion.md",1062,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Ffashion.md",{"path":532,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":533,"sourceHtmlUrl":534},"features\u002Finventory.md",908,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Finventory.md",{"path":536,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":537,"sourceHtmlUrl":538},"features\u002Fsearch.md",2547,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Fsearch.md",{"path":540,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":541,"sourceHtmlUrl":542},"features\u002Fstats.md",3803,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Fstats.md",{"path":544,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":545,"sourceHtmlUrl":546},"features\u002Ftags.md",593,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Ftags.md",{"path":548,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":549,"sourceHtmlUrl":550},"features\u002Ftravel.md",751,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Ftravel.md",{"path":552,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":553,"sourceHtmlUrl":554},"features\u002Fupdate.md",6010,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002Fupdate.md",{"path":556,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":557,"sourceHtmlUrl":558},"features\u002F位置.md",3068,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002F位置.md",{"path":560,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":561,"sourceHtmlUrl":562},"features\u002F穿搭.md",2968,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002F穿搭.md",{"path":564,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":565,"sourceHtmlUrl":566},"features\u002F联动.md",4397,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ffeatures\u002F联动.md",{"path":568,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":569,"sourceHtmlUrl":570},"pytest.ini",76,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fpytest.ini",{"path":572,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":573,"sourceHtmlUrl":574},"references\u002Fcategories.md",13664,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Freferences\u002Fcategories.md",{"path":576,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":577,"sourceHtmlUrl":578},"references\u002Fcommands.md",9668,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Freferences\u002Fcommands.md",{"path":580,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":581,"sourceHtmlUrl":582},"references\u002Fdatabase.md",2237,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Freferences\u002Fdatabase.md",{"path":584,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":585,"sourceHtmlUrl":586},"references\u002Fscenarios.yaml",44984,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Freferences\u002Fscenarios.yaml",{"path":588,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":589,"sourceHtmlUrl":590},"references\u002Fseed_categories.yaml",4639,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Freferences\u002Fseed_categories.yaml",{"path":592,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":593,"sourceHtmlUrl":594},"references\u002Fstatuses.md",1655,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Freferences\u002Fstatuses.md",{"path":596,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":597,"sourceHtmlUrl":598},"scenes\u002FSM1.yaml",7617,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscenes\u002FSM1.yaml",{"path":600,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":601,"sourceHtmlUrl":602},"scenes\u002FSM2.yaml",2339,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscenes\u002FSM2.yaml",{"path":604,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":605,"sourceHtmlUrl":606},"scenes\u002FSM3.yaml",2327,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscenes\u002FSM3.yaml",{"path":608,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":609,"sourceHtmlUrl":610},"scenes\u002FSM5.yaml",3180,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscenes\u002FSM5.yaml",{"path":612,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":613,"sourceHtmlUrl":614},"scenes\u002FSM6.yaml",11045,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscenes\u002FSM6.yaml",{"path":616,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":617,"sourceHtmlUrl":618},"scenes\u002FSM8.yaml",3178,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscenes\u002FSM8.yaml",{"path":620,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":621,"sourceHtmlUrl":622},"scripts\u002F_add_sam_items.py",2416,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_add_sam_items.py",{"path":624,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":625,"sourceHtmlUrl":626},"scripts\u002F_check_1026_1027.py",1173,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_check_1026_1027.py",{"path":628,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":629,"sourceHtmlUrl":630},"scripts\u002F_check_kitchen_freezer.py",926,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_check_kitchen_freezer.py",{"path":632,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":633,"sourceHtmlUrl":634},"scripts\u002F_final_self_audit.py",2671,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_final_self_audit.py",{"path":636,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":637,"sourceHtmlUrl":638},"scripts\u002F_finalize_water_jia.py",5388,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_finalize_water_jia.py",{"path":640,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":641,"sourceHtmlUrl":642},"scripts\u002F_fix_remarks_v2.py",10880,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_fix_remarks_v2.py",{"path":644,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":645,"sourceHtmlUrl":646},"scripts\u002F_process_water_jia_and_fix_remarks.py",4855,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_process_water_jia_and_fix_remarks.py",{"path":648,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":649,"sourceHtmlUrl":650},"scripts\u002F_update_egg_to_fridge.py",830,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_update_egg_to_fridge.py",{"path":652,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":653,"sourceHtmlUrl":654},"scripts\u002F_update_jimmy_dean_back.py",1334,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_update_jimmy_dean_back.py",{"path":656,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":657,"sourceHtmlUrl":658},"scripts\u002F_update_jimmy_dean.py",717,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F_update_jimmy_dean.py",{"path":660,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":661,"sourceHtmlUrl":662},"scripts\u002Faccounts.py",11141,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Faccounts.py",{"path":664,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":665,"sourceHtmlUrl":666},"scripts\u002Fbuild_manual.py",1581,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fbuild_manual.py",{"path":668,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":669,"sourceHtmlUrl":670},"scripts\u002Fcategory_manager.py",15607,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fcategory_manager.py",{"path":672,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":673,"sourceHtmlUrl":674},"scripts\u002Fcleanup_test_items.py",1958,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fcleanup_test_items.py",{"path":676,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":677,"sourceHtmlUrl":678},"scripts\u002Fhelp_center.py",4853,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhelp_center.py",{"path":680,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":681,"sourceHtmlUrl":682},"scripts\u002Fhome_manager.py",337,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager.py",{"path":684,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":685,"sourceHtmlUrl":686},"scripts\u002Fhome_manager\u002F__init__.py",315,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002F__init__.py",{"path":688,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":689,"sourceHtmlUrl":690},"scripts\u002Fhome_manager\u002Fdb.py",17217,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Fdb.py",{"path":692,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":693,"sourceHtmlUrl":694},"scripts\u002Fhome_manager\u002Fhome_manager.py",39332,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Fhome_manager.py",{"path":696,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":697,"sourceHtmlUrl":698},"scripts\u002Fhome_manager\u002Finventory_ops.py",28582,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Finventory_ops.py",{"path":700,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":701,"sourceHtmlUrl":702},"scripts\u002Fhome_manager\u002Fitem_ops.py",38343,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Fitem_ops.py",{"path":704,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":705,"sourceHtmlUrl":706},"scripts\u002Fhome_manager\u002Flocation_ops.py",9657,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Flocation_ops.py",{"path":708,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":709,"sourceHtmlUrl":710},"scripts\u002Fhome_manager\u002Fmodels.py",1049,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Fmodels.py",{"path":712,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":713,"sourceHtmlUrl":714},"scripts\u002Fhome_manager\u002Foutfit_ops.py",23470,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Foutfit_ops.py",{"path":716,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":717,"sourceHtmlUrl":718},"scripts\u002Fhome_manager\u002Ftag_ops.py",2722,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Ftag_ops.py",{"path":720,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":721,"sourceHtmlUrl":722},"scripts\u002Fhome_manager\u002Fvalidators.py",2289,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fhome_manager\u002Fvalidators.py",{"path":724,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":725,"sourceHtmlUrl":726},"scripts\u002Finstall_hooks.sh",1401,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Finstall_hooks.sh",{"path":728,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":729,"sourceHtmlUrl":730},"scripts\u002Frefactor_prompts.py",4618,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frefactor_prompts.py",{"path":732,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":733,"sourceHtmlUrl":734},"scripts\u002Frender_位置.py",4452,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_位置.py",{"path":736,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":737,"sourceHtmlUrl":738},"scripts\u002Frender_开始使用.py",7657,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_开始使用.py",{"path":740,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":741,"sourceHtmlUrl":742},"scripts\u002Frender_快递购物.py",4109,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_快递购物.py",{"path":744,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":745,"sourceHtmlUrl":746},"scripts\u002Frender_物品.py",4305,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_物品.py",{"path":748,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":749,"sourceHtmlUrl":750},"scripts\u002Frender_票据凭证.py",1422,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_票据凭证.py",{"path":752,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":753,"sourceHtmlUrl":754},"scripts\u002Frender_穿搭.py",4048,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_穿搭.py",{"path":756,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":757,"sourceHtmlUrl":758},"scripts\u002Frender_联动.py",4153,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender_联动.py",{"path":760,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":761,"sourceHtmlUrl":762},"scripts\u002Frender\u002F__init__.py",9645,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender\u002F__init__.py",{"path":764,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":765,"sourceHtmlUrl":766},"scripts\u002Frender\u002F_shared.py",14986,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frender\u002F_shared.py",{"path":768,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":769,"sourceHtmlUrl":770},"scripts\u002Frouting.py",3488,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Frouting.py",{"path":772,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":773,"sourceHtmlUrl":774},"scripts\u002Fstats\u002F__init__.py",4505,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fstats\u002F__init__.py",{"path":776,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":777,"sourceHtmlUrl":778},"scripts\u002Fstats\u002Fexpiring.py",4876,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fstats\u002Fexpiring.py",{"path":780,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":781,"sourceHtmlUrl":782},"scripts\u002Fstats\u002Fidle.py",6791,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fstats\u002Fidle.py",{"path":784,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":785,"sourceHtmlUrl":786},"scripts\u002Fstats\u002Finventory_stat.py",6094,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fstats\u002Finventory_stat.py",{"path":788,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":789,"sourceHtmlUrl":790},"scripts\u002Fstats\u002Foverview.py",8878,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002Fstats\u002Foverview.py",{"path":792,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":793,"sourceHtmlUrl":794},"scripts\u002F位置\u002F__init__.py",747,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002F__init__.py",{"path":796,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":797,"sourceHtmlUrl":798},"scripts\u002F位置\u002Fcli.py",15103,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002Fcli.py",{"path":800,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":801,"sourceHtmlUrl":802},"scripts\u002F位置\u002Fops.py",29318,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002Fops.py",{"path":804,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":805,"sourceHtmlUrl":806},"scripts\u002F位置\u002Fscenes.py",1434,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002Fscenes.py",{"path":808,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":259,"sourceHtmlUrl":809},"scripts\u002F位置\u002Fschema.py","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002Fschema.py",{"path":811,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":812,"sourceHtmlUrl":813},"scripts\u002F位置\u002Fseed.py",2074,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002Fseed.py",{"path":815,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":816,"sourceHtmlUrl":817},"scripts\u002F位置\u002Ftree.py",7204,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F位置\u002Ftree.py",{"path":819,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":820,"sourceHtmlUrl":821},"scripts\u002F场景合并.py",3250,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F场景合并.py",{"path":823,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":824,"sourceHtmlUrl":825},"scripts\u002F家庭协作\u002F__init__.py",71,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F家庭协作\u002F__init__.py",{"path":827,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":828,"sourceHtmlUrl":829},"scripts\u002F家庭协作\u002Ffamily_ops.py",15892,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F家庭协作\u002Ffamily_ops.py",{"path":831,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":832,"sourceHtmlUrl":833},"scripts\u002F开始使用\u002F__init__.py",403,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F开始使用\u002F__init__.py",{"path":835,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":836,"sourceHtmlUrl":837},"scripts\u002F开始使用\u002Fcli.py",4955,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F开始使用\u002Fcli.py",{"path":839,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":840,"sourceHtmlUrl":841},"scripts\u002F开始使用\u002Fops.py",31351,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F开始使用\u002Fops.py",{"path":843,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":844,"sourceHtmlUrl":845},"scripts\u002F快递购物\u002F__init__.py",270,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F快递购物\u002F__init__.py",{"path":847,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":848,"sourceHtmlUrl":849},"scripts\u002F快递购物\u002Fcli.py",13093,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F快递购物\u002Fcli.py",{"path":851,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":852,"sourceHtmlUrl":853},"scripts\u002F快递购物\u002Fops.py",19225,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F快递购物\u002Fops.py",{"path":855,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":856,"sourceHtmlUrl":857},"scripts\u002F快递购物\u002Fschema.py",3213,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F快递购物\u002Fschema.py",{"path":859,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":860,"sourceHtmlUrl":861},"scripts\u002F物品\u002F__init__.py",453,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F物品\u002F__init__.py",{"path":863,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":864,"sourceHtmlUrl":865},"scripts\u002F物品\u002Fcli.py",37325,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F物品\u002Fcli.py",{"path":867,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":868,"sourceHtmlUrl":869},"scripts\u002F物品\u002Fevents.py",20242,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F物品\u002Fevents.py",{"path":871,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":872,"sourceHtmlUrl":873},"scripts\u002F物品\u002Fops.py",68665,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F物品\u002Fops.py",{"path":875,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":876,"sourceHtmlUrl":877},"scripts\u002F物品\u002Fvalidators.py",5134,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F物品\u002Fvalidators.py",{"path":879,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":880,"sourceHtmlUrl":881},"scripts\u002F票据凭证\u002F__init__.py",217,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F票据凭证\u002F__init__.py",{"path":883,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":884,"sourceHtmlUrl":885},"scripts\u002F票据凭证\u002Faccount_ops.py",3468,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F票据凭证\u002Faccount_ops.py",{"path":887,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":888,"sourceHtmlUrl":889},"scripts\u002F票据凭证\u002Fcli.py",22434,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F票据凭证\u002Fcli.py",{"path":891,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":892,"sourceHtmlUrl":893},"scripts\u002F票据凭证\u002Fdb.py",4944,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F票据凭证\u002Fdb.py",{"path":895,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":896,"sourceHtmlUrl":897},"scripts\u002F票据凭证\u002Fops.py",12071,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F票据凭证\u002Fops.py",{"path":899,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":900,"sourceHtmlUrl":901},"scripts\u002F票据凭证\u002Fpayloads.py",10020,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F票据凭证\u002Fpayloads.py",{"path":903,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":904,"sourceHtmlUrl":905},"scripts\u002F穿搭\u002Fcli.py",6180,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F穿搭\u002Fcli.py",{"path":907,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":908,"sourceHtmlUrl":909},"scripts\u002F联动\u002F__init__.py",460,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F联动\u002F__init__.py",{"path":911,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":912,"sourceHtmlUrl":913},"scripts\u002F联动\u002Fcli.py",4806,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F联动\u002Fcli.py",{"path":915,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":916,"sourceHtmlUrl":917},"scripts\u002F联动\u002Fops.py",14309,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Fscripts\u002F联动\u002Fops.py",{"path":919,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":920,"sourceHtmlUrl":921},"templates\u002Fadd_preview.html",7772,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fadd_preview.html",{"path":923,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":924,"sourceHtmlUrl":925},"templates\u002Fdelivery_check.html",8180,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fdelivery_check.html",{"path":927,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":928,"sourceHtmlUrl":929},"templates\u002Fexpiring_alert.html",8471,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fexpiring_alert.html",{"path":931,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":932,"sourceHtmlUrl":933},"templates\u002Ffamily_borrow.html",11152,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Ffamily_borrow.html",{"path":935,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":936,"sourceHtmlUrl":937},"templates\u002Ffamily_members.html",9552,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Ffamily_members.html",{"path":939,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":940,"sourceHtmlUrl":941},"templates\u002Fhelp_center.html",25602,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fhelp_center.html",{"path":943,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":944,"sourceHtmlUrl":945},"templates\u002Finventory_check.html",8815,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Finventory_check.html",{"path":947,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":948,"sourceHtmlUrl":949},"templates\u002Fitem_detail.html",5328,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fitem_detail.html",{"path":951,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":952,"sourceHtmlUrl":953},"templates\u002Flist_overview.html",6491,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Flist_overview.html",{"path":955,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":956,"sourceHtmlUrl":957},"templates\u002Foutfit_picker.html",8232,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Foutfit_picker.html",{"path":959,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":960,"sourceHtmlUrl":961},"templates\u002Fsearch_results.html",4575,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fsearch_results.html",{"path":963,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":964,"sourceHtmlUrl":965},"templates\u002Fstats\u002Fexpiring.html",13651,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fstats\u002Fexpiring.html",{"path":967,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":968,"sourceHtmlUrl":969},"templates\u002Fstats\u002Fidle.html",13309,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fstats\u002Fidle.html",{"path":971,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":972,"sourceHtmlUrl":973},"templates\u002Fstats\u002Finventory_stat.html",10213,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fstats\u002Finventory_stat.html",{"path":975,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":976,"sourceHtmlUrl":977},"templates\u002Fstats\u002Foverview.html",14837,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Fstats\u002Foverview.html",{"path":979,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":980,"sourceHtmlUrl":981},"templates\u002Ftravel_trip.html",9181,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002Ftravel_trip.html",{"path":983,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":984,"sourceHtmlUrl":985},"templates\u002F位置\u002Fconfirm.html",11283,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Fconfirm.html",{"path":987,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":988,"sourceHtmlUrl":989},"templates\u002F位置\u002Ferror.html",9053,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Ferror.html",{"path":991,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":992,"sourceHtmlUrl":993},"templates\u002F位置\u002Ffixed_spot.html",13823,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Ffixed_spot.html",{"path":995,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":996,"sourceHtmlUrl":997},"templates\u002F位置\u002Flocation_manage.html",17094,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Flocation_manage.html",{"path":999,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1000,"sourceHtmlUrl":1001},"templates\u002F位置\u002Freceipt.html",9849,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Freceipt.html",{"path":1003,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1004,"sourceHtmlUrl":1005},"templates\u002F位置\u002Fspace_view.html",15042,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Fspace_view.html",{"path":1007,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1008,"sourceHtmlUrl":1009},"templates\u002F位置\u002Fsuggest_storage.html",14014,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F位置\u002Fsuggest_storage.html",{"path":1011,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1012,"sourceHtmlUrl":1013},"templates\u002F开始使用\u002Fbackup_receipt.html",12782,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F开始使用\u002Fbackup_receipt.html",{"path":1015,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1016,"sourceHtmlUrl":1017},"templates\u002F开始使用\u002Ferror_receipt.html",7979,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F开始使用\u002Ferror_receipt.html",{"path":1019,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1020,"sourceHtmlUrl":1021},"templates\u002F开始使用\u002Ffirst_use_wizard.html",16875,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F开始使用\u002Ffirst_use_wizard.html",{"path":1023,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1024,"sourceHtmlUrl":1025},"templates\u002F开始使用\u002Fhealth_report.html",11383,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F开始使用\u002Fhealth_report.html",{"path":1027,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1028,"sourceHtmlUrl":1029},"templates\u002F开始使用\u002Fimport_restore.html",13509,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F开始使用\u002Fimport_restore.html",{"path":1031,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1032,"sourceHtmlUrl":1033},"templates\u002F快递购物\u002Ferror.html",3831,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F快递购物\u002Ferror.html",{"path":1035,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1036,"sourceHtmlUrl":1037},"templates\u002F快递购物\u002Fexpress.html",7154,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F快递购物\u002Fexpress.html",{"path":1039,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1040,"sourceHtmlUrl":1041},"templates\u002F快递购物\u002Flist.html",7819,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F快递购物\u002Flist.html",{"path":1043,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1044,"sourceHtmlUrl":1045},"templates\u002F快递购物\u002Fmissing.html",7257,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F快递购物\u002Fmissing.html",{"path":1047,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":203,"sourceHtmlUrl":1048},"templates\u002F快递购物\u002Fstock.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F快递购物\u002Fstock.html",{"path":1050,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1051,"sourceHtmlUrl":1052},"templates\u002F物品\u002Fadd_form.html",12750,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fadd_form.html",{"path":1054,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1055,"sourceHtmlUrl":1056},"templates\u002F物品\u002Fbrowse.html",5758,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fbrowse.html",{"path":1058,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1059,"sourceHtmlUrl":1060},"templates\u002F物品\u002Fcategory_manage.html",8879,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fcategory_manage.html",{"path":1062,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":912,"sourceHtmlUrl":1063},"templates\u002F物品\u002Fconfirm.html","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fconfirm.html",{"path":1065,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1066,"sourceHtmlUrl":1067},"templates\u002F物品\u002Fdetail.html",8270,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fdetail.html",{"path":1069,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1070,"sourceHtmlUrl":1071},"templates\u002F物品\u002Fduplicates.html",5848,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fduplicates.html",{"path":1073,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1074,"sourceHtmlUrl":1075},"templates\u002F物品\u002Ferror.html",4148,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Ferror.html",{"path":1077,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1078,"sourceHtmlUrl":1079},"templates\u002F物品\u002Fhistory.html",5797,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fhistory.html",{"path":1081,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1082,"sourceHtmlUrl":1083},"templates\u002F物品\u002Finventory_diff.html",8267,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Finventory_diff.html",{"path":1085,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1086,"sourceHtmlUrl":1087},"templates\u002F物品\u002Finventory_records.html",5227,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Finventory_records.html",{"path":1089,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1090,"sourceHtmlUrl":1091},"templates\u002F物品\u002Finventory_round.html",9947,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Finventory_round.html",{"path":1093,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1094,"sourceHtmlUrl":1095},"templates\u002F物品\u002Flocate.html",5000,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Flocate.html",{"path":1097,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1098,"sourceHtmlUrl":1099},"templates\u002F物品\u002Fmove_checklist.html",8798,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fmove_checklist.html",{"path":1101,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1102,"sourceHtmlUrl":1103},"templates\u002F物品\u002Fphoto_wall.html",5666,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fphoto_wall.html",{"path":1105,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1106,"sourceHtmlUrl":1107},"templates\u002F物品\u002Fphotos.html",6459,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fphotos.html",{"path":1109,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1110,"sourceHtmlUrl":1111},"templates\u002F物品\u002Freceipt.html",7370,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Freceipt.html",{"path":1113,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1114,"sourceHtmlUrl":1115},"templates\u002F物品\u002Frelations.html",4214,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Frelations.html",{"path":1117,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1118,"sourceHtmlUrl":1119},"templates\u002F物品\u002Fsearch_list.html",7414,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fsearch_list.html",{"path":1121,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1122,"sourceHtmlUrl":1123},"templates\u002F物品\u002Ftag_manage.html",5765,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Ftag_manage.html",{"path":1125,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1126,"sourceHtmlUrl":1127},"templates\u002F物品\u002Fundo_select.html",4544,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F物品\u002Fundo_select.html",{"path":1129,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1130,"sourceHtmlUrl":1131},"templates\u002F票据凭证\u002Faccounts.html",8888,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F票据凭证\u002Faccounts.html",{"path":1133,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1134,"sourceHtmlUrl":1135},"templates\u002F票据凭证\u002Fcertificates.html",10161,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F票据凭证\u002Fcertificates.html",{"path":1137,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1138,"sourceHtmlUrl":1139},"templates\u002F票据凭证\u002Fpurchase_records.html",12410,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F票据凭证\u002Fpurchase_records.html",{"path":1141,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1142,"sourceHtmlUrl":1143},"templates\u002F票据凭证\u002Fwarranty.html",11557,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F票据凭证\u002Fwarranty.html",{"path":1145,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1146,"sourceHtmlUrl":1147},"templates\u002F穿搭\u002Ferror.html",4042,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F穿搭\u002Ferror.html",{"path":1149,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1150,"sourceHtmlUrl":1151},"templates\u002F穿搭\u002Foutfit_picker.html",19077,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F穿搭\u002Foutfit_picker.html",{"path":1153,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1154,"sourceHtmlUrl":1155},"templates\u002F穿搭\u002Ftravel_trip.html",8384,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F穿搭\u002Ftravel_trip.html",{"path":1157,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1158,"sourceHtmlUrl":1159},"templates\u002F穿搭\u002Ftrip_outfit_plan.html",8695,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F穿搭\u002Ftrip_outfit_plan.html",{"path":1161,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1162,"sourceHtmlUrl":1163},"templates\u002F穿搭\u002Fwardrobe_analyze.html",8327,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F穿搭\u002Fwardrobe_analyze.html",{"path":1165,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1166,"sourceHtmlUrl":1167},"templates\u002F穿搭\u002Fwardrobe_season.html",7510,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F穿搭\u002Fwardrobe_season.html",{"path":1169,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1170,"sourceHtmlUrl":1171},"templates\u002F联动\u002Ferror.html",3644,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F联动\u002Ferror.html",{"path":1173,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1174,"sourceHtmlUrl":1175},"templates\u002F联动\u002Flink_food.html",6937,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F联动\u002Flink_food.html",{"path":1177,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1178,"sourceHtmlUrl":1179},"templates\u002F联动\u002Flink_overview.html",6398,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F联动\u002Flink_overview.html",{"path":1181,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1182,"sourceHtmlUrl":1183},"templates\u002F联动\u002Flink_price.html",7192,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftemplates\u002F联动\u002Flink_price.html",{"path":1185,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1186,"sourceHtmlUrl":1187},"tests\u002Fconftest.py",2977,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Fconftest.py",{"path":1189,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1190,"sourceHtmlUrl":1191},"tests\u002Ftest_cli_entry.py",2946,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_cli_entry.py",{"path":1193,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1194,"sourceHtmlUrl":1195},"tests\u002Ftest_cli_write.py",3483,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_cli_write.py",{"path":1197,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1198,"sourceHtmlUrl":1199},"tests\u002Ftest_db_schema.py",13201,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_db_schema.py",{"path":1201,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1202,"sourceHtmlUrl":1203},"tests\u002Ftest_help_center.py",15652,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_help_center.py",{"path":1205,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1206,"sourceHtmlUrl":1207},"tests\u002Ftest_manual_sync.py",2432,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_manual_sync.py",{"path":1209,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1210,"sourceHtmlUrl":1211},"tests\u002Ftest_outfit.py",13429,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_outfit.py",{"path":1213,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1214,"sourceHtmlUrl":1215},"tests\u002Ftest_payloads.py",3168,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_payloads.py",{"path":1217,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1218,"sourceHtmlUrl":1219},"tests\u002Ftest_render.py",14781,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_render.py",{"path":1221,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1222,"sourceHtmlUrl":1223},"tests\u002Ftest_routing.py",3923,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_routing.py",{"path":1225,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1226,"sourceHtmlUrl":1227},"tests\u002Ftest_sm2.py",21105,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_sm2.py",{"path":1229,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1230,"sourceHtmlUrl":1231},"tests\u002Ftest_sm4.py",15715,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_sm4.py",{"path":1233,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1234,"sourceHtmlUrl":1235},"tests\u002Ftest_sm7.py",14008,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_sm7.py",{"path":1237,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1238,"sourceHtmlUrl":1239},"tests\u002Ftest_validators.py",2517,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_validators.py",{"path":1241,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1242,"sourceHtmlUrl":1243},"tests\u002Ftest_variants.py",5176,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_variants.py",{"path":1245,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1246,"sourceHtmlUrl":1247},"tests\u002Ftest_开始使用.py",25190,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_开始使用.py",{"path":1249,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1250,"sourceHtmlUrl":1251},"tests\u002Ftest_快递购物.py",17060,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_快递购物.py",{"path":1253,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1254,"sourceHtmlUrl":1255},"tests\u002Ftest_物品.py",25612,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_物品.py",{"path":1257,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1258,"sourceHtmlUrl":1259},"tests\u002Ftest_票据凭证.py",15533,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_票据凭证.py",{"path":1261,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1262,"sourceHtmlUrl":1263},"tests\u002Ftest_联动.py",10553,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftests\u002Ftest_联动.py",{"path":1265,"resourceType":165,"resourceTypeDesc":166,"sizeBytes":1266,"sourceHtmlUrl":1267},"tmp_read_acct.py",381,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002Ftmp_read_acct.py",{"path":1269,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":1270,"sourceHtmlUrl":1271},"居家管家.html",84108,"https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F居家管家\u002F居家管家.html",[1273,1289,1298,1307,1316,1322],{"skillNo":1274,"name":1275,"nameZh":6,"description":1276,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":1277,"categories":1278,"keywords":1279,"publishedAt":41},"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",[],[1275,40,1280,1281,29,1282,1283,34,1284,1285,25,1286,1287,1288],"invoke","templates","预算","账单","收入","scripts","支出","help","references",{"skillNo":1290,"name":1291,"nameZh":6,"description":1292,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":1293,"categories":1294,"keywords":1295,"publishedAt":41},"01M71JPS100K4E2JN8R3B0F9NR","贴心助理","真实助手 - 主动分析用户状态，关心用户，提供帮助与提醒。不偷懒地联动所有技能，真正像个朋友一样陪伴。","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F贴心助理\u002FSKILL.md",[],[1291,1296,1297],"陪伴","朋友",{"skillNo":1299,"name":1300,"nameZh":6,"description":1301,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":1302,"categories":1303,"keywords":1304,"publishedAt":41},"01M71JPPN0WZ1ARA081J0JDNPC","美团","安装美团旅游技能(meituan-travel)向导 - 检查 mtskills 商店并安装 meituan-travel","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F美团\u002FSKILL.md",[],[1300,1305,1306],"meituan","travel",{"skillNo":1308,"name":1309,"nameZh":6,"description":1310,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":1311,"categories":1312,"keywords":1313,"publishedAt":41},"01M71JPN921TSX62DXEFY1B8FJ","网易云音乐","安装网易云音乐 CLI 工具(@music163\u002Fncm-cli) - 通过 npm 全局安装","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F网易云音乐\u002FSKILL.md",[],[1309,1314,24,1315],"工具","npm",{"skillNo":1317,"name":1318,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":1319,"categories":1320,"keywords":1321,"publishedAt":41},"01M71JPF82PYTK0NYMJF8Y9E48","私家大厨","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F私家大厨\u002FSKILL.md",[],[1318],{"skillNo":1323,"name":1324,"nameZh":6,"description":1325,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":1326,"categories":1327,"keywords":1328,"publishedAt":41},"01M71JPCK6Z5NT3G258NFKEJGG","目录树","目录树技能 - 递归扫描给定目录，输出所有目录和文件的树状结构清单","https:\u002F\u002Fgithub.com\u002FFeatherHunter\u002FSKILLS\u002Fblob\u002Fmain\u002F目录树\u002FSKILL.md",[],[1329,1324,1330,1331],"目录","文件","文件导航"]