@downcity/plugins 1.0.94 → 1.0.95

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.
@@ -37,10 +37,48 @@ export declare class ImagePlugin extends BasePlugin {
37
37
  */
38
38
  system(_context: AgentContext): string;
39
39
  private generate_image;
40
+ /**
41
+ * 查询图片任务,按需等待终态。
42
+ */
43
+ private read_image_result;
44
+ /**
45
+ * 轮询图片任务直到成功或失败。
46
+ */
47
+ private wait_for_image_result;
40
48
  /**
41
49
  * 显式 action 集合。
42
50
  */
43
51
  readonly actions: {
52
+ image_create: {
53
+ execute: ({ payload }: {
54
+ payload: JsonValue;
55
+ }) => Promise<{
56
+ success: boolean;
57
+ data: JsonObject;
58
+ message: string;
59
+ error?: undefined;
60
+ } | {
61
+ success: boolean;
62
+ error: string;
63
+ message: string;
64
+ data?: undefined;
65
+ }>;
66
+ };
67
+ image_result: {
68
+ execute: ({ payload }: {
69
+ payload: JsonValue;
70
+ }) => Promise<{
71
+ success: boolean;
72
+ data: JsonObject;
73
+ message: string;
74
+ error?: undefined;
75
+ } | {
76
+ success: boolean;
77
+ error: string;
78
+ message: string;
79
+ data?: undefined;
80
+ }>;
81
+ };
44
82
  generate: {
45
83
  execute: ({ payload }: {
46
84
  payload: JsonValue;
@@ -1 +1 @@
1
- {"version":3,"file":"ImagePlugin.d.ts","sourceRoot":"","sources":["../../src/image/ImagePlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACV,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAIV,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AAmGtC;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkD;IAC/E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkD;IAC/E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAElC,OAAO,EAAE,kBAAkB;IAiCvC;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;YA2BxB,cAAc;IAmC5B;;OAEG;IACH,QAAQ,CAAC,OAAO;;mCAEiB;gBAAE,OAAO,EAAE,SAAS,CAAA;aAAE;;sBAMjB,UAAU;;;;;;;;;;MAY9C;CACH"}
1
+ {"version":3,"file":"ImagePlugin.d.ts","sourceRoot":"","sources":["../../src/image/ImagePlugin.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACV,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAKV,kBAAkB,EAEnB,MAAM,8BAA8B,CAAC;AA8HtC;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkD;IAC/E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAkD;IAC/E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;gBAElC,OAAO,EAAE,kBAAkB;IAiCvC;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM;YA6BxB,cAAc;IAe5B;;OAEG;YACW,iBAAiB;IA4C/B;;OAEG;YACW,qBAAqB;IA8DnC;;OAEG;IACH,QAAQ,CAAC,OAAO;;mCAEiB;gBAAE,OAAO,EAAE,SAAS,CAAA;aAAE;;sBAOjB,UAAU;;;;;;;;;;;mCAaf;gBAAE,OAAO,EAAE,SAAS,CAAA;aAAE;;;;;;;;;;;;;mCA2BtB;gBAAE,OAAO,EAAE,SAAS,CAAA;aAAE;;sBAMjB,UAAU;;;;;;;;;;MAY9C;CACH"}
@@ -27,10 +27,27 @@ function to_record(value) {
27
27
  function normalize_image_payload(payload) {
28
28
  const record = to_record(payload ?? {});
29
29
  if (!record) {
30
- throw new TypeError("ImagePlugin.generate payload must be an object");
30
+ throw new TypeError("ImagePlugin image payload must be an object");
31
31
  }
32
32
  return { ...record };
33
33
  }
34
+ /**
35
+ * 归一化图片任务查询 payload。
36
+ */
37
+ function normalize_image_result_payload(payload) {
38
+ const record = to_record(payload ?? {});
39
+ if (!record) {
40
+ throw new TypeError("ImagePlugin.image_result payload must be an object");
41
+ }
42
+ const job_id = typeof record.job_id === "string" ? record.job_id.trim() : "";
43
+ if (!job_id) {
44
+ throw new TypeError("ImagePlugin.image_result payload must include job_id");
45
+ }
46
+ return {
47
+ ...record,
48
+ job_id,
49
+ };
50
+ }
34
51
  /**
35
52
  * 校验 image 函数返回的 UIMessage。
36
53
  */
@@ -62,6 +79,12 @@ function normalize_positive_number(value, fallback) {
62
79
  ? value
63
80
  : fallback;
64
81
  }
82
+ /**
83
+ * 读取可选布尔值。
84
+ */
85
+ function normalize_boolean(value, fallback) {
86
+ return typeof value === "boolean" ? value : fallback;
87
+ }
65
88
  /**
66
89
  * 校验任务创建结果。
67
90
  */
@@ -153,35 +176,129 @@ export class ImagePlugin extends BasePlugin {
153
176
  "- `prompt` is required unless `messages` provides the full multimodal image context.",
154
177
  "- Optional common fields: `messages`, `size`, `aspect_ratio`, `ratio`, `quality`, `n`, `count`, `seed`, `provider_options`.",
155
178
  "- Preserve the user's creative intent; do not over-rewrite the prompt unless clarification is necessary.",
179
+ "- For a two-step flow, call `image_create` first, then call `image_result` with `job_id`; `image_result` waits until the job finishes by default.",
180
+ "- `generate` is a convenience action that creates the job and waits for the final image in one call.",
156
181
  "- Generated image file parts are saved under project `.downcity/resources` and attached to the final assistant message automatically.",
157
182
  ].join("\n");
158
183
  }
159
184
  async generate_image(input) {
160
185
  const created = await this.image_create(input);
161
186
  validate_created_job(created);
162
- const deadline = Date.now() + this.timeout_ms;
163
- let poll_after_ms = created.poll_after_ms;
187
+ const current = await this.wait_for_image_result({
188
+ job_id: created.job_id,
189
+ poll_after_ms: created.poll_after_ms,
190
+ });
191
+ if (!current.result) {
192
+ throw new Error(`Image job ${created.job_id} succeeded without result`);
193
+ }
194
+ return normalize_image_result(current.result);
195
+ }
196
+ /**
197
+ * 查询图片任务,按需等待终态。
198
+ */
199
+ async read_image_result(input, options) {
200
+ const timeout_ms = normalize_positive_number(input.timeout_ms, this.timeout_ms);
201
+ const min_poll_interval_ms = normalize_positive_number(input.min_poll_interval_ms, this.min_poll_interval_ms);
202
+ const max_poll_interval_ms = normalize_positive_number(input.max_poll_interval_ms, this.max_poll_interval_ms);
203
+ const until_finish = normalize_boolean(input.until_finish, options.default_until_finish);
204
+ const first = await this.image_result({ job_id: input.job_id });
205
+ validate_job_result(first);
206
+ if (!until_finish || first.status === "succeeded") {
207
+ if (first.status === "succeeded" && first.result) {
208
+ normalize_image_result(first.result);
209
+ }
210
+ return first;
211
+ }
212
+ if (first.status === "failed") {
213
+ throw new Error(`Image job failed: ${first.error ?? first.message ?? input.job_id}`);
214
+ }
215
+ return await this.wait_for_image_result({
216
+ job_id: input.job_id,
217
+ poll_after_ms: first.poll_after_ms,
218
+ timeout_ms,
219
+ min_poll_interval_ms,
220
+ max_poll_interval_ms,
221
+ });
222
+ }
223
+ /**
224
+ * 轮询图片任务直到成功或失败。
225
+ */
226
+ async wait_for_image_result(input) {
227
+ const timeout_ms = normalize_positive_number(input.timeout_ms, this.timeout_ms);
228
+ const min_poll_interval_ms = normalize_positive_number(input.min_poll_interval_ms, this.min_poll_interval_ms);
229
+ const max_poll_interval_ms = normalize_positive_number(input.max_poll_interval_ms, this.max_poll_interval_ms);
230
+ const deadline = Date.now() + timeout_ms;
231
+ let poll_after_ms = input.poll_after_ms;
164
232
  while (Date.now() < deadline) {
165
- await sleep(clamp_poll_interval(poll_after_ms, this.min_poll_interval_ms, this.max_poll_interval_ms));
166
- const current = await this.image_result({ job_id: created.job_id });
233
+ await sleep(clamp_poll_interval(poll_after_ms, min_poll_interval_ms, max_poll_interval_ms));
234
+ const current = await this.image_result({ job_id: input.job_id });
167
235
  validate_job_result(current);
168
236
  poll_after_ms = current.poll_after_ms;
169
237
  if (current.status === "succeeded") {
170
238
  if (!current.result) {
171
- throw new Error(`Image job ${created.job_id} succeeded without result`);
239
+ throw new Error(`Image job ${input.job_id} succeeded without result`);
172
240
  }
173
- return normalize_image_result(current.result);
241
+ normalize_image_result(current.result);
242
+ return current;
174
243
  }
175
244
  if (current.status === "failed") {
176
- throw new Error(`Image job failed: ${current.error ?? current.message ?? created.job_id}`);
245
+ throw new Error(`Image job failed: ${current.error ?? current.message ?? input.job_id}`);
177
246
  }
178
247
  }
179
- throw new Error(`Image job timed out: ${created.job_id}`);
248
+ throw new Error(`Image job timed out: ${input.job_id}`);
180
249
  }
181
250
  /**
182
251
  * 显式 action 集合。
183
252
  */
184
253
  actions = {
254
+ image_create: {
255
+ execute: async ({ payload }) => {
256
+ try {
257
+ const input = normalize_image_payload(payload);
258
+ const created = await this.image_create(input);
259
+ validate_created_job(created);
260
+ return {
261
+ success: true,
262
+ data: created,
263
+ message: "image job created",
264
+ };
265
+ }
266
+ catch (error) {
267
+ return {
268
+ success: false,
269
+ error: String(error),
270
+ message: String(error),
271
+ };
272
+ }
273
+ },
274
+ },
275
+ image_result: {
276
+ execute: async ({ payload }) => {
277
+ try {
278
+ const input = normalize_image_result_payload(payload);
279
+ const current = await this.read_image_result(input, {
280
+ default_until_finish: true,
281
+ });
282
+ const data = current.status === "succeeded" && current.result
283
+ ? current.result
284
+ : current;
285
+ return {
286
+ success: true,
287
+ data,
288
+ message: current.status === "succeeded"
289
+ ? "image generated"
290
+ : `image job ${current.status}`,
291
+ };
292
+ }
293
+ catch (error) {
294
+ return {
295
+ success: false,
296
+ error: String(error),
297
+ message: String(error),
298
+ };
299
+ }
300
+ },
301
+ },
185
302
  generate: {
186
303
  execute: async ({ payload }) => {
187
304
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"ImagePlugin.js","sourceRoot":"","sources":["../../src/image/ImagePlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImagePlugin.js","sourceRoot":"","sources":["../../src/image/ImagePlugin.ts"],"names":[],"mappings":"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"}
@@ -110,6 +110,21 @@ export interface ImagePluginJobResult {
110
110
  /** 建议下一次轮询的间隔毫秒数。 */
111
111
  poll_after_ms?: number;
112
112
  }
113
+ /**
114
+ * 图片任务查询输入。
115
+ */
116
+ export interface ImagePluginJobResultInput {
117
+ /** 图片任务 ID,由 `image_create` 返回。 */
118
+ job_id: string;
119
+ /** 是否持续轮询直到任务进入成功或失败终态,默认由 action 决定。 */
120
+ until_finish?: boolean;
121
+ /** 单次查询最大等待时间,单位毫秒。 */
122
+ timeout_ms?: number;
123
+ /** 轮询间隔下限,单位毫秒。 */
124
+ min_poll_interval_ms?: number;
125
+ /** 轮询间隔上限,单位毫秒。 */
126
+ max_poll_interval_ms?: number;
127
+ }
113
128
  /**
114
129
  * ImagePlugin 构造参数。
115
130
  */
@@ -123,9 +138,7 @@ export interface ImagePluginOptions {
123
138
  /** 创建图片生成任务,通常传入 `(input) => city.ai.image_create(input)`。 */
124
139
  image_create?: (input: ImagePluginInput) => Promise<ImagePluginJobCreateResult> | ImagePluginJobCreateResult;
125
140
  /** 查询图片生成任务,通常传入 `(input) => city.ai.image_result(input)`。 */
126
- image_result?: (input: {
127
- job_id: string;
128
- }) => Promise<ImagePluginJobResult> | ImagePluginJobResult;
141
+ image_result?: (input: Pick<ImagePluginJobResultInput, "job_id">) => Promise<ImagePluginJobResult> | ImagePluginJobResult;
129
142
  /** 图片任务最大等待时间,默认 300000ms。 */
130
143
  timeout_ms?: number;
131
144
  /** 轮询间隔下限,默认 100ms。 */
@@ -1 +1 @@
1
- {"version":3,"file":"ImagePlugin.d.ts","sourceRoot":"","sources":["../../../src/image/types/ImagePlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImagePlugin.d.ts","sourceRoot":"","sources":["../../../src/image/types/ImagePlugin.ts"],"names":[],"mappings":"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"}
package/bin/index.d.ts CHANGED
@@ -31,6 +31,6 @@ export type { TaskPluginOptions } from "./task/types/TaskPluginOptions.js";
31
31
  export type { MemoryActionPayload, MemoryDefaults, MemoryDigestHandler, MemoryDigestHandlerInput, MemoryDigestHandlerOutput, MemoryDigestPayload, MemoryDigestResponse, MemoryPluginOptions, MemoryReadPayload, MemoryReadResponse, MemoryRememberPayload, MemoryRememberResponse, MemoryReviseHandler, MemoryReviseHandlerInput, MemoryReviseHandlerOutput, MemoryRevisePayload, MemoryReviseResponse, MemorySearchMode, MemorySearchPayload, MemorySearchResponse, MemorySearchResultItem, MemorySourceStat, MemorySourceType, MemoryStatusResponse, MemoryWikiPageDraft, } from "./memory/types/Memory.js";
32
32
  export type { AsrPluginInput, AsrPluginOptions, AsrPluginResult, } from "./asr/types/AsrPlugin.js";
33
33
  export type { TtsPluginInput, TtsPluginOptions, TtsPluginResult, TtsPluginSimpleAudioResult, TtsPluginUiMessageResult, } from "./tts/types/TtsPlugin.js";
34
- export type { ImagePluginContent, ImagePluginFileContent, ImagePluginInput, ImagePluginJobCreateResult, ImagePluginJobResult, ImagePluginJobStatus, ImagePluginMessage, ImagePluginOptions, ImagePluginResult, ImagePluginTextContent, } from "./image/types/ImagePlugin.js";
34
+ export type { ImagePluginContent, ImagePluginFileContent, ImagePluginInput, ImagePluginJobCreateResult, ImagePluginJobResult, ImagePluginJobResultInput, ImagePluginJobStatus, ImagePluginMessage, ImagePluginOptions, ImagePluginResult, ImagePluginTextContent, } from "./image/types/ImagePlugin.js";
35
35
  export type { ChatAuthorizationCatalog, ChatAuthorizationChannel, ChatAuthorizationConfig, ChatAuthorizationDecision, ChatAuthorizationEvaluateInput, ChatAuthorizationEvaluateResult, ChatAuthorizationObservePrincipalPayload, ChatAuthorizationObservedChat, ChatAuthorizationObservedUser, ChatAuthorizationPermission, ChatAuthorizationPermissionMeta, ChatAuthorizationResolveUserRolePayload, ChatAuthorizationRole, ChatAuthorizationSetUserRolePayload, ChatAuthorizationSnapshot, ChatAuthorizationStateFile, ChatAuthorizationWriteConfigPayload, ChatChannelAuthorizationConfig, } from "./auth/types/AuthPlugin.js";
36
36
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/plugins",
3
- "version": "1.0.94",
3
+ "version": "1.0.95",
4
4
  "type": "module",
5
5
  "description": "Downcity 内建 plugin 集合包",
6
6
  "main": "./bin/index.js",
@@ -17,6 +17,7 @@ import type {
17
17
  ImagePluginInput,
18
18
  ImagePluginJobCreateResult,
19
19
  ImagePluginJobResult,
20
+ ImagePluginJobResultInput,
20
21
  ImagePluginOptions,
21
22
  ImagePluginResult,
22
23
  } from "@/image/types/ImagePlugin.js";
@@ -45,11 +46,31 @@ function normalize_image_payload(
45
46
  ): ImagePluginInput {
46
47
  const record = to_record(payload ?? {});
47
48
  if (!record) {
48
- throw new TypeError("ImagePlugin.generate payload must be an object");
49
+ throw new TypeError("ImagePlugin image payload must be an object");
49
50
  }
50
51
  return { ...record } as ImagePluginInput;
51
52
  }
52
53
 
54
+ /**
55
+ * 归一化图片任务查询 payload。
56
+ */
57
+ function normalize_image_result_payload(
58
+ payload: JsonValue | undefined,
59
+ ): ImagePluginJobResultInput {
60
+ const record = to_record(payload ?? {});
61
+ if (!record) {
62
+ throw new TypeError("ImagePlugin.image_result payload must be an object");
63
+ }
64
+ const job_id = typeof record.job_id === "string" ? record.job_id.trim() : "";
65
+ if (!job_id) {
66
+ throw new TypeError("ImagePlugin.image_result payload must include job_id");
67
+ }
68
+ return {
69
+ ...record,
70
+ job_id,
71
+ } as ImagePluginJobResultInput;
72
+ }
73
+
53
74
  /**
54
75
  * 校验 image 函数返回的 UIMessage。
55
76
  */
@@ -89,6 +110,13 @@ function normalize_positive_number(value: unknown, fallback: number): number {
89
110
  : fallback;
90
111
  }
91
112
 
113
+ /**
114
+ * 读取可选布尔值。
115
+ */
116
+ function normalize_boolean(value: unknown, fallback: boolean): boolean {
117
+ return typeof value === "boolean" ? value : fallback;
118
+ }
119
+
92
120
  /**
93
121
  * 校验任务创建结果。
94
122
  */
@@ -202,6 +230,8 @@ export class ImagePlugin extends BasePlugin {
202
230
  "- `prompt` is required unless `messages` provides the full multimodal image context.",
203
231
  "- Optional common fields: `messages`, `size`, `aspect_ratio`, `ratio`, `quality`, `n`, `count`, `seed`, `provider_options`.",
204
232
  "- Preserve the user's creative intent; do not over-rewrite the prompt unless clarification is necessary.",
233
+ "- For a two-step flow, call `image_create` first, then call `image_result` with `job_id`; `image_result` waits until the job finishes by default.",
234
+ "- `generate` is a convenience action that creates the job and waits for the final image in one call.",
205
235
  "- Generated image file parts are saved under project `.downcity/resources` and attached to the final assistant message automatically.",
206
236
  ].join("\n");
207
237
  }
@@ -211,40 +241,179 @@ export class ImagePlugin extends BasePlugin {
211
241
  ): Promise<ImagePluginResult> {
212
242
  const created = await this.image_create(input);
213
243
  validate_created_job(created);
214
- const deadline = Date.now() + this.timeout_ms;
215
- let poll_after_ms = created.poll_after_ms;
244
+ const current = await this.wait_for_image_result({
245
+ job_id: created.job_id,
246
+ poll_after_ms: created.poll_after_ms,
247
+ });
248
+ if (!current.result) {
249
+ throw new Error(`Image job ${created.job_id} succeeded without result`);
250
+ }
251
+ return normalize_image_result(current.result);
252
+ }
253
+
254
+ /**
255
+ * 查询图片任务,按需等待终态。
256
+ */
257
+ private async read_image_result(
258
+ input: ImagePluginJobResultInput,
259
+ options: {
260
+ /**
261
+ * 默认是否等待终态。
262
+ */
263
+ default_until_finish: boolean;
264
+ },
265
+ ): Promise<ImagePluginJobResult> {
266
+ const timeout_ms = normalize_positive_number(input.timeout_ms, this.timeout_ms);
267
+ const min_poll_interval_ms = normalize_positive_number(
268
+ input.min_poll_interval_ms,
269
+ this.min_poll_interval_ms,
270
+ );
271
+ const max_poll_interval_ms = normalize_positive_number(
272
+ input.max_poll_interval_ms,
273
+ this.max_poll_interval_ms,
274
+ );
275
+ const until_finish = normalize_boolean(
276
+ input.until_finish,
277
+ options.default_until_finish,
278
+ );
279
+ const first = await this.image_result({ job_id: input.job_id });
280
+ validate_job_result(first);
281
+ if (!until_finish || first.status === "succeeded") {
282
+ if (first.status === "succeeded" && first.result) {
283
+ normalize_image_result(first.result);
284
+ }
285
+ return first;
286
+ }
287
+ if (first.status === "failed") {
288
+ throw new Error(
289
+ `Image job failed: ${first.error ?? first.message ?? input.job_id}`,
290
+ );
291
+ }
292
+ return await this.wait_for_image_result({
293
+ job_id: input.job_id,
294
+ poll_after_ms: first.poll_after_ms,
295
+ timeout_ms,
296
+ min_poll_interval_ms,
297
+ max_poll_interval_ms,
298
+ });
299
+ }
300
+
301
+ /**
302
+ * 轮询图片任务直到成功或失败。
303
+ */
304
+ private async wait_for_image_result(input: {
305
+ /**
306
+ * 图片任务 ID。
307
+ */
308
+ job_id: string;
309
+ /**
310
+ * 首次建议轮询间隔。
311
+ */
312
+ poll_after_ms?: number;
313
+ /**
314
+ * 最大等待时间。
315
+ */
316
+ timeout_ms?: number;
317
+ /**
318
+ * 轮询间隔下限。
319
+ */
320
+ min_poll_interval_ms?: number;
321
+ /**
322
+ * 轮询间隔上限。
323
+ */
324
+ max_poll_interval_ms?: number;
325
+ }): Promise<ImagePluginJobResult> {
326
+ const timeout_ms = normalize_positive_number(input.timeout_ms, this.timeout_ms);
327
+ const min_poll_interval_ms = normalize_positive_number(
328
+ input.min_poll_interval_ms,
329
+ this.min_poll_interval_ms,
330
+ );
331
+ const max_poll_interval_ms = normalize_positive_number(
332
+ input.max_poll_interval_ms,
333
+ this.max_poll_interval_ms,
334
+ );
335
+ const deadline = Date.now() + timeout_ms;
336
+ let poll_after_ms = input.poll_after_ms;
216
337
 
217
338
  while (Date.now() < deadline) {
218
339
  await sleep(
219
340
  clamp_poll_interval(
220
341
  poll_after_ms,
221
- this.min_poll_interval_ms,
222
- this.max_poll_interval_ms,
342
+ min_poll_interval_ms,
343
+ max_poll_interval_ms,
223
344
  ),
224
345
  );
225
- const current = await this.image_result({ job_id: created.job_id });
346
+ const current = await this.image_result({ job_id: input.job_id });
226
347
  validate_job_result(current);
227
348
  poll_after_ms = current.poll_after_ms;
228
349
  if (current.status === "succeeded") {
229
350
  if (!current.result) {
230
- throw new Error(`Image job ${created.job_id} succeeded without result`);
351
+ throw new Error(`Image job ${input.job_id} succeeded without result`);
231
352
  }
232
- return normalize_image_result(current.result);
353
+ normalize_image_result(current.result);
354
+ return current;
233
355
  }
234
356
  if (current.status === "failed") {
235
357
  throw new Error(
236
- `Image job failed: ${current.error ?? current.message ?? created.job_id}`,
358
+ `Image job failed: ${current.error ?? current.message ?? input.job_id}`,
237
359
  );
238
360
  }
239
361
  }
240
362
 
241
- throw new Error(`Image job timed out: ${created.job_id}`);
363
+ throw new Error(`Image job timed out: ${input.job_id}`);
242
364
  }
243
365
 
244
366
  /**
245
367
  * 显式 action 集合。
246
368
  */
247
369
  readonly actions = {
370
+ image_create: {
371
+ execute: async ({ payload }: { payload: JsonValue }) => {
372
+ try {
373
+ const input = normalize_image_payload(payload);
374
+ const created = await this.image_create(input);
375
+ validate_created_job(created);
376
+ return {
377
+ success: true,
378
+ data: created as unknown as JsonObject,
379
+ message: "image job created",
380
+ };
381
+ } catch (error) {
382
+ return {
383
+ success: false,
384
+ error: String(error),
385
+ message: String(error),
386
+ };
387
+ }
388
+ },
389
+ },
390
+ image_result: {
391
+ execute: async ({ payload }: { payload: JsonValue }) => {
392
+ try {
393
+ const input = normalize_image_result_payload(payload);
394
+ const current = await this.read_image_result(input, {
395
+ default_until_finish: true,
396
+ });
397
+ const data = current.status === "succeeded" && current.result
398
+ ? current.result as unknown as JsonObject
399
+ : current as unknown as JsonObject;
400
+ return {
401
+ success: true,
402
+ data,
403
+ message:
404
+ current.status === "succeeded"
405
+ ? "image generated"
406
+ : `image job ${current.status}`,
407
+ };
408
+ } catch (error) {
409
+ return {
410
+ success: false,
411
+ error: String(error),
412
+ message: String(error),
413
+ };
414
+ }
415
+ },
416
+ },
248
417
  generate: {
249
418
  execute: async ({ payload }: { payload: JsonValue }) => {
250
419
  try {
@@ -130,6 +130,22 @@ export interface ImagePluginJobResult {
130
130
  poll_after_ms?: number;
131
131
  }
132
132
 
133
+ /**
134
+ * 图片任务查询输入。
135
+ */
136
+ export interface ImagePluginJobResultInput {
137
+ /** 图片任务 ID,由 `image_create` 返回。 */
138
+ job_id: string;
139
+ /** 是否持续轮询直到任务进入成功或失败终态,默认由 action 决定。 */
140
+ until_finish?: boolean;
141
+ /** 单次查询最大等待时间,单位毫秒。 */
142
+ timeout_ms?: number;
143
+ /** 轮询间隔下限,单位毫秒。 */
144
+ min_poll_interval_ms?: number;
145
+ /** 轮询间隔上限,单位毫秒。 */
146
+ max_poll_interval_ms?: number;
147
+ }
148
+
133
149
  /**
134
150
  * ImagePlugin 构造参数。
135
151
  */
@@ -145,9 +161,9 @@ export interface ImagePluginOptions {
145
161
  input: ImagePluginInput,
146
162
  ) => Promise<ImagePluginJobCreateResult> | ImagePluginJobCreateResult;
147
163
  /** 查询图片生成任务,通常传入 `(input) => city.ai.image_result(input)`。 */
148
- image_result?: (input: {
149
- job_id: string;
150
- }) => Promise<ImagePluginJobResult> | ImagePluginJobResult;
164
+ image_result?: (
165
+ input: Pick<ImagePluginJobResultInput, "job_id">,
166
+ ) => Promise<ImagePluginJobResult> | ImagePluginJobResult;
151
167
  /** 图片任务最大等待时间,默认 300000ms。 */
152
168
  timeout_ms?: number;
153
169
  /** 轮询间隔下限,默认 100ms。 */
package/src/index.ts CHANGED
@@ -107,6 +107,7 @@ export type {
107
107
  ImagePluginInput,
108
108
  ImagePluginJobCreateResult,
109
109
  ImagePluginJobResult,
110
+ ImagePluginJobResultInput,
110
111
  ImagePluginJobStatus,
111
112
  ImagePluginMessage,
112
113
  ImagePluginOptions,