@glbgpt/cli 0.1.0-test.1
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 +111 -0
- package/dist/src/auth/authClient.d.ts +32 -0
- package/dist/src/auth/authClient.js +88 -0
- package/dist/src/auth/authClient.js.map +1 -0
- package/dist/src/auth/credentialStore.d.ts +22 -0
- package/dist/src/auth/credentialStore.js +51 -0
- package/dist/src/auth/credentialStore.js.map +1 -0
- package/dist/src/auth/loginFlow.d.ts +30 -0
- package/dist/src/auth/loginFlow.js +43 -0
- package/dist/src/auth/loginFlow.js.map +1 -0
- package/dist/src/auth/loopbackServer.d.ts +41 -0
- package/dist/src/auth/loopbackServer.js +141 -0
- package/dist/src/auth/loopbackServer.js.map +1 -0
- package/dist/src/auth/token.d.ts +8 -0
- package/dist/src/auth/token.js +15 -0
- package/dist/src/auth/token.js.map +1 -0
- package/dist/src/commands/accountCommand.d.ts +2 -0
- package/dist/src/commands/accountCommand.js +56 -0
- package/dist/src/commands/accountCommand.js.map +1 -0
- package/dist/src/commands/configCommand.d.ts +4 -0
- package/dist/src/commands/configCommand.js +53 -0
- package/dist/src/commands/configCommand.js.map +1 -0
- package/dist/src/commands/execCommand.d.ts +32 -0
- package/dist/src/commands/execCommand.js +122 -0
- package/dist/src/commands/execCommand.js.map +1 -0
- package/dist/src/commands/loginCommand.d.ts +11 -0
- package/dist/src/commands/loginCommand.js +96 -0
- package/dist/src/commands/loginCommand.js.map +1 -0
- package/dist/src/commands/mediaCommand.d.ts +41 -0
- package/dist/src/commands/mediaCommand.js +277 -0
- package/dist/src/commands/mediaCommand.js.map +1 -0
- package/dist/src/config/configFile.d.ts +30 -0
- package/dist/src/config/configFile.js +54 -0
- package/dist/src/config/configFile.js.map +1 -0
- package/dist/src/config/env.d.ts +6 -0
- package/dist/src/config/env.js +24 -0
- package/dist/src/config/env.js.map +1 -0
- package/dist/src/config/paths.d.ts +6 -0
- package/dist/src/config/paths.js +16 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/core/catalog.d.ts +49 -0
- package/dist/src/core/catalog.js +96 -0
- package/dist/src/core/catalog.js.map +1 -0
- package/dist/src/core/httpChatBackend.d.ts +31 -0
- package/dist/src/core/httpChatBackend.js +134 -0
- package/dist/src/core/httpChatBackend.js.map +1 -0
- package/dist/src/core/id.d.ts +2 -0
- package/dist/src/core/id.js +5 -0
- package/dist/src/core/id.js.map +1 -0
- package/dist/src/core/runChat.d.ts +28 -0
- package/dist/src/core/runChat.js +49 -0
- package/dist/src/core/runChat.js.map +1 -0
- package/dist/src/core/session.d.ts +44 -0
- package/dist/src/core/session.js +70 -0
- package/dist/src/core/session.js.map +1 -0
- package/dist/src/core/sessionStore.d.ts +39 -0
- package/dist/src/core/sessionStore.js +106 -0
- package/dist/src/core/sessionStore.js.map +1 -0
- package/dist/src/core/toolRegistry.d.ts +19 -0
- package/dist/src/core/toolRegistry.js +53 -0
- package/dist/src/core/toolRegistry.js.map +1 -0
- package/dist/src/core/tools/generateImage.d.ts +10 -0
- package/dist/src/core/tools/generateImage.js +34 -0
- package/dist/src/core/tools/generateImage.js.map +1 -0
- package/dist/src/core/turnLoop.d.ts +31 -0
- package/dist/src/core/turnLoop.js +155 -0
- package/dist/src/core/turnLoop.js.map +1 -0
- package/dist/src/core/types.d.ts +137 -0
- package/dist/src/core/types.js +9 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/exec/input.d.ts +35 -0
- package/dist/src/exec/input.js +85 -0
- package/dist/src/exec/input.js.map +1 -0
- package/dist/src/exec/output.d.ts +39 -0
- package/dist/src/exec/output.js +84 -0
- package/dist/src/exec/output.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +253 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/server.d.ts +38 -0
- package/dist/src/mcp/server.js +99 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/media/aiApiClient.d.ts +53 -0
- package/dist/src/media/aiApiClient.js +97 -0
- package/dist/src/media/aiApiClient.js.map +1 -0
- package/dist/src/media/errors.d.ts +7 -0
- package/dist/src/media/errors.js +70 -0
- package/dist/src/media/errors.js.map +1 -0
- package/dist/src/media/executor.d.ts +50 -0
- package/dist/src/media/executor.js +55 -0
- package/dist/src/media/executor.js.map +1 -0
- package/dist/src/media/generateImageTool.d.ts +19 -0
- package/dist/src/media/generateImageTool.js +120 -0
- package/dist/src/media/generateImageTool.js.map +1 -0
- package/dist/src/media/manifest.d.ts +23 -0
- package/dist/src/media/manifest.js +558 -0
- package/dist/src/media/manifest.js.map +1 -0
- package/dist/src/media/resolution.d.ts +13 -0
- package/dist/src/media/resolution.js +42 -0
- package/dist/src/media/resolution.js.map +1 -0
- package/dist/src/media/taskLedger.d.ts +17 -0
- package/dist/src/media/taskLedger.js +44 -0
- package/dist/src/media/taskLedger.js.map +1 -0
- package/dist/src/media/taskManager.d.ts +52 -0
- package/dist/src/media/taskManager.js +130 -0
- package/dist/src/media/taskManager.js.map +1 -0
- package/dist/src/media/types.d.ts +80 -0
- package/dist/src/media/types.js +15 -0
- package/dist/src/media/types.js.map +1 -0
- package/dist/src/tui/App.d.ts +34 -0
- package/dist/src/tui/App.js +540 -0
- package/dist/src/tui/App.js.map +1 -0
- package/dist/src/tui/MultilineInput.d.ts +36 -0
- package/dist/src/tui/MultilineInput.js +221 -0
- package/dist/src/tui/MultilineInput.js.map +1 -0
- package/dist/src/tui/atPopup.d.ts +21 -0
- package/dist/src/tui/atPopup.js +55 -0
- package/dist/src/tui/atPopup.js.map +1 -0
- package/dist/src/tui/attachments.d.ts +24 -0
- package/dist/src/tui/attachments.js +91 -0
- package/dist/src/tui/attachments.js.map +1 -0
- package/dist/src/tui/branding.d.ts +22 -0
- package/dist/src/tui/branding.js +119 -0
- package/dist/src/tui/branding.js.map +1 -0
- package/dist/src/tui/chatController.d.ts +188 -0
- package/dist/src/tui/chatController.js +614 -0
- package/dist/src/tui/chatController.js.map +1 -0
- package/dist/src/tui/commands.d.ts +13 -0
- package/dist/src/tui/commands.js +22 -0
- package/dist/src/tui/commands.js.map +1 -0
- package/dist/src/tui/confirmationBridge.d.ts +23 -0
- package/dist/src/tui/confirmationBridge.js +47 -0
- package/dist/src/tui/confirmationBridge.js.map +1 -0
- package/dist/src/tui/inputHistory.d.ts +7 -0
- package/dist/src/tui/inputHistory.js +64 -0
- package/dist/src/tui/inputHistory.js.map +1 -0
- package/dist/src/tui/markdown.d.ts +1 -0
- package/dist/src/tui/markdown.js +143 -0
- package/dist/src/tui/markdown.js.map +1 -0
- package/dist/src/tui/models.d.ts +30 -0
- package/dist/src/tui/models.js +54 -0
- package/dist/src/tui/models.js.map +1 -0
- package/dist/src/tui/run.d.ts +29 -0
- package/dist/src/tui/run.js +212 -0
- package/dist/src/tui/run.js.map +1 -0
- package/dist/src/tui/slashMedia.d.ts +36 -0
- package/dist/src/tui/slashMedia.js +86 -0
- package/dist/src/tui/slashMedia.js.map +1 -0
- package/dist/src/tui/visualLines.d.ts +38 -0
- package/dist/src/tui/visualLines.js +110 -0
- package/dist/src/tui/visualLines.js.map +1 -0
- package/dist/src/util/clipboardImage.d.ts +6 -0
- package/dist/src/util/clipboardImage.js +69 -0
- package/dist/src/util/clipboardImage.js.map +1 -0
- package/dist/src/util/hyperlink.d.ts +10 -0
- package/dist/src/util/hyperlink.js +33 -0
- package/dist/src/util/hyperlink.js.map +1 -0
- package/dist/src/util/imageRef.d.ts +15 -0
- package/dist/src/util/imageRef.js +46 -0
- package/dist/src/util/imageRef.js.map +1 -0
- package/dist/src/util/inlineImage.d.ts +13 -0
- package/dist/src/util/inlineImage.js +56 -0
- package/dist/src/util/inlineImage.js.map +1 -0
- package/dist/src/util/openBrowser.d.ts +5 -0
- package/dist/src/util/openBrowser.js +23 -0
- package/dist/src/util/openBrowser.js.map +1 -0
- package/dist/src/util/retry.d.ts +43 -0
- package/dist/src/util/retry.js +116 -0
- package/dist/src/util/retry.js.map +1 -0
- package/dist/src/version.d.ts +6 -0
- package/dist/src/version.js +16 -0
- package/dist/src/version.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,558 @@
|
|
|
1
|
+
import { ParamValidationError } from './types.js';
|
|
2
|
+
import { toImageResolution, toVideoResolution } from './resolution.js';
|
|
3
|
+
/**
|
|
4
|
+
* Curated model manifest (phase-1: 3 image models).
|
|
5
|
+
*
|
|
6
|
+
* yanfa exposes no per-model param schema, so support + the canonical→endpoint body mapping are
|
|
7
|
+
* declared here. Submit bodies mirror glb_site's image-generator (verified 2026-07-15):
|
|
8
|
+
* - nano-banana → POST /ai-api/ai/nano_banana_vertexai/task/submit
|
|
9
|
+
* - seedream-4.5 → POST /ai-api/ai/seedream45/task/submit
|
|
10
|
+
* - gpt-image-2 → POST /ai-api/ai/apimart/image/generate
|
|
11
|
+
*/
|
|
12
|
+
const NANO_RATIOS = ['Auto', '1:1', '2:3', '3:2', '3:4', '4:3', '4:5', '5:4', '16:9', '9:16', '21:9'];
|
|
13
|
+
const GPT_IMAGE_RATIOS = ['1:1', '16:9', '9:16', '4:3', '3:4', '3:2', '2:3', '5:4', '4:5', '2:1', '1:2', '21:9', '9:21'];
|
|
14
|
+
const SEEDREAM_RATIOS = ['1:1', '4:3', '3:4', '16:9', '9:16', '2:3', '3:2', '21:9'];
|
|
15
|
+
// Upstream Ideogram mapper accepts W:H (also WxH / ASPECT_W_H); set mirrors glb_site's list.
|
|
16
|
+
const IDEOGRAM_RATIOS = ['1:1', '16:9', '9:16', '4:3', '3:4', '3:2', '2:3', '4:5', '5:4', '16:10', '10:16', '2:1', '1:2', '3:1', '1:3'];
|
|
17
|
+
// Model ids match the backend estimate catalog (DefaultMediaModelCatalog): the estimateModel is
|
|
18
|
+
// the catalog id, and estimatePrice was verified live (2026-07-15) against the test env.
|
|
19
|
+
export const IMAGE_MODELS = [
|
|
20
|
+
{
|
|
21
|
+
id: 'nano-banana-2',
|
|
22
|
+
displayName: 'Nano Banana 2',
|
|
23
|
+
type: 'image',
|
|
24
|
+
agentId: '6136',
|
|
25
|
+
submitPath: '/ai-api/ai/nano_banana_vertexai/task/submit',
|
|
26
|
+
estimateModel: 'nano-banana-2',
|
|
27
|
+
support: {
|
|
28
|
+
aspectRatios: NANO_RATIOS,
|
|
29
|
+
resolutions: ['1K', '2K', '4K'],
|
|
30
|
+
defaultResolution: '2K', // estimate key is nano_banana_2_{resolution}; keep a default
|
|
31
|
+
maxImages: 8,
|
|
32
|
+
maxCount: 4,
|
|
33
|
+
},
|
|
34
|
+
buildBody(p) {
|
|
35
|
+
return {
|
|
36
|
+
agentId: this.agentId,
|
|
37
|
+
hidePrompt: 0,
|
|
38
|
+
batch: p.n ?? 1,
|
|
39
|
+
productNo: 'glbgpt',
|
|
40
|
+
enhancePrompt: false,
|
|
41
|
+
shareStatus: 0,
|
|
42
|
+
image_request: {
|
|
43
|
+
text: p.prompt,
|
|
44
|
+
imageUrls: p.images ?? [],
|
|
45
|
+
aspectRatio: p.aspectRatio === 'Auto' ? 'auto' : p.aspectRatio,
|
|
46
|
+
imageSize: p.resolution,
|
|
47
|
+
model: 'nano_banana_2',
|
|
48
|
+
generationConfig: { responseModalities: ['IMAGE'] },
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
buildEstimateParams(p) {
|
|
53
|
+
return { aspect_ratio: p.aspectRatio, resolution: p.resolution, n: p.n ?? 1 };
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: 'seedream-5.0-lite',
|
|
58
|
+
displayName: 'Seedream 5.0 Lite',
|
|
59
|
+
type: 'image',
|
|
60
|
+
agentId: '6135',
|
|
61
|
+
submitPath: '/ai-api/ai/seedream45/task/submit',
|
|
62
|
+
estimateModel: 'seedream-5.0-lite',
|
|
63
|
+
support: {
|
|
64
|
+
aspectRatios: SEEDREAM_RATIOS,
|
|
65
|
+
resolutions: ['2K', '3K'],
|
|
66
|
+
maxImages: 8,
|
|
67
|
+
},
|
|
68
|
+
buildBody(p) {
|
|
69
|
+
return {
|
|
70
|
+
agentId: this.agentId,
|
|
71
|
+
productNo: 'glbgpt',
|
|
72
|
+
enhancePrompt: false,
|
|
73
|
+
shareStatus: 0,
|
|
74
|
+
model: 'Seedream 5.0 Lite',
|
|
75
|
+
prompt: p.prompt,
|
|
76
|
+
aspectRatio: p.aspectRatio,
|
|
77
|
+
size: p.resolution,
|
|
78
|
+
image: p.images ?? [],
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
buildEstimateParams(p) {
|
|
82
|
+
return { aspect_ratio: p.aspectRatio, resolution: p.resolution };
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: 'gpt-image-2',
|
|
87
|
+
displayName: 'GPT Image 2',
|
|
88
|
+
type: 'image',
|
|
89
|
+
agentId: '6160',
|
|
90
|
+
submitPath: '/ai-api/ai/apimart/image/generate',
|
|
91
|
+
estimateModel: 'gpt-image-2',
|
|
92
|
+
support: {
|
|
93
|
+
aspectRatios: GPT_IMAGE_RATIOS,
|
|
94
|
+
// gpt-image-2 has no resolution tier; `size` carries the aspect ratio string.
|
|
95
|
+
maxImages: 4,
|
|
96
|
+
maxCount: 1,
|
|
97
|
+
},
|
|
98
|
+
buildBody(p) {
|
|
99
|
+
return {
|
|
100
|
+
agentId: this.agentId,
|
|
101
|
+
hidePrompt: 0,
|
|
102
|
+
model: 'gpt-image-2',
|
|
103
|
+
productNo: 'glbgpt',
|
|
104
|
+
prompt: p.prompt,
|
|
105
|
+
shareStatus: 0,
|
|
106
|
+
size: p.aspectRatio,
|
|
107
|
+
imageUrls: (p.images ?? []).slice(0, 4),
|
|
108
|
+
n: 1,
|
|
109
|
+
enhancePrompt: false,
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
buildEstimateParams(p) {
|
|
113
|
+
return { aspect_ratio: p.aspectRatio };
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: 'seedream-4.5',
|
|
118
|
+
displayName: 'Seedream 4.5',
|
|
119
|
+
type: 'image',
|
|
120
|
+
agentId: '6117',
|
|
121
|
+
submitPath: '/ai-api/ai/seedream45/task/submit',
|
|
122
|
+
estimateModel: 'seedream-4.5',
|
|
123
|
+
support: {
|
|
124
|
+
aspectRatios: SEEDREAM_RATIOS,
|
|
125
|
+
resolutions: ['2K', '4K'],
|
|
126
|
+
maxImages: 8,
|
|
127
|
+
},
|
|
128
|
+
buildBody(p) {
|
|
129
|
+
return {
|
|
130
|
+
agentId: this.agentId,
|
|
131
|
+
productNo: 'glbgpt',
|
|
132
|
+
enhancePrompt: false,
|
|
133
|
+
shareStatus: 0,
|
|
134
|
+
model: 'seedream-4.5',
|
|
135
|
+
prompt: p.prompt,
|
|
136
|
+
aspectRatio: p.aspectRatio,
|
|
137
|
+
size: p.resolution,
|
|
138
|
+
image: p.images ?? [],
|
|
139
|
+
};
|
|
140
|
+
},
|
|
141
|
+
buildEstimateParams() {
|
|
142
|
+
return {};
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: 'nano-banana-pro',
|
|
147
|
+
displayName: 'Nano Banana Pro',
|
|
148
|
+
type: 'image',
|
|
149
|
+
agentId: '6106',
|
|
150
|
+
submitPath: '/ai-api/ai/nano_banana_vertexai/task/submit',
|
|
151
|
+
estimateModel: 'nano-banana-pro',
|
|
152
|
+
support: {
|
|
153
|
+
aspectRatios: NANO_RATIOS,
|
|
154
|
+
resolutions: ['1K', '2K', '4K'],
|
|
155
|
+
defaultResolution: '2K', // billing is two-tier: 4K vs everything else
|
|
156
|
+
maxImages: 14,
|
|
157
|
+
maxCount: 4,
|
|
158
|
+
},
|
|
159
|
+
buildBody(p) {
|
|
160
|
+
return {
|
|
161
|
+
agentId: this.agentId,
|
|
162
|
+
hidePrompt: 0,
|
|
163
|
+
batch: p.n ?? 1,
|
|
164
|
+
productNo: 'glbgpt',
|
|
165
|
+
enhancePrompt: false,
|
|
166
|
+
shareStatus: 0,
|
|
167
|
+
image_request: {
|
|
168
|
+
text: p.prompt,
|
|
169
|
+
imageUrls: p.images ?? [],
|
|
170
|
+
aspectRatio: p.aspectRatio === 'Auto' ? 'auto' : p.aspectRatio,
|
|
171
|
+
imageSize: p.resolution,
|
|
172
|
+
model: 'nano_banana_pro',
|
|
173
|
+
generationConfig: { responseModalities: ['IMAGE'] },
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
buildEstimateParams(p) {
|
|
178
|
+
return { resolution: p.resolution };
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
...ideogram3('ideogram-3.0-turbo', 'Ideogram 3.0 Turbo', '6082', 'Ideogram 3.0 turbo'),
|
|
182
|
+
...ideogram3('ideogram-3.0', 'Ideogram 3.0', '6083', 'Ideogram 3.0 Default'),
|
|
183
|
+
...ideogram3('ideogram-3.0-quality', 'Ideogram 3.0 Quality', '6084', 'Ideogram 3.0 quality'),
|
|
184
|
+
];
|
|
185
|
+
/**
|
|
186
|
+
* The three Ideogram 3.0 tiers share one endpoint/shape; only agentId + model string differ.
|
|
187
|
+
* The submit `model` uses the lowercase tier spelling the server's remap expects
|
|
188
|
+
* (GenerationAPI.submitIdeogram3Task); billing keys off this same string.
|
|
189
|
+
*/
|
|
190
|
+
function ideogram3(id, displayName, agentId, modelString) {
|
|
191
|
+
return [
|
|
192
|
+
{
|
|
193
|
+
id,
|
|
194
|
+
displayName,
|
|
195
|
+
type: 'image',
|
|
196
|
+
agentId,
|
|
197
|
+
submitPath: '/ai-api/ai/ideogram3/task/submit',
|
|
198
|
+
estimateModel: id,
|
|
199
|
+
support: {
|
|
200
|
+
aspectRatios: IDEOGRAM_RATIOS,
|
|
201
|
+
supportsSeed: true,
|
|
202
|
+
supportsNegativePrompt: true,
|
|
203
|
+
maxImages: 3, // style reference images
|
|
204
|
+
maxCount: 4,
|
|
205
|
+
},
|
|
206
|
+
buildBody(p) {
|
|
207
|
+
return {
|
|
208
|
+
agentId: this.agentId,
|
|
209
|
+
productNo: 'glbgpt',
|
|
210
|
+
batch: p.n ?? 1,
|
|
211
|
+
hidePrompt: 0,
|
|
212
|
+
shareStatus: 0,
|
|
213
|
+
enhancePrompt: false,
|
|
214
|
+
image_request: {
|
|
215
|
+
prompt: p.prompt,
|
|
216
|
+
model: modelString,
|
|
217
|
+
aspect_ratio: p.aspectRatio,
|
|
218
|
+
...(p.seed !== undefined ? { seed: p.seed } : {}),
|
|
219
|
+
...(p.negativePrompt ? { negative_prompt: p.negativePrompt } : {}),
|
|
220
|
+
...(p.images?.length ? { style_reference_images: p.images } : {}),
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
},
|
|
224
|
+
buildEstimateParams() {
|
|
225
|
+
return {};
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
const GROK_RATIOS = ['Auto', '16:9', '9:16', '1:1', '4:3', '3:4', '3:2', '2:3'];
|
|
231
|
+
const GROK_DURATIONS = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'];
|
|
232
|
+
/** Duration list helper: integer seconds from `min` to `max` as strings. */
|
|
233
|
+
function seconds(min, max) {
|
|
234
|
+
return Array.from({ length: max - min + 1 }, (_, i) => String(min + i));
|
|
235
|
+
}
|
|
236
|
+
/** First frame for image-to-video: explicit --start-image wins, else the first -i reference. */
|
|
237
|
+
function firstFrame(p) {
|
|
238
|
+
return p.startImage ?? p.images?.[0];
|
|
239
|
+
}
|
|
240
|
+
// Video models with backend estimate support (DefaultMediaModelCatalog); verified live 2026-07-15.
|
|
241
|
+
export const VIDEO_MODELS = [
|
|
242
|
+
{
|
|
243
|
+
id: 'grok-imagine-video',
|
|
244
|
+
displayName: 'Grok Imagine (video)',
|
|
245
|
+
type: 'video',
|
|
246
|
+
agentId: '6153',
|
|
247
|
+
submitPath: '/ai-api/ai/grok-imagine/task/submit',
|
|
248
|
+
estimateModel: 'grok-imagine-video',
|
|
249
|
+
support: {
|
|
250
|
+
aspectRatios: GROK_RATIOS,
|
|
251
|
+
resolutions: ['720p', '480p'],
|
|
252
|
+
durations: GROK_DURATIONS,
|
|
253
|
+
defaultDuration: 5,
|
|
254
|
+
maxImages: 1,
|
|
255
|
+
},
|
|
256
|
+
buildBody(p) {
|
|
257
|
+
return {
|
|
258
|
+
agentId: this.agentId,
|
|
259
|
+
model: 'grok-imagine-video',
|
|
260
|
+
productNo: 'glbgpt',
|
|
261
|
+
prompt: p.prompt,
|
|
262
|
+
duration: p.duration,
|
|
263
|
+
aspectRatio: p.aspectRatio === 'Auto' ? 'auto' : p.aspectRatio,
|
|
264
|
+
resolution: p.resolution,
|
|
265
|
+
imageUrls: p.images ?? [],
|
|
266
|
+
enhancePrompt: false,
|
|
267
|
+
shareStatus: 0,
|
|
268
|
+
hidePrompt: 0,
|
|
269
|
+
};
|
|
270
|
+
},
|
|
271
|
+
buildEstimateParams(p) {
|
|
272
|
+
return { duration_seconds: p.duration };
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
id: 'grok-imagine-video-1.5',
|
|
277
|
+
displayName: 'Grok Imagine 1.5',
|
|
278
|
+
type: 'video',
|
|
279
|
+
agentId: '6173',
|
|
280
|
+
submitPath: '/ai-api/ai/grok-imagine15/task/submit',
|
|
281
|
+
estimateModel: 'grok-imagine-video-1.5',
|
|
282
|
+
support: {
|
|
283
|
+
aspectRatios: GROK_RATIOS,
|
|
284
|
+
resolutions: ['720p', '480p'],
|
|
285
|
+
defaultResolution: '720p',
|
|
286
|
+
durations: GROK_DURATIONS,
|
|
287
|
+
defaultDuration: 5,
|
|
288
|
+
maxImages: 1,
|
|
289
|
+
requiresImage: true, // upstream is image-to-video only (backend rejects no-image pre-billing)
|
|
290
|
+
},
|
|
291
|
+
buildBody(p) {
|
|
292
|
+
return {
|
|
293
|
+
agentId: this.agentId,
|
|
294
|
+
model: 'grok-imagine-video-1.5',
|
|
295
|
+
productNo: 'glbgpt',
|
|
296
|
+
prompt: p.prompt,
|
|
297
|
+
duration: p.duration,
|
|
298
|
+
aspectRatio: p.aspectRatio === 'Auto' ? 'auto' : p.aspectRatio ?? 'auto',
|
|
299
|
+
resolution: p.resolution,
|
|
300
|
+
imageUrls: [firstFrame(p)],
|
|
301
|
+
enhancePrompt: false,
|
|
302
|
+
shareStatus: 0,
|
|
303
|
+
hidePrompt: 0,
|
|
304
|
+
};
|
|
305
|
+
},
|
|
306
|
+
buildEstimateParams(p) {
|
|
307
|
+
return { duration_seconds: p.duration };
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
id: 'veo-3.1',
|
|
312
|
+
displayName: 'Veo 3.1',
|
|
313
|
+
type: 'video',
|
|
314
|
+
agentId: '6090',
|
|
315
|
+
submitPath: '/ai-api/ai/openai-next/veo3.1/task/submit',
|
|
316
|
+
estimateModel: 'veo3.1',
|
|
317
|
+
estimateModelFor(p) {
|
|
318
|
+
return firstFrame(p) ? 'veo3.1-i2v' : 'veo3.1';
|
|
319
|
+
},
|
|
320
|
+
support: {
|
|
321
|
+
aspectRatios: ['16:9', '9:16'],
|
|
322
|
+
resolutions: ['720p', '1080p'],
|
|
323
|
+
defaultResolution: '1080p',
|
|
324
|
+
durations: ['8'], // fixed-price rows; upstream generates ~8s
|
|
325
|
+
defaultDuration: 8,
|
|
326
|
+
maxImages: 1,
|
|
327
|
+
supportsSeed: true,
|
|
328
|
+
},
|
|
329
|
+
buildBody(p) {
|
|
330
|
+
const image = firstFrame(p);
|
|
331
|
+
return {
|
|
332
|
+
agentId: this.agentId,
|
|
333
|
+
// The billing model string is client-set: i2v when a source image is present.
|
|
334
|
+
model: image ? 'veo3.1-i2v' : 'veo3.1',
|
|
335
|
+
productNo: 'glbgpt',
|
|
336
|
+
prompt: p.prompt,
|
|
337
|
+
...(image ? { image } : {}),
|
|
338
|
+
duration: p.duration,
|
|
339
|
+
seed: p.seed ?? -1,
|
|
340
|
+
aspectRatio: p.aspectRatio ?? '16:9',
|
|
341
|
+
resolution: p.resolution,
|
|
342
|
+
enhancePrompt: false,
|
|
343
|
+
shareStatus: 0,
|
|
344
|
+
hidePrompt: 0,
|
|
345
|
+
};
|
|
346
|
+
},
|
|
347
|
+
buildEstimateParams() {
|
|
348
|
+
return {};
|
|
349
|
+
},
|
|
350
|
+
},
|
|
351
|
+
...seedance2('seedance-2.0', 'Seedance 2.0', '6154'),
|
|
352
|
+
...seedance2('seedance-2.0-fast', 'Seedance 2.0 Fast', '6155'),
|
|
353
|
+
{
|
|
354
|
+
id: 'happyhorse-1.0',
|
|
355
|
+
displayName: 'Happy Horse 1.0',
|
|
356
|
+
type: 'video',
|
|
357
|
+
agentId: '6164',
|
|
358
|
+
submitPath: '/ai-api/ai/happyhorse/task/submit',
|
|
359
|
+
estimateModel: 'happyhorse-1.0-t2v',
|
|
360
|
+
estimateModelFor(p) {
|
|
361
|
+
return firstFrame(p) ? 'happyhorse-1.0-i2v' : 'happyhorse-1.0-t2v';
|
|
362
|
+
},
|
|
363
|
+
support: {
|
|
364
|
+
aspectRatios: ['16:9', '9:16', '1:1', '4:3', '3:4'],
|
|
365
|
+
resolutions: ['720p', '1080p'],
|
|
366
|
+
defaultResolution: '720p',
|
|
367
|
+
durations: seconds(3, 15),
|
|
368
|
+
defaultDuration: 5,
|
|
369
|
+
maxImages: 1,
|
|
370
|
+
supportsSeed: true,
|
|
371
|
+
},
|
|
372
|
+
buildBody(p) {
|
|
373
|
+
const image = firstFrame(p);
|
|
374
|
+
return {
|
|
375
|
+
agentId: this.agentId,
|
|
376
|
+
// Mode is encoded in the model string; the DTO resolution uses an uppercase P.
|
|
377
|
+
model: image ? 'happyhorse-1.0-i2v' : 'happyhorse-1.0-t2v',
|
|
378
|
+
productNo: 'glbgpt',
|
|
379
|
+
prompt: p.prompt,
|
|
380
|
+
resolution: p.resolution?.replace('p', 'P'),
|
|
381
|
+
ratio: p.aspectRatio ?? '16:9',
|
|
382
|
+
duration: p.duration,
|
|
383
|
+
...(image ? { img_url: image } : {}),
|
|
384
|
+
...(p.seed !== undefined ? { seed: p.seed } : {}),
|
|
385
|
+
shareStatus: 0,
|
|
386
|
+
hidePrompt: 0,
|
|
387
|
+
};
|
|
388
|
+
},
|
|
389
|
+
buildEstimateParams(p) {
|
|
390
|
+
return { resolution: p.resolution, duration_seconds: p.duration };
|
|
391
|
+
},
|
|
392
|
+
},
|
|
393
|
+
];
|
|
394
|
+
/** Seedance 2.0 tiers share one endpoint; only the model string / agentId differ. */
|
|
395
|
+
function seedance2(id, displayName, agentId) {
|
|
396
|
+
return [
|
|
397
|
+
{
|
|
398
|
+
id,
|
|
399
|
+
displayName,
|
|
400
|
+
type: 'video',
|
|
401
|
+
agentId,
|
|
402
|
+
submitPath: '/ai-api/ai/seedance2/task/submit',
|
|
403
|
+
estimateModel: id,
|
|
404
|
+
support: {
|
|
405
|
+
aspectRatios: ['16:9', '4:3', '1:1', '3:4', '9:16', '21:9'],
|
|
406
|
+
resolutions: ['480p', '720p'],
|
|
407
|
+
defaultResolution: '480p',
|
|
408
|
+
durations: seconds(4, 15),
|
|
409
|
+
defaultDuration: 5,
|
|
410
|
+
maxImages: 1,
|
|
411
|
+
supportsAudio: true,
|
|
412
|
+
supportsSeed: true,
|
|
413
|
+
supportsStartEndFrame: true,
|
|
414
|
+
},
|
|
415
|
+
buildBody(p) {
|
|
416
|
+
const image = firstFrame(p);
|
|
417
|
+
return {
|
|
418
|
+
agentId: this.agentId,
|
|
419
|
+
model: id,
|
|
420
|
+
productNo: 'glbgpt',
|
|
421
|
+
prompt: p.prompt,
|
|
422
|
+
duration: p.duration,
|
|
423
|
+
// Field is `ratio` on this endpoint (not aspectRatio).
|
|
424
|
+
ratio: p.aspectRatio ?? '16:9',
|
|
425
|
+
resolution: p.resolution,
|
|
426
|
+
generateAudio: p.generateAudio ?? false,
|
|
427
|
+
...(image ? { image } : {}),
|
|
428
|
+
...(p.endImage ? { lastFrameImage: p.endImage } : {}),
|
|
429
|
+
...(p.seed !== undefined ? { seed: p.seed } : {}),
|
|
430
|
+
shareStatus: 0,
|
|
431
|
+
hidePrompt: 0,
|
|
432
|
+
};
|
|
433
|
+
},
|
|
434
|
+
buildEstimateParams(p) {
|
|
435
|
+
return { resolution: p.resolution, duration_seconds: p.duration };
|
|
436
|
+
},
|
|
437
|
+
},
|
|
438
|
+
];
|
|
439
|
+
}
|
|
440
|
+
export const ALL_MODELS = [...IMAGE_MODELS, ...VIDEO_MODELS];
|
|
441
|
+
const BY_ID = new Map(ALL_MODELS.map((m) => [m.id, m]));
|
|
442
|
+
export const DEFAULT_IMAGE_MODEL = 'nano-banana-2';
|
|
443
|
+
export const DEFAULT_VIDEO_MODEL = 'grok-imagine-video';
|
|
444
|
+
// Server-driven availability overlay (GET /ai-api/cli/v1/models via src/core/catalog.ts):
|
|
445
|
+
// a broken/pulled upstream model can be disabled for every installed CLI without a release.
|
|
446
|
+
// Specs stay in code — only availability is remote.
|
|
447
|
+
let disabledIds = new Set();
|
|
448
|
+
/** Apply the server's disabled-model overlay (unknown ids are fine — future models). */
|
|
449
|
+
export function applyMediaDisabled(ids) {
|
|
450
|
+
disabledIds = new Set(ids);
|
|
451
|
+
}
|
|
452
|
+
/** True when the server has pulled this model (hidden from lists, refused on use). */
|
|
453
|
+
export function isModelDisabled(id) {
|
|
454
|
+
return disabledIds.has(id);
|
|
455
|
+
}
|
|
456
|
+
/** Test hook: clear the overlay. */
|
|
457
|
+
export function resetMediaDisabled() {
|
|
458
|
+
disabledIds = new Set();
|
|
459
|
+
}
|
|
460
|
+
/** Models currently available for use/listing (built-in minus the server overlay). */
|
|
461
|
+
export function availableModels() {
|
|
462
|
+
return ALL_MODELS.filter((m) => !disabledIds.has(m.id));
|
|
463
|
+
}
|
|
464
|
+
/** Look up a model spec by CLI id. */
|
|
465
|
+
export function findModel(id) {
|
|
466
|
+
return BY_ID.get(id);
|
|
467
|
+
}
|
|
468
|
+
/** Resolve a model id, erroring with close candidates on a typo (no silent fuzzy match). */
|
|
469
|
+
export function resolveModel(id) {
|
|
470
|
+
const spec = BY_ID.get(id);
|
|
471
|
+
if (spec && disabledIds.has(id)) {
|
|
472
|
+
throw new ParamValidationError(`Model "${id}" is temporarily unavailable (disabled server-side). Run \`glbgpt model list\` for alternatives.`);
|
|
473
|
+
}
|
|
474
|
+
if (spec)
|
|
475
|
+
return spec;
|
|
476
|
+
const available = availableModels().map((m) => m.id);
|
|
477
|
+
const candidates = available.filter((mid) => mid.includes(id) || id.includes(mid));
|
|
478
|
+
const hint = candidates.length ? ` Did you mean: ${candidates.join(', ')}?` : ` Available: ${available.join(', ')}.`;
|
|
479
|
+
throw new ParamValidationError(`Unknown model "${id}".${hint}`);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Validate raw user params against a model's declared support and return normalized params.
|
|
483
|
+
* Throws ParamValidationError with allowed values on an unsupported choice (no silent clamp).
|
|
484
|
+
*/
|
|
485
|
+
export function validateAndNormalize(spec, raw) {
|
|
486
|
+
const out = { prompt: raw.prompt, images: raw.images };
|
|
487
|
+
if (spec.support.requiresImage && !(raw.images?.length || raw.startImage)) {
|
|
488
|
+
throw new ParamValidationError(`${spec.id} needs a source image — pass one with -i/--image (or --start-image).`);
|
|
489
|
+
}
|
|
490
|
+
if (raw.aspectRatio) {
|
|
491
|
+
const ratios = spec.support.aspectRatios ?? [];
|
|
492
|
+
if (!ratios.includes(raw.aspectRatio)) {
|
|
493
|
+
throw new ParamValidationError(`${spec.id} does not support aspect ratio "${raw.aspectRatio}". Allowed: ${ratios.join(', ')}.`);
|
|
494
|
+
}
|
|
495
|
+
out.aspectRatio = raw.aspectRatio;
|
|
496
|
+
}
|
|
497
|
+
if (raw.resolution) {
|
|
498
|
+
if (!spec.support.resolutions) {
|
|
499
|
+
throw new ParamValidationError(`${spec.id} does not support a resolution option.`);
|
|
500
|
+
}
|
|
501
|
+
const res = (spec.type === 'video' ? toVideoResolution(raw.resolution) : toImageResolution(raw.resolution));
|
|
502
|
+
if (!spec.support.resolutions.includes(res)) {
|
|
503
|
+
throw new ParamValidationError(`${spec.id} does not support resolution "${raw.resolution}". Allowed: ${spec.support.resolutions.join(', ')}.`);
|
|
504
|
+
}
|
|
505
|
+
out.resolution = res;
|
|
506
|
+
}
|
|
507
|
+
else if (spec.support.defaultResolution) {
|
|
508
|
+
// Fill the default so estimate keys that depend on resolution can resolve.
|
|
509
|
+
out.resolution = spec.support.defaultResolution;
|
|
510
|
+
}
|
|
511
|
+
if (raw.duration !== undefined) {
|
|
512
|
+
if (!Number.isFinite(raw.duration)) {
|
|
513
|
+
throw new ParamValidationError(`Invalid duration.`);
|
|
514
|
+
}
|
|
515
|
+
if (!spec.support.durations) {
|
|
516
|
+
throw new ParamValidationError(`${spec.id} does not take a duration.`);
|
|
517
|
+
}
|
|
518
|
+
if (!spec.support.durations.includes(String(raw.duration))) {
|
|
519
|
+
throw new ParamValidationError(`${spec.id} does not support duration ${raw.duration}s. Allowed: ${spec.support.durations.join(', ')}.`);
|
|
520
|
+
}
|
|
521
|
+
out.duration = raw.duration;
|
|
522
|
+
}
|
|
523
|
+
else if (spec.support.defaultDuration !== undefined) {
|
|
524
|
+
out.duration = spec.support.defaultDuration;
|
|
525
|
+
}
|
|
526
|
+
if (raw.generateAudio !== undefined) {
|
|
527
|
+
// Only reject an explicit request FOR audio on a model that lacks it; "--no-audio" is a no-op there.
|
|
528
|
+
if (raw.generateAudio && !spec.support.supportsAudio) {
|
|
529
|
+
throw new ParamValidationError(`${spec.id} does not support audio generation.`);
|
|
530
|
+
}
|
|
531
|
+
if (spec.support.supportsAudio)
|
|
532
|
+
out.generateAudio = raw.generateAudio;
|
|
533
|
+
}
|
|
534
|
+
if (raw.startImage)
|
|
535
|
+
out.startImage = raw.startImage;
|
|
536
|
+
if (raw.endImage)
|
|
537
|
+
out.endImage = raw.endImage;
|
|
538
|
+
if (raw.n !== undefined) {
|
|
539
|
+
const max = spec.support.maxCount ?? 1;
|
|
540
|
+
if (!Number.isFinite(raw.n) || raw.n < 1 || raw.n > max) {
|
|
541
|
+
throw new ParamValidationError(`${spec.id} supports count 1..${max}.`);
|
|
542
|
+
}
|
|
543
|
+
out.n = raw.n;
|
|
544
|
+
}
|
|
545
|
+
if (raw.images && spec.support.maxImages !== undefined && raw.images.length > spec.support.maxImages) {
|
|
546
|
+
throw new ParamValidationError(`${spec.id} accepts at most ${spec.support.maxImages} reference image(s).`);
|
|
547
|
+
}
|
|
548
|
+
if (raw.seed !== undefined && Number.isFinite(raw.seed))
|
|
549
|
+
out.seed = raw.seed;
|
|
550
|
+
if (raw.negativePrompt)
|
|
551
|
+
out.negativePrompt = raw.negativePrompt;
|
|
552
|
+
if (raw.strength !== undefined)
|
|
553
|
+
out.strength = raw.strength;
|
|
554
|
+
if (raw.watermark !== undefined)
|
|
555
|
+
out.watermark = raw.watermark;
|
|
556
|
+
return out;
|
|
557
|
+
}
|
|
558
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/media/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution vocabulary and cross-class conversion.
|
|
3
|
+
*
|
|
4
|
+
* Canonical values: image tiers `0.5K/1K/2K/4K`, video `480p/720p/1080p`. If a user passes a
|
|
5
|
+
* video value to an image model (or vice versa) we auto-convert; validation against the model's
|
|
6
|
+
* actual supported set happens separately.
|
|
7
|
+
*/
|
|
8
|
+
export declare const IMAGE_RESOLUTIONS: readonly ["0.5K", "1K", "2K", "4K"];
|
|
9
|
+
export declare const VIDEO_RESOLUTIONS: readonly ["480p", "720p", "1080p"];
|
|
10
|
+
/** Convert any resolution value to the image tier class (idempotent for image values). */
|
|
11
|
+
export declare function toImageResolution(value: string | undefined): string | undefined;
|
|
12
|
+
/** Convert any resolution value to the video class (idempotent for video values). */
|
|
13
|
+
export declare function toVideoResolution(value: string | undefined): string | undefined;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution vocabulary and cross-class conversion.
|
|
3
|
+
*
|
|
4
|
+
* Canonical values: image tiers `0.5K/1K/2K/4K`, video `480p/720p/1080p`. If a user passes a
|
|
5
|
+
* video value to an image model (or vice versa) we auto-convert; validation against the model's
|
|
6
|
+
* actual supported set happens separately.
|
|
7
|
+
*/
|
|
8
|
+
export const IMAGE_RESOLUTIONS = ['0.5K', '1K', '2K', '4K'];
|
|
9
|
+
export const VIDEO_RESOLUTIONS = ['480p', '720p', '1080p'];
|
|
10
|
+
// Cross-class pairs: 480p↔0.5K, 720p↔1K, 1080p↔2K, (2160p/4K)↔4K.
|
|
11
|
+
const VIDEO_TO_IMAGE = { '480p': '0.5K', '720p': '1K', '1080p': '2K', '2160p': '4K', '4k': '4K' };
|
|
12
|
+
const IMAGE_TO_VIDEO = { '0.5K': '480p', '1K': '720p', '2K': '1080p', '4K': '1080p' };
|
|
13
|
+
// Normalize case: "2k" -> "2K", "0.5k" -> "0.5K" (digits/dot are unaffected by toUpperCase).
|
|
14
|
+
function canonImage(v) {
|
|
15
|
+
return v.trim().toUpperCase();
|
|
16
|
+
}
|
|
17
|
+
/** Convert any resolution value to the image tier class (idempotent for image values). */
|
|
18
|
+
export function toImageResolution(value) {
|
|
19
|
+
if (!value)
|
|
20
|
+
return undefined;
|
|
21
|
+
const v = value.trim();
|
|
22
|
+
const asImage = canonImage(v);
|
|
23
|
+
if (IMAGE_RESOLUTIONS.includes(asImage))
|
|
24
|
+
return asImage;
|
|
25
|
+
const lower = v.toLowerCase();
|
|
26
|
+
if (VIDEO_TO_IMAGE[lower])
|
|
27
|
+
return VIDEO_TO_IMAGE[lower];
|
|
28
|
+
return v; // unknown — leave as-is; per-model validation will catch it
|
|
29
|
+
}
|
|
30
|
+
/** Convert any resolution value to the video class (idempotent for video values). */
|
|
31
|
+
export function toVideoResolution(value) {
|
|
32
|
+
if (!value)
|
|
33
|
+
return undefined;
|
|
34
|
+
const v = value.trim().toLowerCase();
|
|
35
|
+
if (VIDEO_RESOLUTIONS.includes(v))
|
|
36
|
+
return v;
|
|
37
|
+
const asImage = canonImage(value);
|
|
38
|
+
if (IMAGE_TO_VIDEO[asImage])
|
|
39
|
+
return IMAGE_TO_VIDEO[asImage];
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../../src/media/resolution.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEpE,kEAAkE;AAClE,MAAM,cAAc,GAA2B,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC1H,MAAM,cAAc,GAA2B,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAE9G,6FAA6F;AAC7F,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAChC,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAK,iBAAuC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/E,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,CAAC,CAAC,CAAC,4DAA4D;AACxE,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,IAAK,iBAAuC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,cAAc,CAAC,OAAO,CAAC;QAAE,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** A local record of a CLI-submitted task, so `task list` / `last` work across runs. */
|
|
2
|
+
export interface TaskRecord {
|
|
3
|
+
taskId: string;
|
|
4
|
+
model: string;
|
|
5
|
+
prompt: string;
|
|
6
|
+
createdAt: number;
|
|
7
|
+
localPath?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Append-only local task ledger at ~/.config/glbgpt/tasks.jsonl. */
|
|
10
|
+
export declare class TaskLedger {
|
|
11
|
+
private readonly file;
|
|
12
|
+
constructor(file?: string);
|
|
13
|
+
append(rec: TaskRecord): Promise<void>;
|
|
14
|
+
list(limit?: number): Promise<TaskRecord[]>;
|
|
15
|
+
/** Resolve "last" or a task id to a record. */
|
|
16
|
+
resolve(idOrLast: string): Promise<TaskRecord | null>;
|
|
17
|
+
}
|