# workflow

列出或套用画布工作流模板。`workflows` 是 `workflow` 的别名。套个人模板走这条命令，不要走 `product/openInCanvas` 或 `product/generate`（那两条强制 `productId`，是产品驱动，不是画布级套模板）。

```powershell
"{baseDir}/bin/drowup.exe" workflow list --json
"{baseDir}/bin/drowup.exe" workflow list --scope public --json
"{baseDir}/bin/drowup.exe" workflow apply 印尼工作流 -p PROJECT_UUID --json
"{baseDir}/bin/drowup.exe" workflow apply 印尼工作流 --json
```

`project use` 绑定当前目录后可省略 `-p`。`--out file.json` 把 UTF-8 JSON 写到文件（不要用 PowerShell `>` 重定向，那会变成 UTF-16）。

## 列出：workflow list

| 旗标 | 默认 | 说明 |
| --- | --- | --- |
| `--scope` | `mine` | `mine`/`personal` = 我的模板；`public`/`system` = 公共模板。不带 `mine` 时看不到「印尼工作流」这类个人模板 |
| `--out` | 空 | 把结果写成 UTF-8 文件 |

内部 `GET /assetCanvas/templates?scope=`。个人列表通常不下发完整 `graphJson`，apply 时会再拉 `GET /assetCanvas/template/graph?id=`。

## 套用：workflow apply

| 旗标 | 默认 | 说明 |
| --- | --- | --- |
| `<模板>` | 必填 | 模板名、id 或 `templateKey`。重名时改用 id |
| `-p/--project` | 目录绑定 | 目标画布 UUID |
| `--scope` | `mine` | 先在该 scope 里找模板 |
| `--out` | 空 | 把 ACK 写成 UTF-8 文件 |

内部步骤：

1. 列模板并按名/id 选中
2. 解析 `graphJson`（缺则拉 graph 接口）
3. 重映射节点/边 id，清执行态字段，保留媒体 URL 与 `productSlot` / `inputBinding`
4. 读画布当前 `version`
5. `POST /assetCanvas/nodes/batch`，body 为 `nodes.upsert` + `connections.upsert`（不要写成 `nodes.update` / `edges`）

套上的是图结构，不会自动跑生成。产品白底图节点要把 `url` / `remoteUrl` / `thumbnail` / `previewUrl` 换成刚上传的图，再对轮播/详情/标题节点 `node run`。产物按 `data.productSlot` 回填产品（如 `carousel[1]`）。

契约见 `references/workflow-templates.md`。浏览器 Network 里看到 `app.drowup.com/api/...` 只是网页同源代理，CLI 打 `api.drowup.com` 且不要再加一层 `/api`。
