maoda-commander-tt 0.0.49 → 0.0.50

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 CHANGED
@@ -394,6 +394,8 @@ tt ai audio wait --task-id 'xyq:<threadId>' --timeout-seconds 600 --output ./res
394
394
 
395
395
  `ai video` 同步完成会话初始化、素材上传与远端任务创建后返回 `taskId`,生成本身
396
396
  异步进行(通常约 5 分钟)。提交期间 stderr 每 10 秒输出一次 `progress` 事件。
397
+ 视频 `taskId` 直接等于后端 `thread_id`,不再带 `xyq:` 前缀;`status/wait` 仍接受旧的
398
+ `xyq:<threadId>`,返回结果使用不带前缀的 ID。
397
399
 
398
400
  ```bash
399
401
  # 提交并立即返回 taskId 与 nextCommand
@@ -403,14 +405,19 @@ tt ai video --duration-seconds 8 --images ./ref.png '图1 中的角色转身微
403
405
  tt ai video --duration-seconds 8 --output ./result.mp4 '海边日出,慢镜头'
404
406
 
405
407
  # 用 taskId 查询/等待既有任务
406
- tt ai video status --task-id xyq:<threadId>
407
- tt ai video wait --task-id xyq:<threadId> --timeout-seconds 600 --output ./result.mp4
408
+ tt ai video status --task-id '<threadId>'
409
+ tt ai video wait --task-id '<threadId>' --timeout-seconds 600 --output ./result.mp4
408
410
  ```
409
411
 
410
412
  等待超时不是失败:`wait` 返回 `timedOut: true` 与当前 `state`,可用同一 `taskId`
411
413
  继续等待;`ai video --wait` 和 `--output` 同样在 `data` 中返回当前状态与 `timedOut`。
412
414
  查询或下载异常时,`error` 中保留 `taskId`、`recoverable` 和恢复命令。
413
415
 
416
+ 保存 `taskId` 后可在新的 CLI 进程中再次查询,包括隔天查询;客户端没有任务 ID 过期时间,
417
+ 也不依赖原提交进程或本地任务记录。查询仍需要有效登录态和该任务的访问权限,服务端任务
418
+ 保留期限及产物链接有效期由后端决定。此 ID 定位的是 thread;当前查询未指定 runId,
419
+ 会取后端返回列表的最后一个 run。tt 每次提交都会新建 thread,因此普通提交对应独立任务。
420
+
414
421
  ## 联网搜索
415
422
 
416
423
  `ai websearch` 通过火山方舟 Responses API 的 `web_search` 工具搜索,`data.text`
@@ -1621,7 +1621,7 @@ var XyqSession = class {
1621
1621
  return responseResult;
1622
1622
  }
