maoda-commander-tt 0.0.51 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/{chunk-EQ6SKTNQ.js → chunk-ED7FLAXM.js} +26 -14
- package/dist/chunk-ED7FLAXM.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/main.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-EQ6SKTNQ.js.map +0 -1
package/README.md
CHANGED
|
@@ -331,7 +331,7 @@ tt ai image '画一片绿色树叶'
|
|
|
331
331
|
|
|
332
332
|
# 统一参考图入口;提示词按传入顺序使用图1、图2
|
|
333
333
|
tt ai image --images ./composition.png --images ./palette.png \
|
|
334
|
-
--aspect-ratio 16:9 --
|
|
334
|
+
--aspect-ratio 16:9 --model-id gpt_image_2 \
|
|
335
335
|
'使用图1的构图和图2的配色'
|
|
336
336
|
|
|
337
337
|
# 一次调用等待并保存;也可仅用 --wait 返回归档图片路径
|
|
@@ -355,6 +355,13 @@ XYQ 的 `status` / `--wait` 会在 `outputs[]` 返回
|
|
|
355
355
|
写入生成上下文,XYQ 实现先上传图片,再把对应 `pippitAssetId` 按顺序放进
|
|
356
356
|
`pippit_asset_ids` 槽位。因此切换 source 时调用命令和“图1/图2”提示词都不用变化。
|
|
357
357
|
旧的“直接把绝对路径写进提示词”仍只作为本地实现的兼容用法。
|
|
358
|
+
两种实现都提供 2K 图片,无需在 prompt 中声明分辨率。XYQ 推理强度默认
|
|
359
|
+
`medium`,通常无需设置 `--effort`。支持的比例为 `21:9`、`16:9`、`3:2`、
|
|
360
|
+
`4:3`、`1:1`、`3:4`、`2:3`、`9:16` 和 `auto`。XYQ 未设置时默认 `16:9`;
|
|
361
|
+
非 XYQ 未设置时不追加比例。修图时使用
|
|
362
|
+
`--aspect-ratio auto`,无需在 prompt 重复比例;需要枚举外的特殊比例时使用
|
|
363
|
+
`auto`,并在 prompt 中描述目标比例。非 XYQ 实现会把显式设置的具体比例加入生成
|
|
364
|
+
上下文,`auto` 不追加。
|
|
358
365
|
`--quiet` 关闭提交进度;stdout 始终只有一个最终 JSON envelope。
|
|
359
366
|
|
|
360
367
|
本地任务记录默认位于 `~/.tt/ai/image-tasks`,可用 `TT_AI_IMAGE_TASKS_DIR` 指定持久目录。
|
|
@@ -369,7 +376,7 @@ XYQ 的 `status` / `--wait` 会在 `outputs[]` 返回
|
|
|
369
376
|
能接回同一次远端生成。Codex 会话会保留,便于后续诊断。
|
|
370
377
|
|
|
371
378
|
迁移旧调用:`tt ai image '...'` 若需要直接拿文件,改为
|
|
372
|
-
`tt ai image --
|
|
379
|
+
`tt ai image --output ./result.png '...'`,读取 `data.outputs[0].localPath`,不再读取旧 `imagePath`。
|
|
373
380
|
外部 `generate` 技能中依赖同步行为的命令也需在升级 tt 时加 `--wait`。
|
|
374
381
|
|
|
375
382
|
## AI 音频生成
|
|
@@ -2094,8 +2094,8 @@ function normalizeImageInput(input) {
|
|
|
2094
2094
|
imageCount,
|
|
2095
2095
|
model: normalizeString2(input.model) ?? "gpt_image_2",
|
|
2096
2096
|
aspectRatio: normalizeString2(input.aspectRatio) ?? "16:9",
|
|
2097
|
-
resolution:
|
|
2098
|
-
effort: normalizeString2(input.effort) ?? "
|
|
2097
|
+
resolution: "2K",
|
|
2098
|
+
effort: normalizeString2(input.effort) ?? "medium"
|
|
2099
2099
|
});
|
|
2100
2100
|
}
|
|
2101
2101
|
function buildSubmitImageBody(input) {
|
|
@@ -3635,10 +3635,7 @@ function buildLocalImagePrompt(input) {
|
|
|
3635
3635
|
(filePath, index) => `\u56FE${index + 1}: ${JSON.stringify(path7.resolve(filePath))}`
|
|
3636
3636
|
);
|
|
3637
3637
|
const constraints = [
|
|
3638
|
-
input.aspectRatio ? `\u5BBD\u9AD8\u6BD4: ${input.aspectRatio}` : void 0
|
|
3639
|
-
input.resolution ? `\u5206\u8FA8\u7387: ${input.resolution}` : void 0,
|
|
3640
|
-
input.modelId ? `\u4F18\u5148\u6A21\u578B: ${input.modelId}` : void 0,
|
|
3641
|
-
input.effort ? `\u751F\u6210\u5F3A\u5EA6: ${input.effort}` : void 0
|
|
3638
|
+
input.aspectRatio && input.aspectRatio !== "auto" ? `\u5BBD\u9AD8\u6BD4: ${input.aspectRatio}` : void 0
|
|
3642
3639
|
].filter((value) => value !== void 0);
|
|
3643
3640
|
return [
|
|
3644
3641
|
input.prompt,
|
|
@@ -3688,7 +3685,6 @@ var XyqImageTaskService = class {
|
|
|
3688
3685
|
imageCount: 1,
|
|
3689
3686
|
model: request.modelId,
|
|
3690
3687
|
aspectRatio: request.aspectRatio,
|
|
3691
|
-
resolution: request.resolution,
|
|
3692
3688
|
effort: request.effort
|
|
3693
3689
|
});
|
|
3694
3690
|
if (!submit.ok) return submit;
|
|
@@ -3999,6 +3995,17 @@ var AiImageWaitCommand = class extends BaseCommand {
|
|
|
3999
3995
|
};
|
|
4000
3996
|
|
|
4001
3997
|
// src/commands/ai/ai-image-command.ts
|
|
3998
|
+
var IMAGE_ASPECT_RATIOS = [
|
|
3999
|
+
"21:9",
|
|
4000
|
+
"16:9",
|
|
4001
|
+
"3:2",
|
|
4002
|
+
"4:3",
|
|
4003
|
+
"1:1",
|
|
4004
|
+
"3:4",
|
|
4005
|
+
"2:3",
|
|
4006
|
+
"9:16",
|
|
4007
|
+
"auto"
|
|
4008
|
+
];
|
|
4002
4009
|
var AiImageCommand = class extends BaseCommandGroup {
|
|
4003
4010
|
constructor(_service = createDefaultImageTaskService()) {
|
|
4004
4011
|
super();
|
|
@@ -4018,10 +4025,11 @@ var AiImageCommand = class extends BaseCommandGroup {
|
|
|
4018
4025
|
cmd.addOption(
|
|
4019
4026
|
new Option6("--images <path>", "\u53C2\u8003\u56FE\u7247\u8DEF\u5F84\uFF0C\u53EF\u91CD\u590D\uFF1B\u63D0\u793A\u8BCD\u4F7F\u7528\u201C\u56FE1\u3001\u56FE2\u201D\u6307\u4EE3").argParser(appendImagePath).default([])
|
|
4020
4027
|
);
|
|
4021
|
-
cmd.addOption(
|
|
4022
|
-
|
|
4028
|
+
cmd.addOption(
|
|
4029
|
+
new Option6("--aspect-ratio <ratio>", `\u56FE\u7247\u5BBD\u9AD8\u6BD4\uFF0C\u53EF\u9009 ${IMAGE_ASPECT_RATIOS.join("\u3001")}\uFF1BXYQ \u9ED8\u8BA4 16:9`)
|
|
4030
|
+
);
|
|
4023
4031
|
cmd.addOption(new Option6("--model-id <model-id>", "\u56FE\u7247\u6A21\u578B\uFF1BXYQ \u9ED8\u8BA4 gpt_image_2"));
|
|
4024
|
-
cmd.addOption(new Option6("--effort <effort>", "\
|
|
4032
|
+
cmd.addOption(new Option6("--effort <effort>", "XYQ \u63A8\u7406\u5F3A\u5EA6\uFF0C\u9ED8\u8BA4 medium\uFF0C\u901A\u5E38\u65E0\u9700\u8BBE\u7F6E"));
|
|
4025
4033
|
cmd.addOption(new Option6("--wait", "\u63D0\u4EA4\u540E\u7EE7\u7EED\u7B49\u5F85\u56FE\u7247\u751F\u6210\u5B8C\u6210").default(false));
|
|
4026
4034
|
cmd.addOption(new Option6("--quiet", "\u5173\u95ED\u63D0\u4EA4\u9636\u6BB5\u7684 stderr \u8FDB\u5EA6\u4E0E\u5FC3\u8DF3").default(false));
|
|
4027
4035
|
cmd.addOption(new Option6("--timeout-seconds <seconds>", `\u6700\u591A\u7B49\u5F85\u79D2\u6570\uFF0C\u8303\u56F4 1-${MAX_IMAGE_WAIT_SECONDS}`).argParser(Number).default(DEFAULT_IMAGE_WAIT_SECONDS));
|
|
@@ -4033,18 +4041,20 @@ var AiImageCommand = class extends BaseCommandGroup {
|
|
|
4033
4041
|
this._addSubcommand(new AiImageListCommand(this._service));
|
|
4034
4042
|
}
|
|
4035
4043
|
_helpExample() {
|
|
4036
|
-
return "tt ai image '\u753B\u4E00\u7247\u7EFF\u8272\u6811\u53F6'\n tt ai image --images ./ref.png --output ./result.png '\
|
|
4044
|
+
return "tt ai image '\u753B\u4E00\u7247\u7EFF\u8272\u6811\u53F6'\n tt ai image --images ./ref.png --aspect-ratio auto --output ./result.png '\u628A\u56FE1\u4E2D\u7684\u5929\u7A7A\u6539\u4E3A\u665A\u971E'\n tt ai image wait --task-id '<task-id>' --output ./result.png";
|
|
4037
4045
|
}
|
|
4038
4046
|
_agentContract() {
|
|
4039
4047
|
return [
|
|
4040
4048
|
"data \u5FC5\u9009\u5B57\u6BB5: taskId:string\u3001state:string\u3001outputs:Array\uFF1B\u53EF\u9009\u5B57\u6BB5\uFF08?\uFF09: source?:local|xyq\u3001createdAt?:string\u3001updatedAt?:string\u3001retryAfterSeconds?:number\u3001timedOut?:true\u3001failReason?:string\u3001nextCommand?:string\u3002",
|
|
4041
4049
|
"imagegen.source \u7CBE\u786E\u4E3A xyq\uFF08\u5FFD\u7565\u5927\u5C0F\u5199\u4E0E\u9996\u5C3E\u7A7A\u683C\uFF09\u65F6\u8D70 XYQ HTTP\uFF1B\u672A\u914D\u7F6E\u3001\u5176\u4ED6\u503C\u6216\u8BBE\u7F6E\u8BFB\u53D6\u5931\u8D25\u65F6\u4FDD\u6301\u672C\u5730\u5B9E\u73B0\u3002taskId \u4E3A local-image:<uuid> \u6216 xyq-image:<threadId>\u3002",
|
|
4042
4050
|
"\u53C2\u8003\u56FE\u7EDF\u4E00\u901A\u8FC7\u53EF\u91CD\u590D --images \u4F20\u5165\uFF0C\u63D0\u793A\u8BCD\u4EE5\u56FE1\u3001\u56FE2\u6307\u4EE3\uFF1BXYQ \u4F1A\u5148\u4E0A\u4F20\u518D\u5199\u5165 pippit_asset_ids\uFF0C\u672C\u5730\u5B9E\u73B0\u4F1A\u628A\u6709\u5E8F\u7EDD\u5BF9\u8DEF\u5F84\u52A0\u5165\u751F\u6210\u4E0A\u4E0B\u6587\u3002",
|
|
4051
|
+
"\u4E24\u79CD\u5B9E\u73B0\u90FD\u63D0\u4F9B 2K \u56FE\u7247\uFF0C\u65E0\u9700\u5728 prompt \u4E2D\u58F0\u660E\u5206\u8FA8\u7387\u3002--effort \u4EC5\u7528\u4E8E XYQ\uFF0C\u9ED8\u8BA4 medium\uFF0C\u901A\u5E38\u65E0\u9700\u8BBE\u7F6E\u3002",
|
|
4052
|
+
`--aspect-ratio \u652F\u6301 ${IMAGE_ASPECT_RATIOS.join("\u3001")}\uFF1BXYQ \u672A\u8BBE\u7F6E\u65F6\u9ED8\u8BA4 16:9\uFF0C\u975E XYQ \u672A\u8BBE\u7F6E\u65F6\u4E0D\u8FFD\u52A0\u6BD4\u4F8B\u3002\u4FEE\u56FE\u65F6\u4F7F\u7528 auto\uFF0C\u65E0\u9700\u5728 prompt \u91CD\u590D\u6BD4\u4F8B\uFF1B\u9700\u8981\u679A\u4E3E\u5916\u7684\u7279\u6B8A\u6BD4\u4F8B\u65F6\u4F7F\u7528 auto\uFF0C\u5E76\u5728 prompt \u4E2D\u63CF\u8FF0\u76EE\u6807\u6BD4\u4F8B\u3002\u975E XYQ \u5B9E\u73B0\u4F1A\u628A\u663E\u5F0F\u8BBE\u7F6E\u7684\u5177\u4F53\u6BD4\u4F8B\u52A0\u5165\u672C\u5730\u751F\u6210\u4E0A\u4E0B\u6587\uFF0Cauto \u4E0D\u8FFD\u52A0\u3002`,
|
|
4043
4053
|
"state \u679A\u4E3E: submitted/working/completed/failed/unknown\u3002code=0 \u53EA\u8868\u793A\u547D\u4EE4\u6210\u529F\u8FD4\u56DE\u7ED3\u679C\uFF0C\u751F\u6210\u662F\u5426\u6210\u529F\u987B\u68C0\u67E5 state\u3002",
|
|
4044
4054
|
"outputs \u65E0\u53EF\u7528\u56FE\u7247\u65F6\u4E3A []\uFF1B\u672C\u5730\u5B8C\u6210\u65F6 localPath \u662F\u56FE\u7247\u7EDD\u5BF9\u8DEF\u5F84\uFF1BXYQ \u67E5\u8BE2\u53EF\u8FD4\u56DE remoteUrl\u3001assetId\u3001pippitAssetId\u3001width\u3001height\u3001name\uFF0C\u53EA\u6709 --output \u4F1A\u4E0B\u8F7D\u8FDC\u7AEF\u4EA7\u7269\u5E76\u8865\u5145 localPath\u3002",
|
|
4045
4055
|
"createdAt/updatedAt \u662F\u4EFB\u52A1\u8BB0\u5F55\u521B\u5EFA/\u6700\u540E\u5199\u5165\u65F6\u95F4\uFF08ISO 8601 UTC\uFF09\uFF0C\u4E0D\u662F\u672C\u6B21\u67E5\u8BE2\u65F6\u95F4\uFF1Bsubmitted/working \u53EF\u8FD4\u56DE retryAfterSeconds\uFF0C\u5355\u4F4D\u79D2\uFF1Bfailed/unknown \u53EF\u8FD4\u56DE failReason\u3002",
|
|
4046
4056
|
"nextCommand \u5728 submitted/working \u65F6\u4E3A wait \u547D\u4EE4\uFF08\u4FDD\u7559\u672C\u6B21 --output\uFF09\uFF0Cunknown \u65F6\u4E3A status \u547D\u4EE4\uFF0Ccompleted/failed \u65F6\u7701\u7565\u3002",
|
|
4047
|
-
"\u9ED8\u8BA4\
|
|
4057
|
+
"\u9ED8\u8BA4\u5728\u5F53\u524D provider \u63A5\u53D7\u4EFB\u52A1\u540E\u8FD4\u56DE\uFF1B--wait \u6216 --output \u7B49\u5F85\u540C\u4E00\u4EFB\u52A1\uFF0C\u4EC5\u7B49\u5F85\u8D85\u65F6\u65F6\u8FD4\u56DE timedOut=true\uFF0C\u4EFB\u52A1\u7EE7\u7EED\u8FD0\u884C\u3002",
|
|
4048
4058
|
'data \u793A\u4F8B\uFF08\u7701\u7565\u90E8\u5206\u53EF\u9009\u5B57\u6BB5\uFF09: {"taskId":"local-image:00000000-0000-4000-8000-000000000001","state":"working","outputs":[],"retryAfterSeconds":1,"nextCommand":"tt ai image wait --task-id local-image:00000000-0000-4000-8000-000000000001"}',
|
|
4049
4059
|
'\u547D\u4EE4\u5931\u8D25\u65F6 error.stage \u6807\u8BB0 input/submit/wait\uFF1B\u672C\u5730\u63D0\u4EA4\u5931\u8D25\u7ED9\u51FA nextCommand="tt ai image list"\uFF0CXYQ \u63D0\u4EA4\u5931\u8D25\u4E0D\u4F2A\u9020\u53EF\u6062\u590D taskId\uFF1B\u7B49\u5F85\u6216\u4FDD\u5B58\u5931\u8D25\u9644 taskId\u3001recoverable:true\u3001\u4FDD\u7559 --output \u7684 nextCommand\u3002',
|
|
4050
4060
|
"status/wait \u6309 taskId \u524D\u7F00\u81EA\u52A8\u9009\u62E9\u539F provider\uFF0C\u4E0D\u53D7\u5F53\u524D imagegen.source \u5F71\u54CD\uFF1Blist \u53EA\u5217\u672C\u673A local-image \u8BB0\u5F55\u3002",
|
|
@@ -4055,6 +4065,9 @@ var AiImageCommand = class extends BaseCommandGroup {
|
|
|
4055
4065
|
const prompt = joinTextArgs(ctx.args);
|
|
4056
4066
|
if (!prompt) return fail(1, "\u8BF7\u8F93\u5165\u751F\u56FE\u63D0\u793A\u8BCD", { stage: "input" });
|
|
4057
4067
|
const options = ctx.options;
|
|
4068
|
+
if (options.aspectRatio && !IMAGE_ASPECT_RATIOS.includes(options.aspectRatio)) {
|
|
4069
|
+
return fail(1, `--aspect-ratio \u5FC5\u987B\u662F ${IMAGE_ASPECT_RATIOS.join("\u3001")} \u4E4B\u4E00`, { stage: "input" });
|
|
4070
|
+
}
|
|
4058
4071
|
const validation = validateImageWaitOptions(options.timeoutSeconds, options.output);
|
|
4059
4072
|
if (!validation.ok) return validation;
|
|
4060
4073
|
const outputPath = options.output === void 0 ? void 0 : path10.resolve(options.output.trim());
|
|
@@ -4071,7 +4084,6 @@ var AiImageCommand = class extends BaseCommandGroup {
|
|
|
4071
4084
|
prompt,
|
|
4072
4085
|
imagePaths: options.images,
|
|
4073
4086
|
aspectRatio: options.aspectRatio,
|
|
4074
|
-
resolution: options.resolution,
|
|
4075
4087
|
modelId: options.modelId,
|
|
4076
4088
|
effort: options.effort
|
|
4077
4089
|
});
|
|
@@ -8621,4 +8633,4 @@ export {
|
|
|
8621
8633
|
ToolCommand,
|
|
8622
8634
|
createRootCommands
|
|
8623
8635
|
};
|
|
8624
|
-
//# sourceMappingURL=chunk-
|
|
8636
|
+
//# sourceMappingURL=chunk-ED7FLAXM.js.map
|