Skip to content

功能:恢复变量生命周期工具并补充能力发现指南#11

Merged
allocnode merged 4 commits into
allocnode:mainfrom
doomsday616:feat/variable-lifecycle-tools
Jul 22, 2026
Merged

功能:恢复变量生命周期工具并补充能力发现指南#11
allocnode merged 4 commits into
allocnode:mainfrom
doomsday616:feat/variable-lifecycle-tools

Conversation

@doomsday616

@doomsday616 doomsday616 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

概要

恢复米家极客版自动化变量在 MCP 模式下的完整生命周期管理能力,并把网关能力发现与变量排障方法固化到 mijia-automation skill,避免把“当前 MCP 没有入口”误判成“网关不支持”。

改动

  • 新增以下已验证网关 API 的核心封装:
    • createVar
    • deleteVar
    • getVarValue
    • getVarConfig
  • 注册 4 个 MCP 工具:
    • mijia_create_variable
    • mijia_delete_variable
    • mijia_get_variable_value
    • mijia_get_variable_config
  • 根据真实网关限制校验变量 ID:只能包含字母和数字。
  • 创建变量前校验 type 与初始 value 类型一致。
  • 新增核心 API 参数映射、错误处理和 MCP 输入 Schema 测试。
  • 更新 mijia-automation skill:
    • 区分网关 API、专用 MCP 工具和只读 mijia_call_api 三层能力。
    • 明确 mijia_set_variable 和规则变量节点都不会创建不存在的变量。
    • 工具缺失时先检查源码、构建产物、MCP 进程和历史记录,不能直接断言网关不支持。
    • 新增通用网关能力发现流程:从米家前端参考代码提取真实 API,再与 Core/MCP 封装做差集,最后通过专用工具执行最小可逆实验。

能力发现依据

变量生命周期能力最初按以下路径确认:

  1. 在仓库附带的米家前端参考 JS 中找到 createVardeleteVargetVarConfiggetVarValuesetVarConfigsetVarValue
  2. 对比项目代码,发现 MCP 当时只封装了变量列表和 setVarValue,因此确认属于封装缺口,而不是网关缺少能力。
  3. 实现 Core 包装和专用 MCP 工具,编译并重启 MCP。
  4. 使用带下划线的临时 ID 创建失败,返回 Invalid id format;改成纯字母数字后创建和删除成功,由此确认真实 ID 约束。
  5. 再执行完整生命周期测试,并把约束写入 Schema、测试和 skill。

验证

本地检查全部通过:

  • npx tsx src/core/tools/variable.test.ts
  • npx tsx src/mcp/tools/variable.test.ts
  • npx tsx src/core/tools/device.test.ts
  • npx tsx src/core/tools/capabilityValidation.test.ts
  • npx tsc --noEmit
  • npm run build:mcp
  • python ~/.agents/skills/skill-creator/scripts/quick_validate.py .agents/skills/mijia-automation
  • git diff --check

真实米家网关生命周期测试:

  1. 创建一个初始值为 7 的临时数字变量。
  2. 成功读取其配置和当前值。
  3. 将值更新为 9,回读确认结果为 9
  4. 删除变量,再次读取时确认返回 Variable does not exist

极客版页面实测补充

通过 Playwright 在真实极客版页面逐张配置卡片并回读网关 JSON,又发现并修复两处格式偏差:

  • createVar 的显示名称必须传入 userData: { name }。此前传顶层 name 虽能创建变量,但变量配置缺少显示名称,极客版 UI 的变量选择器不会显示它。
  • deviceGetSetVar 官方页面只生成 outputs.output,没有 output2。此前 skill 和校验器错误套用了 deviceGet 的双输出结构,会拒绝页面生成的合法规则。

已增加对应回归测试,并同步更新 skill 与完整参考文档。

代码审查修复

完整审查 PR 全部提交后继续修复:

  • 兼容 getVarList 返回的对象结构,不再把真实变量列表误转为空数组,并补充变量 idscope
  • getVarValue{ value } 网关响应解包为标量,避免输出 value.value
  • 拒绝纯空白显示名称,Core 层同时回退到变量 ID,避免创建 UI 不可见变量。
  • 将新增测试迁入标准 tests/ 目录,确保 npm run test:unit 自动执行。
  • 同步更新已有设备事件参数测试,使标准单测恢复全绿。

@doomsday616 doomsday616 changed the title feat: restore variable lifecycle tools 功能:恢复自动化变量生命周期管理工具 Jul 21, 2026
@doomsday616 doomsday616 changed the title 功能:恢复自动化变量生命周期管理工具 功能:恢复变量生命周期工具并补充能力发现指南 Jul 21, 2026
@allocnode
allocnode merged commit b71f661 into allocnode:main Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants