@lingjingai/lj-awb-cli-pre 0.4.0 → 0.4.5

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.
@@ -1,16 +1,19 @@
1
1
  ---
2
2
  name: lj-awb
3
- version: 0.4.0
4
- description: "灵境 AWB CLI skill。使用 `lj-awb` 命令调用动漫平台 / AWB 云端能力,覆盖认证、项目组、积分、模型发现、上传、统一 create 创建域、任务查询、最终产物 artifact CRUD 与本地 JSON 导入。用户说生图、生视频、主体、音色、素材加白、去字幕、artifact 写入或查询时使用。正式生成、切换项目组、清空认证、artifact 写入等写入或扣费动作前必须确认。"
3
+ version: 0.4.5
4
+ description: "灵境 AWB CLI skill。使用 `lj-awb` 命令调用动漫平台 / AWB 云端能力,覆盖认证、项目组、积分、模型发现、上传、统一 create 创建域、任务查询、视频超分、最终产物 artifact CRUD 与本地 JSON 导入。用户说生图、生视频、视频超分、主体、音色、素材加白、去字幕、artifact 写入或查询时使用。正式生成、切换项目组、清空认证、artifact 写入等写入或扣费动作前必须确认。"
5
5
  metadata:
6
- requires:
7
- bins: ["lj-awb"]
6
+ bootstrap:
7
+ package: "@lingjingai/lj-awb-cli"
8
+ version: "0.4.5"
9
+ bin: "lj-awb"
8
10
  cliHelp: "lj-awb --help"
9
11
  ---
10
12
 
11
13
  # lj-awb CLI Skill
12
14
 
13
15
  `lj-awb` 是确定性 CLI,skill 的职责是调度:少查、少问、少重跑,按 schema 和业务链条把命令串对。不要把本 skill 当成一堆命令片段来拼。
16
+ 普通命令如果 JSON 输出里出现 `meta._notice.update`,先完成当前用户请求,再告诉用户当前版本和最新版本,并建议执行 `lj-awb update`;更新后提醒重新打开 AI Agent。
14
17
 
15
18
  ## 先读驱动器
16
19
 
@@ -25,22 +28,35 @@ metadata:
25
28
 
26
29
  ## 入口命令
27
30
 
28
- 优先直接使用全局 CLI
31
+ skill 是完整入口:如果用户只安装了 skill,也要先自举补齐 CLI。每个新环境第一次使用 `lj-awb` 前,先解析命令:
29
32
 
30
33
  ```bash
31
- lj-awb --help
34
+ for dir in "$PWD/skills/lj-awb" "$HOME/.codex/skills/lj-awb" "$HOME/.claude/skills/lj-awb" "$HOME/.cc-switch/skills/lj-awb"; do
35
+ if [ -x "$dir/scripts/resolve-lj-awb-cmd.sh" ]; then
36
+ LINGJING_AWB_CMD="$(bash "$dir/scripts/resolve-lj-awb-cmd.sh")"
37
+ break
38
+ fi
39
+ done
40
+ : "${LINGJING_AWB_CMD:?lj-awb bootstrap script not found}"
32
41
  ```
33
42
 
34
- 源码调试或不确定路径时再解析:
43
+ `resolve-lj-awb-cmd.sh` 会按顺序处理:
44
+
45
+ - 已存在兼容版本 `lj-awb`:直接返回命令路径。
46
+ - 未安装或版本低于 [`compat.json`](compat.json) 的 `minCliVersion`:自动执行 `npm install -g @lingjingai/lj-awb-cli@<minCliVersion>`。
47
+ - 用户要预发环境时,安装前设置 `LINGJING_AWB_CLI_PACKAGE=@lingjingai/lj-awb-cli-pre`。
48
+ - 缺少 npm / Node 时,提示用户先安装 Node.js `>=20`,再重试。
49
+
50
+ 脚本 stdout 只输出可执行命令;安装日志和错误走 stderr。后续命令优先使用解析结果:
35
51
 
36
52
  ```bash
37
- LINGJING_AWB_CMD="$(bash "$(dirname "$0")/scripts/resolve-lj-awb-cmd.sh")"
53
+ "$LINGJING_AWB_CMD" --help
38
54
  ```
39
55
 
40
56
  非单条查询任务、命令不确定或涉及写入 / 扣费时,本轮只读一次机器契约:
41
57
 
42
58
  ```bash
43
- lj-awb schema --brief -f json
59
+ "$LINGJING_AWB_CMD" schema --brief -f json
44
60
  ```
45
61
 
46
62
  `schema --brief` 只用于掌握能力域、安全分组、业务路由和 agentContract。执行具体命令前,如果命令、参数、requiredOptions、safety 或 nextActions 不确定,再读精确契约,例如 `lj-awb schema --domain model --command video-models -f json`。不要把完整 `lj-awb schema -f json` 当默认入口;只有校验覆盖、脚本生成或 brief 缺失字段时才读完整 schema。
@@ -48,6 +64,7 @@ lj-awb schema --brief -f json
48
64
  schema 查询必须先返回,再组织业务命令;不要把 schema 查询和猜测命令放进同一批并行调用。
49
65
 
50
66
  如果用户已经给出完整只读命令,且该命令在本 skill 已知范围内,可以直接执行,不必为了形式补跑 schema。命令名、参数名、requiredOptions、safety、workflow.nextActions 都以 schema 为准。旧根域 `image` / `video` / `asset` / `subject` 不存在,不要尝试旧入口。
67
+ `update` 只做显式安装;`update --check` 只检查不安装。
51
68
 
52
69
  ## 能力地图
53
70
 
@@ -70,6 +87,7 @@ schema 查询必须先返回,再组织业务命令;不要把 schema 查询
70
87
  | “有哪些模型 / 推荐模型 / 用某某模型” | [`modules/model.md`](modules/model.md),模型口语名默认是平台模型,不是本地工具 |
71
88
  | “生图 / 生成图片 / 参考图生图” | [`modules/driver.md`](modules/driver.md) 创作链条 + [`modules/create-contract.md`](modules/create-contract.md) |
72
89
  | “生视频 / 首帧 / 首尾帧 / 音频参考 / 让图动起来” | [`modules/driver.md`](modules/driver.md) 创作链条 + [`modules/task-manual.md`](modules/task-manual.md) |
90
+ | “超分 / 放大到 2K / 1080P” | [`modules/video.md`](modules/video.md),传 `objectName` 走 material 视频超分任务体系 |
73
91
  | “固定角色 / 主体 / 同一个人 / 可灵或 Vidu 角色一致” | [`modules/subject.md`](modules/subject.md) |
74
92
  | “主体音色 / 音色克隆 / 给主体配音色” | [`modules/subject.md`](modules/subject.md) |
75
93
  | “素材加白 / 白名单 / 过审 / 素材组” | [`modules/asset.md`](modules/asset.md) |
@@ -105,6 +123,8 @@ schema 查询必须先返回,再组织业务命令;不要把 schema 查询
105
123
 
106
124
  ## 安装与版本
107
125
 
126
+ 如果用户只安装了 skill,第一次使用时会由 bootstrap 脚本自动安装 CLI。手动安装命令如下:
127
+
108
128
  ```bash
109
129
  npm install -g @lingjingai/lj-awb-cli
110
130
  ```
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.5
@@ -1,6 +1,6 @@
1
1
  {
2
- "skillVersion": "0.4.0",
3
- "minCliVersion": "0.4.0",
2
+ "skillVersion": "0.4.5",
3
+ "minCliVersion": "0.4.5",
4
4
  "preferredCommand": "lj-awb",
5
- "updatedAt": "2026-05-20"
5
+ "updatedAt": "2026-06-10"
6
6
  }
@@ -12,8 +12,11 @@
12
12
  | `lj-awb create asset-group --platform JIMENG --name "<name>" --dry-run` | 预览创建素材组 |
13
13
  | `lj-awb create asset-group --platform JIMENG --name "<name>" --yes` | 创建素材组(云端写入) |
14
14
  | `lj-awb create asset-group-update --group-id <id> --platform JIMENG --name "<name>" --yes` | 改指定平台素材组名 |
15
- | `lj-awb create asset --group-id <id> --platform JIMENG --url "asset-review/a.png" --name "女主正面" --yes` | 注册已上传素材 |
15
+ | `lj-awb create asset --group-id <id> --platform JIMENG --url "asset-review/a.png" --name "女主正面" --yes` | 注册已上传素材;CLI 自动按扩展名传 `assetType` |
16
16
  | `lj-awb create asset --group-id <id> --platform JIMENG --file ./a.png --name "女主正面" --yes` | 先上传到 asset-review 场景再注册(一步完成) |
17
+ | `lj-awb create asset --group-id <id> --platform JIMENG --file ./clip.mp4 --name "参考视频" --dry-run` | 视频素材加白,自动传 `assetType=Video` |
18
+ | `lj-awb create asset --group-id <id> --platform JIMENG --file ./voice.wav --name "参考音频" --dry-run` | 音频素材加白,自动传 `assetType=Audio` |
19
+ | `lj-awb create asset --group-id <id> --platform JIMENG --file ./clip.mov --name "参考视频" --auto-convert --yes` | 本地素材不合法时自动转码为加白规格后上传 |
17
20
  | `lj-awb create asset-match-actor --description "..." --tags-json '[{"tagId":"o_102"}]'` | 候选匹配(角色画风 / 标签) |
18
21
 
19
22
  ## 什么时候用 match-actor
@@ -47,6 +50,12 @@ lj-awb create video --model-group-code <videoModelGroupCode> \
47
50
 
48
51
  - `create asset-group` / `create asset-group-update` / `create asset` 都是云端写入,**必须确认**后追加 `--yes`。
49
52
  - `create asset-*` 平台必须显式传 `--platform JIMENG|BYTEPLUS`;不要依赖默认平台,不要传中文名、小写名或供应商别名。
53
+ - `create asset` 会自动判断并传入 `assetType=Image|Video|Audio`;不要让用户手填资产类型。本地 `--file` 会在提交前校验格式、大小、尺寸、时长、帧率等规则。
54
+ - 本地图片限制:格式 jpeg/jpg、png、webp、bmp、tiff/tif、gif、heic/heif;宽高比(宽/高)在 [0.4,2.5];宽和高都在 [300,6000] px;单张图片小于 30MB。
55
+ - 本地视频限制:格式 mp4、mov;时长 [2,15] 秒;宽高比(宽/高)在 [0.4,2.5];宽和高都在 [300,6000] px;总像素数在 [409600,927408];单个视频不超过 50MB;FPS 在 [24,60]。平台文档里的 480p / 720p 体现在自动转码目标会压到合法像素区间,不再用“短边必须等于 480/720”作为源文件硬过滤。
56
+ - 本地音频限制:格式 wav、mp3;时长 [2,15] 秒。
57
+ - 本地素材不合法时,`--dry-run` 不上传,会返回 `conversionRequired=true` 和 `conversionPlan`;正式执行会询问是否自动转码为合法规格后继续。非交互脚本可追加 `--auto-convert --yes`。
58
+ - 如果本机缺少 `ffprobe` / `ffmpeg`,CLI 在 macOS + Homebrew 环境下会自动运行 `brew install ffmpeg`;其他环境会提示安装命令。需要关闭自动安装时设置 `LINGJING_AWB_AUTO_INSTALL_FFPROBE=0`。
50
59
  - `model asset-review-models` 只做发现,不自动创建资产组或素材;不要把 `modelGroupCode` 塞进资产创建命令。
51
60
  - 不使用 `/assets/submissions` 这类隐式自动补组流程;资产组是否复用、是否新建由当前任务显式决定。
52
61
  - 主体 element(视频里的"同一个人"概念)优先走 `create subject`,不要把素材组 / 素材 ID 当 subjectId 用——两者对应平台不同业务实体。
@@ -10,9 +10,13 @@
10
10
  | `lj-awb auth verify` | 联网校验 access key 是否远端有效 |
11
11
  | `lj-awb account info` | 联网确认 access key 有效,并查看当前用户 / 团队 / 项目组 |
12
12
  | `lj-awb doctor --verify` | 联网体检认证、API、项目组和运行环境 |
13
- | `lj-awb auth login --access-key <key>` | 校验并保存 access key |
13
+ | `lj-awb auth login` | 浏览器授权登录:创建登录任务、展示链接、轮询直到授权成功并自动保存 access key |
14
+ | `lj-awb auth login --no-wait --json` | 只创建登录任务,返回 `flowId` / `verifyUrl`,不阻塞(AI agent / 脚本用) |
15
+ | `lj-awb auth login --flow-id <flowId>` | 复用已有登录任务继续轮询(配合 `--no-wait`,不要重复发起新 login) |
16
+ | `lj-awb auth login --access-key <key>` | 跳过浏览器授权,直接校验并保存 access key |
14
17
  | `LINGJING_AWB_ACCESS_KEY=<key> lj-awb auth login` | 从环境变量保存 access key(CLI 自动读环境变量) |
15
18
  | `lj-awb auth login --access-key <key> --skip-verify` | 仅保存,不联网校验 |
19
+ | `lj-awb auth logout` | 退出登录:清除本地保存的 access key(无需 `--yes`) |
16
20
  | `lj-awb auth clear --dry-run` | 预览清空本地认证 |
17
21
  | `lj-awb auth clear --yes` | 确认清空本地认证 |
18
22
 
@@ -21,6 +25,10 @@
21
25
  - 自动化环境只使用 `LINGJING_AWB_ACCESS_KEY`。
22
26
  - 不要把 access key 明文写入对话、日志、文档或任务台账。
23
27
  - `auth status` 只读本地配置;正式创作前用 `auth verify`、`account info` 或 `doctor --verify` 确认远端可用。
28
+ - 浏览器授权登录(`auth login` 不带 `--access-key`)默认阻塞轮询,**最长约 10 分钟**等用户在浏览器完成授权;runner 的 timeout 需 ≥ 600s。
29
+ - AI agent / 无法实时看输出的场景:先 `auth login --no-wait --json` 拿 `flowId` + `verifyUrl` 给用户,待用户授权后再 `auth login --flow-id <flowId>` 续轮询;**不要重复发起新的 login**,否则会生成新 `flowId` 使旧链接失效。
30
+ - `auth logout` 退出登录:只清本地 access key,无需 `--yes`。
31
+ - 登录流程相关错误(`auth_flow_expired` / `auth_flow_canceled` / `auth_flow_pending`)见 [`../references/error-codes.md`](../references/error-codes.md)。
24
32
  - `auth clear` 是本地破坏性动作,必须先确认或 dry-run。
25
33
  - 错误恢复(exit 3 / auth_failed / auth_required)见 [`../references/error-codes.md`](../references/error-codes.md) 场景 4。
26
34
 
@@ -13,6 +13,8 @@
13
13
  | `--generate-num` | 生图张数 | 仅图片模型支持时使用 |
14
14
  | `--duration` | 生视频时长,单位秒 | 对应平台旧参数 `generated_time`,只能从允许值选择 |
15
15
  | `--need-audio` | 是否需要输出音效 | 仅用户明确要求输出音效,且 `model options.params[key=needAudio]` 存在时使用;不是上传音频入口。模型未暴露该 param 时**不要为了"显式关闭"传 `--need-audio false`**,CLI 会以 `argument_error: 模型不支持参数:needAudio` 拒绝;不传等价于不开音效 |
16
+ | `--model-param key=value` | 新增 / 未硬编码的模型配置参数 | key 必须来自 `model options.params[]`;可重复传。适合 `generation_effort=high` 这类通用 Enum / Boolean / Number / String 配置 |
17
+ | `--model-params-json` | 一次传多个通用模型配置参数 | JSON 对象或 JSON 文件路径;命令行专用参数如 `--ratio`、`--quality`、`--duration` 优先级更高 |
16
18
  | `--resource` | 单个素材输入,可重复传 | `type:usage[:key]=path|url|asset:<id>` |
