> **本文回答**：`CommandOptions` 是命令的元配置容器；vjcad@1.0.16 d.ts 实际只有两个字段：`useAutoComplete`（命令行自动补全）与 `overrideSvgFileName`（覆盖图标 SVG 文件名）。其它字段 d.ts 未声明，**不要凭印象添加**。

## 一、最小用法

```js
const options = new CommandOptions();
options.useAutoComplete = true;   // 启用命令行自动补全

CommandRegistry.regist(new CommandDefinition('MYCMD', '我的命令', MyCommand, options));
```

MCP 参考：`vjcad/example/command/01simple.js`、`vjcad/example/command/02register.js`。

## 二、确认存在的字段（按已检查来源）

| 字段 | 类型 | 说明 |
|---|---|---|
| `useAutoComplete` | `boolean` | 命令行输入时是否参与自动补全 |
| `overrideSvgFileName` | `string` | 覆盖命令图标的 SVG 文件名（vjcad@1.0.16 d.ts 存在） |

> `CommandOptions` 在 d.ts 只有这两个字段；图标另可用 `CommandDefinition.setIcon(svg)`/`hasIcon()`/`getIconSvg()` 设置。其他字段（分组、快捷键、可见性等）d.ts 未声明，**不要凭印象添加**。

## 三、`CommandDefinition` 构造签名

```ts
new CommandDefinition(
  name: string,             // 命令名（约定大写）
  description: string,      // 描述
  commandClass: Function,   // 命令类（必须有 async main()）
  options?: CommandOptions  // 可选
)
```

MCP 参考：`vjcad/doc/command/api-reference.md`。

> `CommandDefinition` 把 options 存在 **`.op` 字段**（不是 `.options`）——回读注册项用 `cmdDef.op.useAutoComplete`。

## 四、与 Ribbon / 菜单 / 右键的关联

通过 Ribbon / 右键菜单触发已注册命令的方式见 [plugin/menu-ribbon](../plugin/menu-ribbon.md)、[ui/contextmenu](../ui/contextmenu.md)。

`tool-bar-button` 的 `execute="LINE"` 属性即是触发已注册命令名的方式：

```html
<tool-bar-button title="直线" execute="LINE" src="/images/commands/line.svg" theme="dark"></tool-bar-button>
```

MCP 参考：`vjcad/doc/ui/controls.md`。

## 反例

- 给 `CommandOptions` 加未验证字段（例如 `category / shortcutKey / iconUrl`）：示例与文档均未确认这些字段，可能不生效。
- 同一命令名重复 `regist` 以为会覆盖：`regist` 只是 `items.push`，`item()` 用 `find` 返回**第一个**匹配，旧定义仍生效；要替换须先 `CommandRegistry.unregist(name)` 再注册。插件用 `context.registerCommand` 注册的命令在停用/卸载时由框架自动注销（`_cleanup`），直接 `CommandRegistry.regist` 的则需自己 `unregist`。

## 参考（官方文档 MCP）

- 文档：`vjcad/doc/command/index.md`、`vjcad/doc/command/api-reference.md`、`vjcad/doc/ui/controls.md`
- 示例：`vjcad/example/command/01simple.js`、`vjcad/example/command/02register.js`
