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

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