17
19
  | `--resources-json` | 多素材输入,适合复杂 keyframe / 批量构造 | JSON 数组或 JSON 文件路径 |
18
20
  | `--project-group-no` | 任务归属项目组 | 用户明确指定,或来自当前项目组 |
@@ -94,6 +96,7 @@ JSON 语法:
94
96
  | `quality` | `--quality` | `promptParams.quality` | `quality` |
95
97
  | `generate_num` | `--generate-num` | `promptParams.generate_num` | `generate_num` |
96
98
  | `generated_time` | `--duration` | `promptParams.duration` | `generated_time` |
99
+ | 其他带 `cliArg` 的模型配置参数 | `--model-param <key>=...` / `--model-params-json` | `promptParams.<key>` | 同名透传 |
97
100
  | `iref` | `--resource image:reference=...` | `promptParams.resources[]` | `iref` |
98
101
  | `frames` | `--resource image:first_frame=...` | `promptParams.resources[]` | `frames` |
99
102
  | `multi_param` | `--resource image/video/audio/subject:reference[:key]=...` | `promptParams.resources[]` | `multi_param` |
@@ -117,11 +120,11 @@ Agent 必须按顺序做:
117
120
  5. 若本轮已读取 `model create-spec` 则直接复用;否则运行 `model create-spec --model-group-code <code> -f json`。
118
121
  6. 先读 `inputRequirement`,确认是否必须提供视觉输入。
119
122
  7. 用 `supportedIntents[]` 匹配用户意图;不要只看模型列表摘要就生成最终能力结论。
120
- 8. 参数枚举值只从 `model options.params[].values` 选择,素材限制只从 `model options.resources[]` 校验,参数 / 资源联动限制按 `model options.constraints[]` 收窄。
123
+ 8. 参数枚举值只从 `model options.params[].values` 选择,素材限制只从 `model options.resources[]` 校验,参数 / 资源联动限制按 `model options.constraints[]` 收窄。新增通用参数只要在 `params[]` 中出现且带 `cliArg`,就通过 `--model-param` / `--model-params-json` 显式传入。
121
124
  9. 不主动列举所有缺失控制项;只追问会影响价格 / 效果的关键参数。视频包括 `quality`、`duration`、约束后仍可选的 `ratio`,以及用户明确要求输出音效时的 `needAudio`;图片包括 `quality`、`ratio`、`generateNum`。
122
125
  10. 组装最终 prompt;如果可见文本发生变化,先展示给用户。
123
126
  11. 若用户上传或指定音频文件,必须先确认 `model options.resources[]` 中存在 `mediaType=AUDIO usage=reference` 后再组织 `audio:reference` 资源;只有用户明确要求“输出是否带模型生成音效/音频”时,才检查 `model options.params[]` 是否存在 `needAudio`。
124
- 12. 用户未提供关键参数时,把 `model options.params[].values` 和 `defaultValue` 转成候选问题;用户选择或确认“按默认”前,不跑 `create image-fee` / `create video-fee`,也不跑 `create --dry-run`。
127
+ 12. 用户未提供关键参数时,把 `model options.params[].values` 和 `defaultValue` 转成候选问题;用户选择或确认“按默认”前,不跑 `create image-fee` / `create video-fee`,也不跑 `create --dry-run`。即使模型给了 `defaultValue`,也不要静默写入请求。
125
128
  13. 跑 `create image-fee` / `create video-fee` 获取预估积分——**只跑一次,参数取用户已确认的那组**。`fee` 是"用户敲定参数后的最终估价",不是参数探索 / 候选比较工具:不要为了对比价格档跑 `fee` × 多个 `quality` / `duration` / `ratio` 组合,也不要为了横向比同款不同渠道跑 `fee` × 多个 `modelGroupCode`;价格档差异从 `model options.feeCalcType` + 参数取值表里就能口算/展示给用户,比较应该发生在 `model options` 阶段。
126
129
  14. 跑 `create --dry-run` 检查请求体和本地素材。
127
130
  15. 用户确认模型、项目组、最终 prompt 文本、素材、关键参数和积分后,才追加 `--yes` 正式提交。
@@ -12,6 +12,8 @@
12
12
  | `lj-awb create video ...` | 提交单条生视频任务 |
13
13
  | `lj-awb create video-batch ...` | 批量提交生视频任务 |
14
14
  | `lj-awb create video-fee ...` | 生视频估价;关键参数确认后只跑一次 |
15
+ | `lj-awb create video-super-resolution ...` | 基于 objectName 提交视频超分任务 |
16
+ | `lj-awb create video-super-resolution-fee ...` | 视频超分估价;先确认 objectName |
15
17
  | `lj-awb create video-subtitle-removal --source-task-id <videoTaskId> ...` | 基于 material 来源视频任务提交去字幕 |
16
18
  | `lj-awb create subject-list ...` | 查询可复用主体,避免重复发布 |
17
19
  | `lj-awb create subject --model-code tx|vidu ...` | 创建可复用主体 element |
@@ -30,8 +32,8 @@
30
32
  ## 编排
31
33
 
32
34
  - 图片 / 视频创建参数和资源绑定仍按 [`create-contract.md`](create-contract.md) 校验。
33
- - 估价也在 `create` 域:`create image-fee` / `create video-fee`;只在关键参数确认后执行。
34
- - 状态和等待仍在查询域:`task image-status` / `task video-status` / `task wait` / `create subject-wait` / `create subject-voice-wait` / `task video-subtitle-status`。
35
+ - 估价也在 `create` 域:`create image-fee` / `create video-fee` / `create video-super-resolution-fee`;只在关键参数确认后执行。
36
+ - 状态和等待仍在查询域:`task image-status` / `task video-status` / `task wait` / `create subject-wait` / `create subject-voice-wait` / `task video-subtitle-status` / `task video-super-resolution-status`。
35
37
  - 所有 `create` 写入或扣费命令正式执行前必须先 `--dry-run`,用户确认后再 `--yes`。
36
38
  - 查询型 create 子命令(`subject-list`、`subject-voice-list`、`asset-groups`、`asset-group-get`、`asset-match-actor`)是为了避免重复创建;创建前优先查重。
37
39
  - `asset-groups` / `asset-group-get` / `asset-group` / `asset-group-update` / `asset` 都必须显式传 `--platform`;平台先由 `model asset-review-models` 或用户选择确定。
@@ -10,6 +10,7 @@
10
10
  - Skill 是驱动器,不是命令百科。先在本模块决定链路,只在需要时加载一个细节模块。
11
11
  - 同一对话维护 AWB 状态账本;除非用户切换账号、团队、项目组、模型、素材、prompt 或关键参数,否则不要重复跑同样的查询。
12
12
  - 写入 / 扣费命令遵循 schema safety:`supportsDryRun=true` 先 dry-run,`requiresConfirmation=true` 经用户确认后再 `--yes`。
13
+ - 如果 JSON 输出带 `meta._notice.update`,先继续完成当前业务链路,收尾时告知当前版本 / 最新版本并建议 `lj-awb update`;不要静默忽略更新提示。
13
14
  - 旧根域 `image` / `video` / `asset` / `subject` 已移除,不要尝试旧入口,也不要给旧命令做兼容推理。
14
15
 
15
16
  ## 状态账本
@@ -21,6 +21,7 @@
21
21
  | `--ratio` | 需要指定画幅时 | `model options.params[key=ratio].values` |
22
22
  | `--quality` | 需要指定清晰度时 | `model options.params[key=quality].values` |
23
23
  | `--generate-num` | 指定生成张数;模型暴露该控制项时属于价格关键参数 | `model options.params[key=generateNum].values` |
