# aidc CLI

AIDC Developer 的命令行，也是智能体使用 AIDC 的首选入口：每条命令都能输出 JSON、从不交互、退出码稳定。所有业务逻辑都在 API 里，CLI 只做参数、文件与输出。

## 安装

```bash
curl -fsSL https://www.ai-dc.ai/developer/cli/install.sh | sh
```

需要 Node 18 以上。安装脚本把单文件 CLI 下载到 `~/.aidc/bin/aidc`；也可以直接 `node aidc.mjs …`（下载地址 `https://www.ai-dc.ai/developer/cli/aidc.mjs`）。`aidc video` 与长音频转写需要 ffmpeg。

## 登录

| 命令 | 说明 |
| --- | --- |
| `aidc login` | 设备授权：打印链接与授权码 → 浏览器里批准 → 拿到开发者 Key |
| `aidc login --no-wait --json` | 只打印授权链接（智能体把它交给人），随后 `aidc login --continue` 完成 |
| `aidc login --with-key < key.txt` | 从 stdin 读开发者 Key（CI） |
| `aidc whoami` · `aidc keys` | 身份、Key 列表 |
| `aidc logout [--revoke]` | 删除本机 Key；`--revoke` 同时在服务端吊销 |

凭证读取顺序：环境变量 `AIDC_API_KEY` → `~/.aidc/config.json`（0600）。API 根：`--api` → `AIDC_API_BASE` → 配置文件 → `https://www.ai-dc.ai`。

## 命令一览

```text
aidc models
aidc model chat -m <模型> "<提示>" [--system …] [--image 图…] [--json-object] [--stream]
aidc model decide --state "<文本>" --question id=说明 --choice id:选项=判据 …

aidc vision inspect <图片…> --task "<检查什么>" [--criteria …] [-m gpt-6-luna]
aidc voice transcribe <音频/视频> [--language zh] [-m gpt-transcribe]
aidc voice translate "<文本>" --to ja,en,ar-EG,bn
aidc voice minutes <逐字稿.txt> [--title …]
aidc video frames <视频> --every <秒> [--out 目录] [--max N]
aidc video inspect <视频> --every <秒> --task "<检查什么>" [--transcribe]

aidc data profile <file.csv|json>
aidc data group <file> --by <列> [--sum 列] [--avg 列] [--count]

aidc connect datasets
aidc connect report <数据集> [--report overview]
aidc connect send "<消息>" [--session <id>]          # Agent Key 读 AIDC_AGENT_KEY

aidc stream create <流名> --title … [--key 主键] --field 名:类型[:显示名] … [--retention N] [--spec 文件.json]
aidc stream list · status <流名> · get <流名>
aidc stream key <流名> --label "装在哪" · keys <流名> · revoke <流名> --prefix aidc-pk-…
aidc stream publish <流名> --event '{…}' | --file 事件.json
aidc stream tail <流名> [--after N]                   # 实时订阅（SSE），每次变化一行；--json 输出 JSON 行
aidc stream pipe <命名空间>/<流名> -- <适配器命令…>   # 边缘发布端（发布 Key 读 AIDC_PUBLISH_KEY）
               [--heartbeat 30] [--full-every 360] [--stale-after 15]   # 秒 / 分 / 分
aidc stream delete <流名> [--dry-run]

aidc app init <slug> [--template blank|camera|voice|data] [--title …] [-n <命名空间>]
aidc app check [目录]
aidc app dev [目录] [--port 5173]
aidc app deploy [目录] [--notes …] [--dry-run]         # 版本号 = 清单 version，内容变了就要升
aidc app publish <slug|目录> [--version 1.2.0] [--notes …] [--dry-run]
aidc app rollback <slug> --version 1.1.0 [--notes …]
aidc app status <slug> · aidc app history <slug> · aidc app list   # slug 也可写 <命名空间>/<slug>
```

流名可以写 `<流名>`（命名空间取当前登录的公司）或 `<命名空间>/<流名>`。`aidc stream pipe` 常驻运行（systemd 服务，不是定时器），适配器协议见 [连接 SDK · 实时数据流](connect.md)。

通用参数：`--json`（stdout 不是终端时默认开启）、`--dry-run`、`--api <根地址>`、`-n/--namespace`。

## 输出与退出码

- JSON 模式下，成功输出命令的数据对象；失败输出 `{ ok: false, error: { code, message, status, details, requestId } }`。进度提示一律在 stderr。
- `aidc login` 在 JSON 模式输出逐行事件：`{"event":"authorize","url":…,"userCode":…}` → `{"event":"logged_in",…}`。

| 退出码 | 含义 |
| --- | --- |
| 0 | 成功 |
| 1 | 一般错误 |
| 2 | 参数错误 / 校验不通过 |
| 3 | 未登录或凭证无效 |
| 4 | 无权限 |
| 5 | 不存在 |
| 6 | 冲突（例如发布未测过的版本、内容变了没升版本号） |
| 7 | 限流或额度用完 |
| 8 | 上游或网络故障 |

## 外部程序

`aidc video` 与长音频转写通过 ffmpeg 抽帧、转码、分段（`AIDC_FFMPEG` / `AIDC_FFPROBE` 可指定路径）。没装时命令报错并给出安装方式，不会退化成不完整的实现。
