# AIOS 应用调用细则

## 命令

```bash
aios-app-invoke-cli servercommand <applicationName> <commandName> <method> [jsonBody] -p <provider> -u <CurrentUser> -s <MessageThreadId> -a <AgentName>
aios-app-invoke-cli binding <applicationName> <commandName> <method> <jsonBody> -p <provider> -u <CurrentUser> -s <MessageThreadId> -a <AgentName>
aios-app-invoke-cli status
```

全局命令不可用时，可使用 `npx aios-app-invoke-cli ...`。

## 必守规则

- `-p/-u/-s/-a` 分别来自 `provider`、`CurrentUser`、当前 `MessageThreadId`、`AgentName`
- `provider` 只能是 `phx` 或 `hzg`
- 缺任何运行时参数都不要猜，直接停止并说明缺口
- `applicationName` 取自本体子目录名
- 业务命令用 `servercommand`
- 内置数据服务用 `binding`
- 本体给了绑定端点时，优先按本体调用
- `GetTableDataWithOffset -> TableBinding`
- `GetComboBindingOptions -> CandidatesBinding`
- 带 `[HOB_EXCLUDE]` 的命令一律不调用

## 请求体规则

- `servercommand`：`commandName` 用本体命令名，`method` 用本体 `verb`，`jsonBody` 严格按 `Input Arguments`
- 不新增字段，不遗漏字段，不修改字段类型
- CLI 请求体只发送 OpenClaw 约定字段：`CurrentUser`、`MessageThreadId`、`AgentName`

- `TableBinding` 字段映射：
  - `bindingInfos <- guid`
  - `currentRowInfo.currentTable <- table-name`
  - `currentRowInfo.viewname <- view-name`
  - `currentRowInfo.listviewLocation <- list-view-location`
  - `offsetConditionInfo.targetPage <- 1`
  - `offsetConditionInfo.pageLimitRowCount <- 0`
  - `pageName <- page-name`
  - 固定必填：
    `demandRowCount=0`
    `currentDataLength=0`
    `needRowVersion=true`
    `editorDataInfos=null`
    `sortCommandID=null`
    `orderByInfo=null`
    `columnFilterQueries=null`
    `totalRowBindingInfos=[]`

- `CandidatesBinding` 字段映射：
  - `tableName <- TableName`
  - `valueColumnBindingInfo <- column-type=ID` 的 `GUID`
  - `displayColumnBindingInfo <- column-type=text` 的 `GUID`
  - `pageName <- page-name`
  - 固定必填：
    `itemQuery=null`
    `offset=null`
    `cacheSettingID=null`

## 额外规则

- 需要底层 ID 时，先用本体定义的查询或绑定把展示文本解析成真实 ID，再发正式请求
- JSON 字符串统一双引号；shell 转义按当前 shell 处理
- 遇到 `invalid JSON param for body` 时，先检查 JSON 和引号
- 本体标成表 ID 的字段默认按 `int` 处理
- 不要只看字段名猜含义