24
+ | `--model-param key=value` / `--model-params-json` | 新增通用模型配置参数,如 `generation_effort` | `model options.params[]` 中带 `cliArg` / `genericModelParam` 的参数 |
24
25
  | `--resource image:reference=...` | 参考图生图 | `model create-spec.supportedIntents.mode=reference` 必须存在 |
25
26
  | `--resources-json` | 多参考图或程序化构造 | 同 `--resource`,但用 JSON 数组表达 |
26
27
 
@@ -60,8 +61,9 @@ lj-awb create image \
60
61
  - 参考图 source.value 取值优先级、"不要复用 myqcloud 完整 URL"、图片生图不使用 `reference_key` / `<<<key>>>` 等规则统一在 [`create-contract.md`](create-contract.md) §素材组织 + §Prompt 组装原则;多张参考图用资源顺序和自然语言指代映射(例如"图一中的白发女保持表情,在图二背景里坐秋千"),不要替用户编 key。
61
62
  - `ratio` / `quality` / `generate-num` 不确定时,先查 `model options`,不要猜一个模型不支持的值。
62
63
  - `fee` 和 `create --dry-run` 前必须确认缺失的 `ratio`、`quality`、`generate-num`;不要静默用默认值估价。用户说“按默认”后才继续。
64
+ - `generation_effort` 这类新增模型配置参数如果出现在 `model options.params[]`,先把可选值 / `defaultValue` 展示给用户;用户确认后用 `--model-param generation_effort=<value>` 或 `--model-params-json` 传入,不要等专用 CLI flag。
63
65
  - 正式提交必须带 `--yes`;如果需要看请求体,先用 `--dry-run`。
64
- - 批量 JSON/JSONL 每项只写 `prompt`、`ratio`、`quality`、`generate_num`、`resources`、`resource`、`customBizId`;模型组和项目组放命令行公共参数。
66
+ - 批量 JSON/JSONL 每项只写 `prompt`、`ratio`、`quality`、`generate_num`、`resources`、`resource`、`model_params`、`customBizId`,也可直接写模型配置下划线参数;模型组和项目组放命令行公共参数。
65
67
  - **批量是 best-effort**:`create-batch` 子任务**单条失败不会回滚整批**,已成功项依然扣分并产生 taskId。提交后必读响应里每项的 `status` / `taskId` / `error`,给用户汇总"成功 N / 失败 M",对失败项单独 fix + 重跑(不要全批重跑)。
66
68
  - **多镜头 / 多 prompt 时主动建议并行**:用户一次给出 ≥2 个同模型同参数的图片任务(典型场景:分镜、组图、多 prompt 候选)时,Agent 必须先告知"这批可以用 `create image-batch --concurrency N` 并行执行(n 个任务,预计耗时 / 单次估价 × n)",并询问用户是否要并行。用户同意 → 走 batch;用户希望逐条审稿 / 调 prompt → 继续单条 create。**不要默认一条一条串行还不告知**,这种沉默会浪费用户时间。
67
69
  - 等待超时只代表本轮轮询结束,不能对用户说任务失败。
@@ -47,12 +47,12 @@ lj-awb model options --model-group-code <modelGroupCode> -f text
47
47
 
48
48
  Agent 读取这些字段:
49
49
 
50
- - `params[]`:模型暴露的参数 key 和约束;创建命令 flag `model create-spec`。
50
+ - `params[]`:模型暴露的参数 key 和约束;创建命令写法看 `params[].cliArg` `model create-spec`。新增通用模型配置参数会带 `genericModelParam=true`,用 `--model-param key=value` 或 `--model-params-json` 传入。
51
51
  - `params[].values`:枚举取值,创建任务时只能从这里选。
52
- - `params[].defaultValue`:模型默认值;关键参数不能静默采用默认值,用户选择或确认“按默认”后才继续 fee / dry-run
52
+ - `params[].defaultValue`:模型默认值;关键参数和有可选值的新增参数不能静默采用默认值,用户选择或确认“按默认”后才继续 fee / dry-run,并在创建命令中显式传入。
53
53
  - `params[].maxLength`:prompt 等文本参数的长度限制。
54
54
  - `resources[]`:素材媒体约束,包含 `mode`、`mediaType`、`usage`、`valueShapes`、`fileTypes`、数量 / 大小 / 时长限制;frames 资源的 `usage` 可同时包含 `first_frame|last_frame`。`valueShapes` 描述允许的 value 形状(`file|url|platformPath|asset`),与 `source.kind` 的两值枚举不同,详见 [`../references/model-options-read.md`](../references/model-options-read.md)。
55
- - `media=IMAGE` 的 `fileTypes` 是特殊语义:空列表表示不支持 webp,CLI 会把本地 webp 自动转成 jpg;仅 `webp` 表示普通图片格式外也支持 webp;多值列表才是强控制允许格式。pretty/text 会把它翻译成 `formats=...` 和 `webpInput=accepted|autoConvertToJPG`。
55
+ - `media=IMAGE` 的 `fileTypes` 是特殊语义:空列表表示不支持 webp,CLI 会把本地或可下载远端 webp 自动转成 jpg;仅 `webp` 表示普通图片格式外也支持 webp;多值列表才是强控制允许格式。pretty/text 会把它翻译成 `formats=...` 和 `webpInput=accepted|autoConvertToJPG`。
56
56
  - `constraints[]`:条件约束全景,描述某个输入或参数出现后,会限制哪个目标参数或资源能力;例如 `target=ratio` 且 `when=resource.image.frame=present`、`effect=no_selectable_values` 表示首帧 / 首尾帧输入后不要让用户继续选择比例;`effect=resource_limit_overrides` 表示某类素材的数量、大小或时长随条件收紧,读取 `limits`。
57
57
 
58
58
  ## 获取创建规格
@@ -86,6 +86,7 @@ Agent 读取这些字段:
86
86
  | `frames` | `--resource image:first_frame=...` / `image:last_frame=...`,可传文件/URL/backendPath/`asset:<assetId>` | 视频首尾帧 |
87
87
  | `multi_param` | `--resource image/video/audio:reference[:key]=...` / `subject:reference:<key>=asset:<id>` | 多参考素材 / 音频参考 / 主体引用 |
88
88
  | `generated_mode` | 不传 | 由资源类型推导 |
89
+ | 其他 `params[]` 中带 `cliArg` 的 key | `--model-param <key>=...` / `--model-params-json` / 同名下划线长参数 | 通用模型配置参数,例如 `generation_effort` |
89
90
 
90
91
  规则:
91
92
 
@@ -93,7 +94,7 @@ Agent 读取这些字段:
93
94
  - `supportLastFrameOnly` 只表示模型是否支持「仅尾帧」输入;首尾帧过渡能力看 frames 资源的 `usage` 是否包含 `last_frame` 和数量约束。
94
95
  - 用户说「上传音频 / 使用音乐 / 配音 / 音频参考」是**素材输入**,先看 `options.resources[]` 有没有 `mediaType=AUDIO usage=reference`;**不要先去找 `needAudio`**(那是输出音效开关)。具体使用规则、`reference_key` / `<<<key>>>` 对齐和 `--need-audio` 不是音频入口等都见 [`create-contract.md`](create-contract.md) §素材组织 + §Prompt 组装原则。
95
96
  - 用户要走素材加白 / 素材库过审时,先跑 `model asset-review-models --model-group-code <code>` 判断该模型是否支持以及平台值;不要根据模型名称猜平台,也不要把 `modelGroupCode` 放进资产组或素材创建命令。
96
- - 关键参数选择、`fee` / `create --dry-run` 前的追问流程、`inputRequirement.visualInputRequired` 检查等创建前校验见 [`create-contract.md`](create-contract.md) §创建前校验。
97
+ - 关键参数选择、`fee` / `create --dry-run` 前的追问流程、`inputRequirement.visualInputRequired` 检查等创建前校验见 [`create-contract.md`](create-contract.md) §创建前校验。`defaultValue` 只用于展示候选默认,不是 Agent 自动代选的依据。
97
98
  - 输出字段速查见 [`../references/output-fields.md`](../references/output-fields.md) 的"模型"小节。
