mirror of
https://gitcode.com/JianFeeeee/homeagent-sdk.git
synced 2026-09-20 17:08:01 +00:00
插件的真实形态是「独立子进程 + 内核侧握手」,所以插件问题几乎都在 IDE 之外发生:
编不出来(多半是没声明用哪版 SDK,工具链拿了存储里的 current)、编出来起不来
(产物与内核协议绑定)、起来了行为不对(真因只在内核日志里)。这个扩展把这三件事
拉进 IDE。
- `tools/vscode-hmapdev`:TypeScript 扩展(零运行时依赖,仅 devDeps: typescript + @types/vscode)
- **plg.json 诊断**:必需字段;`sdk` 必须是完整版本号(区间写法 `1.2` 报错并说明
「patch 位恒为 .0」,与工具链 ResolveSDKForProject 同一套规矩);声明的 SDK 未安装时
直接给 `hmapdev sdk install vX.Y.Z`;
- **状态栏**:`插件 · SDK <声明> · hmapdev <版本>`,工具链缺失/工程有错时变色,tooltip 列已装 SDK;
- **命令**:build / build --target all / clean / debug(解释执行)/ 工具链版本 / SDK 列表-安装-切换 /
跟随内核日志 / 停止跟随 / 刷新;
- **任务**:同一批动作注册为 `hmapdev` 任务 + Go 问题匹配器(编译错误进 Problems);
- **内核日志跟随**:读 `<dataDir>/log` 最新 `homed_*.log`,按插件名过滤持续输出;
- schema 校验 + plg.json 骨架片段。
- 诚实边界(写进 README):**不是源码级调试器**——没有断点/单步,没有 DAP 会话;
做的是构建、运行、看内核日志、清单校验。
验证:`tsc` 零错误;`node --test` 13/13(版本规则、诊断分级、SDK 列表解析、状态栏文本、
以及**反向核对抓到的真缺陷**:`hmapdev 未找到` 这类输出曾被解析成版本号 → 已要求版本
token 以数字开头,否则「工具链不在」会被显示成「工具链 <垃圾词>」并让 SDK 诊断失真);
与真实工具链输出的集成核对 PASS(`hmapdev version` / `sdk list` 的真输出解析正确)。
README 同时补两节:plg.json 的 `sdk` 字段语义(含「为什么必须有」与「为什么拒区间写法」)、
本扩展的用法与边界。
42 lines
1.9 KiB
JSON
42 lines
1.9 KiB
JSON
{
|
||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||
"title": "HomeAgent 插件清单(plg.json)",
|
||
"type": "object",
|
||
"required": ["name", "version", "entry"],
|
||
"properties": {
|
||
"name": {
|
||
"type": "string",
|
||
"description": "插件名(与目录名一致最省事)"
|
||
},
|
||
"name_zh": { "type": "string", "description": "中文显示名" },
|
||
"name_en": { "type": "string", "description": "英文显示名" },
|
||
"version": { "type": "string", "description": "插件自身版本号(如 0.1.0),与内核/SDK 版本无关" },
|
||
"description": { "type": "string" },
|
||
"author": { "type": "string" },
|
||
"entry": {
|
||
"type": "string",
|
||
"description": "入口产物文件名(子进程模式通常是 plugin.bin;Lua 是 main.lua)"
|
||
},
|
||
"sdk": {
|
||
"type": "string",
|
||
"pattern": "^v?\\d+\\.\\d+\\.\\d+$",
|
||
"description": "本插件针对的 SDK 版本,必须是完整版本号(如 1.2.0)。SDK 版本跟随内核中版本、patch 位恒为 .0,一条内核线只有一个 SDK 版本;工具链按此在本地 SDK 存储里选择版本。"
|
||
},
|
||
"tags": { "type": "array", "items": { "type": "string" } },
|
||
"targets": {
|
||
"type": "string",
|
||
"description": "目标平台,逗号分隔,如 linux/amd64,darwin/arm64(windows 目标暂不支持插件产物)"
|
||
},
|
||
"outdir": { "type": "string", "description": "产物目录(默认 dist)" },
|
||
"bundle": { "type": "boolean", "description": "是否打包成 .hmap(默认 true)" },
|
||
"sdk_path": {
|
||
"type": "string",
|
||
"description": "直接指定 SDK 源码目录(本机改 SDK 联调时用);设置后优先于 sdk 字段"
|
||
},
|
||
"go_version": { "type": "string" },
|
||
"replaces": { "type": "object", "additionalProperties": { "type": "string" } },
|
||
"source_dirs": { "type": "array", "items": { "type": "string" } }
|
||
},
|
||
"additionalProperties": true
|
||
}
|