@aswless_854771076/ai_short_studio_cli 0.1.0-beta.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +52 -17
- package/dist/auth/session-manager.js +1 -1
- package/dist/commands/auth/login.d.ts +2 -0
- package/dist/commands/auth/login.js +2 -0
- package/dist/commands/canvas/asset/select-version.d.ts +1 -0
- package/dist/commands/canvas/asset/select-version.js +1 -0
- package/dist/commands/canvas/edge/add.d.ts +1 -0
- package/dist/commands/canvas/edge/add.js +1 -0
- package/dist/commands/canvas/edge/delete.d.ts +1 -0
- package/dist/commands/canvas/edge/delete.js +1 -0
- package/dist/domain/vvicat-api.js +1 -1
- package/dist/runtime.d.ts +2 -0
- package/dist/runtime.js +16 -15
- package/package.json +5 -3
- package/skills/using-vvicat-cli/SKILL.md +24 -14
- package/skills/using-vvicat-cli/references/commands.md +35 -35
package/README.md
CHANGED
|
@@ -1,42 +1,53 @@
|
|
|
1
|
-
#
|
|
1
|
+
# AI Short Studio CLI
|
|
2
2
|
|
|
3
3
|
VVICAT 新链路无限画布的官方命令行客户端。要求 Node.js 22 或更高版本。
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm install --global @vvicat/ai_short_studio_cli
|
|
7
|
-
|
|
8
|
-
vvicat
|
|
9
|
-
|
|
7
|
+
ai-short-studio auth login --google \
|
|
8
|
+
--base-url https://vvicat.example.com \
|
|
9
|
+
--supabase-url https://your-project.supabase.co \
|
|
10
|
+
--supabase-publishable-key your-publishable-key
|
|
11
|
+
ai-short-studio project list --json
|
|
12
|
+
ai-short-studio canvas node types --json
|
|
10
13
|
```
|
|
11
14
|
|
|
12
15
|
邮箱登录从 stdin 读取密码:
|
|
13
16
|
|
|
14
17
|
```bash
|
|
15
|
-
|
|
18
|
+
ai-short-studio auth login --email user@example.com --password-stdin
|
|
16
19
|
```
|
|
17
20
|
|
|
18
|
-
CLI 只把 refresh token 保存到系统钥匙串,access token
|
|
21
|
+
CLI 只把 refresh token 保存到系统钥匙串,access token 仅驻留内存并在到期前自动刷新。首次登录通过参数或 `VVICAT_SUPABASE_URL`、`VVICAT_SUPABASE_PUBLISHABLE_KEY` 提供 Supabase 公共配置。服务地址和非敏感 profile 写入系统配置目录;可使用 `--profile`、`--base-url` 或 `VVICAT_BASE_URL` 切换环境。
|
|
19
22
|
|
|
20
23
|
## 命令范围
|
|
21
24
|
|
|
22
|
-
- `
|
|
23
|
-
- `
|
|
24
|
-
- `
|
|
25
|
-
- `
|
|
26
|
-
- `
|
|
27
|
-
- `
|
|
28
|
-
- `
|
|
25
|
+
- `ai-short-studio project`:无限画布项目增删改查。
|
|
26
|
+
- `ai-short-studio canvas get|apply`:读取或批量更新画布。
|
|
27
|
+
- `ai-short-studio canvas node`:节点类型/schema 查询、节点读写、执行。
|
|
28
|
+
- `ai-short-studio canvas edge`:连线读写。
|
|
29
|
+
- `ai-short-studio canvas asset`:资产列表、上传、版本选择和下载。
|
|
30
|
+
- `ai-short-studio task`:异步任务读取、等待和取消。
|
|
31
|
+
- `ai-short-studio config`:模型、provider、默认模型、能力默认值和并发配置。
|
|
29
32
|
|
|
30
|
-
|
|
33
|
+
```bash
|
|
34
|
+
ai-short-studio canvas edge add --project <projectId> --from <sourceNodeId>:<sourceHandle> --to <targetNodeId>:<targetHandle> --json
|
|
35
|
+
ai-short-studio canvas edge delete <edgeId> --project <projectId> --yes --json
|
|
36
|
+
ai-short-studio canvas asset select-version <assetId> --project <projectId> --version <versionId> --json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
CLI 直接使用现有 `/api/projects`、`/api/canvas/node-types`、项目画布与资产路由,不要求服务端额外提供版本化包装接口。
|
|
40
|
+
|
|
41
|
+
运行 `ai-short-studio <topic> --help` 查看精确参数。可执行命令使用完整产品名 `ai-short-studio`,同时避免与其他 CLI 冲突。所有结构化响应保持 JSON;API 错误也返回稳定的 `error.code`、`status`、`retryable` 和 `details`。
|
|
31
42
|
|
|
32
43
|
退出码:`0` 成功,`3` 未认证,`4` 不存在,`5` 禁止或冲突,`6` 参数错误,`7` 其他错误。
|
|
33
44
|
|
|
34
45
|
配套 Agent Skill 位于 `skills/using-vvicat-cli`,随 npm 包发布。
|
|
35
46
|
|
|
36
47
|
```bash
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
ai-short-studio skill install --target codex
|
|
49
|
+
ai-short-studio skill status --target codex
|
|
50
|
+
ai-short-studio skill update --target codex
|
|
40
51
|
```
|
|
41
52
|
|
|
42
53
|
也可使用 `--target agents` 或 `--directory <path>`。CLI 会记录版本和 SHA-256;已安装 Skill 被用户修改后,更新默认停止,只有显式 `--force` 才覆盖。
|
|
@@ -54,3 +65,27 @@ npm run release
|
|
|
54
65
|
```
|
|
55
66
|
|
|
56
67
|
Token 只从环境变量读取,不要放入参数、Git 或日志。
|
|
68
|
+
|
|
69
|
+
Docker 自动发布使用 `.env` 中的 `NPM_PUBLISH_PACKAGE_NAME` 选择目标;当前默认个人包为 `@aswless_854771076/ai_short_studio_cli`,获得组织权限后可改为 `@vvicat/ai_short_studio_cli`。`latest` 不会自动升级已安装的全局 CLI,手动更新使用:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install --global @aswless_854771076/ai_short_studio_cli@latest
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 云效 Flow
|
|
76
|
+
|
|
77
|
+
选择云效托管构建集群和 Node.js 22,将 npm Granular Access Token 保存为加密变量 `NPM_ACCESS_TOKEN`。正式发布流水线建议仅由 `cli-v*` Tag 触发:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
export NODE_AUTH_TOKEN="$NPM_ACCESS_TOKEN"
|
|
81
|
+
cd packages/ai_short_studio_cli
|
|
82
|
+
npm run release:ci
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
个人账号 beta 测试使用:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm run release:ci:test -- --version 0.1.1-beta.0
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`release:ci` 会依次运行测试和类型检查、发布 npm、等待 registry 可见,再从 npm 安装该精确版本并验证 CLI 与配套 Skill。无需配置自有 Runner;只有访问内网或需要固定出口 IP 时才使用自有构建集群。
|
|
@@ -92,7 +92,7 @@ export class SessionManager {
|
|
|
92
92
|
async refresh() {
|
|
93
93
|
const refreshToken = await this.credentials.get(this.profile);
|
|
94
94
|
if (!refreshToken)
|
|
95
|
-
throw new Error('尚未登录,请先运行
|
|
95
|
+
throw new Error('尚未登录,请先运行 ai-short-studio auth login');
|
|
96
96
|
this.current = await this.provider.refresh(refreshToken);
|
|
97
97
|
await this.credentials.set(this.profile, this.current.refreshToken);
|
|
98
98
|
return this.current.accessToken;
|
|
@@ -5,6 +5,8 @@ export default class AuthLogin extends BaseCommand {
|
|
|
5
5
|
email: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
6
6
|
google: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
7
7
|
'password-stdin': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
'supabase-publishable-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
'supabase-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
10
|
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
11
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
10
12
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
@@ -9,6 +9,8 @@ export default class AuthLogin extends BaseCommand {
|
|
|
9
9
|
email: Flags.string({ description: '登录邮箱' }),
|
|
10
10
|
google: Flags.boolean({ description: '通过浏览器使用 Google 登录', default: false }),
|
|
11
11
|
'password-stdin': Flags.boolean({ description: '从标准输入读取密码', default: false }),
|
|
12
|
+
'supabase-publishable-key': Flags.string({ description: 'Supabase publishable key', env: 'VVICAT_SUPABASE_PUBLISHABLE_KEY' }),
|
|
13
|
+
'supabase-url': Flags.string({ description: 'Supabase URL', env: 'VVICAT_SUPABASE_URL' }),
|
|
12
14
|
};
|
|
13
15
|
async run() {
|
|
14
16
|
const { flags } = await this.parse(AuthLogin);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './select.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './select.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './connect.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './connect.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './disconnect.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './disconnect.js';
|
|
@@ -42,7 +42,7 @@ export class VvicatApi {
|
|
|
42
42
|
return this.client.request(`/api/projects/${projectId}/canvas`, { method: 'PATCH', body: input });
|
|
43
43
|
}
|
|
44
44
|
async nodeTypes() {
|
|
45
|
-
const payload = await this.client.request('/api/
|
|
45
|
+
const payload = await this.client.request('/api/canvas/node-types');
|
|
46
46
|
return payload.data;
|
|
47
47
|
}
|
|
48
48
|
async addNode(projectId, input) {
|
package/dist/runtime.d.ts
CHANGED
package/dist/runtime.js
CHANGED
|
@@ -8,11 +8,11 @@ export async function createRuntime(flags) {
|
|
|
8
8
|
const baseUrl = (flags['base-url'] || process.env.VVICAT_BASE_URL || selected?.baseUrl || '').replace(/\/+$/, '');
|
|
9
9
|
if (!baseUrl)
|
|
10
10
|
throw new Error('缺少服务地址,请传入 --base-url 或设置 VVICAT_BASE_URL');
|
|
11
|
-
const profile =
|
|
11
|
+
const profile = ensureAuthConfig({
|
|
12
12
|
...selected,
|
|
13
13
|
name: flags.profile || selected?.name || 'default',
|
|
14
14
|
baseUrl,
|
|
15
|
-
});
|
|
15
|
+
}, flags);
|
|
16
16
|
await profiles.save(profile);
|
|
17
17
|
const session = new SessionManager({
|
|
18
18
|
profile: profile.name,
|
|
@@ -25,21 +25,22 @@ export async function createRuntime(flags) {
|
|
|
25
25
|
client: new ApiClient({ baseUrl, session, locale: flags.locale }),
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
28
|
+
function ensureAuthConfig(profile, flags) {
|
|
29
|
+
const supabaseUrl = flags['supabase-url']
|
|
30
|
+
|| process.env.VVICAT_SUPABASE_URL
|
|
31
|
+
|| process.env.NEXT_PUBLIC_SUPABASE_URL
|
|
32
|
+
|| profile.supabaseUrl;
|
|
33
|
+
const supabasePublishableKey = flags['supabase-publishable-key']
|
|
34
|
+
|| process.env.VVICAT_SUPABASE_PUBLISHABLE_KEY
|
|
35
|
+
|| process.env.NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY
|
|
36
|
+
|| process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY
|
|
37
|
+
|| profile.supabasePublishableKey;
|
|
38
|
+
if (!supabaseUrl || !supabasePublishableKey) {
|
|
39
|
+
throw new Error('缺少 Supabase 公共配置;登录时传入 --supabase-url 和 --supabase-publishable-key,或设置对应的 VVICAT_ 环境变量');
|
|
39
40
|
}
|
|
40
41
|
return {
|
|
41
42
|
...profile,
|
|
42
|
-
supabaseUrl
|
|
43
|
-
supabasePublishableKey
|
|
43
|
+
supabaseUrl,
|
|
44
|
+
supabasePublishableKey,
|
|
44
45
|
};
|
|
45
46
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aswless_854771076/ai_short_studio_cli",
|
|
3
|
-
"version": "0.1.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "VVICAT 无限画布项目命令行工具",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"type": "module",
|
|
18
18
|
"bin": {
|
|
19
|
-
"
|
|
19
|
+
"ai-short-studio": "bin/run.js"
|
|
20
20
|
},
|
|
21
21
|
"files": [
|
|
22
22
|
"bin",
|
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
"prepack": "npm run build",
|
|
33
33
|
"release:dry-run": "node scripts/publish.mjs --dry-run",
|
|
34
34
|
"release:test": "node scripts/publish.mjs --name @aswless_854771076/ai_short_studio_cli --tag beta",
|
|
35
|
+
"release:ci:test": "npm test && npm run typecheck && node scripts/publish.mjs --name @aswless_854771076/ai_short_studio_cli --tag beta --verify",
|
|
36
|
+
"release:ci": "npm test && npm run typecheck && node scripts/publish.mjs --tag latest --verify",
|
|
35
37
|
"release": "node scripts/publish.mjs --tag latest",
|
|
36
38
|
"test": "vitest run",
|
|
37
39
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
@@ -47,7 +49,7 @@
|
|
|
47
49
|
"vitest": "^2.1.9"
|
|
48
50
|
},
|
|
49
51
|
"oclif": {
|
|
50
|
-
"bin": "
|
|
52
|
+
"bin": "ai-short-studio",
|
|
51
53
|
"dirname": "vvicat",
|
|
52
54
|
"commands": "./dist/commands",
|
|
53
55
|
"topicSeparator": " "
|
|
@@ -1,26 +1,35 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: using-vvicat-cli
|
|
3
|
-
description: Use when an agent needs to inspect or operate VVICAT infinite-canvas projects, nodes, edges, assets, tasks, or model configuration through the
|
|
3
|
+
description: Use when an agent needs to inspect or operate VVICAT infinite-canvas projects, nodes, edges, assets, tasks, or model configuration through the ai-short-studio CLI.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 使用 VVICAT CLI
|
|
7
7
|
|
|
8
8
|
## 核心原则
|
|
9
9
|
|
|
10
|
-
把 `
|
|
10
|
+
把 `ai-short-studio` 当作机器可读的远程控制接口。认证后首先拉取服务端节点目录,先了解当前有哪些功能节点,再检查模型和项目配置。任何必要配置不完整或信息不确定时,先询问用户,不猜测、不执行写操作。
|
|
11
|
+
|
|
12
|
+
## 初始化检查
|
|
13
|
+
|
|
14
|
+
认证成功后、创建项目或修改任何资源前,按顺序执行:
|
|
15
|
+
|
|
16
|
+
1. 运行 `ai-short-studio canvas node types --json`,检查节点列表及各节点的 `inputSchema`、`outputSchema`、`configSchema` 和 `defaultConfig`,据此确定可用功能与必填项。
|
|
17
|
+
2. 运行 `ai-short-studio config get --json`,检查本次会用到的 `providers`、`models`、`defaultModels` 和 `capabilityDefaults`,包括 provider 的 `hasApiKey` 是否为真。需要新配置模型时,首选公司的 [StarRouter](https://starrouter.io/);需开通账号时联系邱茂。
|
|
18
|
+
3. 运行 `ai-short-studio project list --json`。已有项目再运行 `ai-short-studio project get <projectId> --json` 和 `ai-short-studio canvas get --project <projectId> --json`,检查项目类型、目标项目、画布现状及节点必需输入;新项目则确认名称、用途和节点所需业务参数。
|
|
19
|
+
4. 上述配置缺失、相互矛盾、无法判定是否适用,或用户意图存在任何不确定时,合并列出缺口并询问用户;得到答复前停在只读检查。
|
|
11
20
|
|
|
12
21
|
## 工作流
|
|
13
22
|
|
|
14
|
-
1. 运行 `
|
|
15
|
-
若 Skill 来自 CLI 安装,先运行 `
|
|
16
|
-
2.
|
|
17
|
-
3.
|
|
18
|
-
4. 写入前运行 `
|
|
19
|
-
5. 执行节点后读取返回的任务 ID,并用 `
|
|
23
|
+
1. 运行 `ai-short-studio auth status --json`。首次登录通过参数或 `VVICAT_BASE_URL`、`VVICAT_SUPABASE_URL`、`VVICAT_SUPABASE_PUBLISHABLE_KEY` 提供服务和 Supabase 公共配置,再运行 `ai-short-studio auth login --google`;非交互环境才通过 stdin 传密码。
|
|
24
|
+
若 Skill 来自 CLI 安装,先运行 `ai-short-studio skill status --json`;`current` 为 false 时提示用户运行 `ai-short-studio skill update`。
|
|
25
|
+
2. 完成上述初始化检查。确认目标项目是 `INFINITE_CANVAS`;创建测试项目时使用唯一前缀,并记录项目 ID。
|
|
26
|
+
3. 严格按节点目录返回的 schema 和默认配置构造数据。
|
|
27
|
+
4. 写入前运行 `ai-short-studio canvas get --project <id> --json` 获取当前结构;优先使用专用 node/edge 命令,批量变更才用 `canvas apply`。
|
|
28
|
+
5. 执行节点后读取返回的任务 ID,并用 `ai-short-studio task wait <taskId> --json` 等待终态。不要使用固定时长 sleep。
|
|
20
29
|
6. 下载前读取资产及所选版本,再使用 `canvas asset download` 写入明确目录。
|
|
21
|
-
7. 对临时项目始终在结束路径中执行 `
|
|
30
|
+
7. 对临时项目始终在结束路径中执行 `ai-short-studio project delete <id> --yes`,包括命令失败时。
|
|
22
31
|
|
|
23
|
-
详细命令按需读取 [references/commands.md](references/commands.md),或运行 `
|
|
32
|
+
详细命令按需读取 [references/commands.md](references/commands.md),或运行 `ai-short-studio <topic> --help`。
|
|
24
33
|
|
|
25
34
|
## 安全边界
|
|
26
35
|
|
|
@@ -33,10 +42,10 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
|
|
|
33
42
|
## 示例
|
|
34
43
|
|
|
35
44
|
```bash
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
ai-short-studio canvas node types --json
|
|
46
|
+
ai-short-studio project create --name "agent-draft-20260722" --json
|
|
47
|
+
ai-short-studio canvas node add text --project "$PROJECT_ID" --config ./node.json --json
|
|
48
|
+
ai-short-studio canvas node list --project "$PROJECT_ID" --json
|
|
40
49
|
```
|
|
41
50
|
|
|
42
51
|
从 JSON 输出中取得真实 ID;示例中的环境变量仅表示调用方已安全解析并保存结果。
|
|
@@ -44,6 +53,7 @@ vvicat canvas node list --project "$PROJECT_ID" --json
|
|
|
44
53
|
## 常见错误
|
|
45
54
|
|
|
46
55
|
- 节点类型写死:先读 `canvas node types`,服务端目录才是事实来源。
|
|
56
|
+
- 配置不全仍继续:先做初始化检查;模型、项目或用户意图有缺口时先询问。
|
|
47
57
|
- 只检查任务创建响应:必须 `task wait` 并检查终态和错误字段。
|
|
48
58
|
- 下载列表中的任意 URL:先确认资产的 selected version,再下载。
|
|
49
59
|
- 测试创建资源但未清理:用调用方的 `finally`/trap 删除唯一前缀项目。
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
## Skill 管理
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
ai-short-studio skill path --json
|
|
9
|
+
ai-short-studio skill install --target codex --json
|
|
10
|
+
ai-short-studio skill status --target codex --json
|
|
11
|
+
ai-short-studio skill update --target codex --json
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
`--target agents` 安装到 `~/.agents/skills`,`--directory` 可指定其他目录。更新不会覆盖用户修改,除非显式传入 `--force`。
|
|
@@ -16,10 +16,10 @@ vvicat skill update --target codex --json
|
|
|
16
16
|
## 认证
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
ai-short-studio auth login --google --base-url <url> --supabase-url <url> --supabase-publishable-key <key>
|
|
20
|
+
ai-short-studio auth login --email user@example.com --password-stdin --base-url <url> --supabase-url <url> --supabase-publishable-key <key>
|
|
21
|
+
ai-short-studio auth status --json
|
|
22
|
+
ai-short-studio auth logout
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Google 登录会打开浏览器并通过本机环回地址完成 PKCE 回调。
|
|
@@ -27,11 +27,11 @@ Google 登录会打开浏览器并通过本机环回地址完成 PKCE 回调。
|
|
|
27
27
|
## 项目
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
ai-short-studio project list --json
|
|
31
|
+
ai-short-studio project get <projectId> --json
|
|
32
|
+
ai-short-studio project create --name <name> [--description <text>] --json
|
|
33
|
+
ai-short-studio project update <projectId> [--name <name>] [--description <text>] --json
|
|
34
|
+
ai-short-studio project delete <projectId> --yes --json
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
创建操作固定写入 `INFINITE_CANVAS`;列表也只返回该类型。
|
|
@@ -39,15 +39,15 @@ vvicat project delete <projectId> --yes --json
|
|
|
39
39
|
## 画布和节点
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
ai-short-studio canvas get --project <projectId> --json
|
|
43
|
+
ai-short-studio canvas apply --project <projectId> --file <patch.json> --json
|
|
44
|
+
ai-short-studio canvas node types --json
|
|
45
|
+
ai-short-studio canvas node list --project <projectId> --json
|
|
46
|
+
ai-short-studio canvas node get <nodeId> --project <projectId> --json
|
|
47
|
+
ai-short-studio canvas node add <kind> --project <projectId> [--x N] [--y N] [--title <text>] [--config <config.json>] --json
|
|
48
|
+
ai-short-studio canvas node update <nodeId> --project <projectId> --config <config.json> --json
|
|
49
|
+
ai-short-studio canvas node delete <nodeId> --project <projectId> --yes --json
|
|
50
|
+
ai-short-studio canvas node run <nodeId> --project <projectId> --json
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
`canvas apply` 的 JSON 可以通过 `--file` 读取;省略文件时从 stdin 读取。提交批量变更时携带最近读取到的 `canvasId` 与 `expectedVersion`。
|
|
@@ -55,9 +55,9 @@ vvicat canvas node run <nodeId> --project <projectId> --json
|
|
|
55
55
|
## 连线
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
ai-short-studio canvas edge list --project <projectId> --json
|
|
59
|
+
ai-short-studio canvas edge add --project <projectId> --from <sourceNodeId>:<sourceHandle> --to <targetNodeId>:<targetHandle> --json
|
|
60
|
+
ai-short-studio canvas edge delete <edgeId> --project <projectId> --yes --json
|
|
61
61
|
```
|
|
62
62
|
|
|
63
63
|
handle 名称来自节点类型目录中的输入输出 schema,不要自行推断。
|
|
@@ -65,26 +65,26 @@ handle 名称来自节点类型目录中的输入输出 schema,不要自行推
|
|
|
65
65
|
## 资产与下载
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
68
|
+
ai-short-studio canvas asset list --project <projectId> --json
|
|
69
|
+
ai-short-studio canvas asset get <assetId> --project <projectId> --json
|
|
70
|
+
ai-short-studio canvas asset upload <file> --project <projectId> --json
|
|
71
|
+
ai-short-studio canvas asset select-version <assetId> --version <versionId> --project <projectId> --json
|
|
72
|
+
ai-short-studio canvas asset download <assetId> --project <projectId> --output <directory>
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
## 异步任务
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
ai-short-studio task get <taskId> --json
|
|
79
|
+
ai-short-studio task wait <taskId> [--interval 1000] --json
|
|
80
|
+
ai-short-studio task cancel <taskId> --yes --json
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
## 模型配置
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
ai-short-studio config get --json
|
|
87
|
+
ai-short-studio config set --file <config.json> --json
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
`config set` 接受 `models`、`providers`、`defaultModels`、`capabilityDefaults`、`workflowConcurrency` 的部分对象。provider 的 `apiKey` 缺省时保留现有密钥,空字符串表示清除;敏感配置文件不要提交到版本库。
|