98
99
 
99
100
  ## 下一步
@@ -1,6 +1,6 @@
1
1
  # Task Module
2
2
 
3
- 任务模块负责图片 / 视频 / 字幕等异步任务的等待、查询和台账恢复。图片 / 视频 / 去字幕任务先用 `create ...` 拿到 `taskId`,主体 / 音色回填用 `create subject-wait` / `create subject-voice-wait`,不要误走 `task wait`。
3
+ 任务模块负责图片 / 视频 / 字幕 / 超分等异步任务的等待、查询和台账恢复。图片 / 视频任务可用 `task wait`,去字幕和视频超分优先使用创建响应里的专用 `nextCommand`;主体 / 音色回填用 `create subject-wait` / `create subject-voice-wait`,不要误走 `task wait`。
4
4
 
5
5
  ## 命令
6
6
 
@@ -8,6 +8,8 @@
8
8
  |------|------|
9
9
  | `lj-awb task list --task-type IMAGE_CREATE --project-group-no <no>` | 列出远端任务(按类型过滤) |
10
10
  | `lj-awb task wait --task-id <id> --task-type IMAGE_CREATE --wait-seconds 180` | 等待单个任务进入终态 |
11
+ | `lj-awb task video-subtitle-status --task-id <id>` | 查询去字幕 material 任务 |
12
+ | `lj-awb task video-super-resolution-status --task-id <id>` | 查询视频超分 material 任务 |
11
13
  | `lj-awb task records --task-record-file .awb/tasks.jsonl` | 读本地任务台账(未指定 `--task-record-file` 默认 `.awb/tasks.jsonl`) |
12
14
  | `lj-awb task records --pending-only --task-record-file .awb/tasks.jsonl` | 只看未终态记录 |
13
15
  | `lj-awb task record-poll --task-record-file .awb/tasks.jsonl --wait-seconds 180` | 一次性轮询台账里所有未终态任务 |
@@ -72,6 +74,7 @@ CLI 当前**不暴露 task cancel**;用户问"能不能停掉这个任务"时
72
74
  - `task wait` 返回 `task_still_running` 时复述 hint,不要误报失败;`taskStatus=FAILED` 或 `errorMessage` 非空才是真失败。
73
75
  - **`task wait` 成功 ≠ 素材库立刻可读**:后端在事务提交后**异步**执行 `saveResourceToMaterial`(`afterCommit` 钩子),即使 `taskStatus=SUCCESS` 拿到 `resultUrls`,对应的 `material` / `asset` 行也可能还没落库。需要立刻复用结果时,优先使用 `resultUrls` / `assetPath` / `taskRecordId` 直接推进;非要查素材库时先 sleep 2-3 秒,不要靠 list 接口密集轮询。
74
76
  - 输出字段只提取 `taskId / taskStatus / isTerminal / resultUrls / errorMessage`,详见 [`../references/output-fields.md`](../references/output-fields.md) 的"生图 / 生视频"和"任务台账"小节。
77
+ - `create video-subtitle-removal` / `create video-super-resolution` 返回 `nextCommand` 时直接执行该命令;不要把它改写成通用 `task wait`。
75
78
  - 不要把大型 raw JSON 整段塞回上下文。
76
79
  - `task list` 是远端查询、`task records` 是本地台账;两者覆盖范围不同(台账只有本机创建的任务)。
77
80
 
@@ -29,6 +29,6 @@
29
29
  - 生视频首帧 / 尾帧 / 参考图:`lj-awb create video ... --resource image:first_frame=material/...`
30
30
  - 视频参考音频:`lj-awb create video ... --resource audio:reference=material/...`
31
31
  - 主体发布参考图:`lj-awb create subject ... --resource primary:material/...`
32
- - 注册到素材库(素材加白):优先让 `lj-awb create asset --group-id <id> --platform <platform> --file ./a.png --name "..." --yes` 自动上传到 `asset-review` 场景;若已单独上传,使用 `--backend-path asset-review/...` 或 `--url asset-review/...`。
32
+ - 注册到素材库(素材加白):优先让 `lj-awb create asset --group-id <id> --platform <platform> --file ./a.png --name "..." --yes` 自动上传到 `asset-review` 场景;CLI 会按文件类型传 `assetType=Image|Video|Audio`,并对本地文件做图片/视频/音频加白规格预检。不合法时正式执行会询问是否转码,非交互脚本可用 `--auto-convert --yes`。若已单独上传,使用 `--backend-path asset-review/...` 或 `--url asset-review/...`,这类远程路径只能按扩展名推断类型,尺寸 / 帧率 / 时长交给后端校验。
33
33
 
34
34
  > `create image` / `create video` / `create subject` 传 `--file` / 本地路径时**会自动 upload**——只有需要"先看 backendPath / 跨任务复用同一份素材"时才单独跑 `upload files`。
@@ -14,6 +14,9 @@
14
14
  | `lj-awb create video-batch --input-file ./video.jsonl --model-group-code <code> --yes` | 批量生视频 |
15
15
  | `lj-awb task video-status --task-id <id>` | 查询生视频任务 |
16
16
  | `lj-awb task wait --task-id <id> --task-type VIDEO_GROUP --wait-seconds 300` | 等待生视频结果 |
17
+ | `lj-awb create video-super-resolution --object-name <objectName> --yes` | 基于 material objectName 提交视频超分任务 |
18
+ | `lj-awb create video-super-resolution-fee --object-name <objectName>` | 计算视频超分预计积分 |
19
+ | `lj-awb task video-super-resolution-status --task-id <id>` | 查询视频超分任务 |
17
20
  | `lj-awb create video-subtitle-removal --source-task-id <videoTaskId> --yes` | 基于来源视频任务提交去字幕任务 |
18
21
  | `lj-awb task video-subtitle-status --task-id <subtitleTaskId>` | 查询去字幕任务 |
19
22
 
@@ -26,6 +29,7 @@
26
29
  | `--ratio` | 指定画幅比例 | `model options.params[key=ratio].values`,并受 `model options.constraints[]` 联动限制 |
27
30
  | `--quality` | 指定清晰度 | `model options.params[key=quality].values` |
28
31
  | `--need-audio` | 是否需要输出音效 | 仅 `model options.params[key=needAudio]` 存在,且用户明确要求输出音效时 |
32
+ | `--model-param key=value` / `--model-params-json` | 新增通用模型配置参数,如 `generation_effort` | `model options.params[]` 中带 `cliArg` / `genericModelParam` 的参数 |
29
33
  | `--resource image:reference[:key]=...` | 参考图生视频 | `model create-spec.supportedIntents.mode=reference` 必须存在,格式 / 数量约束看 `model options.resources[]` |
30
34
  | `--resource audio:reference=...` | 参考音频 / 配乐 / 配音 / 节奏参考 | `model options.resources[]` 中必须存在 `mediaType=AUDIO usage=reference` |
31
35
  | `--resource image:first_frame=...` | 首帧生视频 | `model create-spec.supportedIntents.mode=frames` 必须存在,且 usage 包含 `first_frame` |
@@ -71,25 +75,30 @@ lj-awb create video \
71
75
  - 创建前先看 `inputRequirement.visualInputRequired`。如果为 `true`,必须选择 `supportedIntents` 中的一种素材输入,不能纯 prompt 创建。
72
76
  - Agent 向用户解释模型能力时,默认说“支持参考图 / 首帧 / 首尾帧 / 主体引用”等正向能力;不要默认列“无音频参数、无多条数参数”。
73
77
  - `fee` 和 `create --dry-run` 前必须确认缺失的关键参数;不要把 `model options.params[].defaultValue` 当成用户选择。用户说“按默认”后才继续。