1623
1623
  return ok7({
1624
- taskId: createXyqTaskId(threadId),
1624
+ taskId: threadId,
1625
1625
  threadId,
1626
1626
  clientRunId,
1627
1627
  requestId,
@@ -1677,7 +1677,7 @@ var XyqSession = class {
1677
1677
  const state = hasUsableVideoOutput(artifacts) ? "completed" : providerState;
1678
1678
  const retryAfterSeconds = isTerminalXyqTaskState(state) ? 0 : VIDEO_POLL_INTERVAL_SECONDS;
1679
1679
  return ok7({
1680
- taskId: createXyqTaskId(threadId),
1680
+ taskId: threadId,
1681
1681
  threadId,
1682
1682
  ...serverRunId ? { runId: serverRunId } : {},
1683
1683
  state,
@@ -2945,8 +2945,13 @@ var AiAudioStatusCommand = class extends BaseCommand {
2945
2945
  }
2946
2946
  _agentContract() {
2947
2947
  return [
2948
- "\u4E0D\u7B49\u5F85\uFF1A\u8FD4\u56DE\u5F53\u524D state \u548C outputs\uFF1Bcompleted \u65F6 outputs[].downloadUrl \u4E3A\u4E91\u7AEF\u97F3\u9891\u5730\u5740\u3002",
2949
- "\u67E5\u8BE2\u6210\u529F\u65F6 code \u4E3A 0\uFF1B\u8FDC\u7AEF\u751F\u6210\u5931\u8D25\u3001\u53D6\u6D88\u6216\u9700\u8981\u8F93\u5165\u5206\u522B\u7531 state=failed/canceled/inputRequired \u8868\u793A\u3002"
2948
+ "\u53EA\u67E5\u8BE2\u5DF2\u6709\u4EFB\u52A1\uFF0C\u4E0D\u7B49\u5F85\u3001\u4E0D\u4E0B\u8F7D\u3001\u4E0D\u91CD\u65B0\u751F\u6210\u3002\u8FD4\u56DE\u5B57\u6BB5\u4E2D ? \u8868\u793A\u53EF\u9009\u3002",
2949
+ "data: {taskId:string,state:string,outputs:{downloadUrl:string}[],retryAfterSeconds?:number,failReason?:unknown}\uFF1B\u6210\u529F\u67E5\u8BE2\u4E0D\u8FD4\u56DE timedOut \u6216 nextCommand\u3002",
2950
+ 'data \u793A\u4F8B: {"taskId":"xyq:thread-123","state":"completed","outputs":[{"downloadUrl":"https://example.com/audio.mp3"}]}',
2951
+ "taskId \u5F53\u524D\u683C\u5F0F\u4E3A xyq:<threadId>\uFF1Bstate \u679A\u4E3E\u4E3A submitted/working/completed/failed/canceled/inputRequired/unknown\u3002code=0 \u4EC5\u8868\u793A\u67E5\u8BE2\u6210\u529F\uFF0C\u751F\u6210\u662F\u5426\u5B8C\u6210\u987B\u68C0\u67E5 state\u3002",
2952
+ "outputs \u6700\u591A\u542B\u4E00\u4E2A\u97F3\u9891\u4E91\u94FE\u63A5\uFF0C\u65E0\u53EF\u7528\u4EA7\u7269\u65F6\u4E3A []\uFF1BretryAfterSeconds \u4E3A\u5EFA\u8BAE\u8F6E\u8BE2\u95F4\u9694\uFF08\u79D2\uFF09\uFF0C\u4EC5\u5927\u4E8E 0 \u65F6\u8FD4\u56DE\u3002",
2953
+ "failReason \u4E3A\u8FDC\u7AEF\u63D0\u4F9B\u7684\u5931\u8D25\u4FE1\u606F\uFF0C\u4EC5\u4E0D\u4E3A null/undefined \u65F6\u8FD4\u56DE\uFF0C\u7C7B\u578B\u4E0D\u56FA\u5B9A\u3002",
2954
+ "\u8F93\u5165\u9519\u8BEF\u4E3A error.stage=input\uFF1B\u4F1A\u8BDD\u6216\u67E5\u8BE2\u9519\u8BEF\u9644 error:{stage,taskId,recoverable:true,nextCommand}\uFF0Cstage \u4E3A session/query\uFF0CnextCommand \u6307\u5411\u540C\u4E00\u4EFB\u52A1\u7684 audio wait\u3002"
2950
2955
  ];
2951
2956
  }
2952
2957
  async _execute(ctx) {
@@ -2994,9 +2999,14 @@ var AiAudioWaitCommand = class extends BaseCommand {
2994
2999
  }
2995
3000
  _agentContract() {
2996
3001
  return [
2997
- "\u963B\u585E\u7B49\u5F85\u5DF2\u6709\u4EFB\u52A1\uFF1B\u8D85\u65F6\u4E0D\u662F\u5931\u8D25\uFF0C\u8FD4\u56DE timedOut: true\u3001taskId \u4E0E nextCommand\uFF0C\u53EF\u7EE7\u7EED\u7B49\u5F85\u540C\u4E00\u4EFB\u52A1\u3002",
2998
- "--output \u65F6 outputs[].localPath \u4E3A\u4E0B\u8F7D\u540E\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u5426\u5219\u4E3A downloadUrl \u4E91\u94FE\u63A5\u3002",
2999
- "\u67E5\u8BE2\u6210\u529F\u65F6 code \u4E3A 0\uFF1B\u8FDC\u7AEF\u751F\u6210\u5931\u8D25\u3001\u53D6\u6D88\u6216\u9700\u8981\u8F93\u5165\u5206\u522B\u7531 state=failed/canceled/inputRequired \u8868\u793A\u3002"
3002
+ `\u7B49\u5F85\u5DF2\u6709\u4EFB\u52A1\u76F4\u5230\u7ED3\u675F\u6216\u8D85\u65F6\uFF0C\u9ED8\u8BA4\u6700\u591A ${DEFAULT_AUDIO_WAIT_SECONDS} \u79D2\uFF0C\u4E0D\u91CD\u65B0\u751F\u6210\u3002\u8FD4\u56DE\u5B57\u6BB5\u4E2D ? \u8868\u793A\u53EF\u9009\u3002`,
3003
+ "data: {taskId:string,state:string,outputs:({downloadUrl:string}|{localPath:string})[],retryAfterSeconds?:number,timedOut?:true,failReason?:unknown,nextCommand?:string}\u3002",
3004
+ '\u8D85\u65F6 data \u793A\u4F8B: {"taskId":"xyq:thread-123","state":"working","outputs":[],"timedOut":true,"nextCommand":"tt ai audio wait --task-id xyq:thread-123"}',
3005
+ "taskId \u5F53\u524D\u683C\u5F0F\u4E3A xyq:<threadId>\uFF1Bstate \u679A\u4E3E\u4E3A submitted/working/completed/failed/canceled/inputRequired/unknown\u3002code=0 \u4EC5\u8868\u793A\u67E5\u8BE2\u6210\u529F\uFF0C\u751F\u6210\u662F\u5426\u5B8C\u6210\u987B\u68C0\u67E5 state\u3002",
3006
+ "outputs \u6700\u591A\u542B\u4E00\u4E2A\u97F3\u9891\uFF0C\u65E0\u53EF\u7528\u4EA7\u7269\u65F6\u4E3A []\uFF1B\u672A\u4E0B\u8F7D\u65F6\u4E3A downloadUrl\uFF0C--output \u4E0B\u8F7D\u6210\u529F\u540E\u4E3A\u7EDD\u5BF9 localPath\u3002",
3007
+ "retryAfterSeconds \u4E3A\u5EFA\u8BAE\u8F6E\u8BE2\u95F4\u9694\uFF08\u79D2\uFF09\uFF0C\u4EC5\u5927\u4E8E 0 \u65F6\u8FD4\u56DE\uFF1BfailReason \u4E3A\u8FDC\u7AEF\u63D0\u4F9B\u7684\u5931\u8D25\u4FE1\u606F\uFF0C\u4EC5\u4E0D\u4E3A null/undefined \u65F6\u8FD4\u56DE\uFF0C\u7C7B\u578B\u4E0D\u56FA\u5B9A\u3002",
3008
+ "\u8D85\u65F6\u4ECD code=0\uFF0Cdata \u542B timedOut:true \u548C nextCommand\uFF1B\u672A\u8D85\u65F6\u7701\u7565\u8FD9\u4E24\u4E2A\u5B57\u6BB5\u3002nextCommand \u4FDD\u7559 --output \u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u53EF\u7EE7\u7EED\u7B49\u5F85\u540C\u4E00\u4EFB\u52A1\u3002",
3009
+ "\u8F93\u5165\u9519\u8BEF\u4E3A error.stage=input\uFF1B\u4F1A\u8BDD\u3001\u7B49\u5F85\u6216\u4E0B\u8F7D\u9519\u8BEF\u9644 error:{stage,taskId,recoverable:true,nextCommand,state?}\uFF0Cstage \u4E3A session/wait/download\uFF0Cstate \u4E3A\u6700\u540E\u5DF2\u77E5\u72B6\u6001\uFF0CnextCommand \u4FDD\u7559 --output\u3002"
3000
3010
  ];
3001
3011
  }
3002
3012
  async _execute(ctx) {
@@ -3051,7 +3061,7 @@ var AiAudioCommand = class extends BaseCommandGroup {
3051
3061
  cmd.argument("[prompt...]", "\u97F3\u9891\u751F\u6210\u63D0\u793A\u8BCD");
3052
3062
  }
3053
3063
  _helpExample() {
3054
- return "tt ai audio '\u6E29\u67D4\u5730\u8BF4\uFF1A\u6B22\u8FCE\u56DE\u6765'\n tt ai audio wait --task-id xyq:<thread-id> --output ./result.mp3";
3064
+ return "tt ai audio '\u6E29\u67D4\u5730\u8BF4\uFF1A\u6B22\u8FCE\u56DE\u6765'\n tt ai audio wait --task-id 'xyq:<thread-id>' --output ./result.mp3";
3055
3065
  }
3056
3066
  _registerSubcommands() {
3057
3067
  this._addSubcommand(new AiAudioStatusCommand(this._createSession));
@@ -3059,12 +3069,16 @@ var AiAudioCommand = class extends BaseCommandGroup {
3059
3069
  }
3060
3070
  _agentContract() {
3061
3071
  return [
3062
- "\u9ED8\u8BA4\u540C\u6B65\u5B8C\u6210\u4F1A\u8BDD\u521D\u59CB\u5316\u3001\u53C2\u8003\u97F3\u9891\u4E0A\u4F20\u548C\u8FDC\u7AEF\u4EFB\u52A1\u521B\u5EFA\uFF0C\u4E4B\u540E\u8FD4\u56DE taskId\u3001state=submitted \u4E0E nextCommand\u3002",
3063
- "\u63D0\u4EA4\u671F\u95F4 stderr \u7ACB\u5373\u8F93\u51FA\u7ED3\u6784\u5316 progress\uFF0C\u4E4B\u540E\u6BCF 10 \u79D2\u5FC3\u8DF3\uFF1B--quiet \u5173\u95ED progress\uFF0Cstdout \u4ECD\u4EC5\u8F93\u51FA\u6700\u7EC8 envelope\u3002",
3064
- `--wait \u6216 --output \u81EA\u52A8\u7B49\u5F85\uFF0C\u9ED8\u8BA4\u6700\u591A ${DEFAULT_AUDIO_WAIT_SECONDS} \u79D2\uFF1B\u6210\u529F\u8FD4\u56DE outputs\uFF08downloadUrl \u6216\u7EDD\u5BF9 localPath\uFF09\u3002`,
3065
- "\u8D85\u65F6\u4E0D\u662F\u5931\u8D25\uFF1A\u8FD4\u56DE timedOut: true\u3001taskId \u4E0E nextCommand\uFF0C\u540E\u7EED status/wait \u53EA\u67E5\u8BE2\u5DF2\u6709\u4EFB\u52A1\uFF0C\u4E0D\u91CD\u65B0\u751F\u6210\u3002",
3066
- "\u67E5\u8BE2\u6210\u529F\u65F6 code \u4E3A 0\uFF1B\u8FDC\u7AEF\u751F\u6210\u5931\u8D25\u3001\u53D6\u6D88\u6216\u9700\u8981\u8F93\u5165\u5206\u522B\u7531 state=failed/canceled/inputRequired \u8868\u793A\u3002",
3067
- "\u4EFB\u52A1\u521B\u5EFA\u540E\u7684\u67E5\u8BE2\u6216\u4E0B\u8F7D\u5F02\u5E38\u4F1A\u5728 error \u4E2D\u9644\u5E26 taskId\u3001recoverable \u4E0E\u4FDD\u7559 --output \u7684 nextCommand\u3002"
3072
+ "\u9ED8\u8BA4\u5B8C\u6210\u4F1A\u8BDD\u521D\u59CB\u5316\u3001\u53C2\u8003\u97F3\u9891\u4E0A\u4F20\u548C\u8FDC\u7AEF\u4EFB\u52A1\u521B\u5EFA\u540E\u8FD4\u56DE\uFF1B\u63D0\u4EA4\u671F\u95F4 stderr \u7ACB\u5373\u8F93\u51FA progress \u5E76\u6BCF 10 \u79D2\u5FC3\u8DF3\uFF0C--quiet \u53EF\u5173\u95ED\u3002",
3073
+ '\u8FD4\u56DE\u5B57\u6BB5\u4E2D ? \u8868\u793A\u53EF\u9009\u3002\u9ED8\u8BA4\u63D0\u4EA4 data: {taskId:string,state:"submitted",nextCommand:string}\uFF0C\u4E0D\u542B outputs\u3002',
3074
+ '\u63D0\u4EA4 data \u793A\u4F8B: {"taskId":"xyq:thread-123","state":"submitted","nextCommand":"tt ai audio wait --task-id xyq:thread-123"}',
3075
+ `--wait \u6216 --output \u9690\u542B\u7B49\u5F85\uFF0C\u9ED8\u8BA4\u6700\u591A ${DEFAULT_AUDIO_WAIT_SECONDS} \u79D2\uFF1B\u7B49\u5F85 data: {taskId:string,state:string,outputs:({downloadUrl:string}|{localPath:string})[],retryAfterSeconds?:number,timedOut?:true,failReason?:unknown,nextCommand?:string}\u3002`,
3076
+ '\u5B8C\u6210 data \u793A\u4F8B: {"taskId":"xyq:thread-123","state":"completed","outputs":[{"downloadUrl":"https://example.com/audio.mp3"}]}',
3077
+ "taskId \u5F53\u524D\u683C\u5F0F\u4E3A xyq:<threadId>\uFF1Bstate \u679A\u4E3E\u4E3A submitted/working/completed/failed/canceled/inputRequired/unknown\u3002code=0 \u4EC5\u8868\u793A\u63D0\u4EA4\u6216\u67E5\u8BE2\u6210\u529F\uFF0C\u751F\u6210\u662F\u5426\u5B8C\u6210\u987B\u68C0\u67E5 state\u3002",
3078
+ "\u7B49\u5F85\u7ED3\u679C outputs \u6700\u591A\u542B\u4E00\u4E2A\u97F3\u9891\uFF0C\u65E0\u53EF\u7528\u4EA7\u7269\u65F6\u4E3A []\uFF1B\u672A\u4E0B\u8F7D\u65F6\u4E3A downloadUrl\uFF0C--output \u4E0B\u8F7D\u6210\u529F\u540E\u4E3A\u7EDD\u5BF9 localPath\u3002",
3079
+ "retryAfterSeconds \u4E3A\u5EFA\u8BAE\u8F6E\u8BE2\u95F4\u9694\uFF08\u79D2\uFF09\uFF0C\u4EC5\u5927\u4E8E 0 \u65F6\u8FD4\u56DE\uFF1BfailReason \u4E3A\u8FDC\u7AEF\u63D0\u4F9B\u7684\u5931\u8D25\u4FE1\u606F\uFF0C\u4EC5\u4E0D\u4E3A null/undefined \u65F6\u8FD4\u56DE\uFF0C\u7C7B\u578B\u4E0D\u56FA\u5B9A\u3002",
3080
+ "\u7B49\u5F85\u8D85\u65F6\u4ECD code=0\uFF0Cdata \u542B timedOut:true \u548C nextCommand\uFF1B\u7B49\u5F85\u672A\u8D85\u65F6\u7701\u7565\u8FD9\u4E24\u4E2A\u5B57\u6BB5\u3002nextCommand \u4FDD\u7559 --output \u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u53EF\u7EE7\u7EED\u7B49\u5F85\u540C\u4E00\u4EFB\u52A1\uFF1Bstatus/wait \u4E0D\u91CD\u65B0\u751F\u6210\u3002",
3081
+ "\u5931\u8D25\u65F6 error.stage \u6807\u8BB0 input/session/upload/submit/wait/download\uFF1B\u5C1A\u672A\u53D6\u5F97\u4EFB\u52A1 ID \u65F6\u4E0D\u4FDD\u8BC1\u6709 taskId\u3002\u53D6\u5F97 ID \u540E\u7684\u67E5\u8BE2\u6216\u4E0B\u8F7D\u9519\u8BEF\u9644 taskId\u3001recoverable:true\u3001nextCommand\uFF0Cstate? \u4E3A\u6700\u540E\u5DF2\u77E5\u72B6\u6001\u3002"
3068
3082
  ];
3069
3083
  }
3070
3084
  async _execute(ctx) {
@@ -3333,7 +3347,17 @@ var AiImageListCommand = class extends BaseCommand {
3333
3347
  return { name: "list", description: "\u5217\u51FA\u672C\u673A\u56FE\u7247\u4EFB\u52A1\u8BB0\u5F55\uFF0C\u627E\u56DE\u672A\u6536\u5230\u7684 taskId" };
3334
3348
  }
3335
3349
  _agentContract() {
3336
- return ["data.tasks \u662F\u672C\u673A\u5DF2\u4FDD\u5B58\u7684\u56FE\u7247\u4EFB\u52A1\uFF1B\u53EA\u8BFB\u53D6\u4EFB\u52A1\u8BB0\u5F55\uFF0C\u4E0D\u542F\u52A8\u6216\u6062\u590D\u751F\u6210\u3002"];
3350
+ return [
3351
+ "data \u5FC5\u9009\u5B57\u6BB5: tasks:\u4EFB\u52A1\u6570\u7EC4\uFF1B\u65E0\u672C\u673A\u8BB0\u5F55\u65F6\u4E3A []\u3002\u6BCF\u6761\u4EFB\u52A1\u5FC5\u9009\u5B57\u6BB5: taskId:string\u3001state:string\u3001outputs:Array<{localPath:string}>\uFF1B\u53EF\u9009\u5B57\u6BB5\uFF08?\uFF09: createdAt?:string\u3001updatedAt?:string\u3001retryAfterSeconds?:number\u3001failReason?:string\u3001nextCommand?:string\u3002",
3352
+ "taskId \u683C\u5F0F\u4E3A local-image:<uuid>\uFF1Bstate \u679A\u4E3E: submitted=\u672C\u5730\u5DF2\u53D7\u7406\u3001working=\u6267\u884C\u4E2D\u3001completed=\u56FE\u7247\u53EF\u7528\u3001failed=\u751F\u6210\u5931\u8D25\u3001unknown=\u6267\u884C\u72B6\u6001\u6216\u4EA7\u7269\u65E0\u6CD5\u786E\u8BA4\u3002code=0 \u8868\u793A\u5217\u8868\u8BFB\u53D6\u6210\u529F\uFF0C\u4E0D\u8868\u793A\u5217\u8868\u5185\u4EFB\u52A1\u751F\u6210\u6210\u529F\u3002",
3353
+ "\u6BCF\u6761\u4EFB\u52A1\u7ED3\u6784\u4E0E image status \u76F8\u540C\uFF1Aoutputs \u65E0\u53EF\u7528\u56FE\u7247\u65F6\u4E3A []\uFF0C\u5B8C\u6210\u65F6 localPath \u662F\u672C\u673A\u5F52\u6863\u56FE\u7247\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002",
3354
+ "createdAt/updatedAt \u662F\u8BB0\u5F55\u521B\u5EFA/\u6700\u540E\u5199\u5165\u65F6\u95F4\uFF08ISO 8601 UTC\uFF09\uFF0C\u4E0D\u662F\u672C\u6B21\u67E5\u8BE2\u65F6\u95F4\uFF1B\u8BB0\u5F55\u635F\u574F\u65F6\u53EF\u80FD\u7701\u7565\u65F6\u95F4\uFF0C\u8FD4\u56DE unknown \u4E0E failReason\u3002",
3355
+ "submitted/working \u53EF\u8FD4\u56DE retryAfterSeconds\uFF08\u5EFA\u8BAE\u67E5\u8BE2\u95F4\u9694\uFF0C\u5355\u4F4D\u79D2\uFF09\uFF0Cfailed/unknown \u53EF\u8FD4\u56DE failReason\uFF1B\u5217\u8868\u4E0D\u7B49\u5F85\u4EFB\u52A1\uFF0C\u4E0D\u8FD4\u56DE timedOut\u3002",
3356
+ "\u6BCF\u6761\u4EFB\u52A1\u7684 nextCommand \u5728 submitted/working \u65F6\u4E3A wait \u547D\u4EE4\uFF0Cunknown \u65F6\u4E3A status \u547D\u4EE4\uFF0Ccompleted/failed \u65F6\u7701\u7565\u3002",
3357
+ 'data \u793A\u4F8B\uFF08\u7701\u7565\u53EF\u9009\u5B57\u6BB5\uFF09: {"tasks":[{"taskId":"local-image:00000000-0000-4000-8000-000000000001","state":"completed","outputs":[{"localPath":"/tmp/image-tasks/00000000-0000-4000-8000-000000000001/image.png"}]}]}',
3358
+ "\u5217\u8868\u8BFB\u53D6\u5931\u8D25\u65F6\u8FD4\u56DE\u975E\u96F6 code\uFF0Cerror.stage=query\uFF1B\u5355\u6761\u8BB0\u5F55\u8BFB\u53D6\u5931\u8D25\u5219\u4FDD\u7559\u8BE5\u9879 taskId\uFF0C\u4F7F\u7528 state=unknown \u4E0E failReason \u8BF4\u660E\u3002",
3359
+ "\u53EF\u627E\u56DE\u63D0\u4EA4\u65F6\u672A\u6536\u5230\u7684 taskId\uFF1B\u53EA\u8BFB\u53D6\u672C\u673A\u4EFB\u52A1\u4E0E\u4EA7\u7269\u72B6\u6001\uFF0C\u4E0D\u542F\u52A8\u6216\u6062\u590D\u751F\u6210\uFF0C\u8BB0\u5F55\u4E0D\u968F\u666E\u901A\u7D20\u6750\u7F13\u5B58\u6E05\u7406\u3002"
3360
+ ];
3337
3361
  }
3338
3362
  async _execute() {
3339
3363
  const result = await this._service.list();
@@ -3357,8 +3381,14 @@ var AiImageStatusCommand = class extends BaseCommand {
3357
3381
  }
3358
3382
  _agentContract() {
3359
3383
  return [
3360
- "\u8FD4\u56DE\u5F53\u524D state \u4E0E outputs\uFF1Bcompleted/failed/unknown \u5747\u662F\u67E5\u8BE2\u7ED3\u679C\uFF0C\u4E0D\u6839\u636E code=0 \u63A8\u65AD\u751F\u6210\u6210\u529F\u3002",
3361
- "unknown \u8868\u793A\u540E\u53F0\u6267\u884C\u72B6\u6001\u65E0\u6CD5\u786E\u8BA4\uFF1B\u672C\u547D\u4EE4\u4E0D\u4F1A\u81EA\u52A8\u91CD\u65B0\u751F\u6210\u3002"
3384
+ "data \u5FC5\u9009\u5B57\u6BB5: taskId:string\u3001state:string\u3001outputs:Array<{localPath:string}>\uFF1B\u53EF\u9009\u5B57\u6BB5\uFF08?\uFF09: createdAt?:string\u3001updatedAt?:string\u3001retryAfterSeconds?:number\u3001failReason?:string\u3001nextCommand?:string\u3002",
3385
+ "taskId \u683C\u5F0F\u4E3A local-image:<uuid>\uFF1Bstate \u679A\u4E3E: submitted=\u672C\u5730\u5DF2\u53D7\u7406\u3001working=\u6267\u884C\u4E2D\u3001completed=\u56FE\u7247\u53EF\u7528\u3001failed=\u751F\u6210\u5931\u8D25\u3001unknown=\u6267\u884C\u72B6\u6001\u6216\u4EA7\u7269\u65E0\u6CD5\u786E\u8BA4\u3002code=0 \u8868\u793A\u67E5\u8BE2\u6210\u529F\uFF0C\u4E0D\u8868\u793A\u56FE\u7247\u751F\u6210\u6210\u529F\u3002",
3386
+ "outputs \u65E0\u53EF\u7528\u56FE\u7247\u65F6\u4E3A []\uFF0C\u5B8C\u6210\u65F6 localPath \u662F\u672C\u673A\u5F52\u6863\u56FE\u7247\u7684\u7EDD\u5BF9\u8DEF\u5F84\u3002createdAt/updatedAt \u662F\u8BB0\u5F55\u521B\u5EFA/\u6700\u540E\u5199\u5165\u65F6\u95F4\uFF08ISO 8601 UTC\uFF09\uFF0C\u4E0D\u662F\u67E5\u8BE2\u65F6\u95F4\u3002",
3387
+ "submitted/working \u53EF\u8FD4\u56DE retryAfterSeconds\uFF08\u5EFA\u8BAE\u67E5\u8BE2\u95F4\u9694\uFF0C\u5355\u4F4D\u79D2\uFF09\uFF1Bfailed/unknown \u53EF\u8FD4\u56DE failReason\u3002\u672C\u547D\u4EE4\u5355\u6B21\u67E5\u8BE2\uFF0C\u4E0D\u8FD4\u56DE timedOut\u3002",
3388
+ "nextCommand \u5728 submitted/working \u65F6\u4E3A wait \u547D\u4EE4\uFF0Cunknown \u65F6\u4E3A status \u547D\u4EE4\uFF0Ccompleted/failed \u65F6\u7701\u7565\u3002",
3389
+ 'data \u793A\u4F8B\uFF08\u7701\u7565\u53EF\u9009\u5B57\u6BB5\uFF09: {"taskId":"local-image:00000000-0000-4000-8000-000000000001","state":"completed","outputs":[{"localPath":"/tmp/image-tasks/00000000-0000-4000-8000-000000000001/image.png"}]}',
3390
+ "\u67E5\u8BE2\u5931\u8D25\u65F6\u8FD4\u56DE\u975E\u96F6 code\uFF0Cerror \u542B stage=query \u548C taskId\uFF1B\u6B64\u5931\u8D25\u5206\u652F\u4E0D\u63D0\u4F9B nextCommand\u3002",
3391
+ "\u53EA\u89C2\u5BDF\u539F\u4EFB\u52A1\uFF0C\u4E0D\u91CD\u65B0\u751F\u6210\u6216\u6062\u590D Codex \u4F1A\u8BDD\uFF1Bunknown \u65F6\u5148\u68C0\u67E5\u539F\u4EFB\u52A1\u4E0E\u4EA7\u7269\uFF0C\u4E22\u5931 taskId \u53EF\u7528 tt ai image list \u627E\u56DE\u672C\u673A\u8BB0\u5F55\u3002"
3362
3392
  ];
3363
3393
  }
3364
3394
  async _execute(ctx) {
@@ -3386,9 +3416,15 @@ var AiImageWaitCommand = class extends BaseCommand {
3386
3416
  }
3387
3417
  _agentContract() {
3388
3418
  return [
3389
- "\u8D85\u65F6\u8FD4\u56DE data.timedOut=true\u3001\u5F53\u524D state \u4E0E nextCommand\uFF1B\u4E0D\u4F1A\u53D6\u6D88\u540E\u53F0\u4EFB\u52A1\u3002",
3390
- "\u5B8C\u6210\u65F6 outputs[].localPath \u662F\u56FE\u7247\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF1B\u91CD\u590D\u8C03\u7528\u53EA\u7B49\u5F85\u6216\u590D\u5236\u5DF2\u6709\u4EA7\u7269\u3002",
3391
- "state=unknown \u8868\u793A\u6267\u884C\u72B6\u6001\u65E0\u6CD5\u786E\u8BA4\uFF1B\u4E0D\u81EA\u52A8\u6062\u590D\u4F1A\u8BDD\u6216\u91CD\u65B0\u751F\u6210\u3002"
3419
+ "data \u5FC5\u9009\u5B57\u6BB5: taskId:string\u3001state:string\u3001outputs:Array<{localPath:string}>\uFF1B\u53EF\u9009\u5B57\u6BB5\uFF08?\uFF09: createdAt?:string\u3001updatedAt?:string\u3001retryAfterSeconds?:number\u3001timedOut?:true\u3001failReason?:string\u3001nextCommand?:string\u3002",
3420
+ "taskId \u683C\u5F0F\u4E3A local-image:<uuid>\uFF1Bstate \u679A\u4E3E: submitted=\u672C\u5730\u5DF2\u53D7\u7406\u3001working=\u6267\u884C\u4E2D\u3001completed=\u56FE\u7247\u53EF\u7528\u3001failed=\u751F\u6210\u5931\u8D25\u3001unknown=\u6267\u884C\u72B6\u6001\u6216\u4EA7\u7269\u65E0\u6CD5\u786E\u8BA4\u3002code=0 \u53EA\u8868\u793A\u8FD4\u56DE\u4E86\u7B49\u5F85\u7ED3\u679C\uFF0C\u751F\u6210\u662F\u5426\u6210\u529F\u987B\u68C0\u67E5 state\u3002",
3421
+ "outputs \u65E0\u53EF\u7528\u56FE\u7247\u65F6\u4E3A []\uFF1B\u5B8C\u6210\u65F6 localPath \u662F\u56FE\u7247\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4F7F\u7528 --output \u65F6\u6307\u5411\u6307\u5B9A\u4FDD\u5B58\u4F4D\u7F6E\uFF0C\u91CD\u590D\u8C03\u7528\u53EA\u7B49\u5F85\u6216\u590D\u5236\u5DF2\u6709\u4EA7\u7269\u3002",
3422
+ "createdAt/updatedAt \u662F\u8BB0\u5F55\u521B\u5EFA/\u6700\u540E\u5199\u5165\u65F6\u95F4\uFF08ISO 8601 UTC\uFF09\uFF0C\u4E0D\u662F\u7B49\u5F85\u7ED3\u675F\u65F6\u95F4\uFF1Bsubmitted/working \u53EF\u8FD4\u56DE retryAfterSeconds\uFF08\u5355\u4F4D\u79D2\uFF09\uFF0Cfailed/unknown \u53EF\u8FD4\u56DE failReason\u3002",
3423
+ "\u4EC5\u7B49\u5F85\u8D85\u65F6\u65F6\u8FD4\u56DE timedOut=true\uFF0C\u6B64\u65F6 state \u4ECD\u4E3A submitted/working\uFF0C\u540E\u53F0\u4EFB\u52A1\u7EE7\u7EED\uFF1B\u5176\u4ED6\u7ED3\u679C\u7701\u7565 timedOut\u3002",
3424
+ "nextCommand \u5728 submitted/working \u65F6\u4E3A wait \u547D\u4EE4\uFF08\u4FDD\u7559\u672C\u6B21 --output\uFF09\uFF0Cunknown \u65F6\u4E3A status \u547D\u4EE4\uFF0Ccompleted/failed \u65F6\u7701\u7565\u3002",
3425
+ 'data \u793A\u4F8B\uFF08\u7701\u7565\u90E8\u5206\u53EF\u9009\u5B57\u6BB5\uFF09: {"taskId":"local-image:00000000-0000-4000-8000-000000000001","state":"working","outputs":[],"retryAfterSeconds":1,"timedOut":true,"nextCommand":"tt ai image wait --task-id local-image:00000000-0000-4000-8000-000000000001"}',
3426
+ "\u53C2\u6570\u6821\u9A8C\u5931\u8D25\u4E3A error.stage=input\uFF1B\u7B49\u5F85\u6216\u4FDD\u5B58\u5931\u8D25\u7684 error \u542B stage=wait\u3001taskId\u3001recoverable:true\u3001\u4FDD\u7559 --output \u7684 nextCommand\u3002",
3427
+ "\u4E0D\u91CD\u65B0\u751F\u6210\u6216\u6062\u590D Codex \u4F1A\u8BDD\uFF1Bunknown \u65F6\u5148\u68C0\u67E5\u539F\u4EFB\u52A1\u4E0E\u4EA7\u7269\uFF0C\u4E22\u5931 taskId \u53EF\u7528 tt ai image list \u627E\u56DE\u672C\u673A\u8BB0\u5F55\u3002"
3392
3428
  ];
3393
3429
  }
3394
3430
  async _execute(ctx) {
@@ -3437,12 +3473,16 @@ var AiImageCommand = class extends BaseCommandGroup {
3437
3473
  }
3438
3474
  _agentContract() {
3439
3475
  return [
3440
- "\u9ED8\u8BA4\u5148\u4FDD\u5B58\u4EFB\u52A1\u8BB0\u5F55\u5E76\u542F\u52A8\u672C\u5730\u540E\u53F0\u8FDB\u7A0B\uFF0C\u968F\u540E\u8FD4\u56DE taskId\u3001state \u4E0E nextCommand\uFF1Bsubmitted \u8868\u793A\u672C\u5730\u4EFB\u52A1\u5DF2\u53D7\u7406\u3002",
3441
- "--wait \u6216 --output: \u7B49\u5F85\u540C\u4E00\u4EFB\u52A1\uFF1B\u8D85\u65F6\u8FD4\u56DE data.timedOut=true\uFF0C\u540E\u53F0\u4EFB\u52A1\u7EE7\u7EED\u8FD0\u884C\u3002",
3442
- "\u5B8C\u6210\u65F6 outputs[].localPath \u662F\u56FE\u7247\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF1B\u4E0D\u518D\u8FD4\u56DE\u65E7 imagePath \u5B57\u6BB5\u3002",
3443
- "status/wait \u4E0D\u4F1A\u91CD\u65B0\u751F\u6210\u6216\u6062\u590D Codex \u4F1A\u8BDD\uFF1Bunknown \u8868\u793A\u6267\u884C\u72B6\u6001\u65E0\u6CD5\u786E\u8BA4\uFF0C\u8BF7\u5148\u68C0\u67E5\u5DF2\u6709\u4EFB\u52A1\u4E0E\u4EA7\u7269\u3002",
3444
- "\u4E22\u5931 taskId \u53EF\u7528 ai image list \u627E\u56DE\u672C\u673A\u8BB0\u5F55\uFF1B\u8BB0\u5F55\u4E0D\u5305\u542B\u5728\u666E\u901A\u7D20\u6750\u7F13\u5B58\u6E05\u7406\u4E2D\u3002",
3445
- "\u540E\u53F0\u4EFB\u52A1\u53EF\u5728\u8C03\u7528\u65B9\u9000\u51FA\u540E\u7EE7\u7EED\uFF1B\u673A\u5668\u91CD\u542F\u6216\u8FDB\u7A0B\u4E2D\u65AD\u4E0D\u4FDD\u8BC1\u65E0\u635F\u7EED\u7B97\u3002"
3476
+ "data \u5FC5\u9009\u5B57\u6BB5: taskId:string\u3001state:string\u3001outputs:Array<{localPath:string}>\uFF1B\u53EF\u9009\u5B57\u6BB5\uFF08?\uFF09: createdAt?:string\u3001updatedAt?:string\u3001retryAfterSeconds?:number\u3001timedOut?:true\u3001failReason?:string\u3001nextCommand?:string\u3002",
3477
+ "taskId \u683C\u5F0F\u4E3A local-image:<uuid>\uFF1Bstate \u679A\u4E3E: submitted=\u672C\u5730\u5DF2\u53D7\u7406\u3001working=\u6267\u884C\u4E2D\u3001completed=\u56FE\u7247\u53EF\u7528\u3001failed=\u751F\u6210\u5931\u8D25\u3001unknown=\u6267\u884C\u72B6\u6001\u6216\u4EA7\u7269\u65E0\u6CD5\u786E\u8BA4\u3002code=0 \u53EA\u8868\u793A\u547D\u4EE4\u6210\u529F\u8FD4\u56DE\u7ED3\u679C\uFF0C\u751F\u6210\u662F\u5426\u6210\u529F\u987B\u68C0\u67E5 state\u3002",
3478
+ "outputs \u65E0\u53EF\u7528\u56FE\u7247\u65F6\u4E3A []\uFF1B\u5B8C\u6210\u65F6 localPath \u662F\u56FE\u7247\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4F7F\u7528 --output \u65F6\u6307\u5411\u6307\u5B9A\u4FDD\u5B58\u4F4D\u7F6E\u3002",
3479
+ "createdAt/updatedAt \u662F\u4EFB\u52A1\u8BB0\u5F55\u521B\u5EFA/\u6700\u540E\u5199\u5165\u65F6\u95F4\uFF08ISO 8601 UTC\uFF09\uFF0C\u4E0D\u662F\u672C\u6B21\u67E5\u8BE2\u65F6\u95F4\uFF1Bsubmitted/working \u53EF\u8FD4\u56DE retryAfterSeconds\uFF0C\u5355\u4F4D\u79D2\uFF1Bfailed/unknown \u53EF\u8FD4\u56DE failReason\u3002",
3480
+ "nextCommand \u5728 submitted/working \u65F6\u4E3A wait \u547D\u4EE4\uFF08\u4FDD\u7559\u672C\u6B21 --output\uFF09\uFF0Cunknown \u65F6\u4E3A status \u547D\u4EE4\uFF0Ccompleted/failed \u65F6\u7701\u7565\u3002",
3481
+ "\u9ED8\u8BA4\u5148\u4FDD\u5B58\u8BB0\u5F55\u5E76\u542F\u52A8\u540E\u53F0\u8FDB\u7A0B\u540E\u8FD4\u56DE\uFF1B--wait \u6216 --output \u7B49\u5F85\u540C\u4E00\u4EFB\u52A1\uFF0C\u4EC5\u7B49\u5F85\u8D85\u65F6\u65F6\u8FD4\u56DE timedOut=true\uFF0C\u540E\u53F0\u4EFB\u52A1\u7EE7\u7EED\u8FD0\u884C\u3002",
3482
+ 'data \u793A\u4F8B\uFF08\u7701\u7565\u90E8\u5206\u53EF\u9009\u5B57\u6BB5\uFF09: {"taskId":"local-image:00000000-0000-4000-8000-000000000001","state":"working","outputs":[],"retryAfterSeconds":1,"nextCommand":"tt ai image wait --task-id local-image:00000000-0000-4000-8000-000000000001"}',
3483
+ '\u547D\u4EE4\u5931\u8D25\u65F6 error.stage \u6807\u8BB0 input/submit/wait\uFF1B\u63D0\u4EA4\u5931\u8D25\u7ED9\u51FA nextCommand="tt ai image list"\uFF0CtaskId \u53EF\u80FD\u5C1A\u4E0D\u53EF\u7528\uFF1B\u7B49\u5F85\u6216\u4FDD\u5B58\u5931\u8D25\u9644 taskId\u3001recoverable:true\u3001\u4FDD\u7559 --output \u7684 nextCommand\u3002',
3484
+ "status/wait \u4E0D\u4F1A\u91CD\u65B0\u751F\u6210\u6216\u6062\u590D Codex \u4F1A\u8BDD\uFF1B\u4E22\u5931 taskId \u53EF\u7528 tt ai image list \u627E\u56DE\u672C\u673A\u8BB0\u5F55\uFF0C\u8BB0\u5F55\u4E0D\u968F\u666E\u901A\u7D20\u6750\u7F13\u5B58\u6E05\u7406\u3002",
3485
+ "\u540E\u53F0\u4EFB\u52A1\u53EF\u5728\u8C03\u7528\u65B9\u9000\u51FA\u540E\u7EE7\u7EED\uFF1B\u673A\u5668\u91CD\u542F\u6216\u8FDB\u7A0B\u4E2D\u65AD\u4E0D\u4FDD\u8BC1\u65E0\u635F\u7EED\u7B97\uFF0Cunknown \u65F6\u5148\u68C0\u67E5\u539F\u4EFB\u52A1\u4E0E\u4EA7\u7269\u3002"
3446
3486
  ];
3447
3487
  }
3448
3488
  async _execute(ctx) {
@@ -4325,13 +4365,20 @@ var AiVideoStatusCommand = class extends BaseCommand {
4325
4365
  }
4326
4366
  _configureOptions(cmd) {
4327
4367
  cmd.addOption(
4328
- new Option7("--task-id <task-id>", "\u63D0\u4EA4\u65F6\u8FD4\u56DE\u7684\u4EFB\u52A1 ID").makeOptionMandatory()
4368
+ new Option7("--task-id <task-id>", "\u63D0\u4EA4\u65F6\u8FD4\u56DE\u7684\u89C6\u9891 taskId\uFF0C\u5373\u540E\u7AEF threadId").makeOptionMandatory()
4329
4369
  );
4330
4370
  }
4331
4371
  _agentContract() {
4332
4372
  return [
4333
- "\u4E0D\u7B49\u5F85\uFF1A\u7ACB\u5373\u8FD4\u56DE\u5F53\u524D state\uFF08submitted/working/completed/failed/canceled/inputRequired\uFF09\u3002",
4334
- "state \u4E3A completed \u65F6 outputs \u542B\u6700\u9AD8\u753B\u8D28\u89C6\u9891\u4E91\u94FE\u63A5\uFF1B\u9700\u8981\u963B\u585E\u7B49\u5F85\u8BF7\u7528 ai video wait\u3002"
4373
+ "\u4E0D\u7B49\u5F85\uFF1A\u76F4\u63A5\u6309\u540E\u7AEF threadId \u67E5\u8BE2\uFF0Cdata.taskId \u5373\u8BE5 threadId\u3002",
4374
+ "data \u5B57\u6BB5\uFF08? \u8868\u793A\u53EF\u9009\uFF09\uFF1A{taskId:string,state:string,outputs:object[],retryAfterSeconds?:number,failReason?:unknown}\u3002",
4375
+ "state \u53EF\u4E3A submitted/working/completed/failed/canceled/inputRequired/unknown\uFF1Bcode=0 \u53EA\u8868\u793A\u67E5\u8BE2\u6210\u529F\uFF0C\u751F\u6210\u7ED3\u679C\u9700\u5224\u65AD state \u548C outputs\u3002",
4376
+ "outputs \u662F\u6700\u9AD8\u753B\u8D28\u4EA7\u7269\u6570\u7EC4\uFF0C\u65E0\u4EA7\u7269\u65F6\u4E3A []\uFF1B\u6BCF\u9879\u542B downloadUrl:string\uFF0C\u53EF\u9009 assetId:string\u3001pippitAssetId:string\u3001width:number\u3001height:number\uFF08\u50CF\u7D20\uFF09\u3001durationMs:number\uFF08\u6BEB\u79D2\uFF09\u3002",
4377
+ "retryAfterSeconds \u662F\u5EFA\u8BAE\u8F6E\u8BE2\u95F4\u9694\u79D2\u6570\uFF0C\u4EC5\u5927\u4E8E 0 \u65F6\u8FD4\u56DE\uFF1BfailReason \u662F\u540E\u7AEF\u63D0\u4F9B\u7684\u5931\u8D25\u8BE6\u60C5\uFF0C\u7C7B\u578B\u4E0D\u56FA\u5B9A\u3002",
4378
+ 'data \u793A\u4F8B\uFF1A{"taskId":"thread-id","state":"working","retryAfterSeconds":3,"outputs":[]}',
4379
+ "\u672C\u547D\u4EE4\u4E0D\u8FD4\u56DE timedOut \u6216 nextCommand\uFF1B\u9700\u8981\u963B\u585E\u7B49\u5F85\u8BF7\u7528 tt ai video wait --task-id <threadId>\u3002",
4380
+ "\u67E5\u8BE2\u53EF\u8DE8\u8FDB\u7A0B\u3001\u9694\u5929\u7EE7\u7EED\uFF0C\u65E0\u5BA2\u6237\u7AEF\u4EFB\u52A1\u8FC7\u671F\u65F6\u95F4\uFF1B\u4ECD\u9700\u6709\u6548\u767B\u5F55\u6001\u3001\u8BBF\u95EE\u6743\u9650\u53CA\u540E\u7AEF\u4FDD\u7559\u4EFB\u52A1\u3002\u6309 thread \u67E5\u8BE2\u4F1A\u53D6\u8FD4\u56DE\u5217\u8868\u6700\u540E\u4E00\u4E2A run\u3002",
4381
+ "\u547D\u4EE4\u5931\u8D25\u65F6 error.stage \u6807\u8BC6 input/session/query\uFF1B\u67E5\u8BE2\u8BF7\u6C42\u5931\u8D25\u9644\u5E26 error.taskId\uFF0C\u672C\u547D\u4EE4\u4E0D\u63D0\u4F9B\u6062\u590D\u547D\u4EE4\u3002"
4335
4382
  ];
4336
4383
  }
4337
4384
  async _execute(ctx) {
@@ -4347,7 +4394,7 @@ var AiVideoStatusCommand = class extends BaseCommand {
4347
4394
  threadId: threadIdResult.value
4348
4395
  });
4349
4396
  if (!result.ok) {
4350
- return failFrom(result, { stage: "query", taskId: ctx.options.taskId });
4397
+ return failFrom(result, { stage: "query", taskId: threadIdResult.value });
4351
4398
  }
4352
4399
  return ok26(toVideoTaskOutput(result.value));
4353
4400
  }
@@ -4369,7 +4416,7 @@ var AiVideoWaitCommand = class extends BaseCommand {
4369
4416
  }
4370
4417
  _configureOptions(cmd) {
4371
4418
  cmd.addOption(
4372
- new Option8("--task-id <task-id>", "\u63D0\u4EA4\u65F6\u8FD4\u56DE\u7684\u4EFB\u52A1 ID").makeOptionMandatory()
4419
+ new Option8("--task-id <task-id>", "\u63D0\u4EA4\u65F6\u8FD4\u56DE\u7684\u89C6\u9891 taskId\uFF0C\u5373\u540E\u7AEF threadId").makeOptionMandatory()
4373
4420
  );
4374
4421
  cmd.addOption(
4375
4422
  new Option8(
@@ -4386,23 +4433,36 @@ var AiVideoWaitCommand = class extends BaseCommand {
4386
4433
  }
4387
4434
  _agentContract() {
4388
4435
  return [
4389
- "\u963B\u585E\u7B49\u5F85\u76F4\u5230\u4EFB\u52A1\u7ED3\u675F\u6216\u8D85\u65F6\uFF1B\u8D85\u65F6\u4E0D\u662F\u5931\u8D25\uFF0C\u8FD4\u56DE timedOut: true \u4E0E\u5F53\u524D state\uFF0C\u53EF\u7528\u540C\u4E00 taskId \u518D\u6B21\u8C03\u7528\u3002",
4390
- "--output \u65F6 outputs[].localPath \u4E3A\u4E0B\u8F7D\u540E\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u5426\u5219\u4E3A downloadUrl \u4E91\u94FE\u63A5\u3002"
4436
+ "\u963B\u585E\u7B49\u5F85\u5DF2\u6709\u4EFB\u52A1\uFF0C\u4E0D\u91CD\u65B0\u63D0\u4EA4\uFF1Bdata.taskId \u5373\u540E\u7AEF threadId\u3002",
4437
+ "data \u5B57\u6BB5\uFF08? \u8868\u793A\u53EF\u9009\uFF09\uFF1A{taskId:string,state:string,outputs:object[],retryAfterSeconds?:number,timedOut?:true,failReason?:unknown}\u3002",
4438
+ "state \u53EF\u4E3A submitted/working/completed/failed/canceled/inputRequired/unknown\uFF1Bcode=0 \u53EA\u8868\u793A\u67E5\u8BE2\u6210\u529F\uFF0C\u751F\u6210\u7ED3\u679C\u9700\u5224\u65AD state \u548C outputs\u3002",
4439
+ "outputs \u662F\u6700\u9AD8\u753B\u8D28\u4EA7\u7269\u6570\u7EC4\uFF0C\u65E0\u4EA7\u7269\u65F6\u4E3A []\uFF1B\u6BCF\u9879\u542B downloadUrl:string\uFF0C--output \u4E0B\u8F7D\u6210\u529F\u540E\u6539\u4E3A\u7EDD\u5BF9 localPath:string\u3002",
4440
+ "\u4EA7\u7269\u53EF\u9009\u5B57\u6BB5\uFF1AassetId:string\u3001pippitAssetId:string\u3001width:number\u3001height:number\uFF08\u50CF\u7D20\uFF09\u3001durationMs:number\uFF08\u6BEB\u79D2\uFF09\u3002",
4441
+ "retryAfterSeconds \u662F\u5EFA\u8BAE\u8F6E\u8BE2\u95F4\u9694\u79D2\u6570\uFF0C\u4EC5\u5927\u4E8E 0 \u65F6\u8FD4\u56DE\uFF1BfailReason \u662F\u540E\u7AEF\u63D0\u4F9B\u7684\u5931\u8D25\u8BE6\u60C5\uFF0C\u7C7B\u578B\u4E0D\u56FA\u5B9A\u3002",
4442
+ "\u8D85\u65F6\u4ECD code=0\uFF0Cdata.timedOut=true\uFF0C\u672A\u8D85\u65F6\u7701\u7565\u8BE5\u5B57\u6BB5\uFF1B\u7B49\u5F85\u7ED3\u679C\u6CA1\u6709 nextCommand\uFF0C\u8BF7\u7528\u540C\u4E00 taskId \u518D\u6B21\u8C03\u7528 wait\u3002",
4443
+ '\u8D85\u65F6 data \u793A\u4F8B\uFF1A{"taskId":"thread-id","state":"working","retryAfterSeconds":3,"timedOut":true,"outputs":[]}',
4444
+ '\u4FDD\u5B58\u6210\u529F data \u793A\u4F8B\uFF1A{"taskId":"thread-id","state":"completed","outputs":[{"localPath":"/absolute/result.mp4"}]}',
4445
+ "\u7B49\u5F85/\u4E0B\u8F7D\u5F02\u5E38\u7684 error \u542B stage\u3001taskId\u3001recoverable\u3001nextCommand\uFF1B\u5F53\u524D\u6062\u590D\u547D\u4EE4\u672A\u5305\u542B --output\uFF0C\u9700\u8981\u4FDD\u5B58\u6587\u4EF6\u65F6\u8BF7\u8865\u56DE\u8F93\u51FA\u8DEF\u5F84\u3002"
4391
4446
  ];
4392
4447
  }
4393
4448
  async _execute(ctx) {
4394
4449
  const options = ctx.command.optsWithGlobals();
4450
+ const threadIdResult = parseXyqTaskId(options.taskId);
4451
+ if (!threadIdResult.ok) {
4452
+ return failFrom(threadIdResult, { stage: "input" });
4453
+ }
4454
+ const taskId = threadIdResult.value;
4395
4455
  const result = await this._runVideoTask({
4396
- taskId: options.taskId,
4456
+ taskId,
4397
4457
  timeoutSeconds: options.timeoutSeconds,
4398
4458
  outputPath: options.output
4399
4459
  });
4400
4460
  if (!result.ok) {
4401
4461
  return failFrom(result, {
4402
4462
  stage: "wait",
4403
- taskId: options.taskId,
4463
+ taskId,
4404
4464
  recoverable: true,
4405
- nextCommand: `tt ai video wait --task-id ${options.taskId}`
4465
+ nextCommand: `tt ai video wait --task-id ${taskId}`
4406
4466
  });
4407
4467
  }
4408
4468
  return ok27(
@@ -4503,11 +4563,20 @@ var AiVideoCommand = class extends BaseCommandGroup {
4503
4563
  _agentContract() {
4504
4564
  return [
4505
4565
  "\u9ED8\u8BA4: \u751F\u6210\u8FC7\u7A0B\u5F02\u6B65\uFF0C\u4F46\u672C\u547D\u4EE4\u4F1A\u540C\u6B65\u5B8C\u6210\u4F1A\u8BDD\u521D\u59CB\u5316\u3001\u53C2\u8003\u7D20\u6750\u4E0A\u4F20\u548C\u8FDC\u7AEF\u4EFB\u52A1\u521B\u5EFA\uFF0C\u4E4B\u540E\u624D\u8FD4\u56DE taskId\u3002",
4566
+ "\u89C6\u9891 taskId \u76F4\u63A5\u4F7F\u7528\u540E\u7AEF threadId\u3002",
4567
+ '\u63D0\u4EA4 data \u5B57\u6BB5\uFF08? \u8868\u793A\u53EF\u9009\uFF09\uFF1A{taskId:string,state:"submitted",nextCommand:string,estimatedWaitSeconds?:number,appliedParameters?:object,adjustments?:object[]}\uFF1B\u6B64\u65F6\u6CA1\u6709 outputs \u5B57\u6BB5\u3002',
4568
+ '\u63D0\u4EA4 data \u793A\u4F8B\uFF08\u7701\u7565\u53EF\u9009\u5B57\u6BB5\uFF09\uFF1A{"taskId":"thread-id","state":"submitted","nextCommand":"tt ai video wait --task-id thread-id"}',
4569
+ "estimatedWaitSeconds \u662F\u9884\u8BA1\u751F\u6210\u79D2\u6570\uFF1BappliedParameters \u662F\u5B9E\u9645\u751F\u6548\u53C2\u6570\uFF1Badjustments \u662F\u53C2\u6570\u9ED8\u8BA4\u503C\u6216\u8C03\u6574\u8BF4\u660E\uFF0C\u4EC5\u975E\u7A7A\u65F6\u8FD4\u56DE\u3002",
4506
4570
  "\u63D0\u4EA4\u671F\u95F4 stderr \u7ACB\u5373\u8F93\u51FA\u7ED3\u6784\u5316 progress\uFF0C\u4E4B\u540E\u6BCF 10 \u79D2\u5FC3\u8DF3\uFF1Bprogress \u4E0D\u662F\u6700\u7EC8\u7ED3\u679C\uFF0C\u5FC5\u987B\u7B49\u5F85\u8FDB\u7A0B\u9000\u51FA\u3002",
4507
- "--quiet: \u5173\u95ED\u975E\u9519\u8BEF stderr progress\uFF1B\u771F\u5B9E\u9519\u8BEF\u4ECD\u4F1A\u5199\u5165 stderr\u3002",
4508
- "--wait: \u5355\u6B21\u8C03\u7528\u7B49\u5F85\u5B8C\u6210\uFF0C\u8FD4\u56DE\u6700\u9AD8\u753B\u8D28\u89C6\u9891\u4E91\u94FE\u63A5\u3002",
4509
- "--output <path>: \u81EA\u52A8\u9690\u542B --wait\uFF0C\u8FD4\u56DE\u4E0B\u8F7D\u540E\u7684\u7EDD\u5BF9 localPath\u3002",
4510
- "\u751F\u6210\u901A\u5E38\u7EA6 5 \u5206\u949F\uFF1B\u7B49\u5F85\u8D85\u65F6\u8FD4\u56DE data.taskId \u4E0E data.timedOut=true\uFF0C\u53EF\u7528\u540C\u4E00 ID \u8C03\u7528 video wait\uFF1B\u67E5\u8BE2\u6216\u4E0B\u8F7D\u5F02\u5E38\u5728 error \u4E2D\u7ED9\u51FA\u6062\u590D\u547D\u4EE4\u3002"
4571
+ "--quiet: \u5173\u95ED\u63D0\u4EA4\u9636\u6BB5\u7684 stderr progress\uFF0Cstdout \u4ECD\u4EC5\u8F93\u51FA\u6700\u7EC8 envelope\u3002",
4572
+ "--wait/--output \u7684 data \u5FC5\u542B taskId\u3001state\u3001outputs\uFF1B\u53EF\u9009 retryAfterSeconds:number\u3001timedOut:true\u3001failReason\uFF0C\u4EE5\u53CA\u63D0\u4EA4\u9636\u6BB5\u7684 estimatedWaitSeconds/appliedParameters/adjustments\u3002",
4573
+ "outputs \u662F\u6700\u9AD8\u753B\u8D28\u4EA7\u7269\u6570\u7EC4\uFF0C\u65E0\u4EA7\u7269\u65F6\u4E3A []\uFF1B\u6BCF\u9879\u542B downloadUrl:string\uFF0C--output \u81EA\u52A8\u7B49\u5F85\u5E76\u4E0B\u8F7D\u6210\u529F\u540E\u6539\u4E3A\u7EDD\u5BF9 localPath:string\u3002",
4574
+ "\u4EA7\u7269\u53EF\u9009\u5B57\u6BB5\uFF1AassetId:string\u3001pippitAssetId:string\u3001width:number\u3001height:number\uFF08\u50CF\u7D20\uFF09\u3001durationMs:number\uFF08\u6BEB\u79D2\uFF09\u3002",
4575
+ '\u5B8C\u6210 data \u793A\u4F8B\uFF08\u7701\u7565\u53EF\u9009\u5B57\u6BB5\uFF09\uFF1A{"taskId":"thread-id","state":"completed","outputs":[{"downloadUrl":"https://example.com/result.mp4"}]}',
4576
+ "state \u53EF\u4E3A submitted/working/completed/failed/canceled/inputRequired/unknown\uFF1Bcode=0 \u53EA\u8868\u793A\u63D0\u4EA4\u6216\u67E5\u8BE2\u6210\u529F\uFF0C\u751F\u6210\u7ED3\u679C\u9700\u5224\u65AD state \u548C outputs\u3002",
4577
+ "retryAfterSeconds \u662F\u5EFA\u8BAE\u8F6E\u8BE2\u95F4\u9694\u79D2\u6570\uFF0C\u4EC5\u5927\u4E8E 0 \u65F6\u8FD4\u56DE\uFF1BfailReason \u662F\u540E\u7AEF\u63D0\u4F9B\u7684\u5931\u8D25\u8BE6\u60C5\uFF0C\u7C7B\u578B\u4E0D\u56FA\u5B9A\u3002",
4578
+ "\u751F\u6210\u901A\u5E38\u7EA6 5 \u5206\u949F\uFF1B\u7B49\u5F85\u8D85\u65F6\u4ECD code=0\uFF0Cdata.timedOut=true\uFF0C\u672A\u8D85\u65F6\u7701\u7565\u8BE5\u5B57\u6BB5\u3002\u7B49\u5F85\u7ED3\u679C\u6CA1\u6709 nextCommand\uFF0C\u8BF7\u7528\u540C\u4E00 taskId \u8C03\u7528 tt ai video wait --task-id <threadId>\u3002",
4579
+ "\u7B49\u5F85/\u4E0B\u8F7D\u5F02\u5E38\u7684 error \u542B stage\u3001taskId\u3001recoverable\u3001nextCommand\uFF1B\u5F53\u524D\u6062\u590D\u547D\u4EE4\u672A\u5305\u542B --output\uFF0C\u9700\u8981\u4FDD\u5B58\u6587\u4EF6\u65F6\u8BF7\u8865\u56DE\u8F93\u51FA\u8DEF\u5F84\u3002"
4511
4580
  ];
4512
4581
  }
4513
4582
  _registerSubcommands() {
@@ -7970,4 +8039,4 @@ export {
7970
8039
  ToolCommand,
7971
8040
  createRootCommands
7972
8041
  };
7973
- //# sourceMappingURL=chunk-GAOUOOBO.js.map
8042
+ //# sourceMappingURL=chunk-N7MMM2TO.js.map