maoda-commander-tt 0.0.57 → 0.0.59
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 +39 -58
- package/dist/chunk-ZLB4RQD2.js +21 -0
- package/dist/chunk-ZLB4RQD2.js.map +1 -0
- package/dist/{chunk-BVS6VOMU.js → chunk-ZPHRGP36.js} +160 -178
- package/dist/chunk-ZPHRGP36.js.map +1 -0
- package/dist/codex-worker-main.js +4 -1
- package/dist/codex-worker-main.js.map +1 -1
- package/dist/image-worker-main.js +4 -1
- package/dist/image-worker-main.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/main.js +2 -1
- package/dist/main.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-BVS6VOMU.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# tt-cli (`tt`)
|
|
2
2
|
|
|
3
|
-
一个 AI-native 的通用 CLI:默认调用方是 AI agent
|
|
4
|
-
|
|
3
|
+
一个 AI-native 的通用 CLI:默认调用方是 AI agent。JSON 模式的命令在 stdout 只输出
|
|
4
|
+
一行 envelope,诊断与进度走 stderr,失败退出码为 1;透传命令在 `--help` 中声明输出模式。
|
|
5
5
|
基于 [commander](https://github.com/tj/commander.js) 与 [rockbed](https://www.npmjs.com/package/rockbed)
|
|
6
6
|
(`Result` / `Disposable` / `Emitter`)。
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ JSON envelope,诊断与进度走 stderr,失败退出码为 1,`--help` 自
|
|
|
12
12
|
- **命令只返回 `Result<TData>`** — `ok(data)` / `fail(code, msg, { stage, nextCommand, ... })`,
|
|
13
13
|
基类负责输出与退出码;`passthrough` 模式用于透传 git、开发服务器等面向人的场景
|
|
14
14
|
- **清晰分层** — `core`(框架)→ `commands`(表现)→ `modules`(领域)→ `bedrock`(基础设施)
|
|
15
|
-
-
|
|
15
|
+
- **命令帮助** — `tt --help` 只列公开命令且不提示隐藏入口;显式 `tt -hh` 查看完整列表
|
|
16
16
|
- **Disposable / 事件** — 命令与服务继承 `Disposable`,提供 `onBeforeExecute` / `onAfterExecute`
|
|
17
17
|
- **TypeScript strict + node:test** — 全量 strict,测试与源文件同目录
|
|
18
18
|
|
|
@@ -94,6 +94,11 @@ pnpm build && pnpm test:dist
|
|
|
94
94
|
|
|
95
95
|
## 后台启动 Codex
|
|
96
96
|
|
|
97
|
+
`tt codex`、`tt ai run` 和本地图片 worker 共用可执行文件查找顺序:
|
|
98
|
+
`/Applications/ChatGPT.app/Contents/Resources/codex` →
|
|
99
|
+
`/Applications/Codex.app/Contents/Resources/codex` → PATH 中的 `codex`。
|
|
100
|
+
App 内路径不存在、不是文件或不可执行时跳到下一项;启动后的执行失败不重试下一项。
|
|
101
|
+
|
|
97
102
|
```bash
|
|
98
103
|
tt codex "我的具体 prompt"
|
|
99
104
|
tt codex -C /path/to/repo -m gpt-5.6-sol -r ultra "我的具体 prompt"
|
|
@@ -370,11 +375,8 @@ tt sc w2
|
|
|
370
375
|
`wait` 等待已有任务,`--output` 隐含 `--wait`。生成是否成功以 `data.state` 为准,
|
|
371
376
|
不能只看查询命令的 `code=0`;超时返回 `data.timedOut=true`,不会取消生成。
|
|
372
377
|
|
|
373
|
-
`
|
|
374
|
-
`
|
|
375
|
-
原来的本地 Codex 后台任务。两种实现都返回 `taskId`、当前 `state` 和
|
|
376
|
-
`nextCommand`。图片 ID 分别为 `xyq-image:<threadId>` 和 `local-image:<uuid>`;
|
|
377
|
-
后续 `status` / `wait` 根据 ID 前缀回到原 provider,不受配置后来切换影响。
|
|
378
|
+
提交返回 `taskId`、当前 `state`、`outputs` 和适用时的 `nextCommand`。
|
|
379
|
+
后续查询或等待直接复用返回的完整 `taskId`。
|
|
378
380
|
|
|
379
381
|
```bash
|
|
380
382
|
# 默认仅提交;后台继续生成
|
|
@@ -385,62 +387,38 @@ tt ai image --images ./composition.png --images ./palette.png \
|
|
|
385
387
|
--aspect-ratio 16:9 --model-id gpt_image_2 \
|
|
386
388
|
'使用图1的构图和图2的配色'
|
|
387
389
|
|
|
388
|
-
#
|
|
390
|
+
# 一次调用等待并保存;仅用 --wait 时返回产物链接或已有本地路径
|
|
389
391
|
tt ai image --output ./result.png '画一片绿色树叶'
|
|
390
392
|
|
|
391
393
|
# 查询、等待同一个任务,不会重新生成
|
|
392
|
-
tt ai image status --task-id '
|
|
393
|
-
tt ai image wait --task-id '
|
|
394
|
+
tt ai image status --task-id '<task-id>'
|
|
395
|
+
tt ai image wait --task-id '<task-id>' --timeout-seconds 600 --output ./result.png
|
|
394
396
|
|
|
395
397
|
# 没收到提交输出或丢失 ID 时,查看本机持久记录
|
|
396
398
|
tt ai image list
|
|
397
399
|
```
|
|
398
400
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
`
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
参考图的跨 provider 稳定契约是可重复的 `--images <path>`:本地实现把有序绝对路径
|
|
407
|
-
写入生成上下文,XYQ 实现先上传图片,再把对应 `pippitAssetId` 按顺序放进
|
|
408
|
-
`pippit_asset_ids` 槽位。因此切换 source 时调用命令和“图1/图2”提示词都不用变化。
|
|
409
|
-
旧的“直接把绝对路径写进提示词”仍只作为本地实现的兼容用法。
|
|
410
|
-
两种实现都提供 2K 图片,无需在 prompt 中声明分辨率。XYQ 默认模型为
|
|
411
|
-
`gpt_image_2_5_sunburst`(image2.5 Sunburst),可用 `--model-id` 切换模型。
|
|
412
|
-
`--effort` 的可选值和默认值按模型区分,非法组合会在上传参考图或提交任务前报错:
|
|
401
|
+
等待时间为 1–600 的整数秒,默认 360 秒。`outputs[]` 中每项含 `downloadUrl` 或
|
|
402
|
+
绝对 `localPath`,两者互斥;无可用产物时为 `[]`。使用 `--output` 后返回本地路径,
|
|
403
|
+
再次 `wait --output` 只保存已有产物。参考图使用可重复的 `--images <path>` 传入,
|
|
404
|
+
提示词按顺序以“图1、图2”引用。
|
|
405
|
+
|
|
406
|
+
支持模型参数的生成方式默认使用 `gpt_image_2_5_sunburst`;其他生成方式忽略
|
|
407
|
+
`--model-id` 和 `--effort`。已知模型的 effort 范围如下:
|
|
413
408
|
|
|
414
409
|
| `--model-id` | `--effort` 可选值 | 默认 effort |
|
|
415
410
|
| --- | --- | --- |
|
|
416
411
|
| `gpt_image_2`(image2) | `medium`、`high` | `high` |
|
|
417
412
|
| `gpt_image_2_5_sunburst`(image2.5 Sunburst,默认模型) | `high`、`xhigh`、`max` | `max` |
|
|
418
413
|
|
|
419
|
-
|
|
420
|
-
`
|
|
421
|
-
|
|
422
|
-
支持的比例为 `21:9`、`16:9`、`3:2`、
|
|
423
|
-
`4:3`、`1:1`、`3:4`、`2:3`、`9:16` 和 `auto`。XYQ 未设置时默认 `16:9`;
|
|
424
|
-
非 XYQ 未设置时不追加比例。修图时使用
|
|
425
|
-
`--aspect-ratio auto`,无需在 prompt 重复比例;需要枚举外的特殊比例时使用
|
|
426
|
-
`auto`,并在 prompt 中描述目标比例。非 XYQ 实现会把显式设置的具体比例加入生成
|
|
427
|
-
上下文,`auto` 不追加。
|
|
414
|
+
其他图片模型 ID 允许透传,其 effort 不校验,省略时沿用 `medium`。
|
|
415
|
+
支持的比例为 `21:9`、`16:9`、`3:2`、`4:3`、`1:1`、`3:4`、`2:3`、`9:16` 和 `auto`。
|
|
416
|
+
省略时由生成方式决定默认比例;需要固定比例时显式传入,自动选择比例用 `auto`。
|
|
428
417
|
`--quiet` 关闭提交进度;stdout 始终只有一个最终 JSON envelope。
|
|
429
418
|
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
这些记录不会随 `ai video cache clear` 清理。`ai image list` 只枚举本地记录;XYQ
|
|
434
|
-
任务可用提交时返回的 taskId 跨进程查询。
|
|
435
|
-
|
|
436
|
-
后台任务可以在提交命令退出后继续执行;机器重启或 worker 失联后,若无完整归档
|
|
437
|
-
图片,会报告 `state=unknown`,不会隐式 `codex exec resume` 或重新生成。
|
|
438
|
-
仅存在临时文件不代表完成。新命令不是跨机器任务服务,也不保证生图工具中断后
|
|
439
|
-
能接回同一次远端生成。Codex 会话会保留,便于后续诊断。
|
|
440
|
-
|
|
441
|
-
迁移旧调用:`tt ai image '...'` 若需要直接拿文件,改为
|
|
442
|
-
`tt ai image --output ./result.png '...'`,读取 `data.outputs[0].localPath`,不再读取旧 `imagePath`。
|
|
443
|
-
外部 `generate` 技能中依赖同步行为的命令也需在升级 tt 时加 `--wait`。
|
|
419
|
+
`ai image list` 只返回本机保存的图片任务记录,不包含全部远端任务,调用方应保存
|
|
420
|
+
提交返回的 ID。任务可在提交命令退出后继续;重启或中断后的 `unknown` 表示无法确认
|
|
421
|
+
结果,应先查询原任务和产物。`status` / `wait` 不会重新生成。
|
|
444
422
|
|
|
445
423
|
## AI 音频生成
|
|
446
424
|
|
|
@@ -478,10 +456,15 @@ tt ai audio wait --task-id 'xyq:<threadId>' --timeout-seconds 600 --output ./res
|
|
|
478
456
|
|
|
479
457
|
## AI 视频生成
|
|
480
458
|
|
|
481
|
-
`ai video`
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
`
|
|
459
|
+
`ai video` 完成素材上传与任务提交后返回 `taskId`,生成异步进行(通常约 5 分钟)。
|
|
460
|
+
查询和等待复用返回的完整任务 ID。
|
|
461
|
+
|
|
462
|
+
`--model-id` 仅接受 `seedance2.0`、`seedance2.0_fast`、`seedance2.5`、`wan3.0`、
|
|
463
|
+
`minimax-h3`,默认 `seedance2.5`;未知值在提交前报输入错误。
|
|
464
|
+
`--duration-seconds` 必填,为 4–30 的整数;`--output-count` 接受正整数,当前实际生成
|
|
465
|
+
1 个。`--resolution` 接受 `480p`、`720p`、`1080p`、`2k`、`4k`,默认 `720p`;
|
|
466
|
+
除 `minimax-h3` 外,`2k/4k` 会调整为 `1080p`。`minimax-h3` 的输出分辨率不由此参数
|
|
467
|
+
控制,实际尺寸以产物为准。参数调整在 `appliedParameters` 和 `adjustments` 中返回。
|
|
485
468
|
|
|
486
469
|
```bash
|
|
487
470
|
# 提交并立即返回 taskId 与 nextCommand
|
|
@@ -491,18 +474,16 @@ tt ai video --duration-seconds 8 --images ./ref.png '图1 中的角色转身微
|
|
|
491
474
|
tt ai video --duration-seconds 8 --output ./result.mp4 '海边日出,慢镜头'
|
|
492
475
|
|
|
493
476
|
# 用 taskId 查询/等待既有任务
|
|
494
|
-
tt ai video status --task-id '<
|
|
495
|
-
tt ai video wait --task-id '<
|
|
477
|
+
tt ai video status --task-id '<task-id>'
|
|
478
|
+
tt ai video wait --task-id '<task-id>' --timeout-seconds 600 --output ./result.mp4
|
|
496
479
|
```
|
|
497
480
|
|
|
498
481
|
等待超时不是失败:`wait` 返回 `timedOut: true` 与当前 `state`,可用同一 `taskId`
|
|
499
482
|
继续等待;`ai video --wait` 和 `--output` 同样在 `data` 中返回当前状态与 `timedOut`。
|
|
500
483
|
查询或下载异常时,`error` 中保留 `taskId`、`recoverable` 和恢复命令。
|
|
501
484
|
|
|
502
|
-
保存 `taskId`
|
|
503
|
-
|
|
504
|
-
保留期限及产物链接有效期由后端决定。此 ID 定位的是 thread;当前查询未指定 runId,
|
|
505
|
-
会取后端返回列表的最后一个 run。tt 每次提交都会新建 thread,因此普通提交对应独立任务。
|
|
485
|
+
保存 `taskId` 后可跨进程查询;仍需有效登录态及任务访问权限,任务和产物链接的
|
|
486
|
+
保留期限由服务端决定。
|
|
506
487
|
|
|
507
488
|
## 联网搜索
|
|
508
489
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// src/modules/codex/resolve-codex-command.ts
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
function resolveCodexCommand() {
|
|
4
|
+
for (const command of [
|
|
5
|
+
"/Applications/ChatGPT.app/Contents/Resources/codex",
|
|
6
|
+
"/Applications/Codex.app/Contents/Resources/codex"
|
|
7
|
+
]) {
|
|
8
|
+
try {
|
|
9
|
+
if (!fs.statSync(command).isFile()) continue;
|
|
10
|
+
fs.accessSync(command, fs.constants.X_OK);
|
|
11
|
+
return command;
|
|
12
|
+
} catch {
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return "codex";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export {
|
|
19
|
+
resolveCodexCommand
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=chunk-ZLB4RQD2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/modules/codex/resolve-codex-command.ts"],"sourcesContent":["import fs from \"node:fs\";\n\n/** Prefer an executable bundled with the desktop apps, then let PATH resolve codex. */\nexport function resolveCodexCommand(): string {\n for (const command of [\n \"/Applications/ChatGPT.app/Contents/Resources/codex\",\n \"/Applications/Codex.app/Contents/Resources/codex\",\n ]) {\n try {\n if (!fs.statSync(command).isFile()) continue;\n fs.accessSync(command, fs.constants.X_OK);\n return command;\n } catch { /* Missing or non-executable bundles fall through to the next candidate. */ }\n }\n return \"codex\";\n}\n"],"mappings":";AAAA,OAAO,QAAQ;AAGR,SAAS,sBAA8B;AAC5C,aAAW,WAAW;AAAA,IACpB;AAAA,IACA;AAAA,EACF,GAAG;AACD,QAAI;AACF,UAAI,CAAC,GAAG,SAAS,OAAO,EAAE,OAAO,EAAG;AACpC,SAAG,WAAW,SAAS,GAAG,UAAU,IAAI;AACxC,aAAO;AAAA,IACT,QAAQ;AAAA,IAA8E;AAAA,EACxF;AACA,SAAO;AACT;","names":[]}
|