78
+ - `generation_effort` 这类新增模型配置参数如果出现在 `model options.params[]`,先把可选值 / `defaultValue` 展示给用户;用户确认后用 `--model-param generation_effort=<value>` 或 `--model-params-json` 传入,不要等专用 CLI flag。
74
79
  - 面向用户列参数时,`needAudio` 说成“音效:是否需要输出音效”;不要用 CLI flag 加技术解释的写法。只有展示最终命令时才写 `--need-audio true/false`。
75
80
  - 音频参考:必须先确认 `model options.resources[]` 暴露 `mediaType=AUDIO usage=reference`,否则不要硬传;统一用 `--resource audio:reference=...` 或 JSON `{ "type": "audio", "usage": "reference" }`。
76
81
  - `--need-audio` / `audio:reference` / 资源模式互斥 / `reference_key` 对齐 / `<<<key>>>` 等创建协议统一见 [`create-contract.md`](create-contract.md) §素材组织 + §参数含义,不在本文重复。
77
82
  - 使用首帧 / 首尾帧等资源后,如果 `model options.constraints[]` 对 `ratio` 等目标参数返回 `effect=no_selectable_values`,不要再追问或传该参数。
78
- - `media=IMAGE` 的 `fileTypes` 不要机械理解成唯一允许格式:空列表表示不支持 webp,本地 webp 会自动转 jpg;仅 `webp` 表示普通图片格式外也支持 webp;多值列表才按允许列表强校验并尝试转换。默认 text 里看 `formats` 和 `webpInput`,不要把 `formats=...|webp` 理解成"只支持 webp"。
83
+ - `media=IMAGE` 的 `fileTypes` 不要机械理解成唯一允许格式:空列表表示不支持 webp,本地或可下载远端 webp 会自动转 jpg;仅 `webp` 表示普通图片格式外也支持 webp;多值列表才按允许列表强校验并尝试转换。默认 text 里看 `formats` 和 `webpInput`,不要把 `formats=...|webp` 理解成"只支持 webp"。
79
84
  - `supportLastFrameOnly=false` 只表示不支持"仅尾帧";不要据此判断不支持首尾帧过渡。是否可传 `image:last_frame` 看 `model options.resources[].usage` / `model create-spec.supportedIntents[].usage` 是否包含 `last_frame`。
80
85
  - 视频素材(参考图 / 首帧 / 尾帧 / 关键帧 / 音频)source.value 取值优先级、不要复用 myqcloud 完整 URL 规则统一在 [`create-contract.md`](create-contract.md) §素材组织。`image:reference=asset:<assetId>` / `image:first_frame=asset:<assetId>` / `image:last_frame=asset:<assetId>` 是素材引用;`subject:reference:<key>=asset:<subjectId>` 是主体引用。主体引用必须先 `create subject` + `create subject-wait` 得到 `externalId`。
81
- - 批量 JSON/JSONL 每项只写 `prompt`、`ratio`、`quality`、`duration`、`need_audio`、`resources`、`resource`、`customBizId`;其中 `need_audio` 表示是否需要输出音效,音频素材仍写入 `resources`。
86
+ - 批量 JSON/JSONL 每项只写 `prompt`、`ratio`、`quality`、`duration`、`need_audio`、`resources`、`resource`、`model_params`、`customBizId`,也可直接写模型配置下划线参数;其中 `need_audio` 表示是否需要输出音效,音频素材仍写入 `resources`。
82
87
  - **批量是 best-effort**:`create-batch` 子任务**单条失败不会回滚整批**,已成功项依然扣分并产生 taskId。提交后必读响应里每项的 `status` / `taskId` / `error`,给用户汇总"成功 N / 失败 M",对失败项单独 fix + 重跑(不要全批重跑)。
83
88
  - 视频任务默认可能耗时较长,批量和复杂任务应异步提交并记录 task id。
89
+ - 视频超分直接传 `objectName`,通常是 material backendPath 或 COS 对象路径;正式提交前先跑 `create video-super-resolution-fee`,再 `--dry-run`,确认后 `--yes`,返回后按 `nextCommand` 或 `task video-super-resolution-status` 查询。
84
90
  - **多镜头 / 多分镜时主动建议并行**:用户一次给出 ≥2 个同模型同参数的视频任务(典型场景:分镜流水线、批量首尾帧动画)时,Agent 必须先告知"这批可以用 `create video-batch --concurrency N` 并行执行(n 个任务,预计耗时 / 单次估价 × n)",并询问用户是否要并行。用户同意 → 走 batch;用户希望逐条审稿 → 继续单条 create。**不要默认一条一条串行还不告知**。
91
+ - 视频超分不走 model options/create-spec;它是 material 的对象路径任务,和生视频模型选择链路分离。
85
92
  - 去字幕统一走 material 任务体系:用已成功的视频来源任务 ID `create video-subtitle-removal --source-task-id <videoTaskId> --dry-run`,不要直连外部服务;`task video-subtitle-status` 只接收 material 去字幕任务的 `--task-id`。
86
93
  - 输出字段速查见 [`../references/output-fields.md`](../references/output-fields.md) 的"生图 / 生视频"小节;错误恢复(积分 / 模型 / 资源约束)见 [`../references/error-codes.md`](../references/error-codes.md)。
87
94
 
88
95
  ## 下一步
89
96
 
90
97
  - `create video` 返回 `taskId` + `nextCommand` → 立刻 `task wait --task-id <id> --task-type VIDEO_GROUP --wait-seconds 300`。
98
+ - `create video-super-resolution` 返回 `taskId` + `nextCommand` → 立刻运行返回的 `task video-super-resolution-status --task-id <id>`。
91
99
  - `create video-batch` 写 `.awb/tasks.jsonl`,用 [`task.md`](task.md) → `task record-poll` 批量等。
92
100
  - 任务终态 `resultUrls` → 通常按集 / 场 / 镜头回写到 [`artifact/video.md`](artifact/video.md):`artifact video update-clip-urls --project-id <id> --episode-id ... --scene-id ... --clip-id ... --video-urls-json '[...]'`。
93
101
  - 任务 `SUCCESS` 后**立刻**用素材库接口找这条视频时可能查不到——后端 `saveResourceToMaterial` 是事务提交后异步执行,详见 [`task.md`](task.md) 规则。优先用 `resultUrls` 直接消费;非要列素材库时先 sleep 2-3 秒。
94
102
  - Seedance 原始视频带英文字幕 → 对成功的视频任务运行 `create video-subtitle-removal --source-task-id <videoTaskId> --yes` → `task video-subtitle-status --task-id <subtitleTaskId>`。
103
+ - 需要对现有视频做清晰度提升 → 先确认 `objectName`(material backendPath 或 COS 对象路径),再 `create video-super-resolution-fee` 和 `create video-super-resolution`。
95
104
  - 想长期复用同一角色(避免每次都传图) → [`subject.md`](subject.md) 先 `create subject` + `wait` 拿 externalId。
@@ -238,7 +238,9 @@ lj-awb create asset-groups --platform JIMENG --name "项目X-角色"
238
238
  lj-awb create asset-group --platform JIMENG --name "项目X-角色" --dry-run
239
239
  lj-awb create asset-group --platform JIMENG --name "项目X-角色" --yes
240
240
 
241
- # 2. 注册参考图(本地文件版,--file 在 --yes 阶段自动上传 + 注册一步完成)
241
+ # 2. 注册参考素材(本地文件版,--file 在 --yes 阶段自动上传 + 注册一步完成)
242
+ # CLI 会自动按扩展名传 assetType=Image/Video/Audio;本地文件会先校验加白规格。
243
+ # 不合法素材正式执行时会询问是否转码;非交互脚本可追加 --auto-convert。
242
244
  lj-awb create asset \
243
245
  --group-id <groupId> \
244
246
  --platform JIMENG \
@@ -20,10 +20,14 @@ CLI 失败时 envelope 形如:
20
20
  | `2` | `unknown_command` / `unknown_option` | 命令名 / 参数名打错 | 跑 `lj-awb -h` 或对应子域 `lj-awb <domain> -h` 重查命令 |
