gaoding-cli 1.0.0-alpha.7 → 1.0.0-alpha.9

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +47 -60
  3. package/dist/bin/gd-cli.js +2 -2
  4. package/dist/src/api/app-runner.d.ts +1 -4
  5. package/dist/src/api/app-runner.js +11 -44
  6. package/dist/src/api/creative-client.d.ts +34 -0
  7. package/dist/src/api/creative-client.js +184 -0
  8. package/dist/src/api/dam-client.d.ts +0 -7
  9. package/dist/src/api/dam-client.js +0 -17
  10. package/dist/src/api/direct-client.d.ts +9 -2
  11. package/dist/src/api/direct-client.js +45 -18
  12. package/dist/src/api/hub-client.d.ts +11 -8
  13. package/dist/src/api/hub-client.js +17 -18
  14. package/dist/src/api/usage-client.d.ts +4 -4
  15. package/dist/src/api/usage-client.js +9 -49
  16. package/dist/src/auth/credential-store-v2.d.ts +0 -1
  17. package/dist/src/auth/credential-store-v2.js +0 -6
  18. package/dist/src/commands/auth.js +17 -53
  19. package/dist/src/commands/creative.d.ts +8 -0
  20. package/dist/src/commands/creative.js +178 -0
  21. package/dist/src/commands/dam.js +270 -127
  22. package/dist/src/commands/org.js +31 -47
  23. package/dist/src/commands/skills.js +33 -118
  24. package/dist/src/commands/update.js +11 -82
  25. package/dist/src/commands/usage.d.ts +1 -1
  26. package/dist/src/commands/usage.js +10 -21
  27. package/dist/src/commands/workflows.d.ts +1 -1
  28. package/dist/src/commands/workflows.js +299 -197
  29. package/dist/src/core/auth/auth-guard.d.ts +21 -0
  30. package/dist/src/core/auth/auth-guard.js +121 -0
  31. package/dist/src/core/auth/org-manager.d.ts +2 -1
  32. package/dist/src/core/auth/org-manager.js +61 -6
  33. package/dist/src/core/output/envelope.d.ts +1 -0
  34. package/dist/src/core/output/envelope.js +76 -6
  35. package/dist/src/creative/contract.d.ts +1060 -0
  36. package/dist/src/creative/contract.js +722 -0
  37. package/dist/src/creative/media.d.ts +19 -0
  38. package/dist/src/creative/media.js +83 -0
  39. package/dist/src/creative/protocol.d.ts +60 -0
  40. package/dist/src/creative/protocol.js +337 -0
  41. package/dist/src/io.d.ts +0 -2
  42. package/dist/src/io.js +0 -8
  43. package/dist/src/middleware/auth.d.ts +6 -2
  44. package/dist/src/middleware/auth.js +25 -63
  45. package/dist/src/middleware/error-handler.d.ts +8 -0
  46. package/dist/src/middleware/error-handler.js +61 -57
  47. package/dist/src/program.d.ts +1 -0
  48. package/dist/src/program.js +137 -122
  49. package/dist/src/registry/agent-contracts.d.ts +14 -34
  50. package/dist/src/registry/agent-contracts.js +209 -297
  51. package/dist/src/registry/direct-registry.d.ts +0 -5
  52. package/dist/src/registry/direct-registry.js +0 -19
  53. package/dist/src/registry/registry-client.d.ts +0 -21
  54. package/dist/src/registry/registry-client.js +1 -40
  55. package/dist/src/utils/capability-presenter.js +6 -29
  56. package/dist/src/utils/config.d.ts +2 -2
  57. package/dist/src/utils/config.js +1 -1
  58. package/dist/src/utils/help-verify.d.ts +1 -3
  59. package/dist/src/utils/help-verify.js +1 -25
  60. package/dist/src/utils/sensitive-path.js +1 -4
  61. package/package.json +4 -3
  62. package/skills/gd-cli/SKILL.md +13 -12
  63. package/skills/gd-cli/references/auth.md +9 -10
  64. package/skills/gd-cli/references/creative.md +47 -0
  65. package/skills/gd-cli/references/entitlement.md +3 -3
  66. package/skills/gd-cli/references/errors.md +10 -3
  67. package/skills/gd-cli/references/org.md +3 -3
  68. package/skills/gd-cli/references/sop.md +8 -8
  69. package/skills/gd-cli/references/update.md +4 -3
  70. package/skills/gd-cli/references/workflows.md +7 -6
  71. package/dist/src/commands/models.d.ts +0 -2
  72. package/dist/src/commands/models.js +0 -78
  73. package/dist/src/commands/tools.d.ts +0 -4
  74. package/dist/src/commands/tools.js +0 -383
  75. package/dist/src/utils/list-output-format.d.ts +0 -10
  76. package/dist/src/utils/list-output-format.js +0 -34
  77. package/skills/gd-cli/references/tools.md +0 -29
