maoda-commander-tt 0.0.69 → 0.0.71
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.
|
@@ -608,7 +608,7 @@ function createAgentProgressReporter(options) {
|
|
|
608
608
|
// src/commands/ai/ai-audio-command.ts
|
|
609
609
|
import { resolve as resolve5 } from "node:path";
|
|
610
610
|
import { Option as Option3 } from "commander";
|
|
611
|
-
import { ok as
|
|
611
|
+
import { ok as ok27 } from "rockbed/error";
|
|
612
612
|
|
|
613
613
|
// src/bedrock/cross-app-settings/file-cross-app-settings-writer.ts
|
|
614
614
|
import { randomUUID } from "node:crypto";
|
|
@@ -2418,11 +2418,11 @@ function parseJimengAudioTaskId(taskId) {
|
|
|
2418
2418
|
|
|
2419
2419
|
// src/modules/audio-generation/xyq-audio-generation-provider.ts
|
|
2420
2420
|
import { Disposable as Disposable10 } from "rockbed/dispose";
|
|
2421
|
-
import { err as err18, ok as
|
|
2421
|
+
import { err as err18, ok as ok24 } from "rockbed/error";
|
|
2422
2422
|
|
|
2423
2423
|
// src/modules/xyq/xyq-client.ts
|
|
2424
2424
|
import { createHash as createHash2 } from "node:crypto";
|
|
2425
|
-
import { ok as
|
|
2425
|
+
import { ok as ok22 } from "rockbed/error";
|
|
2426
2426
|
|
|
2427
2427
|
// src/modules/xyq/xyq-auth.ts
|
|
2428
2428
|
import { ok as ok17 } from "rockbed/error";
|
|
@@ -2711,7 +2711,7 @@ function isRecord8(value) {
|
|
|
2711
2711
|
// src/modules/xyq/xyq-session.ts
|
|
2712
2712
|
import * as fs6 from "node:fs/promises";
|
|
2713
2713
|
import { createHash, randomUUID as randomUUID8 } from "node:crypto";
|
|
2714
|
-
import { ok as
|
|
2714
|
+
import { ok as ok21 } from "rockbed/error";
|
|
2715
2715
|
|
|
2716
2716
|
// src/modules/xyq/xyq-asset-cache.ts
|
|
2717
2717
|
import { randomUUID as randomUUID7 } from "node:crypto";
|
|
@@ -3062,6 +3062,172 @@ async function readXyqGenerationPpeHeaders(settingsReader) {
|
|
|
3062
3062
|
});
|
|
3063
3063
|
}
|
|
3064
3064
|
|
|
3065
|
+
// src/modules/xyq/xyq-asset-results.ts
|
|
3066
|
+
import { ok as ok20 } from "rockbed/error";
|
|
3067
|
+
function collectXyqAssetReferences(value, kind) {
|
|
3068
|
+
const references = /* @__PURE__ */ new Map();
|
|
3069
|
+
collect(value, kind, void 0, references, 0);
|
|
3070
|
+
return [...references.values()];
|
|
3071
|
+
}
|
|
3072
|
+
async function resolveXyqAssetArtifacts(input) {
|
|
3073
|
+
const { kind } = input;
|
|
3074
|
+
const label = kind === "image" ? "\u56FE\u7247" : "\u89C6\u9891";
|
|
3075
|
+
const originalLabel = kind === "image" ? "\u65E0\u6C34\u5370\u539F\u56FE" : "\u65E0\u6C34\u5370\u89C6\u9891";
|
|
3076
|
+
const references = input.artifacts.flatMap((artifact) => artifact.references);
|
|
3077
|
+
if (references.length === 0) {
|
|
3078
|
+
return ok20(input.artifacts.map((artifact) => ({ raw: artifact.raw, outputs: [] })));
|
|
3079
|
+
}
|
|
3080
|
+
if (references.some((reference) => !reference.pippitAssetId)) {
|
|
3081
|
+
return invalidResult(kind, `XYQ ${label}\u751F\u6210\u7ED3\u679C\u7F3A\u5C11 pippit_asset_id\uFF0C\u65E0\u6CD5\u67E5\u8BE2${originalLabel}`);
|
|
3082
|
+
}
|
|
3083
|
+
const pippitAssetIds = [...new Set(references.map((reference) => reference.pippitAssetId))];
|
|
3084
|
+
const response = await requestXyqJson(
|
|
3085
|
+
input.fetcher,
|
|
3086
|
+
`${XYQ_ORIGIN}/api/biz/v1/asset/query`,
|
|
3087
|
+
{
|
|
3088
|
+
method: "POST",
|
|
3089
|
+
headers: { ...input.headers, "content-type": "application/json" },
|
|
3090
|
+
body: JSON.stringify({ Base: { Client: "web" }, pippit_asset_ids: pippitAssetIds })
|
|
3091
|
+
},
|
|
3092
|
+
{
|
|
3093
|
+
requestFailedCode: kind === "image" ? XyqErrorCode.ImageQueryRequestFailed : XyqErrorCode.VideoQueryRequestFailed,
|
|
3094
|
+
responseInvalidCode: kind === "image" ? XyqErrorCode.ImageQueryResponseInvalid : XyqErrorCode.VideoQueryResponseInvalid,
|
|
3095
|
+
operation: `\u67E5\u8BE2 XYQ ${originalLabel}`
|
|
3096
|
+
}
|
|
3097
|
+
);
|
|
3098
|
+
if (!response.ok) return response;
|
|
3099
|
+
const data = isRecord7(response.value.data) ? response.value.data : {};
|
|
3100
|
+
if (!Array.isArray(data.Assets)) {
|
|
3101
|
+
return invalidResult(kind, `XYQ ${label}\u8D44\u4EA7\u54CD\u5E94\u7F3A\u5C11 Assets\uFF0C\u65E0\u6CD5\u83B7\u53D6${originalLabel}`);
|
|
3102
|
+
}
|
|
3103
|
+
const urls = /* @__PURE__ */ new Map();
|
|
3104
|
+
for (const asset of data.Assets) {
|
|
3105
|
+
if (!isRecord7(asset) || asset.AssetType !== (kind === "image" ? 1 : 2)) continue;
|
|
3106
|
+
const id = normalize(asset.PippitAssetID);
|
|
3107
|
+
if (!id || !pippitAssetIds.includes(id)) continue;
|
|
3108
|
+
const media = asset[kind === "image" ? "Image" : "Video"];
|
|
3109
|
+
const url = isRecord7(media) ? originalUrl(kind, media) : void 0;
|
|
3110
|
+
if (url) urls.set(id, url);
|
|
3111
|
+
}
|
|
3112
|
+
const missingId = pippitAssetIds.find((id) => !urls.has(id));
|
|
3113
|
+
if (missingId) {
|
|
3114
|
+
return invalidResult(kind, `XYQ ${label}\u8D44\u4EA7 ${missingId} \u7F3A\u5C11${originalLabel}\u5730\u5740`);
|
|
3115
|
+
}
|
|
3116
|
+
return ok20(input.artifacts.map((artifact) => ({
|
|
3117
|
+
raw: artifact.raw,
|
|
3118
|
+
outputs: artifact.references.map((reference) => ({
|
|
3119
|
+
...reference,
|
|
3120
|
+
downloadUrl: urls.get(reference.pippitAssetId)
|
|
3121
|
+
}))
|
|
3122
|
+
})));
|
|
3123
|
+
}
|
|
3124
|
+
function collect(value, kind, inheritedId, references, depth) {
|
|
3125
|
+
if (depth > 10) return;
|
|
3126
|
+
if (typeof value === "string") {
|
|
3127
|
+
const parsed = parseValue(value);
|
|
3128
|
+
if (parsed !== void 0) collect(parsed, kind, inheritedId, references, depth + 1);
|
|
3129
|
+
return;
|
|
3130
|
+
}
|
|
3131
|
+
if (Array.isArray(value)) {
|
|
3132
|
+
for (const child of value) collect(child, kind, inheritedId, references, depth + 1);
|
|
3133
|
+
return;
|
|
3134
|
+
}
|
|
3135
|
+
if (!isRecord7(value)) return;
|
|
3136
|
+
const pippitAssetId = normalize(value.pippit_asset_id ?? value.pippitAssetId) ?? inheritedId;
|
|
3137
|
+
for (const [key, child] of Object.entries(value)) {
|
|
3138
|
+
if (key === kind || key === `${kind}s`) {
|
|
3139
|
+
collectExplicit(child, kind, pippitAssetId, references, depth + 1);
|
|
3140
|
+
}
|
|
3141
|
+
collect(child, kind, pippitAssetId, references, depth + 1);
|
|
3142
|
+
}
|
|
3143
|
+
}
|
|
3144
|
+
function collectExplicit(value, kind, inheritedId, references, depth) {
|
|
3145
|
+
if (depth > 10) return;
|
|
3146
|
+
if (typeof value === "string") {
|
|
3147
|
+
const parsed = parseValue(value);
|
|
3148
|
+
if (parsed !== void 0) collectExplicit(parsed, kind, inheritedId, references, depth + 1);
|
|
3149
|
+
return;
|
|
3150
|
+
}
|
|
3151
|
+
if (Array.isArray(value)) {
|
|
3152
|
+
for (const child of value) collectExplicit(child, kind, inheritedId, references, depth + 1);
|
|
3153
|
+
return;
|
|
3154
|
+
}
|
|
3155
|
+
if (!isRecord7(value)) return;
|
|
3156
|
+
const metadata = parseRecord(value.metadata) ?? {};
|
|
3157
|
+
const assetId = normalize(value.asset_id ?? value.assetId);
|
|
3158
|
+
const pippitAssetId = normalize(value.pippit_asset_id ?? value.pippitAssetId) ?? inheritedId;
|
|
3159
|
+
const agentUrl = normalize(value.url ?? value.download_url ?? value.downloadUrl);
|
|
3160
|
+
const sceneUrls = parseRecord(value.scene_urls ?? value.sceneUrls);
|
|
3161
|
+
if (!assetId && !pippitAssetId && !agentUrl && !sceneUrls) return;
|
|
3162
|
+
const width = number(metadata.width ?? value.width);
|
|
3163
|
+
const height = number(metadata.height ?? value.height);
|
|
3164
|
+
const name = kind === "image" ? normalize(value.name) : void 0;
|
|
3165
|
+
const extra = parseRecord(value.extra) ?? {};
|
|
3166
|
+
const durationMs = kind === "video" ? number(metadata.duration_ms ?? value.duration_ms ?? extra.ark_video_duration_ms) : void 0;
|
|
3167
|
+
const reference = {
|
|
3168
|
+
...assetId ? { assetId } : {},
|
|
3169
|
+
...pippitAssetId ? { pippitAssetId } : {},
|
|
3170
|
+
...width !== void 0 ? { width } : {},
|
|
3171
|
+
...height !== void 0 ? { height } : {},
|
|
3172
|
+
...name ? { name } : {},
|
|
3173
|
+
...durationMs !== void 0 ? { durationMs } : {}
|
|
3174
|
+
};
|
|
3175
|
+
const identity = assetId ? `asset:${assetId}` : pippitAssetId ? `pippit:${pippitAssetId}` : `${kind}:${references.size}`;
|
|
3176
|
+
const existing = references.get(identity);
|
|
3177
|
+
if (kind === "image" || !existing || qualityScore(reference) > qualityScore(existing)) {
|
|
3178
|
+
references.set(identity, reference);
|
|
3179
|
+
}
|
|
3180
|
+
}
|
|
3181
|
+
function qualityScore(reference) {
|
|
3182
|
+
return (reference.width ?? 0) * (reference.height ?? 0);
|
|
3183
|
+
}
|
|
3184
|
+
function originalUrl(kind, media) {
|
|
3185
|
+
if (kind === "video") {
|
|
3186
|
+
const noWatermark = isRecord7(media.no_watermark_video_url) ? media.no_watermark_video_url : {};
|
|
3187
|
+
return httpUrl(normalize(media.origin_url) ?? noWatermark.download_url);
|
|
3188
|
+
}
|
|
3189
|
+
const preview = isRecord7(media.not_watermark_preview) ? media.not_watermark_preview : {};
|
|
3190
|
+
const original = isRecord7(preview.previewinfo) ? preview.previewinfo : {};
|
|
3191
|
+
return httpUrl(original.preview_url);
|
|
3192
|
+
}
|
|
3193
|
+
function invalidResult(kind, message) {
|
|
3194
|
+
return xyqError(
|
|
3195
|
+
kind === "image" ? XyqErrorCode.ImageQueryResponseInvalid : XyqErrorCode.VideoQueryResponseInvalid,
|
|
3196
|
+
message
|
|
3197
|
+
);
|
|
3198
|
+
}
|
|
3199
|
+
function httpUrl(value) {
|
|
3200
|
+
const normalized = typeof value === "string" ? value.trim() : "";
|
|
3201
|
+
try {
|
|
3202
|
+
const url = new URL(normalized);
|
|
3203
|
+
return url.protocol === "https:" || url.protocol === "http:" ? normalized : void 0;
|
|
3204
|
+
} catch {
|
|
3205
|
+
return void 0;
|
|
3206
|
+
}
|
|
3207
|
+
}
|
|
3208
|
+
function normalize(value) {
|
|
3209
|
+
if (typeof value !== "string" && typeof value !== "number") return void 0;
|
|
3210
|
+
return String(value).trim() || void 0;
|
|
3211
|
+
}
|
|
3212
|
+
function number(value) {
|
|
3213
|
+
if (value === void 0 || value === null || value === "") return void 0;
|
|
3214
|
+
const parsed = Number(value);
|
|
3215
|
+
return Number.isFinite(parsed) ? parsed : void 0;
|
|
3216
|
+
}
|
|
3217
|
+
function parseRecord(value) {
|
|
3218
|
+
const parsed = typeof value === "string" ? parseValue(value) : value;
|
|
3219
|
+
return isRecord7(parsed) ? parsed : void 0;
|
|
3220
|
+
}
|
|
3221
|
+
function parseValue(value) {
|
|
3222
|
+
const text = value.trim();
|
|
3223
|
+
if (!text.startsWith("{") && !text.startsWith("[")) return void 0;
|
|
3224
|
+
try {
|
|
3225
|
+
return JSON.parse(text);
|
|
3226
|
+
} catch {
|
|
3227
|
+
return void 0;
|
|
3228
|
+
}
|
|
3229
|
+
}
|
|
3230
|
+
|
|
3065
3231
|
// src/modules/xyq/xyq-session.ts
|
|
3066
3232
|
var ASSET_TYPE = {
|
|
3067
3233
|
video: "1",
|
|
@@ -3141,7 +3307,7 @@ var XyqSession = class {
|
|
|
3141
3307
|
}
|
|
3142
3308
|
);
|
|
3143
3309
|
if (!responseResult.ok) return responseResult;
|
|
3144
|
-
return
|
|
3310
|
+
return ok21({
|
|
3145
3311
|
taskId: `${XYQ_IMAGE_TASK_ID_PREFIX}${threadId}`,
|
|
3146
3312
|
threadId,
|
|
3147
3313
|
clientRunId,
|
|
@@ -3191,10 +3357,20 @@ var XyqSession = class {
|
|
|
3191
3357
|
const runRecord = isRecord7(run) ? run : {};
|
|
3192
3358
|
const serverRunId = normalizeString2(runRecord.run_id);
|
|
3193
3359
|
const entryList = Array.isArray(runRecord.entry_list) ? runRecord.entry_list : [];
|
|
3194
|
-
const
|
|
3195
|
-
const
|
|
3196
|
-
const
|
|
3197
|
-
|
|
3360
|
+
const state = mapXyqRunState(toNumber(runRecord.state));
|
|
3361
|
+
const artifactReferences = entryList.map((entry) => extractAssetArtifact(entry, "image", state === "completed")).filter((artifact) => artifact !== void 0);
|
|
3362
|
+
const artifactsResult = await resolveXyqAssetArtifacts({
|
|
3363
|
+
fetcher: this._fetcher,
|
|
3364
|
+
headers: { ...this._headers(), ...ppeHeadersResult.value },
|
|
3365
|
+
kind: "image",
|
|
3366
|
+
artifacts: artifactReferences
|
|
3367
|
+
});
|
|
3368
|
+
if (!artifactsResult.ok) return artifactsResult;
|
|
3369
|
+
const artifacts = artifactsResult.value.map((artifact) => ({
|
|
3370
|
+
images: artifact.outputs,
|
|
3371
|
+
raw: artifact.raw
|
|
3372
|
+
}));
|
|
3373
|
+
return ok21({
|
|
3198
3374
|
taskId: `${XYQ_IMAGE_TASK_ID_PREFIX}${threadId}`,
|
|
3199
3375
|
threadId,
|
|
3200
3376
|
...serverRunId ? { runId: serverRunId } : {},
|
|
@@ -3217,10 +3393,10 @@ var XyqSession = class {
|
|
|
3217
3393
|
const result = await this.queryImage(input);
|
|
3218
3394
|
if (!result.ok) return result;
|
|
3219
3395
|
if (isTerminalXyqTaskState(result.value.state)) {
|
|
3220
|
-
return
|
|
3396
|
+
return ok21({ ...result.value, timedOut: false });
|
|
3221
3397
|
}
|
|
3222
3398
|
const remainingMs = deadline - this._now();
|
|
3223
|
-
if (remainingMs <= 0) return
|
|
3399
|
+
if (remainingMs <= 0) return ok21({ ...result.value, timedOut: true });
|
|
3224
3400
|
try {
|
|
3225
3401
|
await this._sleep(Math.min(result.value.retryAfterSeconds * 1e3, remainingMs), input.signal);
|
|
3226
3402
|
} catch (caughtError) {
|
|
@@ -3268,7 +3444,7 @@ var XyqSession = class {
|
|
|
3268
3444
|
"\u521B\u5EFA XYQ \u56FE\u7247\u753B\u5E03\u9879\u76EE\u6210\u529F\uFF0C\u4F46\u54CD\u5E94\u7F3A\u5C11 project_id \u6216 canvas_asset_id"
|
|
3269
3445
|
);
|
|
3270
3446
|
}
|
|
3271
|
-
return
|
|
3447
|
+
return ok21({ projectId, canvasAssetId });
|
|
3272
3448
|
}
|
|
3273
3449
|
async submitAudio(input) {
|
|
3274
3450
|
const prompt = input.prompt.trim();
|
|
@@ -3329,7 +3505,7 @@ var XyqSession = class {
|
|
|
3329
3505
|
if (!responseResult.ok) {
|
|
3330
3506
|
return responseResult;
|
|
3331
3507
|
}
|
|
3332
|
-
return
|
|
3508
|
+
return ok21({
|
|
3333
3509
|
taskId: createXyqTaskId(threadId),
|
|
3334
3510
|
threadId,
|
|
3335
3511
|
clientRunId,
|
|
@@ -3388,7 +3564,7 @@ var XyqSession = class {
|
|
|
3388
3564
|
const providerState = mapXyqRunState(toNumber(runRecord.state));
|
|
3389
3565
|
const state = hasUsableAudioOutput(artifacts) ? "completed" : providerState;
|
|
3390
3566
|
const retryAfterSeconds = isTerminalXyqTaskState(state) ? 0 : 2;
|
|
3391
|
-
return
|
|
3567
|
+
return ok21({
|
|
3392
3568
|
taskId: createXyqTaskId(threadId),
|
|
3393
3569
|
threadId,
|
|
3394
3570
|
...serverRunId ? { runId: serverRunId } : {},
|
|
@@ -3419,11 +3595,11 @@ var XyqSession = class {
|
|
|
3419
3595
|
return result;
|
|
3420
3596
|
}
|
|
3421
3597
|
if (isTerminalXyqTaskState(result.value.state)) {
|
|
3422
|
-
return
|
|
3598
|
+
return ok21({ ...result.value, timedOut: false });
|
|
3423
3599
|
}
|
|
3424
3600
|
const remainingMs = deadline - this._now();
|
|
3425
3601
|
if (remainingMs <= 0) {
|
|
3426
|
-
return
|
|
3602
|
+
return ok21({ ...result.value, timedOut: true });
|
|
3427
3603
|
}
|
|
3428
3604
|
try {
|
|
3429
3605
|
await this._sleep(
|
|
@@ -3491,7 +3667,7 @@ var XyqSession = class {
|
|
|
3491
3667
|
if (!responseResult.ok) {
|
|
3492
3668
|
return responseResult;
|
|
3493
3669
|
}
|
|
3494
|
-
return
|
|
3670
|
+
return ok21({
|
|
3495
3671
|
taskId: threadId,
|
|
3496
3672
|
threadId,
|
|
3497
3673
|
clientRunId,
|
|
@@ -3546,11 +3722,21 @@ var XyqSession = class {
|
|
|
3546
3722
|
const runRecord = isRecord7(run) ? run : {};
|
|
3547
3723
|
const serverRunId = normalizeString2(runRecord.run_id);
|
|
3548
3724
|
const entryList = Array.isArray(runRecord.entry_list) ? runRecord.entry_list : [];
|
|
3549
|
-
const
|
|
3550
|
-
const
|
|
3551
|
-
const
|
|
3725
|
+
const state = mapXyqRunState(toNumber(runRecord.state));
|
|
3726
|
+
const artifactReferences = entryList.map((entry) => extractAssetArtifact(entry, "video", state === "completed")).filter((artifact) => artifact !== void 0);
|
|
3727
|
+
const artifactsResult = await resolveXyqAssetArtifacts({
|
|
3728
|
+
fetcher: this._fetcher,
|
|
3729
|
+
headers: { ...this._headers(), ...ppeHeadersResult.value },
|
|
3730
|
+
kind: "video",
|
|
3731
|
+
artifacts: artifactReferences
|
|
3732
|
+
});
|
|
3733
|
+
if (!artifactsResult.ok) return artifactsResult;
|
|
3734
|
+
const artifacts = artifactsResult.value.map((artifact) => ({
|
|
3735
|
+
videos: artifact.outputs,
|
|
3736
|
+
raw: artifact.raw
|
|
3737
|
+
}));
|
|
3552
3738
|
const retryAfterSeconds = isTerminalXyqTaskState(state) ? 0 : VIDEO_POLL_INTERVAL_SECONDS;
|
|
3553
|
-
return
|
|
3739
|
+
return ok21({
|
|
3554
3740
|
taskId: threadId,
|
|
3555
3741
|
threadId,
|
|
3556
3742
|
...serverRunId ? { runId: serverRunId } : {},
|
|
@@ -3582,11 +3768,11 @@ var XyqSession = class {
|
|
|
3582
3768
|
return result;
|
|
3583
3769
|
}
|
|
3584
3770
|
if (isTerminalXyqTaskState(result.value.state)) {
|
|
3585
|
-
return
|
|
3771
|
+
return ok21({ ...result.value, timedOut: false });
|
|
3586
3772
|
}
|
|
3587
3773
|
const remainingMs = deadline - this._now();
|
|
3588
3774
|
if (remainingMs <= 0) {
|
|
3589
|
-
return
|
|
3775
|
+
return ok21({ ...result.value, timedOut: true });
|
|
3590
3776
|
}
|
|
3591
3777
|
try {
|
|
3592
3778
|
await this._sleep(
|
|
@@ -3638,7 +3824,7 @@ var XyqSession = class {
|
|
|
3638
3824
|
if (!result.ok) {
|
|
3639
3825
|
return result;
|
|
3640
3826
|
}
|
|
3641
|
-
return
|
|
3827
|
+
return ok21({
|
|
3642
3828
|
...result.value,
|
|
3643
3829
|
metadata: {
|
|
3644
3830
|
...result.value.metadata,
|
|
@@ -3724,7 +3910,7 @@ var XyqSession = class {
|
|
|
3724
3910
|
...uploadData,
|
|
3725
3911
|
...preview
|
|
3726
3912
|
});
|
|
3727
|
-
return
|
|
3913
|
+
return ok21({
|
|
3728
3914
|
...camelizedAsset,
|
|
3729
3915
|
assetId,
|
|
3730
3916
|
pippitAssetId,
|
|
@@ -3772,7 +3958,7 @@ function normalizeImageInput(input) {
|
|
|
3772
3958
|
}
|
|
3773
3959
|
pippitAssetIds.push(id);
|
|
3774
3960
|
}
|
|
3775
|
-
return
|
|
3961
|
+
return ok21({
|
|
3776
3962
|
prompt,
|
|
3777
3963
|
pippitAssetIds,
|
|
3778
3964
|
imageCount,
|
|
@@ -3963,7 +4149,7 @@ function normalizeVideoPartInput(input) {
|
|
|
3963
4149
|
if (!audiosResult.ok) {
|
|
3964
4150
|
return audiosResult;
|
|
3965
4151
|
}
|
|
3966
|
-
return
|
|
4152
|
+
return ok21({
|
|
3967
4153
|
prompt,
|
|
3968
4154
|
images: imagesResult.value,
|
|
3969
4155
|
videos: videosResult.value,
|
|
@@ -3987,7 +4173,7 @@ function normalizeVideoAssetReferences(assets, label) {
|
|
|
3987
4173
|
}
|
|
3988
4174
|
normalized.push({ asset_id: assetId, pippit_asset_id: pippitAssetId });
|
|
3989
4175
|
}
|
|
3990
|
-
return
|
|
4176
|
+
return ok21(normalized);
|
|
3991
4177
|
}
|
|
3992
4178
|
function buildVideoPartRunExtra(clientRunId, messageId) {
|
|
3993
4179
|
return {
|
|
@@ -4083,12 +4269,6 @@ function mapXyqRunState(stateCode) {
|
|
|
4083
4269
|
function isTerminalXyqTaskState(state) {
|
|
4084
4270
|
return ["completed", "failed", "canceled", "inputRequired"].includes(state);
|
|
4085
4271
|
}
|
|
4086
|
-
function hasUsableVideoOutput(artifacts) {
|
|
4087
|
-
return artifacts.some((artifact) => artifact.videos.length > 0);
|
|
4088
|
-
}
|
|
4089
|
-
function hasUsableImageOutput(artifacts) {
|
|
4090
|
-
return artifacts.some((artifact) => artifact.images.length > 0);
|
|
4091
|
-
}
|
|
4092
4272
|
function hasUsableAudioOutput(artifacts) {
|
|
4093
4273
|
return artifacts.some((artifact) => artifact.audios.length > 0);
|
|
4094
4274
|
}
|
|
@@ -4105,78 +4285,14 @@ function extractAudioArtifact(entry) {
|
|
|
4105
4285
|
raw: camelizeValue(artifact)
|
|
4106
4286
|
};
|
|
4107
4287
|
}
|
|
4108
|
-
function
|
|
4109
|
-
if (!isRecord7(entry)) {
|
|
4110
|
-
return void 0;
|
|
4111
|
-
}
|
|
4112
|
-
const artifact = parseJsonRecord(entry.artifact);
|
|
4113
|
-
if (!artifact) {
|
|
4114
|
-
return void 0;
|
|
4115
|
-
}
|
|
4116
|
-
return {
|
|
4117
|
-
videos: deepCollectVideoOutputs(artifact),
|
|
4118
|
-
raw: camelizeValue(artifact)
|
|
4119
|
-
};
|
|
4120
|
-
}
|
|
4121
|
-
function extractImageArtifact(entry) {
|
|
4288
|
+
function extractAssetArtifact(entry, kind, completed) {
|
|
4122
4289
|
if (!isRecord7(entry)) return void 0;
|
|
4123
4290
|
const artifact = parseJsonRecord(entry.artifact);
|
|
4124
4291
|
if (!artifact) return void 0;
|
|
4125
|
-
return {
|
|
4126
|
-
|
|
4127
|
-
|
|
4128
|
-
const results = /* @__PURE__ */ new Map();
|
|
4129
|
-
collectImageOutputs(value, void 0, results, 0);
|
|
4130
|
-
return [...results.values()];
|
|
4131
|
-
}
|
|
4132
|
-
function collectImageOutputs(value, inheritedPippitAssetId, results, depth) {
|
|
4133
|
-
if (depth > 10) return;
|
|
4134
|
-
if (typeof value === "string") {
|
|
4135
|
-
const parsed = parseJsonValue(value);
|
|
4136
|
-
if (parsed !== void 0) collectImageOutputs(parsed, inheritedPippitAssetId, results, depth + 1);
|
|
4137
|
-
return;
|
|
4138
|
-
}
|
|
4139
|
-
if (Array.isArray(value)) {
|
|
4140
|
-
for (const item of value) collectImageOutputs(item, inheritedPippitAssetId, results, depth + 1);
|
|
4141
|
-
return;
|
|
4142
|
-
}
|
|
4143
|
-
if (!isRecord7(value)) return;
|
|
4144
|
-
const pippitAssetId = normalizeString2(value.pippit_asset_id ?? value.pippitAssetId) ?? inheritedPippitAssetId;
|
|
4145
|
-
for (const [key, child] of Object.entries(value)) {
|
|
4146
|
-
if (key === "image" || key === "images") {
|
|
4147
|
-
collectExplicitImage(child, pippitAssetId, results, depth + 1);
|
|
4148
|
-
}
|
|
4149
|
-
collectImageOutputs(child, pippitAssetId, results, depth + 1);
|
|
4150
|
-
}
|
|
4151
|
-
}
|
|
4152
|
-
function collectExplicitImage(value, inheritedPippitAssetId, results, depth) {
|
|
4153
|
-
if (depth > 10) return;
|
|
4154
|
-
if (typeof value === "string") {
|
|
4155
|
-
const parsed = parseJsonValue(value);
|
|
4156
|
-
if (parsed !== void 0) collectExplicitImage(parsed, inheritedPippitAssetId, results, depth + 1);
|
|
4157
|
-
return;
|
|
4158
|
-
}
|
|
4159
|
-
if (Array.isArray(value)) {
|
|
4160
|
-
for (const item of value) collectExplicitImage(item, inheritedPippitAssetId, results, depth + 1);
|
|
4161
|
-
return;
|
|
4162
|
-
}
|
|
4163
|
-
if (!isRecord7(value)) return;
|
|
4164
|
-
const sceneUrls = isRecord7(value.scene_urls) ? value.scene_urls : isRecord7(value.sceneUrls) ? value.sceneUrls : {};
|
|
4165
|
-
const downloadUrl = normalizeString2(value.url) ?? normalizeString2(sceneUrls.origin_url ?? sceneUrls.originUrl) ?? normalizeString2(sceneUrls.share_without_watermark ?? sceneUrls.shareWithoutWatermark) ?? normalizeString2(sceneUrls.download) ?? normalizeString2(value.download_url ?? value.downloadUrl) ?? normalizeString2(sceneUrls.preview_high ?? sceneUrls.previewHigh);
|
|
4166
|
-
if (!downloadUrl) return;
|
|
4167
|
-
const metadata = parseJsonRecord(value.metadata) ?? {};
|
|
4168
|
-
const assetId = normalizeString2(value.asset_id ?? value.assetId);
|
|
4169
|
-
const pippitAssetId = normalizeString2(value.pippit_asset_id ?? value.pippitAssetId) ?? inheritedPippitAssetId;
|
|
4170
|
-
const output = {
|
|
4171
|
-
downloadUrl,
|
|
4172
|
-
...assetId ? { assetId } : {},
|
|
4173
|
-
...pippitAssetId ? { pippitAssetId } : {},
|
|
4174
|
-
...toNumber(metadata.width ?? value.width) !== void 0 ? { width: toNumber(metadata.width ?? value.width) } : {},
|
|
4175
|
-
...toNumber(metadata.height ?? value.height) !== void 0 ? { height: toNumber(metadata.height ?? value.height) } : {},
|
|
4176
|
-
...normalizeString2(value.name) ? { name: normalizeString2(value.name) } : {}
|
|
4292
|
+
return {
|
|
4293
|
+
references: completed ? collectXyqAssetReferences(artifact, kind) : [],
|
|
4294
|
+
raw: camelizeValue(artifact)
|
|
4177
4295
|
};
|
|
4178
|
-
const identity = assetId ? `asset:${assetId}` : pippitAssetId ? `pippit:${pippitAssetId}` : `url:${downloadUrl}`;
|
|
4179
|
-
results.set(identity, output);
|
|
4180
4296
|
}
|
|
4181
4297
|
function deepCollectAudioOutputs(value) {
|
|
4182
4298
|
const results = /* @__PURE__ */ new Map();
|
|
@@ -4274,89 +4390,6 @@ function collectExplicitAudio(value, inheritedPippitAssetId, results, depth) {
|
|
|
4274
4390
|
const identity = assetId ? `asset:${assetId}` : pippitAssetId ? `pippit:${pippitAssetId}` : `url:${downloadUrl}`;
|
|
4275
4391
|
results.set(identity, output);
|
|
4276
4392
|
}
|
|
4277
|
-
function deepCollectVideoOutputs(value) {
|
|
4278
|
-
const results = /* @__PURE__ */ new Map();
|
|
4279
|
-
collectVideoOutputs(value, void 0, results, 0);
|
|
4280
|
-
return [...results.values()];
|
|
4281
|
-
}
|
|
4282
|
-
function collectVideoOutputs(value, inheritedPippitAssetId, results, depth) {
|
|
4283
|
-
if (depth > 10) {
|
|
4284
|
-
return;
|
|
4285
|
-
}
|
|
4286
|
-
if (typeof value === "string") {
|
|
4287
|
-
const parsed = parseJsonValue(value);
|
|
4288
|
-
if (parsed !== void 0) {
|
|
4289
|
-
collectVideoOutputs(parsed, inheritedPippitAssetId, results, depth + 1);
|
|
4290
|
-
}
|
|
4291
|
-
return;
|
|
4292
|
-
}
|
|
4293
|
-
if (Array.isArray(value)) {
|
|
4294
|
-
for (const item of value) {
|
|
4295
|
-
collectVideoOutputs(item, inheritedPippitAssetId, results, depth + 1);
|
|
4296
|
-
}
|
|
4297
|
-
return;
|
|
4298
|
-
}
|
|
4299
|
-
if (!isRecord7(value)) {
|
|
4300
|
-
return;
|
|
4301
|
-
}
|
|
4302
|
-
const pippitAssetId = normalizeString2(value.pippit_asset_id) ?? inheritedPippitAssetId;
|
|
4303
|
-
for (const [key, child] of Object.entries(value)) {
|
|
4304
|
-
if (key === "video" || key === "videos") {
|
|
4305
|
-
collectExplicitVideo(child, pippitAssetId, results, depth + 1);
|
|
4306
|
-
}
|
|
4307
|
-
collectVideoOutputs(child, pippitAssetId, results, depth + 1);
|
|
4308
|
-
}
|
|
4309
|
-
}
|
|
4310
|
-
function collectExplicitVideo(value, inheritedPippitAssetId, results, depth) {
|
|
4311
|
-
if (depth > 10) {
|
|
4312
|
-
return;
|
|
4313
|
-
}
|
|
4314
|
-
if (typeof value === "string") {
|
|
4315
|
-
const parsed = parseJsonValue(value);
|
|
4316
|
-
if (parsed !== void 0) {
|
|
4317
|
-
collectExplicitVideo(parsed, inheritedPippitAssetId, results, depth + 1);
|
|
4318
|
-
}
|
|
4319
|
-
return;
|
|
4320
|
-
}
|
|
4321
|
-
if (Array.isArray(value)) {
|
|
4322
|
-
for (const item of value) {
|
|
4323
|
-
collectExplicitVideo(item, inheritedPippitAssetId, results, depth + 1);
|
|
4324
|
-
}
|
|
4325
|
-
return;
|
|
4326
|
-
}
|
|
4327
|
-
if (!isRecord7(value)) {
|
|
4328
|
-
return;
|
|
4329
|
-
}
|
|
4330
|
-
const downloadUrl = normalizeString2(value.download_url) ?? normalizeString2(value.url);
|
|
4331
|
-
if (!downloadUrl) {
|
|
4332
|
-
return;
|
|
4333
|
-
}
|
|
4334
|
-
const metadata = isRecord7(value.metadata) ? value.metadata : {};
|
|
4335
|
-
const extra = isRecord7(value.extra) ? value.extra : {};
|
|
4336
|
-
const assetId = normalizeString2(value.asset_id);
|
|
4337
|
-
const pippitAssetId = normalizeString2(value.pippit_asset_id) ?? inheritedPippitAssetId;
|
|
4338
|
-
const width = toNumber(metadata.width ?? value.width);
|
|
4339
|
-
const height = toNumber(metadata.height ?? value.height);
|
|
4340
|
-
const durationMs = toNumber(
|
|
4341
|
-
metadata.duration_ms ?? value.duration_ms ?? extra.ark_video_duration_ms
|
|
4342
|
-
);
|
|
4343
|
-
const output = {
|
|
4344
|
-
downloadUrl,
|
|
4345
|
-
...assetId ? { assetId } : {},
|
|
4346
|
-
...pippitAssetId ? { pippitAssetId } : {},
|
|
4347
|
-
...width !== void 0 ? { width } : {},
|
|
4348
|
-
...height !== void 0 ? { height } : {},
|
|
4349
|
-
...durationMs !== void 0 ? { durationMs } : {}
|
|
4350
|
-
};
|
|
4351
|
-
const identity = assetId ? `asset:${assetId}` : pippitAssetId ? `pippit:${pippitAssetId}` : `url:${downloadUrl}`;
|
|
4352
|
-
const existing = results.get(identity);
|
|
4353
|
-
if (!existing || videoQualityScore(output) > videoQualityScore(existing)) {
|
|
4354
|
-
results.set(identity, output);
|
|
4355
|
-
}
|
|
4356
|
-
}
|
|
4357
|
-
function videoQualityScore(output) {
|
|
4358
|
-
return (output.width ?? 0) * (output.height ?? 0);
|
|
4359
|
-
}
|
|
4360
4393
|
function parseJsonRecord(value) {
|
|
4361
4394
|
if (isRecord7(value)) {
|
|
4362
4395
|
return value;
|
|
@@ -4481,7 +4514,7 @@ var XyqClient = class {
|
|
|
4481
4514
|
if (!options.forceRefresh) {
|
|
4482
4515
|
const session = this._sessions.get(fingerprint);
|
|
4483
4516
|
if (session) {
|
|
4484
|
-
return
|
|
4517
|
+
return ok22(session);
|
|
4485
4518
|
}
|
|
4486
4519
|
const pendingSession2 = this._pendingSessions.get(fingerprint);
|
|
4487
4520
|
if (pendingSession2) {
|
|
@@ -4512,7 +4545,7 @@ var XyqClient = class {
|
|
|
4512
4545
|
if (!forceRefresh) {
|
|
4513
4546
|
const cached = await this._readCacheBestEffort();
|
|
4514
4547
|
if (cached?.cookieFingerprint === fingerprint) {
|
|
4515
|
-
return
|
|
4548
|
+
return ok22(this._createSession(cookie, cached));
|
|
4516
4549
|
}
|
|
4517
4550
|
}
|
|
4518
4551
|
const contextResult = await this._fetchSessionContext(cookie);
|
|
@@ -4529,7 +4562,7 @@ var XyqClient = class {
|
|
|
4529
4562
|
if (this._activeFingerprint === fingerprint) {
|
|
4530
4563
|
await this._writeCacheBestEffort(cacheRecord);
|
|
4531
4564
|
}
|
|
4532
|
-
return
|
|
4565
|
+
return ok22(
|
|
4533
4566
|
new XyqSession(contextResult.value, this._fetcher, {
|
|
4534
4567
|
settingsReader: this._settingsReader
|
|
4535
4568
|
})
|
|
@@ -4582,7 +4615,7 @@ var XyqClient = class {
|
|
|
4582
4615
|
"\u83B7\u53D6 XYQ workspace \u6210\u529F\uFF0C\u4F46\u672A\u627E\u5230 workspace_id"
|
|
4583
4616
|
);
|
|
4584
4617
|
}
|
|
4585
|
-
return
|
|
4618
|
+
return ok22({
|
|
4586
4619
|
cookies: { [XYQ_SESSION_COOKIE_NAME]: cookie },
|
|
4587
4620
|
uid,
|
|
4588
4621
|
workspaceId,
|
|
@@ -4638,7 +4671,7 @@ function findFirstAudioUrl(task) {
|
|
|
4638
4671
|
}
|
|
4639
4672
|
|
|
4640
4673
|
// src/modules/xyq-tasks/audio-task-runner.ts
|
|
4641
|
-
import { err as err17, ok as
|
|
4674
|
+
import { err as err17, ok as ok23 } from "rockbed/error";
|
|
4642
4675
|
async function createDefaultAudioSession() {
|
|
4643
4676
|
return createDefaultXyqClient().createSession();
|
|
4644
4677
|
}
|
|
@@ -4650,14 +4683,14 @@ function collectTaskVideoOutputs(result) {
|
|
|
4650
4683
|
for (const video of artifact.videos) {
|
|
4651
4684
|
const identity = video.assetId ? `asset:${video.assetId}` : video.pippitAssetId ? `pippit:${video.pippitAssetId}` : `url:${video.downloadUrl}`;
|
|
4652
4685
|
const existing = outputs.get(identity);
|
|
4653
|
-
if (!existing ||
|
|
4686
|
+
if (!existing || qualityScore2(video) > qualityScore2(existing)) {
|
|
4654
4687
|
outputs.set(identity, video);
|
|
4655
4688
|
}
|
|
4656
4689
|
}
|
|
4657
4690
|
}
|
|
4658
4691
|
return [...outputs.values()];
|
|
4659
4692
|
}
|
|
4660
|
-
function
|
|
4693
|
+
function qualityScore2(output) {
|
|
4661
4694
|
return (output.width ?? 0) * (output.height ?? 0);
|
|
4662
4695
|
}
|
|
4663
4696
|
|
|
@@ -4708,7 +4741,7 @@ var XyqAudioGenerationProvider = class extends Disposable10 {
|
|
|
4708
4741
|
...pippitAssetId ? { pippitAssetId } : {}
|
|
4709
4742
|
});
|
|
4710
4743
|
if (!submit.ok) return xyqAudioFailure(submit, stage, "submit");
|
|
4711
|
-
return
|
|
4744
|
+
return ok24({ taskId: submit.value.taskId, state: "submitted" });
|
|
4712
4745
|
} catch (caughtError) {
|
|
4713
4746
|
return err18(1, toErrorMessage2(caughtError), { stage });
|
|
4714
4747
|
}
|
|
@@ -4723,7 +4756,7 @@ var XyqAudioGenerationProvider = class extends Disposable10 {
|
|
|
4723
4756
|
stage = "query";
|
|
4724
4757
|
const result = await sessionResult.value.queryAudio({ threadId });
|
|
4725
4758
|
if (!result.ok) return xyqAudioFailure(result, stage, "query", taskId);
|
|
4726
|
-
return
|
|
4759
|
+
return ok24(toAudioTaskResult(result.value));
|
|
4727
4760
|
} catch (caughtError) {
|
|
4728
4761
|
return err18(1, toErrorMessage2(caughtError), { stage, taskId });
|
|
4729
4762
|
}
|
|
@@ -4739,7 +4772,7 @@ var XyqAudioGenerationProvider = class extends Disposable10 {
|
|
|
4739
4772
|
stage = "wait";
|
|
4740
4773
|
const result = await sessionResult.value.waitAudio({ threadId, timeoutSeconds });
|
|
4741
4774
|
if (!result.ok) return xyqAudioFailure(result, stage, "query", taskId);
|
|
4742
|
-
return
|
|
4775
|
+
return ok24(toAudioTaskResult(result.value));
|
|
4743
4776
|
} catch (caughtError) {
|
|
4744
4777
|
return err18(1, toErrorMessage2(caughtError), { stage, taskId });
|
|
4745
4778
|
}
|
|
@@ -4794,7 +4827,7 @@ function createDefaultAudioGenerationService(options = {}) {
|
|
|
4794
4827
|
|
|
4795
4828
|
// src/commands/ai/ai-audio-status-command.ts
|
|
4796
4829
|
import { Option } from "commander";
|
|
4797
|
-
import { ok as
|
|
4830
|
+
import { ok as ok25 } from "rockbed/error";
|
|
4798
4831
|
|
|
4799
4832
|
// src/commands/ai/ai-audio-task-output.ts
|
|
4800
4833
|
function audioErrorStage(errorInfo, phase) {
|
|
@@ -4873,7 +4906,7 @@ var AiAudioStatusCommand = class extends BaseCommand {
|
|
|
4873
4906
|
if (!result.ok) {
|
|
4874
4907
|
return failFrom(result, audioFailureDetail(result.errorInfo, "query", { taskId }));
|
|
4875
4908
|
}
|
|
4876
|
-
return
|
|
4909
|
+
return ok25(toAudioTaskOutput(result.value));
|
|
4877
4910
|
} catch (caughtError) {
|
|
4878
4911
|
return fail(1, caughtError instanceof Error ? caughtError.message : String(caughtError), {
|
|
4879
4912
|
stage: "query",
|
|
@@ -4886,7 +4919,7 @@ var AiAudioStatusCommand = class extends BaseCommand {
|
|
|
4886
4919
|
// src/commands/ai/ai-audio-wait-command.ts
|
|
4887
4920
|
import { resolve as resolve4 } from "node:path";
|
|
4888
4921
|
import { Option as Option2 } from "commander";
|
|
4889
|
-
import { ok as
|
|
4922
|
+
import { ok as ok26 } from "rockbed/error";
|
|
4890
4923
|
var AiAudioWaitCommand = class extends BaseCommand {
|
|
4891
4924
|
constructor(_audioGenerationService = createDefaultAudioGenerationService()) {
|
|
4892
4925
|
super();
|
|
@@ -4929,7 +4962,7 @@ var AiAudioWaitCommand = class extends BaseCommand {
|
|
|
4929
4962
|
if (!result.ok) {
|
|
4930
4963
|
return failFrom(result, audioFailureDetail(result.errorInfo, "wait", { taskId, outputPath }));
|
|
4931
4964
|
}
|
|
4932
|
-
return
|
|
4965
|
+
return ok26(toAudioTaskOutput(result.value, { outputPath }));
|
|
4933
4966
|
}
|
|
4934
4967
|
};
|
|
4935
4968
|
|
|
@@ -5024,7 +5057,7 @@ var AiAudioCommand = class extends BaseCommandGroup {
|
|
|
5024
5057
|
}
|
|
5025
5058
|
taskId = submitted.value.taskId;
|
|
5026
5059
|
progress.dispose();
|
|
5027
|
-
if (!shouldWait) return
|
|
5060
|
+
if (!shouldWait) return ok27(toAudioSubmitOutput(taskId));
|
|
5028
5061
|
stage = "wait";
|
|
5029
5062
|
const completed = await this._audioGenerationService.wait({
|
|
5030
5063
|
taskId,
|
|
@@ -5034,7 +5067,7 @@ var AiAudioCommand = class extends BaseCommandGroup {
|
|
|
5034
5067
|
if (!completed.ok) {
|
|
5035
5068
|
return failFrom(completed, audioFailureDetail(completed.errorInfo, "wait", { taskId, outputPath }));
|
|
5036
5069
|
}
|
|
5037
|
-
return
|
|
5070
|
+
return ok27(toAudioTaskOutput(completed.value, { outputPath }));
|
|
5038
5071
|
} catch (caughtError) {
|
|
5039
5072
|
return fail(1, caughtError instanceof Error ? caughtError.message : String(caughtError), {
|
|
5040
5073
|
stage,
|
|
@@ -5052,14 +5085,14 @@ function appendAudioPath(value, previous) {
|
|
|
5052
5085
|
// src/commands/ai/ai-image-command.ts
|
|
5053
5086
|
import * as path10 from "node:path";
|
|
5054
5087
|
import { Option as Option6 } from "commander";
|
|
5055
|
-
import { ok as
|
|
5088
|
+
import { ok as ok36 } from "rockbed/error";
|
|
5056
5089
|
|
|
5057
5090
|
// src/modules/image-generation/image-task-service.ts
|
|
5058
5091
|
import * as path6 from "node:path";
|
|
5059
5092
|
import { fileURLToPath } from "node:url";
|
|
5060
5093
|
import { randomUUID as randomUUID9 } from "node:crypto";
|
|
5061
5094
|
import { Disposable as Disposable11 } from "rockbed/dispose";
|
|
5062
|
-
import { err as err19, ok as
|
|
5095
|
+
import { err as err19, ok as ok28 } from "rockbed/error";
|
|
5063
5096
|
var ImageTaskService = class extends Disposable11 {
|
|
5064
5097
|
_taskStore;
|
|
5065
5098
|
_launchWorker;
|
|
@@ -5105,17 +5138,17 @@ var ImageTaskService = class extends Disposable11 {
|
|
|
5105
5138
|
const record = await this._taskStore.read(taskId);
|
|
5106
5139
|
const artifact = this._taskStore.artifactPath(taskId);
|
|
5107
5140
|
if ((await validateImageArtifact(artifact)).ok) {
|
|
5108
|
-
return
|
|
5141
|
+
return ok28(toOutput(record, "completed", [{ localPath: artifact }]));
|
|
5109
5142
|
}
|
|
5110
5143
|
if (record.state === "completed") {
|
|
5111
|
-
return
|
|
5144
|
+
return ok28({ ...toOutput(record, "unknown"), failReason: "\u4EFB\u52A1\u66FE\u5B8C\u6210\uFF0C\u4F46\u672C\u5730\u5F52\u6863\u56FE\u7247\u7F3A\u5931\u6216\u635F\u574F\uFF1B\u672A\u91CD\u65B0\u751F\u6210" });
|
|
5112
5145
|
}
|
|
5113
|
-
if (record.state === "failed" || record.state === "unknown") return
|
|
5114
|
-
if (await this._isWorkerAlive(record)) return
|
|
5146
|
+
if (record.state === "failed" || record.state === "unknown") return ok28(toOutput(record));
|
|
5147
|
+
if (await this._isWorkerAlive(record)) return ok28({ ...toOutput(record), retryAfterSeconds: 1 });
|
|
5115
5148
|
const latest = await this._taskStore.read(taskId);
|
|
5116
|
-
if ((await validateImageArtifact(artifact)).ok) return
|
|
5117
|
-
if (latest.state === "failed") return
|
|
5118
|
-
return
|
|
5149
|
+
if ((await validateImageArtifact(artifact)).ok) return ok28(toOutput(latest, "completed", [{ localPath: artifact }]));
|
|
5150
|
+
if (latest.state === "failed") return ok28(toOutput(latest));
|
|
5151
|
+
return ok28({ ...toOutput(latest, "unknown"), failReason: "\u65E0\u6CD5\u786E\u8BA4\u539F\u56FE\u7247 worker \u4ECD\u5728\u8FD0\u884C\uFF0C\u4E14\u672A\u53D1\u73B0\u5B8C\u6574\u5F52\u6863\u4EA7\u7269\uFF1B\u8BF7\u7A0D\u540E\u67E5\u8BE2\u539F\u4EFB\u52A1\uFF0C\u672A\u81EA\u52A8\u6062\u590D\u6216\u91CD\u65B0\u751F\u6210" });
|
|
5119
5152
|
} catch (error) {
|
|
5120
5153
|
return taskError(error, taskId);
|
|
5121
5154
|
}
|
|
@@ -5134,11 +5167,11 @@ var ImageTaskService = class extends Disposable11 {
|
|
|
5134
5167
|
if (!localPath) return err19(1, "\u56FE\u7247\u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF0C\u4F46\u672C\u5730\u5F52\u6863\u8DEF\u5F84\u7F3A\u5931", { taskId });
|
|
5135
5168
|
const copied = await copyImageArtifact(localPath, outputPath);
|
|
5136
5169
|
if (!copied.ok) return err19(copied.code, copied.msg, { ...errorDetails(copied.errorInfo), taskId, state: "completed", outputs: current.value.outputs });
|
|
5137
|
-
return
|
|
5170
|
+
return ok28({ ...current.value, outputs: [{ localPath: copied.value }] });
|
|
5138
5171
|
}
|
|
5139
5172
|
if (current.value.state === "failed" || current.value.state === "unknown") return current;
|
|
5140
5173
|
const remaining = deadline - this._now();
|
|
5141
|
-
if (remaining <= 0) return
|
|
5174
|
+
if (remaining <= 0) return ok28({ ...current.value, timedOut: true });
|
|
5142
5175
|
await this._delay(Math.min(remaining, this._pollIntervalMs));
|
|
5143
5176
|
}
|
|
5144
5177
|
}
|
|
@@ -5149,7 +5182,7 @@ var ImageTaskService = class extends Disposable11 {
|
|
|
5149
5182
|
const current = await this.status(taskId);
|
|
5150
5183
|
results.push(current.ok ? current.value : { taskId, state: "unknown", outputs: [], failReason: current.msg });
|
|
5151
5184
|
}
|
|
5152
|
-
return
|
|
5185
|
+
return ok28(results.sort((a, b) => (b.createdAt ?? "").localeCompare(a.createdAt ?? "")));
|
|
5153
5186
|
} catch (error) {
|
|
5154
5187
|
return err19(1, `\u8BFB\u53D6\u56FE\u7247\u4EFB\u52A1\u5217\u8868\u5931\u8D25: ${error instanceof Error ? error.message : String(error)}`);
|
|
5155
5188
|
}
|
|
@@ -5196,13 +5229,13 @@ ${constraints.join("\n")}` : void 0
|
|
|
5196
5229
|
}
|
|
5197
5230
|
|
|
5198
5231
|
// src/modules/image-generation/routed-image-task-service.ts
|
|
5199
|
-
import { err as err22, ok as
|
|
5232
|
+
import { err as err22, ok as ok31 } from "rockbed/error";
|
|
5200
5233
|
|
|
5201
5234
|
// src/modules/image-generation/jimeng-image-task-service.ts
|
|
5202
5235
|
import * as path7 from "node:path";
|
|
5203
5236
|
import { setTimeout as sleep3 } from "node:timers/promises";
|
|
5204
5237
|
import { Disposable as Disposable12 } from "rockbed/dispose";
|
|
5205
|
-
import { err as err20, ok as
|
|
5238
|
+
import { err as err20, ok as ok29 } from "rockbed/error";
|
|
5206
5239
|
var JIMENG_IMAGE_TASK_ID_PREFIX = "jimeng-image:";
|
|
5207
5240
|
var JimengImageTaskService = class extends Disposable12 {
|
|
5208
5241
|
_api;
|
|
@@ -5309,7 +5342,7 @@ var JimengImageTaskService = class extends Disposable12 {
|
|
|
5309
5342
|
}), "submit", "submit", taskId);
|
|
5310
5343
|
}
|
|
5311
5344
|
const interval = submission.queue_info?.polling_config?.interval_seconds;
|
|
5312
|
-
return
|
|
5345
|
+
return ok29({
|
|
5313
5346
|
taskId,
|
|
5314
5347
|
state: "submitted",
|
|
5315
5348
|
outputs: [],
|
|
@@ -5331,7 +5364,7 @@ var JimengImageTaskService = class extends Disposable12 {
|
|
|
5331
5364
|
const parsed = parseJimengImageStatus(response.value, submitId);
|
|
5332
5365
|
if (!parsed.ok) return imageFailure(err20(parsed.code, parsed.msg, { failureKind: "response" }), "query", "query", normalizedTaskId);
|
|
5333
5366
|
const { failReason, ...snapshot } = parsed.value;
|
|
5334
|
-
return
|
|
5367
|
+
return ok29({
|
|
5335
5368
|
taskId: normalizedTaskId,
|
|
5336
5369
|
...snapshot,
|
|
5337
5370
|
source: "jimeng",
|
|
@@ -5352,17 +5385,17 @@ var JimengImageTaskService = class extends Disposable12 {
|
|
|
5352
5385
|
if (!queried.ok) return queried;
|
|
5353
5386
|
const task = queried.value;
|
|
5354
5387
|
if (task.state === "completed") {
|
|
5355
|
-
return options.outputPath ? this._download(task, options.outputPath) :
|
|
5388
|
+
return options.outputPath ? this._download(task, options.outputPath) : ok29(task);
|
|
5356
5389
|
}
|
|
5357
|
-
if (task.state === "failed") return
|
|
5390
|
+
if (task.state === "failed") return ok29(task);
|
|
5358
5391
|
const remaining = deadline - this._now();
|
|
5359
|
-
if (remaining <= 0) return
|
|
5392
|
+
if (remaining <= 0) return ok29({ ...task, timedOut: true });
|
|
5360
5393
|
const interval = Math.max(1, task.retryAfterSeconds ?? 2) * 1e3;
|
|
5361
5394
|
await this._sleep(Math.min(interval, remaining));
|
|
5362
5395
|
}
|
|
5363
5396
|
}
|
|
5364
5397
|
async list() {
|
|
5365
|
-
return
|
|
5398
|
+
return ok29([]);
|
|
5366
5399
|
}
|
|
5367
5400
|
async _download(task, outputPath) {
|
|
5368
5401
|
if (task.outputs.length === 0) {
|
|
@@ -5382,7 +5415,7 @@ var JimengImageTaskService = class extends Disposable12 {
|
|
|
5382
5415
|
const { downloadUrl: _downloadUrl, ...metadata } = output;
|
|
5383
5416
|
outputs.push({ ...metadata, localPath: downloaded.value });
|
|
5384
5417
|
}
|
|
5385
|
-
return
|
|
5418
|
+
return ok29({ ...task, outputs });
|
|
5386
5419
|
}
|
|
5387
5420
|
};
|
|
5388
5421
|
function parseJimengImageTaskId(taskId) {
|
|
@@ -5423,7 +5456,7 @@ function isJimengImageModelId(modelId) {
|
|
|
5423
5456
|
import * as fs7 from "node:fs/promises";
|
|
5424
5457
|
import { homedir as homedir3 } from "node:os";
|
|
5425
5458
|
import * as path8 from "node:path";
|
|
5426
|
-
import { err as err21, ok as
|
|
5459
|
+
import { err as err21, ok as ok30 } from "rockbed/error";
|
|
5427
5460
|
var XyqImageTaskService = class {
|
|
5428
5461
|
_createSession;
|
|
5429
5462
|
_downloadDirectory;
|
|
@@ -5461,7 +5494,7 @@ var XyqImageTaskService = class {
|
|
|
5461
5494
|
aspectRatio: request.aspectRatio
|
|
5462
5495
|
});
|
|
5463
5496
|
if (!submit.ok) return xyqImageFailure(submit, "submit");
|
|
5464
|
-
return
|
|
5497
|
+
return ok30({
|
|
5465
5498
|
taskId: submit.value.taskId,
|
|
5466
5499
|
state: "submitted",
|
|
5467
5500
|
outputs: [],
|
|
@@ -5476,7 +5509,7 @@ var XyqImageTaskService = class {
|
|
|
5476
5509
|
const sessionResult = await this._createSession();
|
|
5477
5510
|
if (!sessionResult.ok) return xyqImageFailure(sessionResult, "setup", taskId);
|
|
5478
5511
|
const result = await sessionResult.value.queryImage({ threadId: threadIdResult.value });
|
|
5479
|
-
return result.ok ?
|
|
5512
|
+
return result.ok ? ok30(await this._toTaskResult(result.value)) : xyqImageFailure(result, "query", taskId);
|
|
5480
5513
|
}
|
|
5481
5514
|
async wait(options) {
|
|
5482
5515
|
const threadIdResult = parseXyqImageTaskId(options.taskId);
|
|
@@ -5490,11 +5523,11 @@ var XyqImageTaskService = class {
|
|
|
5490
5523
|
if (!result.ok) return xyqImageFailure(result, "query", options.taskId);
|
|
5491
5524
|
const task = await this._toTaskResult(result.value);
|
|
5492
5525
|
if (task.state !== "completed") {
|
|
5493
|
-
return
|
|
5526
|
+
return ok30({ ...task, ...result.value.timedOut ? { timedOut: true } : {} });
|
|
5494
5527
|
}
|
|
5495
5528
|
const remoteOutputs = collectXyqImageOutputs(result.value);
|
|
5496
5529
|
if (remoteOutputs.length === 0) return err21(1, "XYQ \u56FE\u7247\u4EFB\u52A1\u5DF2\u5B8C\u6210\uFF0C\u4F46\u6CA1\u6709\u627E\u5230\u56FE\u7247\u4E0B\u8F7D\u5730\u5740");
|
|
5497
|
-
if (!options.outputPath) return
|
|
5530
|
+
if (!options.outputPath) return ok30(task);
|
|
5498
5531
|
const targets = resolveImageOutputPaths2(
|
|
5499
5532
|
options.outputPath,
|
|
5500
5533
|
remoteOutputs.length
|
|
@@ -5508,10 +5541,10 @@ var XyqImageTaskService = class {
|
|
|
5508
5541
|
if (!downloaded.ok) return xyqImageFailure(downloaded, "download", options.taskId);
|
|
5509
5542
|
outputs.push(toTaskOutput(output, downloaded.value));
|
|
5510
5543
|
}
|
|
5511
|
-
return
|
|
5544
|
+
return ok30({ ...task, outputs });
|
|
5512
5545
|
}
|
|
5513
5546
|
async list() {
|
|
5514
|
-
return
|
|
5547
|
+
return ok30([]);
|
|
5515
5548
|
}
|
|
5516
5549
|
async _toTaskResult(result) {
|
|
5517
5550
|
const remoteOutputs = collectXyqImageOutputs(result);
|
|
@@ -5539,7 +5572,7 @@ function parseXyqImageTaskId(taskId) {
|
|
|
5539
5572
|
return err21(1, `XYQ \u56FE\u7247 task-id \u683C\u5F0F\u5FC5\u987B\u662F ${XYQ_IMAGE_TASK_ID_PREFIX}<threadId>`, { failureKind: "input", requestOutcome: "not_sent" });
|
|
5540
5573
|
}
|
|
5541
5574
|
const threadId = normalized.slice(XYQ_IMAGE_TASK_ID_PREFIX.length).trim();
|
|
5542
|
-
return threadId ?
|
|
5575
|
+
return threadId ? ok30(threadId) : err21(1, "XYQ \u56FE\u7247 taskId \u4E0D\u80FD\u4E3A\u7A7A", { failureKind: "input", requestOutcome: "not_sent" });
|
|
5543
5576
|
}
|
|
5544
5577
|
function xyqImageFailure(result, operation, taskId) {
|
|
5545
5578
|
const original = typeof result.errorInfo === "object" && result.errorInfo !== null && !Array.isArray(result.errorInfo) ? result.errorInfo : {};
|
|
@@ -5634,7 +5667,7 @@ var RoutedImageTaskService = class {
|
|
|
5634
5667
|
}
|
|
5635
5668
|
async list() {
|
|
5636
5669
|
const local = await this._localService.list();
|
|
5637
|
-
return local.ok ?
|
|
5670
|
+
return local.ok ? ok31(local.value) : local;
|
|
5638
5671
|
}
|
|
5639
5672
|
_serviceForTask(taskId) {
|
|
5640
5673
|
if (taskId.trim().startsWith(JIMENG_IMAGE_TASK_ID_PREFIX)) return this._jimengService;
|
|
@@ -5650,10 +5683,10 @@ function createDefaultImageTaskService() {
|
|
|
5650
5683
|
}
|
|
5651
5684
|
|
|
5652
5685
|
// src/commands/ai/ai-image-list-command.ts
|
|
5653
|
-
import { ok as
|
|
5686
|
+
import { ok as ok33 } from "rockbed/error";
|
|
5654
5687
|
|
|
5655
5688
|
// src/commands/ai/ai-image-task-output.ts
|
|
5656
|
-
import { ok as
|
|
5689
|
+
import { ok as ok32 } from "rockbed/error";
|
|
5657
5690
|
function validateImageWaitOptions(timeoutSeconds, outputPath) {
|
|
5658
5691
|
if (!Number.isInteger(timeoutSeconds) || timeoutSeconds < 1 || timeoutSeconds > MAX_IMAGE_WAIT_SECONDS) {
|
|
5659
5692
|
return fail(1, `--timeout-seconds \u5FC5\u987B\u662F 1-${MAX_IMAGE_WAIT_SECONDS} \u7684\u6574\u6570`, { stage: "input" });
|
|
@@ -5661,7 +5694,7 @@ function validateImageWaitOptions(timeoutSeconds, outputPath) {
|
|
|
5661
5694
|
if (outputPath !== void 0 && !outputPath.trim()) {
|
|
5662
5695
|
return fail(1, "--output \u4E00\u65E6\u4F20\u5165\u5C31\u5FC5\u987B\u662F\u975E\u7A7A\u8DEF\u5F84", { stage: "input" });
|
|
5663
5696
|
}
|
|
5664
|
-
return
|
|
5697
|
+
return ok32();
|
|
5665
5698
|
}
|
|
5666
5699
|
function imageWaitCommand(taskId, outputPath) {
|
|
5667
5700
|
return `tt ai image wait --task-id ${quoteArgument2(taskId)}${outputPath ? ` --output ${quoteArgument2(outputPath)}` : ""}`;
|
|
@@ -5708,13 +5741,13 @@ var AiImageListCommand = class extends BaseCommand {
|
|
|
5708
5741
|
}
|
|
5709
5742
|
async _execute() {
|
|
5710
5743
|
const result = await this._service.list();
|
|
5711
|
-
return result.ok ?
|
|
5744
|
+
return result.ok ? ok33({ tasks: result.value.map((task) => toImageTaskOutput(task)) }) : failFrom(result, { stage: "query" });
|
|
5712
5745
|
}
|
|
5713
5746
|
};
|
|
5714
5747
|
|
|
5715
5748
|
// src/commands/ai/ai-image-status-command.ts
|
|
5716
5749
|
import { Option as Option4 } from "commander";
|
|
5717
|
-
import { ok as
|
|
5750
|
+
import { ok as ok34 } from "rockbed/error";
|
|
5718
5751
|
var AiImageStatusCommand = class extends BaseCommand {
|
|
5719
5752
|
constructor(_service = createDefaultImageTaskService()) {
|
|
5720
5753
|
super();
|
|
@@ -5739,14 +5772,14 @@ var AiImageStatusCommand = class extends BaseCommand {
|
|
|
5739
5772
|
}
|
|
5740
5773
|
async _execute(ctx) {
|
|
5741
5774
|
const result = await this._service.status(ctx.options.taskId);
|
|
5742
|
-
return result.ok ?
|
|
5775
|
+
return result.ok ? ok34(toImageTaskOutput(result.value)) : failFrom(result, { taskId: ctx.options.taskId, stage: "query" });
|
|
5743
5776
|
}
|
|
5744
5777
|
};
|
|
5745
5778
|
|
|
5746
5779
|
// src/commands/ai/ai-image-wait-command.ts
|
|
5747
5780
|
import * as path9 from "node:path";
|
|
5748
5781
|
import { Option as Option5 } from "commander";
|
|
5749
|
-
import { ok as
|
|
5782
|
+
import { ok as ok35 } from "rockbed/error";
|
|
5750
5783
|
var AiImageWaitCommand = class extends BaseCommand {
|
|
5751
5784
|
constructor(_service = createDefaultImageTaskService()) {
|
|
5752
5785
|
super();
|
|
@@ -5779,7 +5812,7 @@ var AiImageWaitCommand = class extends BaseCommand {
|
|
|
5779
5812
|
const outputPath = options.output === void 0 ? void 0 : path9.resolve(options.output.trim());
|
|
5780
5813
|
try {
|
|
5781
5814
|
const result = await this._service.wait({ taskId: options.taskId, timeoutSeconds: options.timeoutSeconds, outputPath });
|
|
5782
|
-
return result.ok ?
|
|
5815
|
+
return result.ok ? ok35(toImageTaskOutput(result.value, outputPath)) : imageTaskFailure(result, options.taskId, outputPath);
|
|
5783
5816
|
} catch (error) {
|
|
5784
5817
|
return imageTaskFailure(fail(1, error instanceof Error ? error.message : String(error)), options.taskId, outputPath);
|
|
5785
5818
|
}
|
|
@@ -5887,11 +5920,11 @@ var AiImageCommand = class extends BaseCommandGroup {
|
|
|
5887
5920
|
...hasLocalTask && readFailureField(submit.errorInfo, "nextCommand") === void 0 ? { nextCommand: "tt ai image list" } : {}
|
|
5888
5921
|
});
|
|
5889
5922
|
}
|
|
5890
|
-
if (!options.wait && options.output === void 0) return
|
|
5923
|
+
if (!options.wait && options.output === void 0) return ok36(toImageTaskOutput(submit.value));
|
|
5891
5924
|
const taskId = submit.value.taskId;
|
|
5892
5925
|
try {
|
|
5893
5926
|
const result = await this._service.wait({ taskId, timeoutSeconds: options.timeoutSeconds, outputPath });
|
|
5894
|
-
return result.ok ?
|
|
5927
|
+
return result.ok ? ok36(toImageTaskOutput(result.value, outputPath)) : imageTaskFailure(result, taskId, outputPath);
|
|
5895
5928
|
} catch (error) {
|
|
5896
5929
|
return imageTaskFailure(fail(1, error instanceof Error ? error.message : String(error)), taskId, outputPath);
|
|
5897
5930
|
}
|
|
@@ -5908,7 +5941,7 @@ function readFailureField(value, field) {
|
|
|
5908
5941
|
|
|
5909
5942
|
// src/commands/ai/ai-video-command.ts
|
|
5910
5943
|
import { Option as Option9 } from "commander";
|
|
5911
|
-
import { ok as
|
|
5944
|
+
import { ok as ok41 } from "rockbed/error";
|
|
5912
5945
|
|
|
5913
5946
|
// src/modules/video-generation/video-generation-provider-registry.ts
|
|
5914
5947
|
var VideoGenerationProviderRegistry = class {
|
|
@@ -5944,7 +5977,7 @@ import * as path11 from "node:path";
|
|
|
5944
5977
|
import { setTimeout as sleep4 } from "node:timers/promises";
|
|
5945
5978
|
|
|
5946
5979
|
// src/modules/video-generation/video-generation-error.ts
|
|
5947
|
-
import { err as err23, ok as
|
|
5980
|
+
import { err as err23, ok as ok37 } from "rockbed/error";
|
|
5948
5981
|
function makeVideoGenerationError(options) {
|
|
5949
5982
|
const errorInfo = {
|
|
5950
5983
|
code: options.code,
|
|
@@ -5959,7 +5992,7 @@ function makeVideoGenerationError(options) {
|
|
|
5959
5992
|
return err23(options.number, options.message, errorInfo);
|
|
5960
5993
|
}
|
|
5961
5994
|
function makeVideoGenerationOk(value) {
|
|
5962
|
-
return
|
|
5995
|
+
return ok37(value);
|
|
5963
5996
|
}
|
|
5964
5997
|
|
|
5965
5998
|
// src/modules/video-generation/normalize-video-generation-request.ts
|
|
@@ -6869,7 +6902,7 @@ function createDefaultVideoGenerationService() {
|
|
|
6869
6902
|
}
|
|
6870
6903
|
|
|
6871
6904
|
// src/commands/ai/ai-video-cache-clear-command.ts
|
|
6872
|
-
import { ok as
|
|
6905
|
+
import { ok as ok38 } from "rockbed/error";
|
|
6873
6906
|
var AiVideoCacheClearCommand = class extends BaseCommand {
|
|
6874
6907
|
constructor(_clearAssetCache = clearDefaultXyqAssetCache) {
|
|
6875
6908
|
super();
|
|
@@ -6885,7 +6918,7 @@ var AiVideoCacheClearCommand = class extends BaseCommand {
|
|
|
6885
6918
|
return ["data.clearedEntries:number \u662F\u6E05\u9664\u7684\u7F13\u5B58\u6761\u76EE\u6570\u3002"];
|
|
6886
6919
|
}
|
|
6887
6920
|
async _execute(_ctx) {
|
|
6888
|
-
return
|
|
6921
|
+
return ok38(this._clearAssetCache());
|
|
6889
6922
|
}
|
|
6890
6923
|
};
|
|
6891
6924
|
|
|
@@ -6904,7 +6937,7 @@ var AiVideoCacheCommand = class extends BaseCommandGroup {
|
|
|
6904
6937
|
|
|
6905
6938
|
// src/commands/ai/ai-video-status-command.ts
|
|
6906
6939
|
import { Option as Option7 } from "commander";
|
|
6907
|
-
import { ok as
|
|
6940
|
+
import { ok as ok39 } from "rockbed/error";
|
|
6908
6941
|
|
|
6909
6942
|
// src/commands/ai/ai-video-task-output.ts
|
|
6910
6943
|
function videoFailureRecovery(recovery = {}, taskId, nextCommand) {
|
|
@@ -6988,13 +7021,13 @@ var AiVideoStatusCommand = class extends BaseCommand {
|
|
|
6988
7021
|
taskId
|
|
6989
7022
|
});
|
|
6990
7023
|
}
|
|
6991
|
-
return
|
|
7024
|
+
return ok39(toVideoTaskOutput(result.value));
|
|
6992
7025
|
}
|
|
6993
7026
|
};
|
|
6994
7027
|
|
|
6995
7028
|
// src/commands/ai/ai-video-wait-command.ts
|
|
6996
7029
|
import { Option as Option8 } from "commander";
|
|
6997
|
-
import { ok as
|
|
7030
|
+
import { ok as ok40 } from "rockbed/error";
|
|
6998
7031
|
var AiVideoWaitCommand = class extends BaseCommand {
|
|
6999
7032
|
constructor(_service = createDefaultVideoGenerationService()) {
|
|
7000
7033
|
super();
|
|
@@ -7049,7 +7082,7 @@ var AiVideoWaitCommand = class extends BaseCommand {
|
|
|
7049
7082
|
...videoFailureRecovery(result.errorInfo?.recovery, options.taskId, result.errorInfo?.nextCommand)
|
|
7050
7083
|
});
|
|
7051
7084
|
}
|
|
7052
|
-
return
|
|
7085
|
+
return ok40(toVideoTaskOutput(result.value));
|
|
7053
7086
|
}
|
|
7054
7087
|
};
|
|
7055
7088
|
|
|
@@ -7200,7 +7233,7 @@ var AiVideoCommand = class extends BaseCommandGroup {
|
|
|
7200
7233
|
return submitResult;
|
|
7201
7234
|
}
|
|
7202
7235
|
if (!shouldWait) {
|
|
7203
|
-
return
|
|
7236
|
+
return ok41(toVideoSubmitOutput(submitResult.value));
|
|
7204
7237
|
}
|
|
7205
7238
|
const taskId = submitResult.value.taskId;
|
|
7206
7239
|
if (!taskId) {
|
|
@@ -7220,7 +7253,7 @@ var AiVideoCommand = class extends BaseCommandGroup {
|
|
|
7220
7253
|
...videoFailureRecovery(completionResult.errorInfo?.recovery, taskId, completionResult.errorInfo?.nextCommand)
|
|
7221
7254
|
});
|
|
7222
7255
|
}
|
|
7223
|
-
return
|
|
7256
|
+
return ok41(
|
|
7224
7257
|
toVideoEndToEndOutput(submitResult.value, completionResult.value)
|
|
7225
7258
|
);
|
|
7226
7259
|
}
|
|
@@ -7295,7 +7328,7 @@ function supportLines(label, standard, supported) {
|
|
|
7295
7328
|
|
|
7296
7329
|
// src/modules/ark/ark-web-search.ts
|
|
7297
7330
|
import { Disposable as Disposable14 } from "rockbed/dispose";
|
|
7298
|
-
import { err as err24, ok as
|
|
7331
|
+
import { err as err24, ok as ok42 } from "rockbed/error";
|
|
7299
7332
|
|
|
7300
7333
|
// src/constants/ak.ts
|
|
7301
7334
|
var LEGACY_ARK_API_KEY = "6990de07-83be-487d-930d-f5dd3b6d5993";
|
|
@@ -7308,14 +7341,14 @@ var ARK_WEB_SEARCH_MODEL = "doubao-seed-2-0-mini-260215";
|
|
|
7308
7341
|
async function resolveArkApiKey(settingsReader, env = process.env) {
|
|
7309
7342
|
const fromEnv = env[ARK_API_KEY_ENV]?.trim();
|
|
7310
7343
|
if (fromEnv) {
|
|
7311
|
-
return
|
|
7344
|
+
return ok42(fromEnv);
|
|
7312
7345
|
}
|
|
7313
7346
|
const fromSettings = await settingsReader.getString(ARK_API_KEY_SETTING_KEY);
|
|
7314
7347
|
if (!fromSettings.ok) {
|
|
7315
7348
|
return fromSettings;
|
|
7316
7349
|
}
|
|
7317
7350
|
const value = fromSettings.value?.trim();
|
|
7318
|
-
return
|
|
7351
|
+
return ok42(value || LEGACY_ARK_API_KEY);
|
|
7319
7352
|
}
|
|
7320
7353
|
var ArkWebSearchClient = class extends Disposable14 {
|
|
7321
7354
|
_fetcher;
|
|
@@ -7373,7 +7406,7 @@ var ArkWebSearchClient = class extends Disposable14 {
|
|
|
7373
7406
|
if (!content) {
|
|
7374
7407
|
return err24(1, "\u8FD4\u56DE\u6570\u636E\u683C\u5F0F\u5F02\u5E38");
|
|
7375
7408
|
}
|
|
7376
|
-
return
|
|
7409
|
+
return ok42({
|
|
7377
7410
|
query,
|
|
7378
7411
|
model: ARK_WEB_SEARCH_MODEL,
|
|
7379
7412
|
text: extractOutputText(content),
|
|
@@ -7458,12 +7491,12 @@ var AiCommand = class extends BaseCommandGroup {
|
|
|
7458
7491
|
|
|
7459
7492
|
// src/modules/codex/index.ts
|
|
7460
7493
|
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
7461
|
-
import { ok as
|
|
7494
|
+
import { ok as ok44 } from "rockbed/error";
|
|
7462
7495
|
|
|
7463
7496
|
// src/modules/codex/codex-input.ts
|
|
7464
7497
|
import { stat as stat3 } from "node:fs/promises";
|
|
7465
7498
|
import { resolve as resolve12 } from "node:path";
|
|
7466
|
-
import { err as err25, ok as
|
|
7499
|
+
import { err as err25, ok as ok43 } from "rockbed/error";
|
|
7467
7500
|
var DEFAULT_CODEX_CWD = "/Users/bytedance/work/autogen";
|
|
7468
7501
|
var DEFAULT_CODEX_MODEL = "gpt-6.1-sol";
|
|
7469
7502
|
var DEFAULT_CODEX_REASONING = "max";
|
|
@@ -7473,7 +7506,7 @@ function validateCodexParameters(input) {
|
|
|
7473
7506
|
if (!input.prompt.trim()) return err25(1, "\u8BF7\u8F93\u5165\u975E\u7A7A prompt");
|
|
7474
7507
|
if (!CODEX_MODELS.some((model) => model === input.model)) return err25(1, "\u4E0D\u652F\u6301\u7684\u6A21\u578B");
|
|
7475
7508
|
if (!CODEX_REASONING_LEVELS.some((level) => level === input.reasoning)) return err25(1, "\u4E0D\u652F\u6301\u7684\u63A8\u7406\u5F3A\u5EA6");
|
|
7476
|
-
return
|
|
7509
|
+
return ok43();
|
|
7477
7510
|
}
|
|
7478
7511
|
async function validateCodexInput(input) {
|
|
7479
7512
|
const parameters = validateCodexParameters(input);
|
|
@@ -7485,7 +7518,7 @@ async function validateCodexInput(input) {
|
|
|
7485
7518
|
} catch {
|
|
7486
7519
|
return err25(1, `\u5DE5\u4F5C\u76EE\u5F55\u4E0D\u5B58\u5728\u6216\u4E0D\u53EF\u8BBF\u95EE: ${cwd}`);
|
|
7487
7520
|
}
|
|
7488
|
-
return
|
|
7521
|
+
return ok43({ ...input, cwd });
|
|
7489
7522
|
}
|
|
7490
7523
|
|
|
7491
7524
|
// src/modules/codex/codex-exec.ts
|
|
@@ -7553,7 +7586,7 @@ async function launchCodex(input, launch = launchDefaultCodexWorker) {
|
|
|
7553
7586
|
const { cwd } = validated.value;
|
|
7554
7587
|
const result = await launch(validated.value);
|
|
7555
7588
|
if (!result.ok) return result;
|
|
7556
|
-
return
|
|
7589
|
+
return ok44({ status: "launched", pid: result.value.pid, cwd, model: input.model, reasoning: input.reasoning, ...result.value.data });
|
|
7557
7590
|
}
|
|
7558
7591
|
function launchDefaultCodexWorker(input) {
|
|
7559
7592
|
const source = import.meta.url.endsWith(".ts");
|
|
@@ -7605,7 +7638,7 @@ var CodexCommand = class extends BaseCommand {
|
|
|
7605
7638
|
};
|
|
7606
7639
|
|
|
7607
7640
|
// src/commands/codex/codex-exec-command.ts
|
|
7608
|
-
import { err as err27, ok as
|
|
7641
|
+
import { err as err27, ok as ok45 } from "rockbed/error";
|
|
7609
7642
|
var CodexExecCommand = class extends BaseCommand {
|
|
7610
7643
|
constructor(_executeCodex = executeCodex) {
|
|
7611
7644
|
super();
|
|
@@ -7662,12 +7695,12 @@ var CodexExecCommand = class extends BaseCommand {
|
|
|
7662
7695
|
});
|
|
7663
7696
|
if (!result.ok) return result;
|
|
7664
7697
|
process.exitCode = result.value.exitCode;
|
|
7665
|
-
return
|
|
7698
|
+
return ok45();
|
|
7666
7699
|
}
|
|
7667
7700
|
};
|
|
7668
7701
|
|
|
7669
7702
|
// src/commands/deploy/deploy-command.ts
|
|
7670
|
-
import { ok as
|
|
7703
|
+
import { ok as ok46 } from "rockbed/error";
|
|
7671
7704
|
|
|
7672
7705
|
// src/modules/static-deploy/static-deploy-service.ts
|
|
7673
7706
|
import { spawn } from "node:child_process";
|
|
@@ -8018,15 +8051,15 @@ async function runTarProcess(input) {
|
|
|
8018
8051
|
clearTimeout(timer);
|
|
8019
8052
|
reject(error);
|
|
8020
8053
|
});
|
|
8021
|
-
const
|
|
8054
|
+
const collect2 = (chunks, chunk) => {
|
|
8022
8055
|
captured += chunk.length;
|
|
8023
8056
|
if (captured > 1024 * 1024) {
|
|
8024
8057
|
processError = new Error("\u5F52\u6863\u8FDB\u7A0B\u8F93\u51FA\u8D85\u51FA 1 MiB \u9650\u5236");
|
|
8025
8058
|
child.kill("SIGKILL");
|
|
8026
8059
|
} else chunks.push(chunk);
|
|
8027
8060
|
};
|
|
8028
|
-
child.stdout.on("data", (chunk) =>
|
|
8029
|
-
child.stderr.on("data", (chunk) =>
|
|
8061
|
+
child.stdout.on("data", (chunk) => collect2(stdout, chunk));
|
|
8062
|
+
child.stderr.on("data", (chunk) => collect2(stderr, chunk));
|
|
8030
8063
|
child.on("close", (exitCode) => {
|
|
8031
8064
|
clearTimeout(timer);
|
|
8032
8065
|
if (processError) reject(processError);
|
|
@@ -8109,12 +8142,12 @@ var DeployCommand = class extends BaseCommand {
|
|
|
8109
8142
|
try {
|
|
8110
8143
|
const service = this._createService();
|
|
8111
8144
|
if (operation === "list") {
|
|
8112
|
-
return
|
|
8145
|
+
return ok46(await service.list());
|
|
8113
8146
|
}
|
|
8114
8147
|
if (operation === "delete") {
|
|
8115
|
-
return
|
|
8148
|
+
return ok46(await service.delete(deleteName));
|
|
8116
8149
|
}
|
|
8117
|
-
return
|
|
8150
|
+
return ok46(
|
|
8118
8151
|
await service.deploy({
|
|
8119
8152
|
sourcePath,
|
|
8120
8153
|
...name !== void 0 ? { name } : {}
|
|
@@ -8134,7 +8167,7 @@ function inputError(msg) {
|
|
|
8134
8167
|
}
|
|
8135
8168
|
|
|
8136
8169
|
// src/modules/git/git-cli.ts
|
|
8137
|
-
import { err as err28, ok as
|
|
8170
|
+
import { err as err28, ok as ok47 } from "rockbed/error";
|
|
8138
8171
|
function runGit(args) {
|
|
8139
8172
|
return runProcess("git", args);
|
|
8140
8173
|
}
|
|
@@ -8143,7 +8176,7 @@ async function captureGit(args) {
|
|
|
8143
8176
|
if (!result.ok) {
|
|
8144
8177
|
return result;
|
|
8145
8178
|
}
|
|
8146
|
-
return
|
|
8179
|
+
return ok47(result.value.stdout.trim());
|
|
8147
8180
|
}
|
|
8148
8181
|
function gitAddAll() {
|
|
8149
8182
|
return runGit(["add", "."]);
|
|
@@ -8272,7 +8305,7 @@ var GitMmCommand = class extends GitBaseCommand {
|
|
|
8272
8305
|
};
|
|
8273
8306
|
|
|
8274
8307
|
// src/commands/git/git-mr-command.ts
|
|
8275
|
-
import { ok as
|
|
8308
|
+
import { ok as ok48 } from "rockbed/error";
|
|
8276
8309
|
var GitMrCommand = class extends GitBaseCommand {
|
|
8277
8310
|
_meta() {
|
|
8278
8311
|
return {
|
|
@@ -8298,7 +8331,7 @@ var GitMrCommand = class extends GitBaseCommand {
|
|
|
8298
8331
|
if (!openResult.ok) {
|
|
8299
8332
|
this._debug(openResult.msg);
|
|
8300
8333
|
}
|
|
8301
|
-
return
|
|
8334
|
+
return ok48();
|
|
8302
8335
|
}
|
|
8303
8336
|
};
|
|
8304
8337
|
|
|
@@ -8346,7 +8379,7 @@ var GitCommand = class extends BaseCommandGroup {
|
|
|
8346
8379
|
};
|
|
8347
8380
|
|
|
8348
8381
|
// src/commands/hello/hello-greet-command.ts
|
|
8349
|
-
import { ok as
|
|
8382
|
+
import { ok as ok49 } from "rockbed/error";
|
|
8350
8383
|
var HelloGreetCommand = class extends BaseCommand {
|
|
8351
8384
|
_meta() {
|
|
8352
8385
|
return {
|
|
@@ -8362,14 +8395,14 @@ var HelloGreetCommand = class extends BaseCommand {
|
|
|
8362
8395
|
}
|
|
8363
8396
|
async _execute(ctx) {
|
|
8364
8397
|
const message = `Hello, ${readStringArg(ctx.args, 0) || "World"}!`;
|
|
8365
|
-
return
|
|
8398
|
+
return ok49({
|
|
8366
8399
|
message: ctx.options.uppercase ? message.toUpperCase() : message
|
|
8367
8400
|
});
|
|
8368
8401
|
}
|
|
8369
8402
|
};
|
|
8370
8403
|
|
|
8371
8404
|
// src/commands/hello/hello-info-command.ts
|
|
8372
|
-
import { ok as
|
|
8405
|
+
import { ok as ok50 } from "rockbed/error";
|
|
8373
8406
|
var HelloInfoCommand = class extends BaseCommand {
|
|
8374
8407
|
_meta() {
|
|
8375
8408
|
return {
|
|
@@ -8378,7 +8411,7 @@ var HelloInfoCommand = class extends BaseCommand {
|
|
|
8378
8411
|
};
|
|
8379
8412
|
}
|
|
8380
8413
|
async _execute(_ctx) {
|
|
8381
|
-
return
|
|
8414
|
+
return ok50({
|
|
8382
8415
|
version: "1.0.0",
|
|
8383
8416
|
description: "Hello \u547D\u4EE4\u7EC4 - \u7528\u4E8E\u6253\u62DB\u547C\u7684\u793A\u4F8B\u547D\u4EE4"
|
|
8384
8417
|
});
|
|
@@ -8402,14 +8435,14 @@ var HelloCommand = class extends BaseCommandGroup {
|
|
|
8402
8435
|
};
|
|
8403
8436
|
|
|
8404
8437
|
// src/modules/pippit/douyin-video/cn-douyin-video.ts
|
|
8405
|
-
import { err as err29, ok as
|
|
8438
|
+
import { err as err29, ok as ok52 } from "rockbed/error";
|
|
8406
8439
|
|
|
8407
8440
|
// src/modules/pippit/request-json.ts
|
|
8408
|
-
import { ok as
|
|
8441
|
+
import { ok as ok51 } from "rockbed/error";
|
|
8409
8442
|
async function readJsonBody(response, url, responseParseFailed) {
|
|
8410
8443
|
const bodyText = await response.text();
|
|
8411
8444
|
try {
|
|
8412
|
-
return
|
|
8445
|
+
return ok51(JSON.parse(bodyText));
|
|
8413
8446
|
} catch (error) {
|
|
8414
8447
|
const cause = error instanceof Error ? ` (${error.message})` : "";
|
|
8415
8448
|
return responseParseFailed(`\u63A5\u53E3\u8FD4\u56DE\u975E JSON \u54CD\u5E94: ${url}${cause}`);
|
|
@@ -8524,7 +8557,7 @@ async function fetchDouyinVideoCn(options, dependencies = {}) {
|
|
|
8524
8557
|
const response = responseResult.value;
|
|
8525
8558
|
const videoUrl = parseVideoUrl(response.data);
|
|
8526
8559
|
if (videoUrl) {
|
|
8527
|
-
return
|
|
8560
|
+
return ok52({ video_url: videoUrl });
|
|
8528
8561
|
}
|
|
8529
8562
|
if (response.ret !== void 0 && String(response.ret) !== "0") {
|
|
8530
8563
|
return err29(
|
|
@@ -8653,7 +8686,7 @@ var ShortcutCommand = class extends BaseCommandGroup {
|
|
|
8653
8686
|
};
|
|
8654
8687
|
|
|
8655
8688
|
// src/commands/tool/tool-draw-command.ts
|
|
8656
|
-
import { err as err30, ok as
|
|
8689
|
+
import { err as err30, ok as ok53 } from "rockbed/error";
|
|
8657
8690
|
var ToolDrawCommand = class extends BaseCommand {
|
|
8658
8691
|
_meta() {
|
|
8659
8692
|
return {
|
|
@@ -8690,7 +8723,7 @@ var ToolDrawCommand = class extends BaseCommand {
|
|
|
8690
8723
|
if (!distributionResult.ok) {
|
|
8691
8724
|
return distributionResult;
|
|
8692
8725
|
}
|
|
8693
|
-
return
|
|
8726
|
+
return ok53({
|
|
8694
8727
|
items: drawWeightedItems(countResult.value, distributionResult.value)
|
|
8695
8728
|
});
|
|
8696
8729
|
}
|
|
@@ -8700,7 +8733,7 @@ function parseCount(value) {
|
|
|
8700
8733
|
if (!Number.isInteger(count) || count <= 0) {
|
|
8701
8734
|
return err30(1, "\u62BD\u53D6\u4E2A\u6570\u5FC5\u987B\u662F\u6B63\u6574\u6570");
|
|
8702
8735
|
}
|
|
8703
|
-
return
|
|
8736
|
+
return ok53(count);
|
|
8704
8737
|
}
|
|
8705
8738
|
function stringifyDistributionArg(value) {
|
|
8706
8739
|
if (Array.isArray(value)) {
|
|
@@ -8748,7 +8781,7 @@ function parseJsonDistributionEntry(value, index) {
|
|
|
8748
8781
|
if (!weightResult.ok) {
|
|
8749
8782
|
return weightResult;
|
|
8750
8783
|
}
|
|
8751
|
-
return
|
|
8784
|
+
return ok53({ name: nameResult.value, weight: weightResult.value });
|
|
8752
8785
|
}
|
|
8753
8786
|
function getJsonWeightValue(record) {
|
|
8754
8787
|
if ("weight" in record) {
|
|
@@ -8797,7 +8830,7 @@ function parseEntryName(value, label) {
|
|
|
8797
8830
|
if (!name) {
|
|
8798
8831
|
return err30(1, `${label}\u7684\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A`);
|
|
8799
8832
|
}
|
|
8800
|
-
return
|
|
8833
|
+
return ok53(name);
|
|
8801
8834
|
}
|
|
8802
8835
|
function parseWeight(value, label) {
|
|
8803
8836
|
const rawValue = typeof value === "string" ? value.trim().replace(/[%%]$/, "") : value;
|
|
@@ -8805,13 +8838,13 @@ function parseWeight(value, label) {
|
|
|
8805
8838
|
if (!Number.isFinite(weight) || weight <= 0) {
|
|
8806
8839
|
return err30(1, `${label}\u7684\u6982\u7387\u5FC5\u987B\u662F\u5927\u4E8E 0 \u7684\u6570\u5B57`);
|
|
8807
8840
|
}
|
|
8808
|
-
return
|
|
8841
|
+
return ok53(weight);
|
|
8809
8842
|
}
|
|
8810
8843
|
function validateDistribution(entries) {
|
|
8811
8844
|
if (entries.length === 0) {
|
|
8812
8845
|
return err30(1, "\u6982\u7387\u5206\u5E03\u81F3\u5C11\u9700\u8981 1 \u9879");
|
|
8813
8846
|
}
|
|
8814
|
-
return
|
|
8847
|
+
return ok53(entries);
|
|
8815
8848
|
}
|
|
8816
8849
|
function drawWeightedItems(count, entries) {
|
|
8817
8850
|
const totalWeight = entries.reduce((sum, entry) => sum + entry.weight, 0);
|
|
@@ -8839,7 +8872,7 @@ function asRecord(value) {
|
|
|
8839
8872
|
}
|
|
8840
8873
|
|
|
8841
8874
|
// src/commands/tool/tool-get-config-command.ts
|
|
8842
|
-
import { err as err31, ok as
|
|
8875
|
+
import { err as err31, ok as ok54 } from "rockbed/error";
|
|
8843
8876
|
var ToolGetConfigCommand = class extends BaseCommand {
|
|
8844
8877
|
constructor(_settingsReader = new FileCrossAppSettingsReader()) {
|
|
8845
8878
|
super();
|
|
@@ -8902,9 +8935,9 @@ async function readConfigValue(settingsReader, key) {
|
|
|
8902
8935
|
}
|
|
8903
8936
|
const entry = snapshotResult.value.document.settings[key];
|
|
8904
8937
|
if (!entry) {
|
|
8905
|
-
return
|
|
8938
|
+
return ok54({ key, configured: false });
|
|
8906
8939
|
}
|
|
8907
|
-
return
|
|
8940
|
+
return ok54({
|
|
8908
8941
|
key,
|
|
8909
8942
|
configured: true,
|
|
8910
8943
|
value: entry.value,
|
|
@@ -8914,7 +8947,7 @@ async function readConfigValue(settingsReader, key) {
|
|
|
8914
8947
|
}
|
|
8915
8948
|
|
|
8916
8949
|
// src/commands/tool/tool-set-config-command.ts
|
|
8917
|
-
import { ok as
|
|
8950
|
+
import { ok as ok55 } from "rockbed/error";
|
|
8918
8951
|
var ToolSetConfigCommand = class extends BaseCommand {
|
|
8919
8952
|
constructor(_settingsWriter = new FileCrossAppSettingsWriter()) {
|
|
8920
8953
|
super();
|
|
@@ -8947,7 +8980,7 @@ var ToolSetConfigCommand = class extends BaseCommand {
|
|
|
8947
8980
|
}
|
|
8948
8981
|
const result = await this._settingsWriter.set(ctx.options);
|
|
8949
8982
|
if (!result.ok) return failFrom(result, { stage: "write_config" });
|
|
8950
|
-
return
|
|
8983
|
+
return ok55({ ...result.value, configured: true });
|
|
8951
8984
|
}
|
|
8952
8985
|
};
|
|
8953
8986
|
|
|
@@ -8971,7 +9004,7 @@ var ToolCommand = class extends BaseCommandGroup {
|
|
|
8971
9004
|
import { stat as stat5 } from "node:fs/promises";
|
|
8972
9005
|
import { resolve as resolve14 } from "node:path";
|
|
8973
9006
|
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
8974
|
-
import { err as err32, ok as
|
|
9007
|
+
import { err as err32, ok as ok56 } from "rockbed/error";
|
|
8975
9008
|
var DEFAULT_TRAEX_CWD = "/Users/bytedance/work/autogen";
|
|
8976
9009
|
var DEFAULT_TRAEX_MODEL = "gpt-5.6-sol";
|
|
8977
9010
|
var DEFAULT_TRAEX_REASONING = "xhigh";
|
|
@@ -8990,7 +9023,7 @@ async function launchTraex(input, launch = launchDefaultTraexWorker) {
|
|
|
8990
9023
|
}
|
|
8991
9024
|
const result = await launch({ ...input, cwd });
|
|
8992
9025
|
if (!result.ok) return result;
|
|
8993
|
-
return
|
|
9026
|
+
return ok56({ status: "launched", pid: result.value.pid, cwd, model: input.model, reasoning: input.reasoning, ...result.value.data });
|
|
8994
9027
|
}
|
|
8995
9028
|
function launchDefaultTraexWorker(input) {
|
|
8996
9029
|
const source = import.meta.url.endsWith(".ts");
|
|
@@ -9089,4 +9122,4 @@ export {
|
|
|
9089
9122
|
TraexCommand,
|
|
9090
9123
|
createRootCommands
|
|
9091
9124
|
};
|
|
9092
|
-
//# sourceMappingURL=chunk-
|
|
9125
|
+
//# sourceMappingURL=chunk-YZFLZ22B.js.map
|