21
21
  | `3` | `auth_required` | 缺少 access key | 提示用户 `lj-awb auth login --access-key <key>` 或设置 `LINGJING_AWB_ACCESS_KEY` |
22
22
  | `3` | `auth_failed` | access key 无效 / 已过期(HTTP 401) | 跑 `auth verify` 确认;提示重新登录 |
23
+ | `3` | `auth_flow_expired` | 浏览器授权链接已过期 | 重新跑 `auth login` 获取新链接 |
24
+ | `3` | `auth_flow_canceled` | 用户在浏览器取消了授权 | 重新跑 `auth login` 重新发起 |
25
+ | `3` | `auth_flow_failed` | 创建登录任务失败 / 授权成功但未返回 accessKey | 看 `details`,稍后重试 `auth login`;持续失败联系平台 |
23
26
  | `10` | `confirmation_required` | 写入 / 扣费 / 切换上下文动作未确认 | 向用户复述 `details.action` 后追加 `--yes` 重跑 |
24
27
  | `20` | `task_still_running` | 等待窗口结束但任务未终态 | 直接续跑 `task wait --task-id ... --wait-seconds <n>`,**不代表失败** |
25
28
  | `20` | `subject_still_pending` | 主体 externalId 尚未回填 | 续跑 `create subject-wait --element-id ... --wait-seconds <n>` |
26
29
  | `20` | `subject_voice_still_pending` | 主体音色 externalId 尚未回填 | 续跑 `create subject-voice-wait --voice-record-id ... --wait-seconds <n>` |
30
+ | `20` | `auth_flow_pending` | 浏览器授权等待窗口结束但用户尚未授权 | 用 `details.flowId` 续跑 `auth login --flow-id <flowId>`,**不要重发新 login**,**不代表失败** |
27
31
  | `30` | `network_error` | TLS / DNS / 连接失败 / 平台 5xx | 检查网络;macOS 证书问题用 `lj-awb`(shell wrapper)而不是直接 `node bin/lj-awb.js` |
28
32
  | `30` | `http_error` | 非 401 的 HTTP 错误(4xx / 5xx) | 看 `message`;429 等限流时退避重试 |
29
33
  | `30` | `upload_failed` | COS 上传失败 | 重试一次;持续失败检查文件大小 / mimeType / 网络 |
@@ -107,3 +111,23 @@ lj-awb auth verify # 实际打一次平台 API
107
111
  - **reference 模式**:`image:reference` / `audio:reference` / `video:reference` / `subject:reference`
108
112
 
109
113
  恢复路径:把 `image:first_frame=<source>` 改成 `image:reference=<source>`,让所有素材都在 reference 模式(保留 audio / video / subject 参考),再 `--dry-run` 复核后重跑。不要简单删掉某个素材,应该统一模式。
114
+
115
+ ### 场景 9:浏览器授权登录(auth_flow_*)
116
+
117
+ 浏览器授权登录(`auth login` 不带 `--access-key`)的几种结果:
118
+
119
+ - `auth_flow_pending`(exit 20):等待窗口结束、用户还没授权。**不是失败**。用 `details.flowId` 续跑,不要重发新 login:
120
+
121
+ ```bash
122
+ lj-awb auth login --flow-id <flowId>
123
+ ```
124
+
125
+ - `auth_flow_expired`(exit 3):授权链接过期 → 重新 `auth login` 拿新链接。
126
+ - `auth_flow_canceled`(exit 3):用户在浏览器取消 → 重新 `auth login`。
127
+
128
+ AI agent / 无法实时看输出时的标准流程:
129
+
130
+ ```bash
131
+ lj-awb auth login --no-wait --json # 拿 flowId + verifyUrl,发给用户去浏览器授权
132
+ lj-awb auth login --flow-id <flowId> # 用户授权后续轮询,拿到并保存 accessKey
133
+ ```
@@ -10,14 +10,14 @@
10
10
  ## `-f text` 怎么读
11
11
 
12
12
  - text 是“分区 key=value”:先看 `summary:`,再看 `params:`、`resources:`、`constraints:`,最后看 `next:`。每个分区的 `count` 表示列表数量,列表项使用 `[0]: key=value ...`。
13
- - `params[]`:模型暴露的可控参数和约束;这里只给参数 key,不给 create 命令 flag。
13
+ - `params[]`:模型暴露的可控参数和约束;优先看 `key`、`cliArg`、`values`、`defaultValue`。已知参数会给专用 flag,新增通用模型配置参数会显示 `cliArg=--model-param / --model-params-json` 和 `genericModelParam=true`。
14
14
  - `values`:枚举取值,只能从这里选。
15
- - `default`:模型默认值;用户没明确指定时通常不必显式传,但清晰度、比例、时长这类关键项仍要确认。
15
+ - `default` / `defaultValue`:模型默认值,只能作为候选默认展示。带可选值或 `defaultValue` 的关键参数不应静默采用;用户明确选择或说“按默认”后才继续 fee / dry-run。
16
16
  - `resources[]`:模型暴露的素材媒体约束;这里只给媒体类型、用途和文件限制,不给 `--resource` 写法。
17
17
  - `media`:素材媒体类型,例如 `IMAGE`、`VIDEO`、`AUDIO`、`SUBJECT`。
18
18
  - `usage`:素材用途,例如 `reference`、`first_frame`、`last_frame`、`keyframe`;同一个资源约束可同时列出 `first_frame|last_frame`。
19
19
  - `valueShapes=file|url|platformPath|asset`:声明这个资源 **value 的形状**,可接受本地文件、公网 URL、平台上传后返回的 `backendPath`、平台资产 ID。注意:这不是 `source.kind` 的枚举;`source.kind` 永远只有 `url`、`asset_id` 两种取值——前三种形状统一传 `kind=url`(CLI 按 value 自动识别),最后一种传 `kind=asset_id`。
20
- - `formats`:文件后缀白名单。
20
+ - `formats`:文件后缀白名单;当 `webpInput=autoConvertToJPG` 时,本地或可下载远端 webp 会在提交前转成 jpg。
21
21
  - `files=<=N` / `files=1`:素材数量约束。
22
22
  - `lastFrameOnly` / JSON `supportLastFrameOnly`:只表示是否支持“仅尾帧”这种特殊输入;不用于判断 `first_frame + last_frame` 是否成立。没有该能力时,尾帧应和首帧成对使用。
23
23
  - `durationMs` / `totalDurationMs`:单个素材和总素材时长约束。
@@ -31,7 +31,7 @@
31
31
  lj-awb model options --model-group-code <code> -f json
