# eBuilder 表单 CLI

`ebuilder-form` 将 eBuilder 菜单定位、List/NList 页面查询、字段/选项/浏览字段解析、OpenAPI 表单数据和已发布自定义接口统一成 `weaver-work-cli` shortcut。

## 命令

```text
weaver-work-cli ebuilder-form --help
weaver-work-cli ebuilder-form schema
weaver-work-cli --json ebuilder-form run <operation> --input-json '<json>'
```

复杂 JSON 使用 UTF-8 文件和 `--input <path>`。Agent Skill 入口是 `skills/weaver-e10-ebuilder-form/SKILL.md`。

## Operation 分组

| 分组 | Operation |
| --- | --- |
| 上下文 | `ebuilder-form.menu.search`、`ebuilder-form.context.resolve`、`ebuilder-form.views.list` |
| List/NList | `ebuilder-form.list.config`、`ebuilder-form.list.query`、`ebuilder-form.nlist.config`、`ebuilder-form.nlist.query` |
| 字段与浏览 | `ebuilder-form.fields.get`、`ebuilder-form.options.get`、`ebuilder-form.mapping.get`、`ebuilder-form.browser.resolve` |
| OpenAPI 只读 | `ebuilder-form.openapi.detail`、`ebuilder-form.openapi.query`、`ebuilder-form.openapi.count` |
| OpenAPI 写入 | `ebuilder-form.openapi.add/update/delete.prepare` → `*.apply` |
| 自定义接口 | `ebuilder-form.custom.detail/query/count`、`ebuilder-form.custom.add/update/delete.prepare` → `*.apply` |

## 关键实现规则

- `SEARCH` 菜单映射为 `List`，`VIEWPORT` 菜单映射为 `NList`。
- `/api/ebuilder/form/**` 根据 `isIndependentDeploy(appId)` 路由到 `/api/ebuilder` 或 `/api/ebuilder{appId}`；`/api/ebuilder/common/**` 和浏览接口不拼 appId。
- List 查询必须另调 `getListDataCount` 取真实总数。
- NList 查询会把 `customConfig` JSON 编成 eBuilder 运行时要求的 LZW 数字串。
- OpenAPI 写入默认 `fieldNoFindIgnore=false`、`checkRight=true`。
- 自定义字段若字段定义中 `name == id`，写入键使用 `config.dataKey`。
- 新增、修改、删除都是高风险写操作，必须走 continuation 绑定的 prepare/apply 确认链。

## 不在范围

本模块不创建菜单、不改页面配置、不调用 `/api/bs/`、不上传文件、不做 OCR、不读本地凭证目录，也不根据字段标题猜浏览接口。
