feat(plugin): 技能改写为「编辑归宿主、MCP 只做引擎与同步」(v0.2.2)
- SKILL.md 新增「编辑与校验分工」:AML 与设计源文件用宿主原生 read/patch/grep 编辑, 编译/规范校验/规则检查/围护统计/空间邻接走 MCP 引擎工具;固定顺序 本地编辑 → push_project → 引擎校验 → Studio 查看;studioUrl 用内置浏览器打开且复用已有标签 - README 新增「工具面」说明、本地项目目录约定(可选 deta.json 绑定 projectId) 与端到端工作流示例 - plugin.json 版本 0.2.1 → 0.2.2
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "deta",
|
"name": "deta",
|
||||||
"version": "0.2.1",
|
"version": "0.2.2",
|
||||||
"description": "DETA \u5efa\u7b51\u6027\u80fd\u8bbe\u8ba1\u63d2\u4ef6\uff1a\u4ee5 AML \u4e3a\u552f\u4e00\u4e8b\u5b9e\u6e90\u7f16\u8f91\u5efa\u7b51\u6a21\u578b\uff0c\u7ecf GSA \u7f16\u8bd1\u4e3a\u5efa\u7b51\u6a21\u578b\u5e76\u505a\u89c4\u5219\u6821\u9a8c\u3002",
|
"description": "DETA \u5efa\u7b51\u6027\u80fd\u8bbe\u8ba1\u63d2\u4ef6\uff1a\u4ee5 AML \u4e3a\u552f\u4e00\u4e8b\u5b9e\u6e90\u7f16\u8f91\u5efa\u7b51\u6a21\u578b\uff0c\u7ecf GSA \u7f16\u8bd1\u4e3a\u5efa\u7b51\u6a21\u578b\u5e76\u505a\u89c4\u5219\u6821\u9a8c\u3002",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "DETA",
|
"name": "DETA",
|
||||||
|
|||||||
@@ -24,6 +24,64 @@ DETA 领域能力(AML 建筑模型读写、编译校验、围护结构统计
|
|||||||
账号的工作区在服务端按账号隔离(`<工作区根>/<账号 ID>`),
|
账号的工作区在服务端按账号隔离(`<工作区根>/<账号 ID>`),
|
||||||
不同账号的设计源码互不可见;同一账号的新会话继续使用自己的工作区。
|
不同账号的设计源码互不可见;同一账号的新会话继续使用自己的工作区。
|
||||||
|
|
||||||
|
## 工具面:编辑归宿主,MCP 只做引擎与同步
|
||||||
|
|
||||||
|
AML 是纯文本 DSL,读写、搜索、重构一律由**宿主原生的文件工具**完成
|
||||||
|
(Codex 的 read / patch / grep、shell;dsh 的同名能力),MCP 不再是编辑入口:
|
||||||
|
|
||||||
|
| 分工 | 谁做 |
|
||||||
|
|------|------|
|
||||||
|
| 读取 / 修改 / 搜索 `aml.xml`、`bss.md`、`rules.yml`、`behaviors.yml`、`design-brief.md` | 宿主原生工具(本地项目目录里的文件) |
|
||||||
|
| 编译、规范校验、规则检查、围护结构统计、空间邻接、领域脚本 | MCP 引擎工具(`apply_design` / `validate_model` / `analyze_gsa_issues` / `analyze_rules_compliance` / `envelope_stats` / `query_spatial_graph` / `run_script` …) |
|
||||||
|
| 本地改动送上云端、取回云端工作区 | MCP `push_project` / `pull_project` |
|
||||||
|
|
||||||
|
远程 HTTP 形态的工具面按部署形态裁剪:编辑类工具
|
||||||
|
(`read_source` / `edit_source` / `list_workspace` / `search_workspace` / `workspace_diff`
|
||||||
|
等依赖宿主 AML、工作区文件清单、画布或计算回调的工具)**不出现在 `tools/list`**;
|
||||||
|
引擎类工具与 `push_project` / `pull_project` 保留。本机 stdio 开发形态仍是全量面
|
||||||
|
(`DETA_TOOL_SURFACE=full`,缺省即 full;远程形态缺省 engine,可用同名环境变量覆盖)。
|
||||||
|
|
||||||
|
## 本地项目目录约定
|
||||||
|
|
||||||
|
一个 DETA 项目就是一个普通目录,引擎工具读的是**服务端工作区**,因此改动要先 push:
|
||||||
|
|
||||||
|
```
|
||||||
|
my-project/
|
||||||
|
├── deta.json # 可选:项目绑定({ "projectId": "...", "name": "..." })
|
||||||
|
├── aml.xml # 必需:建筑模型唯一事实源
|
||||||
|
├── bss.md # 可选:样式/构造附属文档
|
||||||
|
├── rules.yml # 可选:校验规则
|
||||||
|
├── behaviors.yml # 可选:声明式行为规则
|
||||||
|
└── design-brief.md # 可选:设计任务书
|
||||||
|
```
|
||||||
|
|
||||||
|
- `deta.json` 里的 `projectId` 是 deta.city 云项目 ID;带上它的 `push_project`
|
||||||
|
会把同一个 ID 绑定到服务端工作区(写 `deta.json`),之后 `generate_aml` /
|
||||||
|
`pull_project` 会带上同一个 Studio 深链 `https://deta.city/design/<projectId>`。
|
||||||
|
- 文件名沿用服务端约定(`aml` ↔ `aml.xml`、`brief` ↔ `design-brief.md` 等),
|
||||||
|
本地目录与服务端工作区结构一致,`pull_project` 的结果可直接落盘回本地目录。
|
||||||
|
|
||||||
|
## 端到端工作流:本地编辑 → push → 校验 → Studio 查看
|
||||||
|
|
||||||
|
```text
|
||||||
|
1. 本地编辑 read/patch/grep 直接改 aml.xml(MCP 不参与编辑)
|
||||||
|
2. 推送 push_project({ files: { "aml.xml": "<全文>", "rules.yml": "…" },
|
||||||
|
projectId: "<云项目 ID>" })
|
||||||
|
→ { ok: true, files: ["aml.xml", "rules.yml"],
|
||||||
|
projectId: "<云项目 ID>", studioUrl: "https://deta.city/design/<ID>" }
|
||||||
|
(带 projectId 时同时在服务端工作区写入 deta.json 绑定)
|
||||||
|
3. 引擎校验 apply_design() → 编译 AML 为建筑模型(服务端工作区内的最新版本)
|
||||||
|
validate_model() → 语法/几何问题,逐条修复后重新 push + 编译
|
||||||
|
envelope_stats() / query_spatial_graph() → 围护结构与空间邻接
|
||||||
|
4. Studio 查看 打开返回的 studioUrl;已有相同 URL 的标签优先复用,
|
||||||
|
不要为同一项目重复开新标签
|
||||||
|
5. 反向核对 pull_project({ projectId }) → { files, projectId, studioUrl }
|
||||||
|
(工作区为空时 files 为 {})
|
||||||
|
```
|
||||||
|
|
||||||
|
路径安全:`push_project` 只接受工作区相对路径,绝对路径与 `..` 穿越会被拒绝,
|
||||||
|
单次载荷上限 1 MiB(与请求体上限一致)。
|
||||||
|
|
||||||
## 安装与登录(Codex)
|
## 安装与登录(Codex)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -10,12 +10,46 @@ description: 以 AML 为唯一事实源读写建筑模型并编译校验。当
|
|||||||
用户提到建筑方案、房间/空间布局、层高、墙体开洞(门窗)、围护结构、体形系数、
|
用户提到建筑方案、房间/空间布局、层高、墙体开洞(门窗)、围护结构、体形系数、
|
||||||
建筑模型校验,或需要为后续能耗/日照/CFD 模拟准备模型时使用本技能。
|
建筑模型校验,或需要为后续能耗/日照/CFD 模拟准备模型时使用本技能。
|
||||||
|
|
||||||
|
## 编辑与校验分工(MCP 是引擎,不是编辑器)
|
||||||
|
|
||||||
|
远程 MCP 服务只暴露**引擎**能力:编译、规范校验、规则检查、围护结构统计、
|
||||||
|
空间邻接,以及 push/pull 同步。编辑类工具(`read_source` / `edit_source` /
|
||||||
|
`list_workspace` / `search_workspace` / `workspace_diff` 等)不在远程工具面里——
|
||||||
|
看不到就不要去找,更不要用它们替代宿主的文件工具。
|
||||||
|
|
||||||
|
| 要做的事 | 用什么 |
|
||||||
|
|----------|--------|
|
||||||
|
| 读取 / 修改 / 搜索 AML 与其它设计源文件(`aml.xml`、`bss.md`、`rules.yml`、`behaviors.yml`、`design-brief.md`) | **宿主原生工具**:read / patch / grep / shell(直接改文件,不走 MCP 编辑工具) |
|
||||||
|
| 云端编译(AML → building.json) | MCP `apply_design` |
|
||||||
|
| 语法与几何校验 / 规则检查 | MCP `validate_model`、`analyze_gsa_issues`、`analyze_rules_compliance` |
|
||||||
|
| 围护结构统计 | MCP `envelope_stats` |
|
||||||
|
| 空间邻接、交通空间合并 | MCP `query_spatial_graph`、`apply_design(merge_traffic_spaces=…)` |
|
||||||
|
| 领域脚本(面积预算 / 轴网 / 布局建议 / 校核) | MCP `run_script`、`run_scripts` |
|
||||||
|
| 把本地改动送上云端、取回云端工作区 | MCP `push_project`、`pull_project` |
|
||||||
|
| 语法规则与生成上下文 | MCP `get_aml_schema`、`generate_aml` |
|
||||||
|
|
||||||
|
固定顺序:**本地编辑 → `push_project` → 引擎校验 → Studio 查看**。
|
||||||
|
引擎工具读的是**服务端工作区**的文件,没推送过就读不到你的最新改动——
|
||||||
|
改完不 push 直接校验,校验结果对应的是上一版。
|
||||||
|
|
||||||
|
### push 与 Studio 深链
|
||||||
|
|
||||||
|
- 需要云端校验、或想在 Studio 里看效果时,先
|
||||||
|
`push_project({ files: { "aml.xml": "<全文>", "rules.yml": "…" }, projectId?: "…" })`。
|
||||||
|
`files` 至少含 `aml.xml`;路径必须是工作区相对路径(绝对路径、`..` 穿越会被拒绝);
|
||||||
|
单次载荷上限 1 MiB。传 `projectId` 会同时把本项目绑定到云项目
|
||||||
|
(写入服务端工作区 `deta.json`,之后 `generate_aml` / `pull_project` 也带同一深链)。
|
||||||
|
- 返回的 `studioUrl`(`https://deta.city/design/<projectId>`):**用内置浏览器打开,
|
||||||
|
已有相同 URL 的标签优先复用,不要重复开新标签**。
|
||||||
|
- 反向核对 / 拉回云端工作区用 `pull_project`(返回 `{ files, projectId?, studioUrl? }`,
|
||||||
|
工作区为空时 `files` 为 `{}`)。
|
||||||
|
|
||||||
## 铁律
|
## 铁律
|
||||||
|
|
||||||
1. **AML 是建筑语义的唯一事实源**。任何几何或属性变更都必须落到 AML 文本,
|
1. **AML 是建筑语义的唯一事实源**。任何几何或属性变更都必须落到 AML 文本,
|
||||||
不得用中间 JSON 表达修改意图。
|
不得用中间 JSON 表达修改意图。
|
||||||
2. **禁止凭记忆编写 AML 结构**。动手前必须先取真实语法:
|
2. **禁止凭记忆编写 AML 结构**。动手前必须先取真实语法:
|
||||||
- 已有模型:`read_source`(读当前 AML)
|
- 已有模型:用宿主原生 read 工具读项目里的 `aml.xml`(远程形态没有 `read_source`)
|
||||||
- 语法规则:`get_aml_schema`(从编译服务实时获取,唯一权威)
|
- 语法规则:`get_aml_schema`(从编译服务实时获取,唯一权威)
|
||||||
3. **属性知识不硬编码**:房间用途、构造材料、洞口参数等可选值从工具返回中获取,
|
3. **属性知识不硬编码**:房间用途、构造材料、洞口参数等可选值从工具返回中获取,
|
||||||
不要凭经验列举。
|
不要凭经验列举。
|
||||||
@@ -30,24 +64,29 @@ description: 以 AML 为唯一事实源读写建筑模型并编译校验。当
|
|||||||
|
|
||||||
## 标准工作流
|
## 标准工作流
|
||||||
|
|
||||||
1. `read_source` 读取当前设计源码(`aml.xml`)。模型为空时先用 `generate_aml`
|
1. **读**:用宿主原生工具读本地项目里的设计源码(`aml.xml` 等)。模型为空时先用
|
||||||
按需求生成骨架,再用 `get_aml_schema` 核对语法。
|
`generate_aml` 取生成上下文,再用 `get_aml_schema` 核对语法,然后在本地写出 AML。
|
||||||
2. 编辑:直接修改 AML 文本(工作区文件的 edit/write),或使用领域工具。
|
2. **改**:在本地用 read / patch / grep 直接改 AML 文本(局部修改优于整体重写)。
|
||||||
3. `apply_design` 提交编译 → 编译为建筑模型,产物落盘 `building.json`。
|
3. **推**:`push_project({ files: { "aml.xml": … } })` 把改好的源码送到服务端工作区
|
||||||
4. `validate_model` 做语法与规则校验,逐条读取错误码并修复,不得跳过。
|
(要绑云项目就带上 `projectId`)。
|
||||||
5. 需要几何指标时用 `envelope_stats`(围护结构/外窗面积)或 `query_spatial_graph`
|
4. **编**:`apply_design` 提交编译 → 编译为建筑模型,产物落盘 `building.json`。
|
||||||
(空间邻接与查询)。
|
5. **校**:`validate_model` 做语法与规则校验,逐条读取错误码并修复,不得跳过;
|
||||||
|
规则类问题用 `analyze_gsa_issues` / `analyze_rules_compliance`。
|
||||||
|
6. **看**:需要几何指标用 `envelope_stats`(围护结构/外窗面积)或 `query_spatial_graph`
|
||||||
|
(空间邻接与查询);要在浏览器看效果就用返回的 `studioUrl`(复用已有标签)。
|
||||||
|
|
||||||
## 错误处理
|
## 错误处理
|
||||||
|
|
||||||
- 编译服务未在线时,编译/校验类工具会返回明确错误文本。此时**不要伪造结果**,
|
- 编译服务未在线时,编译/校验类工具会返回明确错误文本。此时**不要伪造结果**,
|
||||||
直接报告「编译服务未接入」,只使用可离线工作的读写类工具。
|
直接报告「编译服务未接入」,改用宿主原生文件工具(read / patch)核对与编辑本地 AML。
|
||||||
- 编译报错必须逐条修复后重新 `apply_design`,禁止在报错状态下声称完成。
|
- 编译报错必须逐条修复后重新 `apply_design`,禁止在报错状态下声称完成。
|
||||||
|
|
||||||
## 工具一览
|
## 工具一览
|
||||||
|
|
||||||
设计源码:`read_source`、`edit_source`、`get_design_params`、`read_reference`、`run_script`
|
设计源码读写/搜索:**宿主原生工具**(read / patch / grep / shell),不经 MCP
|
||||||
生成与语法:`generate_aml`、`get_aml_schema`
|
生成与语法:`generate_aml`、`get_aml_schema`
|
||||||
编译与校验:`apply_design`、`validate_model`、`envelope_stats`、`query_spatial_graph`、
|
编译与校验:`apply_design`、`validate_model`、`envelope_stats`、`query_spatial_graph`、
|
||||||
`generate_candidates`
|
`generate_candidates`、`analyze_gsa_issues`、`analyze_rules_compliance`
|
||||||
项目与计算:`list_projects`、`list_buildings`、`analyze_building`、`parameter_sweep`
|
同步:`push_project`、`pull_project`
|
||||||
|
脚本与参考:`run_script`、`run_scripts`、`read_reference`
|
||||||
|
项目与查询:`list_projects`、`list_buildings`、`query_knowledge`、`parameter_sweep`
|
||||||
|
|||||||
Reference in New Issue
Block a user