@aswless_854771076/ai_short_studio_cli 0.1.95 → 0.1.97
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 +9 -8
- package/dist/auth/login-provider.d.ts +2 -0
- package/dist/auth/login-provider.js +3 -0
- package/dist/base-command.d.ts +6 -0
- package/dist/base-command.js +39 -1
- package/dist/commands/auth/login.d.ts +2 -1
- package/dist/commands/auth/login.js +5 -2
- package/dist/commands/auth/logout.d.ts +1 -0
- package/dist/commands/auth/signup.d.ts +1 -0
- package/dist/commands/auth/status.d.ts +1 -0
- package/dist/commands/canvas/apply.d.ts +1 -0
- package/dist/commands/canvas/asset/get.d.ts +1 -0
- package/dist/commands/canvas/asset/list.d.ts +1 -0
- package/dist/commands/canvas/asset/select.d.ts +1 -0
- package/dist/commands/canvas/asset/upload.d.ts +1 -0
- package/dist/commands/canvas/continuity/analyze.d.ts +1 -0
- package/dist/commands/canvas/edge/connect.d.ts +1 -0
- package/dist/commands/canvas/edge/disconnect.d.ts +1 -0
- package/dist/commands/canvas/edge/list.d.ts +1 -0
- package/dist/commands/canvas/episode/create.d.ts +1 -0
- package/dist/commands/canvas/episode/list.d.ts +1 -0
- package/dist/commands/canvas/folder/copy-cross-project.d.ts +1 -0
- package/dist/commands/canvas/folder/create.d.ts +1 -0
- package/dist/commands/canvas/folder/delete.d.ts +1 -0
- package/dist/commands/canvas/folder/list.d.ts +1 -0
- package/dist/commands/canvas/folder/move.d.ts +1 -0
- package/dist/commands/canvas/folder/rename.d.ts +1 -0
- package/dist/commands/canvas/folder/restore.d.ts +1 -0
- package/dist/commands/canvas/get.d.ts +1 -0
- package/dist/commands/canvas/inspect.d.ts +1 -0
- package/dist/commands/canvas/node/add.d.ts +1 -0
- package/dist/commands/canvas/node/delete.d.ts +1 -0
- package/dist/commands/canvas/node/edit-resource.d.ts +2 -0
- package/dist/commands/canvas/node/edit-resource.js +9 -1
- package/dist/commands/canvas/node/edit-shot.d.ts +1 -0
- package/dist/commands/canvas/node/get.d.ts +1 -0
- package/dist/commands/canvas/node/list.d.ts +1 -0
- package/dist/commands/canvas/node/quote.d.ts +17 -0
- package/dist/commands/canvas/node/quote.js +13 -0
- package/dist/commands/canvas/node/run.d.ts +12 -0
- package/dist/commands/canvas/node/run.js +41 -3
- package/dist/commands/canvas/node/types.d.ts +1 -0
- package/dist/commands/canvas/node/update-many.d.ts +1 -0
- package/dist/commands/canvas/node/update.d.ts +1 -0
- package/dist/commands/canvas/settings/get.d.ts +1 -0
- package/dist/commands/canvas/settings/set.d.ts +24 -0
- package/dist/commands/canvas/settings/set.js +60 -1
- package/dist/commands/config/ai-provider/capabilities.d.ts +34 -0
- package/dist/commands/config/ai-provider/capabilities.js +36 -2
- package/dist/commands/config/ai-provider/get.d.ts +1 -0
- package/dist/commands/config/ai-provider/list.d.ts +1 -0
- package/dist/commands/config/ai-provider/models.d.ts +1 -0
- package/dist/commands/config/ai-provider/set.d.ts +1 -0
- package/dist/commands/config/ai-provider/test.d.ts +1 -0
- package/dist/commands/config/get.d.ts +1 -0
- package/dist/commands/config/set.d.ts +1 -0
- package/dist/commands/preflight.d.ts +1 -0
- package/dist/commands/project/create.d.ts +1 -0
- package/dist/commands/project/delete.d.ts +1 -0
- package/dist/commands/project/get.d.ts +1 -0
- package/dist/commands/project/list.d.ts +1 -0
- package/dist/commands/project/provider/get.d.ts +1 -0
- package/dist/commands/project/provider/set.d.ts +1 -0
- package/dist/commands/project/provider/test.d.ts +1 -0
- package/dist/commands/project/update.d.ts +1 -0
- package/dist/commands/skill/install.d.ts +1 -0
- package/dist/commands/skill/install.js +1 -0
- package/dist/commands/skill/path.d.ts +1 -0
- package/dist/commands/skill/path.js +1 -0
- package/dist/commands/skill/status.d.ts +1 -0
- package/dist/commands/skill/status.js +1 -0
- package/dist/commands/task/cancel.d.ts +1 -0
- package/dist/commands/task/get.d.ts +1 -0
- package/dist/commands/task/wait.d.ts +1 -0
- package/dist/domain/vvicat-api.d.ts +3 -0
- package/dist/domain/vvicat-api.js +3 -0
- package/dist/output/formatter.d.ts +11 -0
- package/dist/output/formatter.js +20 -0
- package/dist/skill/command-flags.js +7 -4
- package/dist/skill/skill-manager.d.ts +88 -15
- package/dist/skill/skill-manager.js +61 -16
- package/package.json +1 -1
- package/scripts/postinstall.mjs +7 -12
- package/skills/using-vvicat-ai-short-studio-cli/SKILL.md +25 -54
- package/skills/using-vvicat-ai-short-studio-cli/references/b-roll-and-screen.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/caption-and-graphics-direction.md +11 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/commands/canvas.md +3 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/commands.md +1 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/composition-and-shot-review.md +17 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/craft-index.md +20 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/drama-canvas.md +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/editing-delivery.md +1 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/format-relationships.md +15 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/h3-prompts.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/h3-video-delivery.md +1 -1
- package/skills/using-vvicat-ai-short-studio-cli/references/image-and-reference-direction.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/licensed-music.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/licenses/oh-my-short-drama-MIT.txt +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/media-provenance-and-review.md +22 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/paid-plan.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/production-specialties.md +25 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/recreation.md +21 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/reference-analysis-and-timing.md +19 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/remotion-editing.md +18 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/shot-production.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/sound-and-captions.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/sources.md +6 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/special-workflows.md +2 -2
- package/skills/using-vvicat-ai-short-studio-cli/references/story-craft/canvas-production.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/story-craft/guide.md +7 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/story-craft/index.md +13 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/video-and-performance-direction.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/voice-and-sound-direction.md +9 -0
- package/skills/using-vvicat-ai-short-studio-cli/references/writing-polish.md +15 -0
- package/skills/humanizer/SKILL.md +0 -412
- package/skills/short-drama/README.md +0 -508
- package/skills/short-drama/SKILL.md +0 -525
- /package/skills/{humanizer/LICENSE → using-vvicat-ai-short-studio-cli/references/licenses/humanizer-MIT.txt} +0 -0
- /package/skills/{short-drama/LICENSE → using-vvicat-ai-short-studio-cli/references/licenses/short-drama-MIT.txt} +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/compliance-checklist.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/genre-guide.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/hook-design.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/opening-rules.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/paywall-design.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/rhythm-curve.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/satisfaction-matrix.md +0 -0
- /package/skills/{short-drama/references → using-vvicat-ai-short-studio-cli/references/story-craft}/villain-design.md +0 -0
package/README.md
CHANGED
|
@@ -9,11 +9,12 @@ ai-short-studio --version
|
|
|
9
9
|
ai-short-studio auth login --google
|
|
10
10
|
ai-short-studio project list --json
|
|
11
11
|
ai-short-studio canvas node types --json
|
|
12
|
+
ai-short-studio canvas node quote <nodeId> --project <projectId> --json
|
|
12
13
|
```
|
|
13
14
|
|
|
14
|
-
npm
|
|
15
|
+
npm 包仅内置 `using-vvicat-ai-short-studio-cli` 一个 Agent Skill。短剧编剧、文风润色、逐镜复刻、动作预演、声音字幕、Remotion 剪辑等方法按主 Skill 索引读取随包参考资料;不要求另装创作 Skill。安装或升级 CLI 时,`postinstall` 会自动安装或更新主 Skill。仅校验为旧版 CLI 托管且未修改的 `short-drama`、`humanizer` 目录会被清理;用户修改或非托管目录保留并在状态中提示。设置 `VVICAT_SKIP_SKILL_INSTALL=1` 可关闭自动安装。
|
|
15
16
|
|
|
16
|
-
`skill install/status/update`
|
|
17
|
+
`skill install/status/update` 只管理主 Skill。旧 `--skill short-drama`、`--skill humanizer` 是指向主 Skill 的弃用别名,会输出提示;不再创建旧目录。编剧和润色按主 Skill 索引完成,画布选版是唯一项目状态。
|
|
17
18
|
|
|
18
19
|
邮箱注册和登录从 stdin 读取密码:
|
|
19
20
|
|
|
@@ -118,7 +119,7 @@ ai-short-studio canvas folder copy-cross-project --project <sourceProjectId> --a
|
|
|
118
119
|
| 命令 | 用途 | 参数 / flag | 示例 | 失败退出码 |
|
|
119
120
|
| ---- | ---- | ----------- | ---- | ---------- |
|
|
120
121
|
| `auth signup` | 使用邮箱和密码注册账号 | `--email`、`--password-stdin`(boolean,默认 `false`)、`--supabase-url`(env `VVICAT_SUPABASE_URL`)、`--supabase-publishable-key`(env `VVICAT_SUPABASE_PUBLISHABLE_KEY`)、`--locale` | `ai-short-studio auth signup --email user@example.com --password-stdin` | 6 / 7 |
|
|
121
|
-
| `auth login` |
|
|
122
|
+
| `auth login` | 使用 Supabase 或网页端 MemHub 身份登录 | `--email`、`--google`、`--provider memhub`、`--password-stdin`、`--supabase-url`、`--supabase-publishable-key` | `ai-short-studio auth login --provider memhub` | 3 / 7 |
|
|
122
123
|
| `auth logout` | 注销并清除本机 refresh token 与 session 缓存 | 仅全局 flag | `ai-short-studio auth logout --json` | 7 |
|
|
123
124
|
| `auth status` | 检查当前登录状态 | 仅全局 flag | `ai-short-studio auth status --json` | 3 / 7 |
|
|
124
125
|
|
|
@@ -170,6 +171,7 @@ ai-short-studio canvas folder copy-cross-project --project <sourceProjectId> --a
|
|
|
170
171
|
| `canvas node types` | 读取服务端实时节点类型、默认配置与 schema | 位置参数 `kind`(可选,只看单个 kind) | `ai-short-studio canvas node types tts --json` | 4 / 7 |
|
|
171
172
|
| `canvas node list` | 列出节点(客户端过滤) | `--kind`(multiple)、`--status`(multiple)、`--search`、`--producer-node` | `ai-short-studio canvas node list --project "$PROJECT_ID" --kind storyboard-shot --json` | 4 / 7 |
|
|
172
173
|
| `canvas node get` | 读取单个节点 | 位置参数 `nodeId`(**必填**) | `ai-short-studio canvas node get <nodeId> --project "$PROJECT_ID" --json` | 4 / 7 |
|
|
174
|
+
| `canvas node quote` | 只读核对节点计费参数与已发布价格,不提交任务 | 位置参数 `nodeId`(**必填**)、`--project` | `ai-short-studio canvas node quote <nodeId> --project "$PROJECT_ID" --json` | 4 / 7 |
|
|
173
175
|
| `canvas node add` | 新建节点(只提交 kind + 配置,版本由服务端固定) | 位置参数 `kind`(**必填**)、`--x`(默认 `0`)、`--y`(默认 `0`)、`--title`、`--config`(JSON 文件) | `ai-short-studio canvas node add video-frame-extract --project "$PROJECT_ID" --config extract.json --json` | 5 / 6 / 7 |
|
|
174
176
|
| `canvas node update` | 字段级更新单个节点 | 位置参数 `nodeId`(**必填**)、`--set 'key=<JSON>'`(multiple)、`--unset key`(multiple)、`--title`、`--x`、`--y`、`--config`(兼容旧入口,省略且无字段 flag 时读 stdin) | `ai-short-studio canvas node update <nodeId> --project "$PROJECT_ID" --set 'gridSize=9' --unset legacyField --json` | 4 / 5 / 6 / 7 |
|
|
175
177
|
| `canvas node update-many` | 一次画布版本基线上原子更新多个节点 | `--file`(含 `updates` 数组的 JSON,省略时读 stdin) | `ai-short-studio canvas node update-many --project "$PROJECT_ID" --file updates.json --json` | 4 / 5 / 6 / 7 |
|
|
@@ -265,7 +267,7 @@ ai-short-studio canvas folder copy-cross-project --project <sourceProjectId> --a
|
|
|
265
267
|
|
|
266
268
|
| 命令 | 用途 | 参数 / flag | 示例 | 失败退出码 |
|
|
267
269
|
| ---- | ---- | ----------- | ---- | ---------- |
|
|
268
|
-
| `skill install`(实现与 `skill update` 相同) | 安装/更新内置 Agent Skill | `--target`(默认 `codex`,可选 `codex` / `agents`)、`--skill`(默认 `all`,可选 `all` / `using-vvicat-ai-short-studio-cli
|
|
270
|
+
| `skill install`(实现与 `skill update` 相同) | 安装/更新内置 Agent Skill | `--target`(默认 `codex`,可选 `codex` / `agents`)、`--skill`(默认 `all`,可选 `all` / `using-vvicat-ai-short-studio-cli`;旧名称仅作弃用别名)、`--root`(主 Skill 根目录)、`--directory`(兼容旧版,主 Skill 精确目录;与 `--root` 互斥)、`--force`(覆盖非托管或已修改的 Skill) | `ai-short-studio skill update --target codex --json` | 7 |
|
|
269
271
|
| `skill status` | 查看已安装 Skill 版本与修改状态 | 同上(无 `--force`) | `ai-short-studio skill status --target codex --json` | 7 |
|
|
270
272
|
| `skill path` | 打印内置 Skill 打包路径与目标安装路径 | 同上(无 `--force`) | `ai-short-studio skill path --target agents --json` | 7 |
|
|
271
273
|
|
|
@@ -337,7 +339,7 @@ CLI 通过 `/api/v1/bootstrap` 完成版本、连通性与 Supabase 公共配置
|
|
|
337
339
|
|
|
338
340
|
`storyboard-breakdown` 还可按实时 schema 写入 `targetDurationSeconds`、`pacingPreset` 和 `maxShotCount`。它们是镜头规划预算,超出只提示而不阻塞源文完整覆盖;留空时不限制镜头数,也不启用时长硬门禁。生成链采用滚动异步调度:单镜分镜图完成后立即进入视频提示词,提示词通过审计后立即提交该镜视频,可恢复失败不阻塞其他镜头。内置 Skill 同时补全字幕、人物/场景首次介绍角标、有动机的镜头衔接、声音平衡和成片验收流程。
|
|
339
341
|
|
|
340
|
-
|
|
342
|
+
标准短剧制作按主 Skill 的编剧参考生成和复核专业剧本,再按文风参考审计模板化台词、虚浮修辞与机械节奏,随后重跑画布剧本审校(已有专业剧本直接复用)。Humanizer 只润色表达,不改剧情事实、人物关系、专有名词、数字、时间线、世界观规则、场次结构或拍摄标记。剧本确认后再选择目标集数、创建或复用项目,并只建立目标集实际出现的人物、场景、道具和可选音色设定。拆镜前必须完成资产—剧情匹配审计;拆镜后逐镜全量检查重复、无效、缺失、冲突、穿帮、连续性、道具交互朝向、语言和来源身份。P0/P1 未清零时不得进入图片、声音或视频生产。
|
|
341
343
|
|
|
342
344
|
`character-visual-design` schema 暴露 `candidateCount`,范围为 1~3,默认值为 1。CLI 按实时 schema 校验和写入;多个视觉描述仍分别进入独立三视图和图片资产链。
|
|
343
345
|
|
|
@@ -392,11 +394,10 @@ node scripts/smoke-remote.mjs --dry-run # 打印命令清单 +
|
|
|
392
394
|
ai-short-studio skill install --target codex
|
|
393
395
|
ai-short-studio skill status --target codex
|
|
394
396
|
ai-short-studio skill update --target codex
|
|
395
|
-
ai-short-studio skill update --target codex --
|
|
396
|
-
ai-short-studio skill update --target codex --skill humanizer --json
|
|
397
|
+
ai-short-studio skill update --target codex --json
|
|
397
398
|
```
|
|
398
399
|
|
|
399
|
-
手动恢复或安装到其他 Agent 时,可使用 `--target agents
|
|
400
|
+
手动恢复或安装到其他 Agent 时,可使用 `--target agents`;自定义主 Skill 的父目录使用 `--root <path>`。旧版 `--directory <path>` 保留为兼容入口,只把主 CLI Skill 精确安装到该目录。自动安装对应使用 `VVICAT_SKILLS_ROOT`;旧变量 `VVICAT_SKILL_DIRECTORY` 仍保持主 Skill 精确目录语义。CLI 会记录版本和 SHA-256;已安装 Skill 被用户修改后,更新默认停止,只有显式 `--force` 才覆盖。自动安装可通过 `VVICAT_SKIP_SKILL_INSTALL=1` 跳过。
|
|
400
401
|
|
|
401
402
|
## 发布
|
|
402
403
|
|
package/dist/base-command.d.ts
CHANGED
|
@@ -6,7 +6,13 @@ export declare abstract class BaseCommand extends Command {
|
|
|
6
6
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
7
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
10
|
};
|
|
11
|
+
/**
|
|
12
|
+
* 输出 JSON。指定了 --output / CLI_OUTPUT_FILE 时改由 Node 以 utf-8 写文件,
|
|
13
|
+
* 不经过终端句柄 —— 这是 Windows 非 UTF-8 代码页下唯一可靠的应用层通道
|
|
14
|
+
* (见 P0-4)。未指定时保持原有 stdout 行为。
|
|
15
|
+
*/
|
|
10
16
|
protected print(value: unknown): void;
|
|
11
17
|
catch(error: unknown): Promise<void>;
|
|
12
18
|
}
|
package/dist/base-command.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { writeFileSync } from 'node:fs';
|
|
1
2
|
import { Command, Flags } from '@oclif/core';
|
|
2
3
|
import { CliApiError } from './client/errors.js';
|
|
3
|
-
import { formatJson } from './output/formatter.js';
|
|
4
|
+
import { formatJson, resolveOutputFile } from './output/formatter.js';
|
|
4
5
|
export class BaseCommand extends Command {
|
|
5
6
|
static baseFlags = {
|
|
6
7
|
'base-url': Flags.string({ description: 'VVICAT 服务地址', env: 'VVICAT_BASE_URL' }),
|
|
@@ -8,8 +9,30 @@ export class BaseCommand extends Command {
|
|
|
8
9
|
locale: Flags.string({ description: '响应语言', default: 'zh', options: ['zh', 'en'] }),
|
|
9
10
|
profile: Flags.string({ description: '配置档案名称' }),
|
|
10
11
|
episode: Flags.string({ description: '画布分集 ID 或集数', env: 'VVICAT_CANVAS_EPISODE' }),
|
|
12
|
+
output: Flags.string({
|
|
13
|
+
description: '把 JSON 输出以 UTF-8 写入指定文件(绕开终端代码页)。也可用环境变量 CLI_OUTPUT_FILE 设置。',
|
|
14
|
+
}),
|
|
11
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* 输出 JSON。指定了 --output / CLI_OUTPUT_FILE 时改由 Node 以 utf-8 写文件,
|
|
18
|
+
* 不经过终端句柄 —— 这是 Windows 非 UTF-8 代码页下唯一可靠的应用层通道
|
|
19
|
+
* (见 P0-4)。未指定时保持原有 stdout 行为。
|
|
20
|
+
*/
|
|
12
21
|
print(value) {
|
|
22
|
+
// oclif 把 this.parsed 定义为 boolean,不保留 flags;--output 只能从 argv 原样读取。
|
|
23
|
+
// 两种写法都支持:--output <file> 与 --output=<file>。
|
|
24
|
+
const flagValue = readOutputFlag(this.argv);
|
|
25
|
+
const file = resolveOutputFile(flagValue);
|
|
26
|
+
if (file) {
|
|
27
|
+
try {
|
|
28
|
+
writeFileSync(file, formatJson(value), { encoding: 'utf8' });
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw new Error(`写入 --output 文件失败(${file}):${error instanceof Error ? error.message : String(error)}`);
|
|
32
|
+
}
|
|
33
|
+
this.logToStderr(`JSON 输出已写入 ${file}`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
13
36
|
this.log(formatJson(value));
|
|
14
37
|
}
|
|
15
38
|
async catch(error) {
|
|
@@ -27,6 +50,21 @@ export class BaseCommand extends Command {
|
|
|
27
50
|
this.error(error instanceof Error ? error.message : String(error), { exit: 7 });
|
|
28
51
|
}
|
|
29
52
|
}
|
|
53
|
+
/** 从原始 argv 中取 --output 的值;不支持 --output 后跟 -- 时按 oclif 规则视为缺值。 */
|
|
54
|
+
function readOutputFlag(argv) {
|
|
55
|
+
if (!argv)
|
|
56
|
+
return undefined;
|
|
57
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
58
|
+
const token = argv[index];
|
|
59
|
+
if (token === '--output') {
|
|
60
|
+
const next = argv[index + 1];
|
|
61
|
+
return next && !next.startsWith('-') ? next : undefined;
|
|
62
|
+
}
|
|
63
|
+
if (token.startsWith('--output='))
|
|
64
|
+
return token.slice('--output='.length) || undefined;
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
30
68
|
function exitCode(status) {
|
|
31
69
|
if (status === 401)
|
|
32
70
|
return 3;
|
|
@@ -4,7 +4,7 @@ export default class AuthLogin extends BaseCommand {
|
|
|
4
4
|
static flags: {
|
|
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
|
-
provider: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
7
|
+
provider: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
'password-stdin': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
9
9
|
'supabase-publishable-key': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
'supabase-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
@@ -13,6 +13,7 @@ export default class AuthLogin extends BaseCommand {
|
|
|
13
13
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
14
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
17
|
};
|
|
17
18
|
run(): Promise<void>;
|
|
18
19
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Flags } from '@oclif/core';
|
|
2
2
|
import { BaseCommand } from '../../base-command.js';
|
|
3
3
|
import { createRuntime } from '../../runtime.js';
|
|
4
|
+
import { ProfileStore } from '../../config/profiles.js';
|
|
4
5
|
import { promptLine, promptPassword, readStdinText } from '../../terminal/prompt.js';
|
|
5
6
|
import { loginWithMemHubPkce } from '../../auth/memhub-oauth.js';
|
|
7
|
+
import { resolveLoginProvider } from '../../auth/login-provider.js';
|
|
6
8
|
export default class AuthLogin extends BaseCommand {
|
|
7
9
|
static description = '通过 Supabase 或 MemHub 登录,并将长期凭据保存到系统钥匙串';
|
|
8
10
|
static flags = {
|
|
@@ -12,7 +14,6 @@ export default class AuthLogin extends BaseCommand {
|
|
|
12
14
|
provider: Flags.string({
|
|
13
15
|
description: '登录提供方',
|
|
14
16
|
options: ['supabase', 'memhub'],
|
|
15
|
-
default: 'supabase',
|
|
16
17
|
}),
|
|
17
18
|
'password-stdin': Flags.boolean({ description: '从标准输入读取密码', default: false }),
|
|
18
19
|
'supabase-publishable-key': Flags.string({ description: 'Supabase publishable key', env: 'VVICAT_SUPABASE_PUBLISHABLE_KEY' }),
|
|
@@ -20,7 +21,9 @@ export default class AuthLogin extends BaseCommand {
|
|
|
20
21
|
};
|
|
21
22
|
async run() {
|
|
22
23
|
const { flags } = await this.parse(AuthLogin);
|
|
23
|
-
const
|
|
24
|
+
const profiles = new ProfileStore();
|
|
25
|
+
const selected = flags.profile ? await profiles.get(flags.profile) : await profiles.current();
|
|
26
|
+
const authProvider = resolveLoginProvider(flags.provider, selected);
|
|
24
27
|
if (authProvider === 'memhub' && (flags.google || flags.email || flags['password-stdin'])) {
|
|
25
28
|
throw new Error('MemHub 登录使用浏览器授权,不能同时传入邮箱、Google 或密码参数');
|
|
26
29
|
}
|
|
@@ -7,6 +7,7 @@ export default class AuthLogout extends BaseCommand {
|
|
|
7
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
};
|
|
11
12
|
run(): Promise<void>;
|
|
12
13
|
}
|
|
@@ -12,6 +12,7 @@ export default class AuthSignup extends BaseCommand {
|
|
|
12
12
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
14
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
16
|
};
|
|
16
17
|
run(): Promise<void>;
|
|
17
18
|
}
|
|
@@ -7,6 +7,7 @@ export default class AuthStatus extends BaseCommand {
|
|
|
7
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
};
|
|
11
12
|
run(): Promise<void>;
|
|
12
13
|
}
|
|
@@ -10,6 +10,7 @@ export default class CanvasApply extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
};
|
|
14
15
|
run(): Promise<void>;
|
|
15
16
|
}
|
|
@@ -10,6 +10,7 @@ export default class CanvasAssetGet extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
};
|
|
14
15
|
run(): Promise<void>;
|
|
15
16
|
}
|
|
@@ -9,6 +9,7 @@ export default class CanvasAssetList extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -12,6 +12,7 @@ export default class CanvasAssetSelect extends BaseCommand {
|
|
|
12
12
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
14
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
16
|
};
|
|
16
17
|
run(): Promise<void>;
|
|
17
18
|
}
|
|
@@ -24,6 +24,7 @@ export default class CanvasAssetUpload extends BaseCommand {
|
|
|
24
24
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
25
25
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
26
26
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
27
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
27
28
|
};
|
|
28
29
|
run(): Promise<void>;
|
|
29
30
|
}
|
|
@@ -9,6 +9,7 @@ export default class CanvasContinuityAnalyze extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -9,6 +9,7 @@ export default class CanvasEdgeConnect extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -11,6 +11,7 @@ export default class CanvasEdgeDisconnect extends BaseCommand {
|
|
|
11
11
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
|
15
16
|
run(): Promise<void>;
|
|
16
17
|
}
|
|
@@ -7,6 +7,7 @@ export default class CanvasEdgeList extends BaseCommand {
|
|
|
7
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
};
|
|
11
12
|
run(): Promise<void>;
|
|
12
13
|
}
|
|
@@ -9,6 +9,7 @@ export default class CanvasEpisodeCreate extends BaseCommand {
|
|
|
9
9
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
};
|
|
13
14
|
run(): Promise<void>;
|
|
14
15
|
}
|
|
@@ -7,6 +7,7 @@ export default class CanvasEpisodeList extends BaseCommand {
|
|
|
7
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
};
|
|
11
12
|
run(): Promise<void>;
|
|
12
13
|
}
|
|
@@ -20,6 +20,7 @@ export default class CanvasFolderCopyCrossProject extends BaseCommand {
|
|
|
20
20
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
21
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
22
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
24
|
};
|
|
24
25
|
run(): Promise<void>;
|
|
25
26
|
}
|
|
@@ -15,6 +15,7 @@ export default class CanvasFolderCreate extends BaseCommand {
|
|
|
15
15
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
17
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
19
|
};
|
|
19
20
|
run(): Promise<void>;
|
|
20
21
|
}
|
|
@@ -14,6 +14,7 @@ export default class CanvasFolderDelete extends BaseCommand {
|
|
|
14
14
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
18
|
};
|
|
18
19
|
run(): Promise<void>;
|
|
19
20
|
}
|
|
@@ -14,6 +14,7 @@ export default class CanvasFolderList extends BaseCommand {
|
|
|
14
14
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
18
|
};
|
|
18
19
|
run(): Promise<void>;
|
|
19
20
|
}
|
|
@@ -16,6 +16,7 @@ export default class CanvasFolderMove extends BaseCommand {
|
|
|
16
16
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
17
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
18
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
20
|
};
|
|
20
21
|
run(): Promise<void>;
|
|
21
22
|
}
|
|
@@ -16,6 +16,7 @@ export default class CanvasFolderRename extends BaseCommand {
|
|
|
16
16
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
17
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
18
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
20
|
};
|
|
20
21
|
run(): Promise<void>;
|
|
21
22
|
}
|
|
@@ -14,6 +14,7 @@ export default class CanvasFolderRestore extends BaseCommand {
|
|
|
14
14
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
18
|
};
|
|
18
19
|
run(): Promise<void>;
|
|
19
20
|
}
|
|
@@ -7,6 +7,7 @@ export default class CanvasGet extends BaseCommand {
|
|
|
7
7
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
};
|
|
11
12
|
run(): Promise<void>;
|
|
12
13
|
}
|
|
@@ -15,6 +15,7 @@ export default class CanvasInspect extends BaseCommand {
|
|
|
15
15
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
17
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
19
|
};
|
|
19
20
|
run(): Promise<void>;
|
|
20
21
|
}
|
|
@@ -14,6 +14,7 @@ export default class CanvasNodeAdd extends BaseCommand {
|
|
|
14
14
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
15
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
16
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
18
|
};
|
|
18
19
|
run(): Promise<void>;
|
|
19
20
|
}
|
|
@@ -11,6 +11,7 @@ export default class CanvasNodeDelete extends BaseCommand {
|
|
|
11
11
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
|
15
16
|
run(): Promise<void>;
|
|
16
17
|
}
|
|
@@ -6,11 +6,13 @@ export default class CanvasNodeEditResource extends BaseCommand {
|
|
|
6
6
|
static flags: {
|
|
7
7
|
project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
8
|
file: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
'markdown-file': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
10
|
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
12
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
16
|
};
|
|
15
17
|
run(): Promise<void>;
|
|
16
18
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Args, Flags } from '@oclif/core';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
2
3
|
import { BaseCommand } from '../../../base-command.js';
|
|
3
4
|
import { commandApi, projectFlag, readJsonInput } from '../../../command-helpers.js';
|
|
4
5
|
export default class CanvasNodeEditResource extends BaseCommand {
|
|
@@ -7,6 +8,7 @@ export default class CanvasNodeEditResource extends BaseCommand {
|
|
|
7
8
|
...BaseCommand.baseFlags,
|
|
8
9
|
project: projectFlag,
|
|
9
10
|
file: Flags.string({ description: '结构化资源 JSON 文件;省略时读取 stdin' }),
|
|
11
|
+
'markdown-file': Flags.string({ description: '短剧单集剧本 Markdown 文件', exclusive: ['file'] }),
|
|
10
12
|
};
|
|
11
13
|
async run() {
|
|
12
14
|
const { args, flags } = await this.parse(CanvasNodeEditResource);
|
|
@@ -36,10 +38,16 @@ export default class CanvasNodeEditResource extends BaseCommand {
|
|
|
36
38
|
}
|
|
37
39
|
if (!basedOnVersionId)
|
|
38
40
|
throw new Error('结构化资源当前版本不存在');
|
|
41
|
+
if (flags['markdown-file'] && artifact.operation !== 'drama-episode') {
|
|
42
|
+
throw new Error('--markdown-file 只适用于短剧单集剧本资源');
|
|
43
|
+
}
|
|
44
|
+
const resource = flags['markdown-file']
|
|
45
|
+
? { markdown: await readFile(flags['markdown-file'], 'utf8') }
|
|
46
|
+
: await readJsonInput(flags.file);
|
|
39
47
|
this.print(await api.updateStructuredResource(flags.project, args.nodeId, {
|
|
40
48
|
expectedCanvasVersion: canvas.version,
|
|
41
49
|
basedOnVersionId,
|
|
42
|
-
resource
|
|
50
|
+
resource,
|
|
43
51
|
}));
|
|
44
52
|
}
|
|
45
53
|
}
|
|
@@ -11,6 +11,7 @@ export default class CanvasNodeEditShot extends BaseCommand {
|
|
|
11
11
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
|
15
16
|
run(): Promise<void>;
|
|
16
17
|
}
|
|
@@ -10,6 +10,7 @@ export default class CanvasNodeGet extends BaseCommand {
|
|
|
10
10
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
11
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
14
|
};
|
|
14
15
|
run(): Promise<void>;
|
|
15
16
|
}
|
|
@@ -11,6 +11,7 @@ export default class CanvasNodeList extends BaseCommand {
|
|
|
11
11
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
12
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
13
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
15
|
};
|
|
15
16
|
run(): Promise<void>;
|
|
16
17
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
2
|
+
export default class CanvasNodeQuote extends BaseCommand {
|
|
3
|
+
static description: string;
|
|
4
|
+
static args: {
|
|
5
|
+
nodeId: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
|
|
6
|
+
};
|
|
7
|
+
static flags: {
|
|
8
|
+
project: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
|
+
'base-url': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
};
|
|
16
|
+
run(): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Args } from '@oclif/core';
|
|
2
|
+
import { BaseCommand } from '../../../base-command.js';
|
|
3
|
+
import { commandApi, projectFlag } from '../../../command-helpers.js';
|
|
4
|
+
export default class CanvasNodeQuote extends BaseCommand {
|
|
5
|
+
static description = '只读核对画布节点的模型、请求参数和已发布价格;不提交任务或冻结积分';
|
|
6
|
+
static args = { nodeId: Args.string({ required: true }) };
|
|
7
|
+
static flags = { ...BaseCommand.baseFlags, project: projectFlag };
|
|
8
|
+
async run() {
|
|
9
|
+
const { args, flags } = await this.parse(CanvasNodeQuote);
|
|
10
|
+
const { api } = await commandApi(flags);
|
|
11
|
+
this.print((await api.quoteNode(flags.project, args.nodeId)).quote);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
import { BaseCommand } from '../../../base-command.js';
|
|
2
|
+
/**
|
|
3
|
+
* P1-2 契约:调用方必须能从 stdout JSON 直接区分
|
|
4
|
+
* 「已等待到终态」与「仅提交、仍在服务端排队」。
|
|
5
|
+
* 因此每次输出都带 waited / pending / pendingNodeIds / reason,
|
|
6
|
+
* 不再允许出现「空 tasks + exit 0」这种伪装成同步完成的输出。
|
|
7
|
+
*/
|
|
8
|
+
export declare function withWaitState(payload: unknown, state: {
|
|
9
|
+
waited: boolean;
|
|
10
|
+
pendingNodeIds: string[];
|
|
11
|
+
reason?: string;
|
|
12
|
+
}): Record<string, unknown>;
|
|
2
13
|
export default class CanvasNodeRun extends BaseCommand {
|
|
3
14
|
static args: {
|
|
4
15
|
nodeId: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
|
|
@@ -17,6 +28,7 @@ export default class CanvasNodeRun extends BaseCommand {
|
|
|
17
28
|
locale: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
29
|
profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
19
30
|
episode: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
31
|
+
output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
32
|
};
|
|
21
33
|
run(): Promise<void>;
|
|
22
34
|
}
|