32
32
  ```
33
33
 
34
- JSON 里会保留更完整的参数 / 资源 / 条件约束字段,但仍不承担 create 命令写法。`--resource` 语法、prompt key 绑定和示例统一看 `model create-spec`。
34
+ JSON 里会保留更完整的参数 / 资源 / 条件约束字段。`params[].cliArg` 可直接告诉你创建写法;通用模型配置参数用 `--model-param key=value`、`--model-params-json '{"key":"value"}'`,或同名下划线长参数(如 `--generation-effort high`)传入。`--resource` 语法、prompt key 绑定和示例统一看 `model create-spec`。
35
35
 
36
36
  ## 使用顺序
37
37
 
@@ -46,11 +46,12 @@ JSON 里会保留更完整的参数 / 资源 / 条件约束字段,但仍不承
46
46
 
47
47
  ## 判断口径
48
48
 
49
- - 不在 `params[]` 里的 CLI 参数不要传。
49
+ - 不在 `params[]` 里的模型配置参数不要传;新增参数如果已出现在 `params[]` 且有 `cliArg`,无需等待 skill/CLI 硬编码专用 flag。
50
+ - `params[].defaultValue` 不是用户选择;把它展示给用户,用户确认后再通过专用 flag 或 `--model-param` 显式传入。
50
51
  - 不在 `resources[]` 里的媒体类型 / 用途不要硬拼。
51
52
  - 当前用户输入满足 `constraints[].conditions` 时,按 `allowValues` 收窄目标参数;`effect=no_selectable_values` 时不要传该目标参数;`effect=resource_limit_overrides` 时按 `limits` 覆盖对应 `resources[]` 的数量 / 时长等限制。
52
53
  - 主体参考看 `media=SUBJECT usage=reference valueShapes=asset`;reference_key 和 externalId 写法看 `model create-spec` / `model input-guide`。
53
54
  - 图片生图参考图不使用 reference_key;只传 `image:reference=...`,prompt 里用图一、图二、参考图等自然描述。
54
55
  - 音频素材参考看 `media=AUDIO usage=reference`;`needAudio` / `--need-audio` 表示是否需要输出音效。
55
- - `media=IMAGE` 的 `supportedFileTypes` 是 webp 能力标记:空表示不支持 webp,单独 `webp` 表示普通图片格式外也支持 webp,多值才表示强允许列表。pretty/text 里 `WebP=accepted` 或 `webpInput=accepted` 表示可直接传 webp;`autoConvertToJPG` 表示本地 webp 会先转成 jpg。
56
+ - `media=IMAGE` 的 `supportedFileTypes` 是 webp 能力标记:空表示不支持 webp,单独 `webp` 表示普通图片格式外也支持 webp,多值才表示强允许列表。pretty/text 里 `WebP=accepted` 或 `webpInput=accepted` 表示可直接传 webp;`autoConvertToJPG` 表示本地或可下载远端 webp 会先转成 jpg。
56
57
  - 首帧 / 尾帧不使用 reference_key;是否可传尾帧看 `usage` 是否包含 `last_frame`,具体创建方式看 `model create-spec`。
@@ -39,8 +39,8 @@
39
39
  | outputKind | 命令 | 必报给用户 | agent 内部用 | 可丢弃 |
40
40
  |------------|------|-----------|--------------|--------|
41
41
  | `model_list` | `model image-models` / `video-models` | 模型名、`modelGroupCode`、`taskQueueNum`(排队数)、`successRate`(成功率) | `modelGroupCode`(下游 create 必填) | 完整 modelList 嵌套 |
42
- | `model_options` | `model options` | `params[].label/values/defaultValue`、`resources[]`、`constraints[]` | 全部字段(决定 create 入参)。JSON 形状:`params[].{key,label,valueType,values,defaultValue,defaultName}`(参数名是 `key`,**不是** `name`);`resources[].{media,usage,valueShapes,formats,...}`;`constraints[].{target,when,allowedValues,effect,limits}`,其中 `resource_limit_overrides` 表示素材数量 / 时长联动限制 | — |
43
- | `model_create_spec` | `model create-spec` | `intents[]`、`requiredArgs`、`examples` | 全部 | — |
42
+ | `model_options` | `model options` | `params[].label/values/defaultValue/cliArg`、`resources[]`、`constraints[]` | 全部字段(决定 create 入参)。JSON 形状:`params[].{key,label,valueType,values,defaultValue,defaultName,cliArg,genericModelParam}`(参数名是 `key`,**不是** `name`);通用参数用 `--model-param key=value`;`resources[].{media,usage,valueShapes,formats,...}`;`constraints[].{target,when,allowedValues,effect,limits}`,其中 `resource_limit_overrides` 表示素材数量 / 时长联动限制 | — |
43
+ | `model_create_spec` | `model create-spec` | `intents[]`、`requiredArgs`、`examples`、`parameterControls.userParams[]` | 全部 | — |
44
44
  | `model_input_guide` | `model input-guide` | `supportedIntents`、`promptParams`、`resourceUsages` | 全部 | — |
45
45
 
46
46
  ## 文件上传
@@ -54,13 +54,15 @@
54
54
  | outputKind | 命令 | 必报给用户 | agent 内部用 | 可丢弃 |
55
55
  |------------|------|-----------|--------------|--------|
56
56
  | `fee_estimate` | `create image-fee` / `create video-fee` | `pointCost`、`billingPointBalance`、`billingPointRemainingAfter` | — | budget 嵌套 |
57
- | `task_submission` | `create image` / `create video` | `taskId`、`pointCost`、`billingPointRemainingAfter`、`nextCommand` | `taskId`、`taskType`(喂给 `task wait`) | uploads 数组、modelGroupCode |
57
+ | `task_submission` | `create image` / `create video` | `taskId`、`pointCost`、`billingPointRemainingAfter`、`nextCommand`、`statusCommand` | `taskId`、`taskType`(喂给 `task wait`) | uploads 数组、modelGroupCode |
58
58
  | `batch_task_submission` | `create image-batch` / `create video-batch` | 成功 / 失败计数、首条 `taskId` 用于追踪 | `tasks[]` 每条 taskId + status | localFiles 详情 |
59
+ | `fee_estimate` | `create video-super-resolution-fee` | `pointCost`、`billingPointBalance`、`billingPointRemainingAfter` | — | budget 嵌套 |
60
+ | `task_submission` | `create video-super-resolution` | `taskId`、`pointCost`、`billingPointRemainingAfter`、`nextCommand` | `taskId`、`nextCommand`(喂给 `task video-super-resolution-status`) | request 嵌套 |
59
61
  | `task_status` | `task wait` / `task image-status` / `task video-status` | `taskStatus`、`isTerminal`、`resultUrls`、`errorMessage` | `isTerminal`(false → 续 wait)、`timedOut` | `waitedMs`、`gmtCreate` |
60
62
  | `subtitle_task_submission` | `create video-subtitle-removal` | `submitted`、`taskId`、`pointCost`、`nextCommand` | `taskId`、`sourceTaskId` | budget 嵌套 |
61
63
  | `subtitle_task_status` | `task video-subtitle-status` | `taskStatus`、`isTerminal`、`resultUrls`、`errorMessage` | `taskId` | `gmtCreate` |
62
64
 
63
- > `task_submission.nextCommand` 是平台给出的下一步建议命令(通常是 `task wait --task-id ...`)。看到就直接接着跑。
65
+ > `task_submission.nextCommand` 是平台给出的下一步建议命令(通常是 `task wait --task-id ...`);`task_submission.statusCommand` 是单次状态查询命令(通常是 `task image-status` / `task video-status`)。
64
66
 
65
67
  ## 任务台账
66
68
 
@@ -94,7 +96,7 @@
94
96
  | `asset_group_list` | `create asset-groups` | `platform`、`count` + 组名 | `groupId`(下游 register 必填) | — |
95
97
  | `asset_group_detail` | `create asset-group-get` | `platform`、组名、成员数 | `groupId` | — |
96
98
  | `asset_group_write_result` | `create asset-group / group-update` | `created/updated`、`groupId`、`platform` | — | — |
97
- | `asset_register_result` | `create asset` | `registered`、`assetId`、`assetPath`、`platform` | `assetId`(下游引用) | upload 嵌套 |
99
+ | `asset_register_result` | `create asset` | `registered`、`assetId`、`assetPath`、`platform`、`assetType` | `assetId`(下游引用) | upload 嵌套 |
98
100
 
99
101
  ## Artifact(产物 CRUD)
100
102
 
@@ -107,6 +109,7 @@
107
109
  | `artifact_delete_result` | `delete-*` | `deleted`、`key`、级联 | — | — |
108
110
  | `artifact_import_result` | `* import` / `import-storyboard` / `upsert-batch` | `imported`、`rowCount/actorCount/...`、文件计数 | `rowsByKind`(用于断言) | `batch` 数组 |
109
111
  | `artifact_status_update` | `artifact clip update-status` | `updated`、`status` | — | messageCount |
112
+ | `update_result` | `update` / `update --check` | `updateAvailable`、`currentVersion`、`latestVersion`、`command` | `skillUpdated`、`restartRecommended` | 安装日志 |
110
113
 
111
114
  ## Dry-run
112
115