@@ -0,0 +1,1060 @@
1
+ export declare const CREATIVE_SCHEMA_VERSION: "creative/v1";
2
+ export interface CreativeInput {
3
+ prompt?: string;
4
+ media?: CreativeMedia[];
5
+ parameters?: CreativeParameters;
6
+ conversation_id?: string;
7
+ question_message_id?: string;
8
+ answers?: CreativeAnswer[];
9
+ }
10
+ export interface CreativeMedia {
11
+ source: string;
12
+ role: "reference" | "first_frame" | "last_frame";
13
+ }
14
+ export interface CreativeParameters {
15
+ ratio?: string;
16
+ resolution?: string;
17
+ duration_seconds?: number;
18
+ }
19
+ export interface CreativeAnswer {
20
+ question: string;
21
+ values: string[];
22
+ }
23
+ export interface CreativeQuestionGroup {
24
+ title: string;
25
+ questions: Array<{
26
+ question: string;
27
+ options: Array<{
28
+ label: string;
29
+ }>;
30
+ allow_multiple: boolean;
31
+ }>;
32
+ }
33
+ export type CreativeOutput = {
34
+ type: "text";
35
+ text: string;
36
+ } | {
37
+ type: "json";
38
+ value: unknown;
39
+ } | {
40
+ type: "image" | "video" | "audio" | "file";
41
+ url: string;
42
+ mime_type: string;
43
+ name?: string;
44
+ asset_id?: string;
45
+ width?: number;
46
+ height?: number;
47
+ duration_seconds?: number;
48
+ };
49
+ export interface CreativeResult {
50
+ conversation_id: string;
51
+ finish_reason: "completed" | "requires_input";
52
+ message: string;
53
+ outputs: CreativeOutput[];
54
+ question_message_id?: string;
55
+ questions?: CreativeQuestionGroup;
56
+ }
57
+ export interface CreativeError {
58
+ code: string;
59
+ type: "validation" | "auth" | "business" | "network" | "unknown";
60
+ message: string;
61
+ hint?: string;
62
+ retryable?: boolean;
63
+ }
64
+ export interface CreativeEnvelope {
65
+ status: "completed" | "failed";
66
+ data: CreativeResult | null;
67
+ error: CreativeError | null;
68
+ meta: {
69
+ command: "creative run";
70
+ schema_version: typeof CREATIVE_SCHEMA_VERSION;
71
+ };
72
+ }
73
+ export declare const CREATIVE_INPUT_SCHEMA: {
74
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
75
+ readonly $id: "https://www.gaoding.com/cli/schemas/creative-input-v1.json";
76
+ readonly description: "发起或继续一次稿定 Creative 创作所需的完整输入。";
77
+ readonly type: "object";
78
+ readonly additionalProperties: false;
79
+ readonly properties: {
80
+ readonly prompt: {
81
+ readonly type: "string";
82
+ readonly minLength: 1;
83
+ readonly description: "详细描述期望的最终结果,包括主体、用途、内容、风格、场景、构图或镜头,以及必须保留和避免的事项。比例、分辨率、时长等可结构化表达的要求,建议通过 parameters 传入。";
84
+ };
85
+ readonly media: {
86
+ readonly type: "array";
87
+ readonly minItems: 1;
88
+ readonly description: "本次创作使用的输入素材;媒体不能脱离 prompt 或 answers 单独提交。";
89
+ readonly items: {
90
+ readonly type: "object";
91
+ readonly additionalProperties: false;
92
+ readonly required: readonly ["source", "role"];
93
+ readonly properties: {
94
+ readonly source: {
95
+ readonly type: "string";
96
+ readonly minLength: 1;
97
+ readonly description: "本地文件路径或可访问的 HTTP(S) URL。";
98
+ };
99
+ readonly role: {
100
+ readonly type: "string";
101
+ readonly enum: readonly ["reference", "first_frame", "last_frame"];
102
+ readonly description: "素材用途;reference 是参考素材,first_frame 和 last_frame 分别是视频首帧和尾帧。CLI 不根据数组顺序、文件名或 prompt 推断。";
103
+ };
104
+ };
105
+ };
106
+ };
107
+ readonly parameters: {
108
+ readonly type: "object";
109
+ readonly description: "可选的结构化创作约束。GD Agent 会优先遵循本字段中的约束;存在对应参数时,建议使用本字段,而不是仅在 prompt 中通过文本描述。";
110
+ readonly additionalProperties: false;
111
+ readonly properties: {
112
+ readonly ratio: {
113
+ readonly type: "string";
114
+ readonly minLength: 1;
115
+ readonly description: "期望输出媒体的宽高比,例如 1:1、16:9 或 9:16。";
116
+ };
117
+ readonly resolution: {
118
+ readonly type: "string";
119
+ readonly minLength: 1;
120
+ readonly description: "期望输出媒体的分辨率,例如 720p、1080p、2K 或 4K。";
121
+ };
122
+ readonly duration_seconds: {
123
+ readonly type: "integer";
124
+ readonly minimum: 1;
125
+ readonly description: "期望生成视频的时长,单位为秒;仅适用于视频创作。";
126
+ };
127
+ };
128
+ };
129
+ readonly conversation_id: {
130
+ readonly type: "string";
131
+ readonly minLength: 1;
132
+ readonly description: "继续已有创作或回答追问时使用的会话标识;首次请求和独立的新创作不传。";
133
+ };
134
+ readonly question_message_id: {
135
+ readonly type: "string";
136
+ readonly minLength: 1;
137
+ readonly description: "正在回答或跳过的追问消息标识,原样使用上一次 requires_input 输出中的值。";
138
+ };
139
+ readonly answers: {
140
+ readonly type: "array";
141
+ readonly minItems: 1;
142
+ readonly description: "对上一次 requires_input 输出中一个或多个问题的结构化回答。";
143
+ readonly items: {
144
+ readonly type: "object";
145
+ readonly additionalProperties: false;
146
+ readonly required: readonly ["question", "values"];
147
+ readonly properties: {
148
+ readonly question: {
149
+ readonly type: "string";
150
+ readonly minLength: 1;
151
+ readonly description: "必须与上一次输出中的 question 文本一致。";
152
+ };
153
+ readonly values: {
154
+ readonly type: "array";
155
+ readonly minItems: 1;
156
+ readonly description: "选择项或自定义回答;推荐 options 不是枚举限制。";
157
+ readonly items: {
158
+ readonly type: "string";
159
+ readonly minLength: 1;
160
+ };
161
+ };
162
+ };
163
+ };
164
+ };
165
+ };
166
+ readonly anyOf: readonly [{
167
+ readonly required: readonly ["prompt"];
168
+ }, {
169
+ readonly required: readonly ["answers"];
170
+ }];
171
+ readonly dependentRequired: {
172
+ readonly answers: readonly ["conversation_id", "question_message_id"];
173
+ readonly question_message_id: readonly ["conversation_id"];
174
+ };
175
+ readonly allOf: readonly [{
176
+ readonly properties: {
177
+ readonly media: {
178
+ readonly description: "用于检查首帧数量的素材列表。";
179
+ readonly contains: {
180
+ readonly type: "object";
181
+ readonly properties: {
182
+ readonly role: {
183
+ readonly const: "first_frame";
184
+ readonly description: "首帧素材角色。";
185
+ };
186
+ };
187
+ readonly required: readonly ["role"];
188
+ };
189
+ readonly minContains: 0;
190
+ readonly maxContains: 1;
191
+ };
192
+ };
193
+ }, {
194
+ readonly properties: {
195
+ readonly media: {
196
+ readonly description: "用于检查尾帧数量的素材列表。";
197
+ readonly contains: {
198
+ readonly type: "object";
199
+ readonly properties: {
200
+ readonly role: {
201
+ readonly const: "last_frame";
202
+ readonly description: "尾帧素材角色。";
203
+ };
204
+ };
205
+ readonly required: readonly ["role"];
206
+ };
207
+ readonly minContains: 0;
208
+ readonly maxContains: 1;
209
+ };
210
+ };
211
+ }];
212
+ };
213
+ export declare const CREATIVE_OUTPUT_SCHEMA: {
214
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
215
+ readonly $id: "https://www.gaoding.com/cli/schemas/creative-output-v1.json";
216
+ readonly description: "creative run 的统一最终输出;中间事件和内部调用过程不属于本 Schema。";
217
+ readonly type: "object";
218
+ readonly additionalProperties: false;
219
+ readonly required: readonly ["status", "data", "error", "meta"];
220
+ readonly properties: {
221
+ readonly status: {
222
+ readonly type: "string";
223
+ readonly enum: readonly ["completed", "failed"];
224
+ readonly description: "CLI 调用是否成功;requires_input 仍属于 completed。";
225
+ };
226
+ readonly data: {
227
+ readonly description: "status 为 completed 时存在的 Creative 最终结果;failed 时为 null。";
228
+ };
229
+ readonly error: {
230
+ readonly description: "status 为 failed 时存在的结构化错误;completed 时为 null。";
231
+ };
232
+ readonly meta: {
233
+ readonly type: "object";
234
+ readonly description: "本次输出对应的命令与公共契约版本。";
235
+ readonly additionalProperties: false;
236
+ readonly required: readonly ["command", "schema_version"];
237
+ readonly properties: {
238
+ readonly command: {
239
+ readonly const: "creative run";
240
+ readonly description: "产生本 Envelope 的 GD CLI 命令。";
241
+ };
242
+ readonly schema_version: {
243
+ readonly const: "creative/v1";
244
+ readonly description: "Creative 公共契约版本。";
245
+ };
246
+ };
247
+ };
248
+ };
249
+ readonly oneOf: readonly [{
250
+ readonly properties: {
251
+ readonly status: {
252
+ readonly const: "completed";
253
+ readonly description: "成功状态。";
254
+ };
255
+ readonly data: {
256
+ readonly $ref: "#/$defs/result";
257
+ readonly description: "Creative 结果。";
258
+ };
259
+ readonly error: {
260
+ readonly type: "null";
261
+ readonly description: "成功时没有错误。";
262
+ };
263
+ };
264
+ }, {
265
+ readonly properties: {
266
+ readonly status: {
267
+ readonly const: "failed";
268
+ readonly description: "失败状态。";
269
+ };
270
+ readonly data: {
271
+ readonly type: "null";
272
+ readonly description: "失败时没有 Creative 结果。";
273
+ };
274
+ readonly error: {
275
+ readonly $ref: "#/$defs/error";
276
+ readonly description: "结构化失败信息。";
277
+ };
278
+ };
279
+ }];
280
+ readonly $defs: {
281
+ readonly result: {
282
+ readonly type: "object";
283
+ readonly additionalProperties: false;
284
+ readonly required: readonly ["conversation_id", "finish_reason", "message", "outputs"];
285
+ readonly properties: {
286
+ readonly conversation_id: {
287
+ readonly type: "string";
288
+ readonly minLength: 1;
289
+ readonly description: "新请求由 GD Agent 创建;连续请求沿用输入值。";
290
+ };
291
+ readonly finish_reason: {
292
+ readonly type: "string";
293
+ readonly enum: readonly ["completed", "requires_input"];
294
+ readonly description: "completed 表示本轮完成;requires_input 表示需要继续回答 questions。";
295
+ };
296
+ readonly message: {
297
+ readonly type: "string";
298
+ readonly description: "GD Agent 面向使用者的最终说明。";
299
+ };
300
+ readonly outputs: {
301
+ readonly type: "array";
302
+ readonly description: "本轮最终产出的文本、结构化数据或媒体。";
303
+ readonly items: {
304
+ readonly $ref: "#/$defs/output";
305
+ };
306
+ };
307
+ readonly question_message_id: {
308
+ readonly type: "string";
309
+ readonly minLength: 1;
310
+ readonly description: "requires_input 时必填,并在下一次请求中原样回传。";
311
+ };
312
+ readonly questions: {
313
+ readonly $ref: "#/$defs/question_group";
314
+ readonly description: "requires_input 时必填的结构化追问。";
315
+ };
316
+ };
317
+ readonly allOf: readonly [{
318
+ readonly if: {
319
+ readonly properties: {
320
+ readonly finish_reason: {
321
+ readonly const: "requires_input";
322
+ readonly description: "需要使用者回答。";
323
+ };
324
+ };
325
+ };
326
+ readonly then: {
327
+ readonly required: readonly ["question_message_id", "questions"];
328
+ };
329
+ readonly else: {
330
+ readonly not: {
331
+ readonly anyOf: readonly [{
332
+ readonly required: readonly ["question_message_id"];
333
+ }, {
334
+ readonly required: readonly ["questions"];
335
+ }];
336
+ };
337
+ };
338
+ }];
339
+ };
340
+ readonly question_group: {
341
+ readonly type: "object";
342
+ readonly additionalProperties: false;
343
+ readonly required: readonly ["title", "questions"];
344
+ readonly properties: {
345
+ readonly title: {
346
+ readonly type: "string";
347
+ readonly description: "本组追问的标题。";
348
+ };
349
+ readonly questions: {
350
+ readonly type: "array";
351
+ readonly minItems: 1;
352
+ readonly description: "需要使用者回答的一个或多个问题。";
353
+ readonly items: {
354
+ readonly type: "object";
355
+ readonly additionalProperties: false;
356
+ readonly required: readonly ["question", "options", "allow_multiple"];
357
+ readonly properties: {
358
+ readonly question: {
359
+ readonly type: "string";
360
+ readonly minLength: 1;
361
+ readonly description: "问题文本;提交 answers 时原样作为 answers[].question。";
362
+ };
363
+ readonly options: {
364
+ readonly type: "array";
365
+ readonly description: "推荐选项,可以为空;label 不是严格枚举。";
366
+ readonly items: {
367
+ readonly type: "object";
368
+ readonly additionalProperties: false;
369
+ readonly required: readonly ["label"];
370
+ readonly properties: {
371
+ readonly label: {
372
+ readonly type: "string";
373
+ readonly minLength: 1;
374
+ readonly description: "推荐回答的展示文本。";
375
+ };
376
+ };
377
+ };
378
+ };
379
+ readonly allow_multiple: {
380
+ readonly type: "boolean";
381
+ readonly description: "是否允许为本问题提交多个回答值。";
382
+ };
383
+ };
384
+ };
385
+ };
386
+ };
387
+ };
388
+ readonly output: {
389
+ readonly oneOf: readonly [{
390
+ readonly type: "object";
391
+ readonly additionalProperties: false;
392
+ readonly required: readonly ["type", "text"];
393
+ readonly properties: {
394
+ readonly type: {
395
+ readonly const: "text";
396
+ readonly description: "结果类型。";
397
+ };
398
+ readonly text: {
399
+ readonly type: "string";
400
+ readonly description: "文本内容。";
401
+ };
402
+ };
403
+ }, {
404
+ readonly type: "object";
405
+ readonly additionalProperties: false;
406
+ readonly required: readonly ["type", "value"];
407
+ readonly properties: {
408
+ readonly type: {
409
+ readonly const: "json";
410
+ readonly description: "结果类型。";
411
+ };
412
+ readonly value: {
413
+ readonly description: "任意合法 JSON 值。";
414
+ };
415
+ };
416
+ }, {
417
+ readonly type: "object";
418
+ readonly additionalProperties: false;
419
+ readonly required: readonly ["type", "url", "mime_type"];
420
+ readonly properties: {
421
+ readonly type: {
422
+ readonly type: "string";
423
+ readonly enum: readonly ["image", "video", "audio", "file"];
424
+ readonly description: "媒体或文件类型。";
425
+ };
426
+ readonly url: {
427
+ readonly type: "string";
428
+ readonly format: "uri";
429
+ readonly pattern: "^https?://";
430
+ readonly description: "可访问或下载结果的 HTTP(S) URL。";
431
+ };
432
+ readonly mime_type: {
433
+ readonly type: "string";
434
+ readonly minLength: 1;
435
+ readonly description: "结果的 MIME type,例如 image/png 或 video/mp4。";
436
+ };
437
+ readonly name: {
438
+ readonly type: "string";
439
+ readonly minLength: 1;
440
+ readonly description: "建议的展示名或文件名。";
441
+ };
442
+ readonly asset_id: {
443
+ readonly type: "string";
444
+ readonly minLength: 1;
445
+ readonly description: "结果已进入 DAM 时的素材标识。";
446
+ };
447
+ readonly width: {
448
+ readonly type: "number";
449
+ readonly minimum: 0;
450
+ readonly description: "图片或视频的像素宽度。";
451
+ };
452
+ readonly height: {
453
+ readonly type: "number";
454
+ readonly minimum: 0;
455
+ readonly description: "图片或视频的像素高度。";
456
+ };
457
+ readonly duration_seconds: {
458
+ readonly type: "number";
459
+ readonly minimum: 0;
460
+ readonly description: "视频或音频的时长,单位为秒。";
461
+ };
462
+ };
463
+ }];
464
+ };
465
+ readonly error: {
466
+ readonly type: "object";
467
+ readonly additionalProperties: false;
468
+ readonly required: readonly ["code", "type", "message"];
469
+ readonly properties: {
470
+ readonly code: {
471
+ readonly type: "string";
472
+ readonly minLength: 1;
473
+ readonly description: "稳定、可机器判断的错误码。";
474
+ };
475
+ readonly type: {
476
+ readonly type: "string";
477
+ readonly enum: readonly ["validation", "auth", "business", "network", "unknown"];
478
+ readonly description: "错误所属类别。";
479
+ };
480
+ readonly message: {
481
+ readonly type: "string";
482
+ readonly minLength: 1;
483
+ readonly description: "面向使用者的错误说明。";
484
+ };
485
+ readonly hint: {
486
+ readonly type: "string";
487
+ readonly minLength: 1;
488
+ readonly description: "可执行的处理建议。";
489
+ };
490
+ readonly retryable: {
491
+ readonly type: "boolean";
492
+ readonly description: "使用相同输入稍后重试是否可能成功。";
493
+ };
494
+ };
495
+ };
496
+ };
497
+ };
498
+ export declare function getCreativeSchema(): {
499
+ schema_version: "creative/v1";
500
+ input_schema: {
501
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
502
+ readonly $id: "https://www.gaoding.com/cli/schemas/creative-input-v1.json";
503
+ readonly description: "发起或继续一次稿定 Creative 创作所需的完整输入。";
504
+ readonly type: "object";
505
+ readonly additionalProperties: false;
506
+ readonly properties: {
507
+ readonly prompt: {
508
+ readonly type: "string";
509
+ readonly minLength: 1;
510
+ readonly description: "详细描述期望的最终结果,包括主体、用途、内容、风格、场景、构图或镜头,以及必须保留和避免的事项。比例、分辨率、时长等可结构化表达的要求,建议通过 parameters 传入。";
511
+ };
512
+ readonly media: {
513
+ readonly type: "array";
514
+ readonly minItems: 1;
515
+ readonly description: "本次创作使用的输入素材;媒体不能脱离 prompt 或 answers 单独提交。";
516
+ readonly items: {
517
+ readonly type: "object";
518
+ readonly additionalProperties: false;
519
+ readonly required: readonly ["source", "role"];
520
+ readonly properties: {
521
+ readonly source: {
522
+ readonly type: "string";
523
+ readonly minLength: 1;
524
+ readonly description: "本地文件路径或可访问的 HTTP(S) URL。";
525
+ };
526
+ readonly role: {
527
+ readonly type: "string";
528
+ readonly enum: readonly ["reference", "first_frame", "last_frame"];
529
+ readonly description: "素材用途;reference 是参考素材,first_frame 和 last_frame 分别是视频首帧和尾帧。CLI 不根据数组顺序、文件名或 prompt 推断。";
530
+ };
531
+ };
532
+ };
533
+ };
534
+ readonly parameters: {
535
+ readonly type: "object";
536
+ readonly description: "可选的结构化创作约束。GD Agent 会优先遵循本字段中的约束;存在对应参数时,建议使用本字段,而不是仅在 prompt 中通过文本描述。";
537
+ readonly additionalProperties: false;
538
+ readonly properties: {
539
+ readonly ratio: {
540
+ readonly type: "string";
541
+ readonly minLength: 1;
542
+ readonly description: "期望输出媒体的宽高比,例如 1:1、16:9 或 9:16。";
543
+ };
544
+ readonly resolution: {
545
+ readonly type: "string";
546
+ readonly minLength: 1;
547
+ readonly description: "期望输出媒体的分辨率,例如 720p、1080p、2K 或 4K。";
548
+ };
549
+ readonly duration_seconds: {
550
+ readonly type: "integer";
551
+ readonly minimum: 1;
552
+ readonly description: "期望生成视频的时长,单位为秒;仅适用于视频创作。";
553
+ };
554
+ };
555
+ };
556
+ readonly conversation_id: {
557
+ readonly type: "string";
558
+ readonly minLength: 1;
559
+ readonly description: "继续已有创作或回答追问时使用的会话标识;首次请求和独立的新创作不传。";
560
+ };
561
+ readonly question_message_id: {
562
+ readonly type: "string";
563
+ readonly minLength: 1;
564
+ readonly description: "正在回答或跳过的追问消息标识,原样使用上一次 requires_input 输出中的值。";
565
+ };
566
+ readonly answers: {
567
+ readonly type: "array";
568
+ readonly minItems: 1;
569
+ readonly description: "对上一次 requires_input 输出中一个或多个问题的结构化回答。";
570
+ readonly items: {
571
+ readonly type: "object";
572
+ readonly additionalProperties: false;
573
+ readonly required: readonly ["question", "values"];
574
+ readonly properties: {
575
+ readonly question: {
576
+ readonly type: "string";
577
+ readonly minLength: 1;
578
+ readonly description: "必须与上一次输出中的 question 文本一致。";
579
+ };
580
+ readonly values: {
581
+ readonly type: "array";
582
+ readonly minItems: 1;
583
+ readonly description: "选择项或自定义回答;推荐 options 不是枚举限制。";
584
+ readonly items: {
585
+ readonly type: "string";
586
+ readonly minLength: 1;
587
+ };
588
+ };
589
+ };
590
+ };
591
+ };
592
+ };
593
+ readonly anyOf: readonly [{
594
+ readonly required: readonly ["prompt"];
595
+ }, {
596
+ readonly required: readonly ["answers"];
597
+ }];
598
+ readonly dependentRequired: {
599
+ readonly answers: readonly ["conversation_id", "question_message_id"];
600
+ readonly question_message_id: readonly ["conversation_id"];
601
+ };
602
+ readonly allOf: readonly [{
603
+ readonly properties: {
604
+ readonly media: {
605
+ readonly description: "用于检查首帧数量的素材列表。";
606
+ readonly contains: {
607
+ readonly type: "object";
608
+ readonly properties: {
609
+ readonly role: {
610
+ readonly const: "first_frame";
611
+ readonly description: "首帧素材角色。";
612
+ };
613
+ };
614
+ readonly required: readonly ["role"];
615
+ };
616
+ readonly minContains: 0;
617
+ readonly maxContains: 1;
618
+ };
619
+ };
620
+ }, {
621
+ readonly properties: {
622
+ readonly media: {
623
+ readonly description: "用于检查尾帧数量的素材列表。";
624
+ readonly contains: {
625
+ readonly type: "object";
626
+ readonly properties: {
627
+ readonly role: {
628
+ readonly const: "last_frame";
629
+ readonly description: "尾帧素材角色。";
630
+ };
631
+ };
632
+ readonly required: readonly ["role"];
633
+ };
634
+ readonly minContains: 0;
635
+ readonly maxContains: 1;
636
+ };
637
+ };
638
+ }];
639
+ };
640
+ output_schema: {
641
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
642
+ readonly $id: "https://www.gaoding.com/cli/schemas/creative-output-v1.json";
643
+ readonly description: "creative run 的统一最终输出;中间事件和内部调用过程不属于本 Schema。";
644
+ readonly type: "object";
645
+ readonly additionalProperties: false;
646
+ readonly required: readonly ["status", "data", "error", "meta"];
647
+ readonly properties: {
648
+ readonly status: {
649
+ readonly type: "string";
650
+ readonly enum: readonly ["completed", "failed"];
651
+ readonly description: "CLI 调用是否成功;requires_input 仍属于 completed。";
652
+ };
653
+ readonly data: {
654
+ readonly description: "status 为 completed 时存在的 Creative 最终结果;failed 时为 null。";
655
+ };
656
+ readonly error: {
657
+ readonly description: "status 为 failed 时存在的结构化错误;completed 时为 null。";
658
+ };
659
+ readonly meta: {
660
+ readonly type: "object";
661
+ readonly description: "本次输出对应的命令与公共契约版本。";
662
+ readonly additionalProperties: false;
663
+ readonly required: readonly ["command", "schema_version"];
664
+ readonly properties: {
665
+ readonly command: {
666
+ readonly const: "creative run";
667
+ readonly description: "产生本 Envelope 的 GD CLI 命令。";
668
+ };
669
+ readonly schema_version: {
670
+ readonly const: "creative/v1";
671
+ readonly description: "Creative 公共契约版本。";
672
+ };
673
+ };
674
+ };
675
+ };
676
+ readonly oneOf: readonly [{
677
+ readonly properties: {
678
+ readonly status: {
679
+ readonly const: "completed";
680
+ readonly description: "成功状态。";
681
+ };
682
+ readonly data: {
683
+ readonly $ref: "#/$defs/result";
684
+ readonly description: "Creative 结果。";
685
+ };
686
+ readonly error: {
687
+ readonly type: "null";
688
+ readonly description: "成功时没有错误。";
689
+ };
690
+ };
691
+ }, {
692
+ readonly properties: {
693
+ readonly status: {
694
+ readonly const: "failed";
695
+ readonly description: "失败状态。";
696
+ };
697
+ readonly data: {
698
+ readonly type: "null";
699
+ readonly description: "失败时没有 Creative 结果。";
700
+ };
701
+ readonly error: {
702
+ readonly $ref: "#/$defs/error";
703
+ readonly description: "结构化失败信息。";
704
+ };
705
+ };
706
+ }];
707
+ readonly $defs: {
708
+ readonly result: {
709
+ readonly type: "object";
710
+ readonly additionalProperties: false;
711
+ readonly required: readonly ["conversation_id", "finish_reason", "message", "outputs"];
712
+ readonly properties: {
713
+ readonly conversation_id: {
714
+ readonly type: "string";
715
+ readonly minLength: 1;
716
+ readonly description: "新请求由 GD Agent 创建;连续请求沿用输入值。";
717
+ };
718
+ readonly finish_reason: {
719
+ readonly type: "string";
720
+ readonly enum: readonly ["completed", "requires_input"];
721
+ readonly description: "completed 表示本轮完成;requires_input 表示需要继续回答 questions。";
722
+ };
723
+ readonly message: {
724
+ readonly type: "string";
725
+ readonly description: "GD Agent 面向使用者的最终说明。";
726
+ };
727
+ readonly outputs: {
728
+ readonly type: "array";
729
+ readonly description: "本轮最终产出的文本、结构化数据或媒体。";
730
+ readonly items: {
731
+ readonly $ref: "#/$defs/output";
732
+ };
733
+ };
734
+ readonly question_message_id: {
735
+ readonly type: "string";
736
+ readonly minLength: 1;
737
+ readonly description: "requires_input 时必填,并在下一次请求中原样回传。";
738
+ };
739
+ readonly questions: {
740
+ readonly $ref: "#/$defs/question_group";
741
+ readonly description: "requires_input 时必填的结构化追问。";
742
+ };
743
+ };
744
+ readonly allOf: readonly [{
745
+ readonly if: {
746
+ readonly properties: {
747
+ readonly finish_reason: {
748
+ readonly const: "requires_input";
749
+ readonly description: "需要使用者回答。";
750
+ };
751
+ };
752
+ };
753
+ readonly then: {
754
+ readonly required: readonly ["question_message_id", "questions"];
755
+ };
756
+ readonly else: {
757
+ readonly not: {
758
+ readonly anyOf: readonly [{
759
+ readonly required: readonly ["question_message_id"];
760
+ }, {
761
+ readonly required: readonly ["questions"];
762
+ }];
763
+ };
764
+ };
765
+ }];
766
+ };
767
+ readonly question_group: {
768
+ readonly type: "object";
769
+ readonly additionalProperties: false;
770
+ readonly required: readonly ["title", "questions"];
771
+ readonly properties: {
772
+ readonly title: {
773
+ readonly type: "string";
774
+ readonly description: "本组追问的标题。";
775
+ };
776
+ readonly questions: {
777
+ readonly type: "array";
778
+ readonly minItems: 1;
779
+ readonly description: "需要使用者回答的一个或多个问题。";
780
+ readonly items: {
781
+ readonly type: "object";
782
+ readonly additionalProperties: false;
783
+ readonly required: readonly ["question", "options", "allow_multiple"];
784
+ readonly properties: {
785
+ readonly question: {
786
+ readonly type: "string";
787
+ readonly minLength: 1;
788
+ readonly description: "问题文本;提交 answers 时原样作为 answers[].question。";
789
+ };
790
+ readonly options: {
791
+ readonly type: "array";
792
+ readonly description: "推荐选项,可以为空;label 不是严格枚举。";
793
+ readonly items: {
794
+ readonly type: "object";
795
+ readonly additionalProperties: false;
796
+ readonly required: readonly ["label"];
797
+ readonly properties: {
798
+ readonly label: {
799
+ readonly type: "string";
800
+ readonly minLength: 1;
801
+ readonly description: "推荐回答的展示文本。";
802
+ };
803
+ };
804
+ };
805
+ };
806
+ readonly allow_multiple: {
807
+ readonly type: "boolean";
808
+ readonly description: "是否允许为本问题提交多个回答值。";
809
+ };
810
+ };
811
+ };
812
+ };
813
+ };
814
+ };
815
+ readonly output: {
816
+ readonly oneOf: readonly [{
817
+ readonly type: "object";
818
+ readonly additionalProperties: false;
819
+ readonly required: readonly ["type", "text"];
820
+ readonly properties: {
821
+ readonly type: {
822
+ readonly const: "text";
823
+ readonly description: "结果类型。";
824
+ };
825
+ readonly text: {
826
+ readonly type: "string";
827
+ readonly description: "文本内容。";
828
+ };
829
+ };
830
+ }, {
831
+ readonly type: "object";
832
+ readonly additionalProperties: false;
833
+ readonly required: readonly ["type", "value"];
834
+ readonly properties: {
835
+ readonly type: {
836
+ readonly const: "json";
837
+ readonly description: "结果类型。";
838
+ };
839
+ readonly value: {
840
+ readonly description: "任意合法 JSON 值。";
841
+ };
842
+ };
843
+ }, {
844
+ readonly type: "object";
845
+ readonly additionalProperties: false;
846
+ readonly required: readonly ["type", "url", "mime_type"];
847
+ readonly properties: {
848
+ readonly type: {
849
+ readonly type: "string";
850
+ readonly enum: readonly ["image", "video", "audio", "file"];
851
+ readonly description: "媒体或文件类型。";
852
+ };
853
+ readonly url: {
854
+ readonly type: "string";
855
+ readonly format: "uri";
856
+ readonly pattern: "^https?://";
857
+ readonly description: "可访问或下载结果的 HTTP(S) URL。";
858
+ };
859
+ readonly mime_type: {
860
+ readonly type: "string";
861
+ readonly minLength: 1;
862
+ readonly description: "结果的 MIME type,例如 image/png 或 video/mp4。";
863
+ };
864
+ readonly name: {
865
+ readonly type: "string";
866
+ readonly minLength: 1;
867
+ readonly description: "建议的展示名或文件名。";
868
+ };
869
+ readonly asset_id: {
870
+ readonly type: "string";
871
+ readonly minLength: 1;
872
+ readonly description: "结果已进入 DAM 时的素材标识。";
873
+ };
874
+ readonly width: {
875
+ readonly type: "number";
876
+ readonly minimum: 0;
877
+ readonly description: "图片或视频的像素宽度。";
878
+ };
879
+ readonly height: {
880
+ readonly type: "number";
881
+ readonly minimum: 0;
882
+ readonly description: "图片或视频的像素高度。";
883
+ };
884
+ readonly duration_seconds: {
885
+ readonly type: "number";
886
+ readonly minimum: 0;
887
+ readonly description: "视频或音频的时长,单位为秒。";
888
+ };
889
+ };
890
+ }];
891
+ };
892
+ readonly error: {
893
+ readonly type: "object";
894
+ readonly additionalProperties: false;
895
+ readonly required: readonly ["code", "type", "message"];
896
+ readonly properties: {
897
+ readonly code: {
898
+ readonly type: "string";
899
+ readonly minLength: 1;
900
+ readonly description: "稳定、可机器判断的错误码。";
901
+ };
902
+ readonly type: {
903
+ readonly type: "string";
904
+ readonly enum: readonly ["validation", "auth", "business", "network", "unknown"];
905
+ readonly description: "错误所属类别。";
906
+ };
907
+ readonly message: {
908
+ readonly type: "string";
909
+ readonly minLength: 1;
910
+ readonly description: "面向使用者的错误说明。";
911
+ };
912
+ readonly hint: {
913
+ readonly type: "string";
914
+ readonly minLength: 1;
915
+ readonly description: "可执行的处理建议。";
916
+ };
917
+ readonly retryable: {
918
+ readonly type: "boolean";
919
+ readonly description: "使用相同输入稍后重试是否可能成功。";
920
+ };
921
+ };
922
+ };
923
+ };
924
+ };
925
+ };
926
+ export declare const CREATIVE_EXAMPLES: {
927
+ readonly examples: readonly [{
928
+ readonly name: "text_creation";
929
+ readonly description: "纯文本创作";
930
+ readonly command: "gd-cli creative run --prompt \"为一款轻量缓震跑鞋写三条电商主图标题,语言简洁有力。\" --json";
931
+ readonly input: {
932
+ readonly prompt: "为一款轻量缓震跑鞋写三条电商主图标题,语言简洁有力。";
933
+ };
934
+ }, {
935
+ readonly name: "image_with_reference";
936
+ readonly description: "使用参考图创作图片";
937
+ readonly command: "gd-cli creative run --input creative-request.json --json";
938
+ readonly input: {
939
+ readonly prompt: "以产品为主体生成一张户外晨跑场景广告图,保持鞋款外观和配色。";
940
+ readonly media: readonly [{
941
+ readonly source: "./product.png";
942
+ readonly role: "reference";
943
+ }];
944
+ readonly parameters: {
945
+ readonly ratio: "1:1";
946
+ readonly resolution: "2K";
947
+ };
948
+ };
949
+ }, {
950
+ readonly name: "video_with_first_and_last_frames";
951
+ readonly description: "使用首尾帧创作视频";
952
+ readonly command: "gd-cli creative run --input creative-request.json --json";
953
+ readonly input: {
954
+ readonly prompt: "生成从清晨城市街道过渡到终点冲线的运动广告视频,镜头运动自然。";
955
+ readonly media: readonly [{
956
+ readonly source: "./first-frame.png";
957
+ readonly role: "first_frame";
958
+ }, {
959
+ readonly source: "./last-frame.png";
960
+ readonly role: "last_frame";
961
+ }];
962
+ readonly parameters: {
963
+ readonly ratio: "16:9";
964
+ readonly resolution: "1080p";
965
+ readonly duration_seconds: 5;
966
+ };
967
+ };
968
+ }, {
969
+ readonly name: "continue_creation";
970
+ readonly description: "继续修改已有创作";
971
+ readonly command: "gd-cli creative run --input creative-request.json --json";
972
+ readonly input: {
973
+ readonly conversation_id: "conversation_123";
974
+ readonly prompt: "保留主体和构图,把整体风格调整得更克制,并降低背景饱和度。";
975
+ };
976
+ }, {
977
+ readonly name: "answer_questions";
978
+ readonly description: "回答 GD Agent 的结构化追问";
979
+ readonly command: "gd-cli creative run --input creative-request.json --json";
980
+ readonly input: {
981
+ readonly conversation_id: "conversation_123";
982
+ readonly question_message_id: "message_456";
983
+ readonly answers: readonly [{
984
+ readonly question: "希望采用什么视觉风格?";
985
+ readonly values: readonly ["极简"];
986
+ }, {
987
+ readonly question: "主要投放到哪些渠道?";
988
+ readonly values: readonly ["电商详情页", "社交媒体"];
989
+ }];
990
+ };
991
+ }];
992
+ };
993
+ export declare function getCreativeExamples(): {
994
+ readonly examples: readonly [{
995
+ readonly name: "text_creation";
996
+ readonly description: "纯文本创作";
997
+ readonly command: "gd-cli creative run --prompt \"为一款轻量缓震跑鞋写三条电商主图标题,语言简洁有力。\" --json";
998
+ readonly input: {
999
+ readonly prompt: "为一款轻量缓震跑鞋写三条电商主图标题,语言简洁有力。";
1000
+ };
1001
+ }, {
1002
+ readonly name: "image_with_reference";
1003
+ readonly description: "使用参考图创作图片";
1004
+ readonly command: "gd-cli creative run --input creative-request.json --json";
1005
+ readonly input: {
1006
+ readonly prompt: "以产品为主体生成一张户外晨跑场景广告图,保持鞋款外观和配色。";
1007
+ readonly media: readonly [{
1008
+ readonly source: "./product.png";
1009
+ readonly role: "reference";
1010
+ }];
1011
+ readonly parameters: {
1012
+ readonly ratio: "1:1";
1013
+ readonly resolution: "2K";
1014
+ };
1015
+ };
1016
+ }, {
1017
+ readonly name: "video_with_first_and_last_frames";
1018
+ readonly description: "使用首尾帧创作视频";
1019
+ readonly command: "gd-cli creative run --input creative-request.json --json";
1020
+ readonly input: {
1021
+ readonly prompt: "生成从清晨城市街道过渡到终点冲线的运动广告视频,镜头运动自然。";
1022
+ readonly media: readonly [{
1023
+ readonly source: "./first-frame.png";
1024
+ readonly role: "first_frame";
1025
+ }, {
1026
+ readonly source: "./last-frame.png";
1027
+ readonly role: "last_frame";
1028
+ }];
1029
+ readonly parameters: {
1030
+ readonly ratio: "16:9";
1031
+ readonly resolution: "1080p";
1032
+ readonly duration_seconds: 5;
1033
+ };
1034
+ };
1035
+ }, {
1036
+ readonly name: "continue_creation";
1037
+ readonly description: "继续修改已有创作";
1038
+ readonly command: "gd-cli creative run --input creative-request.json --json";
1039
+ readonly input: {
1040
+ readonly conversation_id: "conversation_123";
1041
+ readonly prompt: "保留主体和构图,把整体风格调整得更克制,并降低背景饱和度。";
1042
+ };
1043
+ }, {
1044
+ readonly name: "answer_questions";
1045
+ readonly description: "回答 GD Agent 的结构化追问";
1046
+ readonly command: "gd-cli creative run --input creative-request.json --json";
1047
+ readonly input: {
1048
+ readonly conversation_id: "conversation_123";
1049
+ readonly question_message_id: "message_456";
1050
+ readonly answers: readonly [{
1051
+ readonly question: "希望采用什么视觉风格?";
1052
+ readonly values: readonly ["极简"];
1053
+ }, {
1054
+ readonly question: "主要投放到哪些渠道?";
1055
+ readonly values: readonly ["电商详情页", "社交媒体"];
1056
+ }];
1057
+ };
1058
+ }];
1059
+ };
1060
+ export declare function validateCreativeInput(value: unknown): CreativeInput;