@kenkaiiii/gg-core 4.4.0
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/LICENSE +21 -0
- package/dist/chunk-TZNVRILI.js +24 -0
- package/dist/chunk-TZNVRILI.js.map +1 -0
- package/dist/chunk-USAVZGPP.js +284 -0
- package/dist/chunk-USAVZGPP.js.map +1 -0
- package/dist/index.cjs +1988 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +295 -0
- package/dist/index.d.ts +295 -0
- package/dist/index.js +1635 -0
- package/dist/index.js.map +1 -0
- package/dist/model-registry.cjs +315 -0
- package/dist/model-registry.cjs.map +1 -0
- package/dist/model-registry.d.cts +57 -0
- package/dist/model-registry.d.ts +57 -0
- package/dist/model-registry.js +21 -0
- package/dist/model-registry.js.map +1 -0
- package/dist/paths.cjs +58 -0
- package/dist/paths.cjs.map +1 -0
- package/dist/paths.d.cts +16 -0
- package/dist/paths.d.ts +16 -0
- package/dist/paths.js +7 -0
- package/dist/paths.js.map +1 -0
- package/package.json +55 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 KenKai
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/paths.ts
|
|
2
|
+
import path from "path";
|
|
3
|
+
import os from "os";
|
|
4
|
+
function getAppPaths() {
|
|
5
|
+
const agentDir = path.join(os.homedir(), ".gg");
|
|
6
|
+
return {
|
|
7
|
+
agentDir,
|
|
8
|
+
sessionsDir: path.join(agentDir, "sessions"),
|
|
9
|
+
settingsFile: path.join(agentDir, "settings.json"),
|
|
10
|
+
authFile: path.join(agentDir, "auth.json"),
|
|
11
|
+
telegramFile: path.join(agentDir, "telegram.json"),
|
|
12
|
+
agentHomeFile: path.join(agentDir, "agent-home.json"),
|
|
13
|
+
mcpFile: path.join(agentDir, "mcp.json"),
|
|
14
|
+
logFile: path.join(agentDir, "debug.log"),
|
|
15
|
+
skillsDir: path.join(agentDir, "skills"),
|
|
16
|
+
extensionsDir: path.join(agentDir, "extensions"),
|
|
17
|
+
agentsDir: path.join(agentDir, "agents")
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
getAppPaths
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=chunk-TZNVRILI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/paths.ts"],"sourcesContent":["import path from \"node:path\";\nimport os from \"node:os\";\n\nexport interface AppPaths {\n agentDir: string;\n sessionsDir: string;\n settingsFile: string;\n authFile: string;\n telegramFile: string;\n agentHomeFile: string;\n mcpFile: string;\n logFile: string;\n skillsDir: string;\n extensionsDir: string;\n agentsDir: string;\n}\n\nexport function getAppPaths(): AppPaths {\n const agentDir = path.join(os.homedir(), \".gg\");\n return {\n agentDir,\n sessionsDir: path.join(agentDir, \"sessions\"),\n settingsFile: path.join(agentDir, \"settings.json\"),\n authFile: path.join(agentDir, \"auth.json\"),\n telegramFile: path.join(agentDir, \"telegram.json\"),\n agentHomeFile: path.join(agentDir, \"agent-home.json\"),\n mcpFile: path.join(agentDir, \"mcp.json\"),\n logFile: path.join(agentDir, \"debug.log\"),\n skillsDir: path.join(agentDir, \"skills\"),\n extensionsDir: path.join(agentDir, \"extensions\"),\n agentsDir: path.join(agentDir, \"agents\"),\n };\n}\n"],"mappings":";AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AAgBR,SAAS,cAAwB;AACtC,QAAM,WAAW,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;AAC9C,SAAO;AAAA,IACL;AAAA,IACA,aAAa,KAAK,KAAK,UAAU,UAAU;AAAA,IAC3C,cAAc,KAAK,KAAK,UAAU,eAAe;AAAA,IACjD,UAAU,KAAK,KAAK,UAAU,WAAW;AAAA,IACzC,cAAc,KAAK,KAAK,UAAU,eAAe;AAAA,IACjD,eAAe,KAAK,KAAK,UAAU,iBAAiB;AAAA,IACpD,SAAS,KAAK,KAAK,UAAU,UAAU;AAAA,IACvC,SAAS,KAAK,KAAK,UAAU,WAAW;AAAA,IACxC,WAAW,KAAK,KAAK,UAAU,QAAQ;AAAA,IACvC,eAAe,KAAK,KAAK,UAAU,YAAY;AAAA,IAC/C,WAAW,KAAK,KAAK,UAAU,QAAQ;AAAA,EACzC;AACF;","names":[]}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// src/model-registry.ts
|
|
2
|
+
var MODELS = [
|
|
3
|
+
// ── Anthropic ──────────────────────────────────────────
|
|
4
|
+
{
|
|
5
|
+
id: "claude-opus-4-8",
|
|
6
|
+
name: "Claude Opus 4.8",
|
|
7
|
+
provider: "anthropic",
|
|
8
|
+
contextWindow: 1e6,
|
|
9
|
+
maxOutputTokens: 128e3,
|
|
10
|
+
supportsThinking: true,
|
|
11
|
+
supportsImages: true,
|
|
12
|
+
supportsVideo: false,
|
|
13
|
+
costTier: "high",
|
|
14
|
+
maxThinkingLevel: "max"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
id: "claude-sonnet-4-6",
|
|
18
|
+
name: "Claude Sonnet 4.6",
|
|
19
|
+
provider: "anthropic",
|
|
20
|
+
contextWindow: 1e6,
|
|
21
|
+
maxOutputTokens: 64e3,
|
|
22
|
+
supportsThinking: true,
|
|
23
|
+
supportsImages: true,
|
|
24
|
+
supportsVideo: false,
|
|
25
|
+
costTier: "medium",
|
|
26
|
+
maxThinkingLevel: "max"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "claude-haiku-4-5-20251001",
|
|
30
|
+
name: "Claude Haiku 4.5",
|
|
31
|
+
provider: "anthropic",
|
|
32
|
+
contextWindow: 2e5,
|
|
33
|
+
maxOutputTokens: 64e3,
|
|
34
|
+
supportsThinking: true,
|
|
35
|
+
supportsImages: true,
|
|
36
|
+
supportsVideo: false,
|
|
37
|
+
costTier: "low",
|
|
38
|
+
maxThinkingLevel: "high"
|
|
39
|
+
},
|
|
40
|
+
// ── OpenAI (Codex) ─────────────────────────────────────
|
|
41
|
+
{
|
|
42
|
+
id: "gpt-5.5",
|
|
43
|
+
name: "GPT-5.5",
|
|
44
|
+
provider: "openai",
|
|
45
|
+
contextWindow: 105e4,
|
|
46
|
+
codexContextWindow: 272e3,
|
|
47
|
+
maxOutputTokens: 128e3,
|
|
48
|
+
supportsThinking: true,
|
|
49
|
+
supportsImages: true,
|
|
50
|
+
supportsVideo: false,
|
|
51
|
+
costTier: "high",
|
|
52
|
+
maxThinkingLevel: "xhigh"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "gpt-5.4",
|
|
56
|
+
name: "GPT-5.4",
|
|
57
|
+
provider: "openai",
|
|
58
|
+
contextWindow: 105e4,
|
|
59
|
+
codexContextWindow: 272e3,
|
|
60
|
+
maxOutputTokens: 128e3,
|
|
61
|
+
supportsThinking: true,
|
|
62
|
+
supportsImages: true,
|
|
63
|
+
supportsVideo: false,
|
|
64
|
+
costTier: "high",
|
|
65
|
+
maxThinkingLevel: "xhigh"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
id: "gpt-5.4-mini",
|
|
69
|
+
name: "GPT-5.4 Mini",
|
|
70
|
+
provider: "openai",
|
|
71
|
+
contextWindow: 4e5,
|
|
72
|
+
maxOutputTokens: 128e3,
|
|
73
|
+
supportsThinking: true,
|
|
74
|
+
supportsImages: true,
|
|
75
|
+
supportsVideo: false,
|
|
76
|
+
costTier: "low",
|
|
77
|
+
maxThinkingLevel: "xhigh"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "gpt-5.3-codex",
|
|
81
|
+
name: "GPT-5.3 Codex",
|
|
82
|
+
provider: "openai",
|
|
83
|
+
contextWindow: 4e5,
|
|
84
|
+
maxOutputTokens: 128e3,
|
|
85
|
+
supportsThinking: true,
|
|
86
|
+
supportsImages: true,
|
|
87
|
+
supportsVideo: false,
|
|
88
|
+
costTier: "high",
|
|
89
|
+
maxThinkingLevel: "xhigh"
|
|
90
|
+
},
|
|
91
|
+
// ── Gemini ─────────────────────────────────────────────
|
|
92
|
+
{
|
|
93
|
+
id: "gemini-3.1-flash-lite-preview",
|
|
94
|
+
name: "Gemini 3.1 Flash Lite Preview",
|
|
95
|
+
provider: "gemini",
|
|
96
|
+
contextWindow: 1048576,
|
|
97
|
+
maxOutputTokens: 65536,
|
|
98
|
+
supportsThinking: true,
|
|
99
|
+
supportsImages: true,
|
|
100
|
+
supportsVideo: true,
|
|
101
|
+
costTier: "low",
|
|
102
|
+
maxThinkingLevel: "high"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: "gemini-3.5-flash",
|
|
106
|
+
name: "Gemini 3.5 Flash",
|
|
107
|
+
provider: "gemini",
|
|
108
|
+
contextWindow: 1048576,
|
|
109
|
+
maxOutputTokens: 65536,
|
|
110
|
+
supportsThinking: true,
|
|
111
|
+
supportsImages: true,
|
|
112
|
+
supportsVideo: true,
|
|
113
|
+
costTier: "low",
|
|
114
|
+
maxThinkingLevel: "high"
|
|
115
|
+
},
|
|
116
|
+
// ── Moonshot (Kimi) ────────────────────────────────────
|
|
117
|
+
{
|
|
118
|
+
id: "kimi-k2.6",
|
|
119
|
+
name: "Kimi K2.6",
|
|
120
|
+
provider: "moonshot",
|
|
121
|
+
contextWindow: 262144,
|
|
122
|
+
maxOutputTokens: 262144,
|
|
123
|
+
supportsThinking: true,
|
|
124
|
+
supportsImages: true,
|
|
125
|
+
supportsVideo: true,
|
|
126
|
+
costTier: "medium",
|
|
127
|
+
maxThinkingLevel: "high"
|
|
128
|
+
},
|
|
129
|
+
// ── Z.AI (GLM) ─────────────────────────────────────────
|
|
130
|
+
{
|
|
131
|
+
id: "glm-5.1",
|
|
132
|
+
name: "GLM-5.1",
|
|
133
|
+
provider: "glm",
|
|
134
|
+
contextWindow: 204800,
|
|
135
|
+
maxOutputTokens: 131072,
|
|
136
|
+
supportsThinking: true,
|
|
137
|
+
supportsImages: false,
|
|
138
|
+
supportsVideo: false,
|
|
139
|
+
costTier: "medium",
|
|
140
|
+
maxThinkingLevel: "high"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
id: "glm-4.7",
|
|
144
|
+
name: "GLM-4.7",
|
|
145
|
+
provider: "glm",
|
|
146
|
+
contextWindow: 2e5,
|
|
147
|
+
maxOutputTokens: 131072,
|
|
148
|
+
supportsThinking: true,
|
|
149
|
+
supportsImages: false,
|
|
150
|
+
supportsVideo: false,
|
|
151
|
+
costTier: "low",
|
|
152
|
+
maxThinkingLevel: "high"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
id: "glm-4.7-flash",
|
|
156
|
+
name: "GLM-4.7 Flash",
|
|
157
|
+
provider: "glm",
|
|
158
|
+
contextWindow: 2e5,
|
|
159
|
+
maxOutputTokens: 131072,
|
|
160
|
+
supportsThinking: true,
|
|
161
|
+
supportsImages: false,
|
|
162
|
+
supportsVideo: false,
|
|
163
|
+
costTier: "low",
|
|
164
|
+
maxThinkingLevel: "high"
|
|
165
|
+
},
|
|
166
|
+
// ── MiniMax ────────────────────────────────────────────
|
|
167
|
+
{
|
|
168
|
+
id: "MiniMax-M3",
|
|
169
|
+
name: "MiniMax M3",
|
|
170
|
+
provider: "minimax",
|
|
171
|
+
contextWindow: 1e6,
|
|
172
|
+
maxOutputTokens: 131072,
|
|
173
|
+
supportsThinking: true,
|
|
174
|
+
supportsImages: true,
|
|
175
|
+
supportsVideo: true,
|
|
176
|
+
costTier: "medium",
|
|
177
|
+
maxThinkingLevel: "high"
|
|
178
|
+
},
|
|
179
|
+
// ── Xiaomi (MiMo) ──────────────────────────────────────
|
|
180
|
+
{
|
|
181
|
+
id: "mimo-v2-pro",
|
|
182
|
+
name: "MiMo-V2-Pro",
|
|
183
|
+
provider: "xiaomi",
|
|
184
|
+
contextWindow: 1e6,
|
|
185
|
+
maxOutputTokens: 131072,
|
|
186
|
+
supportsThinking: true,
|
|
187
|
+
supportsImages: false,
|
|
188
|
+
supportsVideo: false,
|
|
189
|
+
costTier: "medium",
|
|
190
|
+
maxThinkingLevel: "high"
|
|
191
|
+
},
|
|
192
|
+
// ── DeepSeek ───────────────────────────────────────────
|
|
193
|
+
{
|
|
194
|
+
id: "deepseek-v4-pro",
|
|
195
|
+
name: "DeepSeek V4 Pro",
|
|
196
|
+
provider: "deepseek",
|
|
197
|
+
contextWindow: 1048576,
|
|
198
|
+
maxOutputTokens: 384e3,
|
|
199
|
+
supportsThinking: true,
|
|
200
|
+
supportsImages: false,
|
|
201
|
+
supportsVideo: false,
|
|
202
|
+
costTier: "high",
|
|
203
|
+
// DeepSeek V4 maps `xhigh` → its internal `max` tier.
|
|
204
|
+
maxThinkingLevel: "xhigh"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: "deepseek-v4-flash",
|
|
208
|
+
name: "DeepSeek V4 Flash",
|
|
209
|
+
provider: "deepseek",
|
|
210
|
+
contextWindow: 1048576,
|
|
211
|
+
maxOutputTokens: 384e3,
|
|
212
|
+
supportsThinking: true,
|
|
213
|
+
supportsImages: false,
|
|
214
|
+
supportsVideo: false,
|
|
215
|
+
costTier: "low",
|
|
216
|
+
maxThinkingLevel: "xhigh"
|
|
217
|
+
},
|
|
218
|
+
// ── OpenRouter ─────────────────────────────────────────
|
|
219
|
+
{
|
|
220
|
+
id: "qwen/qwen3.6-plus",
|
|
221
|
+
name: "Qwen3.6-Plus",
|
|
222
|
+
provider: "openrouter",
|
|
223
|
+
contextWindow: 1e6,
|
|
224
|
+
maxOutputTokens: 65536,
|
|
225
|
+
supportsThinking: true,
|
|
226
|
+
supportsImages: false,
|
|
227
|
+
supportsVideo: false,
|
|
228
|
+
costTier: "medium",
|
|
229
|
+
maxThinkingLevel: "high"
|
|
230
|
+
}
|
|
231
|
+
];
|
|
232
|
+
function getModel(id) {
|
|
233
|
+
return MODELS.find((m) => m.id === id);
|
|
234
|
+
}
|
|
235
|
+
function getModelsForProvider(provider) {
|
|
236
|
+
return MODELS.filter((m) => m.provider === provider);
|
|
237
|
+
}
|
|
238
|
+
function getDefaultModel(provider) {
|
|
239
|
+
if (provider === "xiaomi") return MODELS.find((m) => m.id === "mimo-v2-pro");
|
|
240
|
+
if (provider === "openai") return MODELS.find((m) => m.id === "gpt-5.5");
|
|
241
|
+
if (provider === "gemini") return MODELS.find((m) => m.id === "gemini-3.1-flash-lite-preview");
|
|
242
|
+
if (provider === "glm") return MODELS.find((m) => m.id === "glm-5.1");
|
|
243
|
+
if (provider === "moonshot") return MODELS.find((m) => m.id === "kimi-k2.6");
|
|
244
|
+
if (provider === "minimax") return MODELS.find((m) => m.id === "MiniMax-M3");
|
|
245
|
+
if (provider === "deepseek") return MODELS.find((m) => m.id === "deepseek-v4-pro");
|
|
246
|
+
if (provider === "openrouter") return MODELS.find((m) => m.id === "qwen/qwen3.6-plus");
|
|
247
|
+
return MODELS.find((m) => m.id === "claude-sonnet-4-6");
|
|
248
|
+
}
|
|
249
|
+
function usesOpenAICodexTransport(options) {
|
|
250
|
+
return options?.provider === "openai" && Boolean(options.accountId);
|
|
251
|
+
}
|
|
252
|
+
function getContextWindow(modelId, options) {
|
|
253
|
+
const model = getModel(modelId);
|
|
254
|
+
if (!model) return 2e5;
|
|
255
|
+
if (usesOpenAICodexTransport(options) && model.codexContextWindow) {
|
|
256
|
+
return model.codexContextWindow;
|
|
257
|
+
}
|
|
258
|
+
return model.contextWindow;
|
|
259
|
+
}
|
|
260
|
+
function getMaxThinkingLevel(modelId) {
|
|
261
|
+
return getModel(modelId)?.maxThinkingLevel ?? "high";
|
|
262
|
+
}
|
|
263
|
+
function getSummaryModel(provider, currentModelId) {
|
|
264
|
+
if (provider === "anthropic") {
|
|
265
|
+
return MODELS.find((m) => m.id === "claude-sonnet-4-6");
|
|
266
|
+
}
|
|
267
|
+
if (provider === "openai" || provider === "glm" || provider === "deepseek") {
|
|
268
|
+
const low = getModelsForProvider(provider).find((m) => m.costTier === "low");
|
|
269
|
+
if (low) return low;
|
|
270
|
+
}
|
|
271
|
+
return getModel(currentModelId) ?? getDefaultModel(provider);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export {
|
|
275
|
+
MODELS,
|
|
276
|
+
getModel,
|
|
277
|
+
getModelsForProvider,
|
|
278
|
+
getDefaultModel,
|
|
279
|
+
usesOpenAICodexTransport,
|
|
280
|
+
getContextWindow,
|
|
281
|
+
getMaxThinkingLevel,
|
|
282
|
+
getSummaryModel
|
|
283
|
+
};
|
|
284
|
+
//# sourceMappingURL=chunk-USAVZGPP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/model-registry.ts"],"sourcesContent":["import type { Provider, ThinkingLevel } from \"@kenkaiiii/gg-ai\";\n\nexport interface ModelInfo {\n id: string;\n name: string;\n provider: Provider;\n contextWindow: number;\n /**\n * ChatGPT Codex transport uses product-specific windows that can differ from\n * the public API model window. OpenAI OAuth requests include an accountId and\n * route through `/codex/responses`; API-key requests do not.\n */\n codexContextWindow?: number;\n maxOutputTokens: number;\n supportsThinking: boolean;\n supportsImages: boolean;\n supportsVideo: boolean;\n costTier: \"low\" | \"medium\" | \"high\";\n /**\n * The top reasoning tier this model genuinely uses. Used when thinking is\n * enabled to pick the strongest setting per model:\n * - OpenAI GPT-5.5-era: `xhigh`\n * - OpenAI Pro/Codex/old: clamped to what the model accepts\n * - Claude Opus 4.8 / 4.7 / 4.6 and Sonnet 4.6: `max`\n * - Claude Haiku 4.5: `high` (no adaptive `max` tier)\n * - GLM / Moonshot / Xiaomi / MiniMax / Qwen: `high` — binary-thinking\n * providers ignore the level on the wire, so the value is cosmetic\n * - DeepSeek V4: `xhigh` (DeepSeek maps `xhigh` → its internal `max`)\n */\n maxThinkingLevel: ThinkingLevel;\n}\n\n// Provider display order — mirrors `PROVIDERS` in ui/login.tsx so the\n// /model selector and login selector sort models identically.\nexport const MODELS: ModelInfo[] = [\n // ── Anthropic ──────────────────────────────────────────\n {\n id: \"claude-opus-4-8\",\n name: \"Claude Opus 4.8\",\n provider: \"anthropic\",\n contextWindow: 1_000_000,\n maxOutputTokens: 128_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"high\",\n maxThinkingLevel: \"max\",\n },\n {\n id: \"claude-sonnet-4-6\",\n name: \"Claude Sonnet 4.6\",\n provider: \"anthropic\",\n contextWindow: 1_000_000,\n maxOutputTokens: 64_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"medium\",\n maxThinkingLevel: \"max\",\n },\n {\n id: \"claude-haiku-4-5-20251001\",\n name: \"Claude Haiku 4.5\",\n provider: \"anthropic\",\n contextWindow: 200_000,\n maxOutputTokens: 64_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"low\",\n maxThinkingLevel: \"high\",\n },\n // ── OpenAI (Codex) ─────────────────────────────────────\n {\n id: \"gpt-5.5\",\n name: \"GPT-5.5\",\n provider: \"openai\",\n contextWindow: 1_050_000,\n codexContextWindow: 272_000,\n maxOutputTokens: 128_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"high\",\n maxThinkingLevel: \"xhigh\",\n },\n {\n id: \"gpt-5.4\",\n name: \"GPT-5.4\",\n provider: \"openai\",\n contextWindow: 1_050_000,\n codexContextWindow: 272_000,\n maxOutputTokens: 128_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"high\",\n maxThinkingLevel: \"xhigh\",\n },\n {\n id: \"gpt-5.4-mini\",\n name: \"GPT-5.4 Mini\",\n provider: \"openai\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"low\",\n maxThinkingLevel: \"xhigh\",\n },\n {\n id: \"gpt-5.3-codex\",\n name: \"GPT-5.3 Codex\",\n provider: \"openai\",\n contextWindow: 400_000,\n maxOutputTokens: 128_000,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: false,\n costTier: \"high\",\n maxThinkingLevel: \"xhigh\",\n },\n // ── Gemini ─────────────────────────────────────────────\n {\n id: \"gemini-3.1-flash-lite-preview\",\n name: \"Gemini 3.1 Flash Lite Preview\",\n provider: \"gemini\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: true,\n costTier: \"low\",\n maxThinkingLevel: \"high\",\n },\n {\n id: \"gemini-3.5-flash\",\n name: \"Gemini 3.5 Flash\",\n provider: \"gemini\",\n contextWindow: 1_048_576,\n maxOutputTokens: 65_536,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: true,\n costTier: \"low\",\n maxThinkingLevel: \"high\",\n },\n // ── Moonshot (Kimi) ────────────────────────────────────\n {\n id: \"kimi-k2.6\",\n name: \"Kimi K2.6\",\n provider: \"moonshot\",\n contextWindow: 262_144,\n maxOutputTokens: 262_144,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: true,\n costTier: \"medium\",\n maxThinkingLevel: \"high\",\n },\n // ── Z.AI (GLM) ─────────────────────────────────────────\n {\n id: \"glm-5.1\",\n name: \"GLM-5.1\",\n provider: \"glm\",\n contextWindow: 204_800,\n maxOutputTokens: 131_072,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"medium\",\n maxThinkingLevel: \"high\",\n },\n {\n id: \"glm-4.7\",\n name: \"GLM-4.7\",\n provider: \"glm\",\n contextWindow: 200_000,\n maxOutputTokens: 131_072,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"low\",\n maxThinkingLevel: \"high\",\n },\n {\n id: \"glm-4.7-flash\",\n name: \"GLM-4.7 Flash\",\n provider: \"glm\",\n contextWindow: 200_000,\n maxOutputTokens: 131_072,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"low\",\n maxThinkingLevel: \"high\",\n },\n // ── MiniMax ────────────────────────────────────────────\n {\n id: \"MiniMax-M3\",\n name: \"MiniMax M3\",\n provider: \"minimax\",\n contextWindow: 1_000_000,\n maxOutputTokens: 131_072,\n supportsThinking: true,\n supportsImages: true,\n supportsVideo: true,\n costTier: \"medium\",\n maxThinkingLevel: \"high\",\n },\n // ── Xiaomi (MiMo) ──────────────────────────────────────\n {\n id: \"mimo-v2-pro\",\n name: \"MiMo-V2-Pro\",\n provider: \"xiaomi\",\n contextWindow: 1_000_000,\n maxOutputTokens: 131_072,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"medium\",\n maxThinkingLevel: \"high\",\n },\n // ── DeepSeek ───────────────────────────────────────────\n {\n id: \"deepseek-v4-pro\",\n name: \"DeepSeek V4 Pro\",\n provider: \"deepseek\",\n contextWindow: 1_048_576,\n maxOutputTokens: 384_000,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"high\",\n // DeepSeek V4 maps `xhigh` → its internal `max` tier.\n maxThinkingLevel: \"xhigh\",\n },\n {\n id: \"deepseek-v4-flash\",\n name: \"DeepSeek V4 Flash\",\n provider: \"deepseek\",\n contextWindow: 1_048_576,\n maxOutputTokens: 384_000,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"low\",\n maxThinkingLevel: \"xhigh\",\n },\n // ── OpenRouter ─────────────────────────────────────────\n {\n id: \"qwen/qwen3.6-plus\",\n name: \"Qwen3.6-Plus\",\n provider: \"openrouter\",\n contextWindow: 1_000_000,\n maxOutputTokens: 65_536,\n supportsThinking: true,\n supportsImages: false,\n supportsVideo: false,\n costTier: \"medium\",\n maxThinkingLevel: \"high\",\n },\n];\n\nexport function getModel(id: string): ModelInfo | undefined {\n return MODELS.find((m) => m.id === id);\n}\n\nexport function getModelsForProvider(provider: Provider): ModelInfo[] {\n return MODELS.filter((m) => m.provider === provider);\n}\n\nexport function getDefaultModel(provider: Provider): ModelInfo {\n if (provider === \"xiaomi\") return MODELS.find((m) => m.id === \"mimo-v2-pro\")!;\n if (provider === \"openai\") return MODELS.find((m) => m.id === \"gpt-5.5\")!;\n if (provider === \"gemini\") return MODELS.find((m) => m.id === \"gemini-3.1-flash-lite-preview\")!;\n if (provider === \"glm\") return MODELS.find((m) => m.id === \"glm-5.1\")!;\n if (provider === \"moonshot\") return MODELS.find((m) => m.id === \"kimi-k2.6\")!;\n if (provider === \"minimax\") return MODELS.find((m) => m.id === \"MiniMax-M3\")!;\n if (provider === \"deepseek\") return MODELS.find((m) => m.id === \"deepseek-v4-pro\")!;\n if (provider === \"openrouter\") return MODELS.find((m) => m.id === \"qwen/qwen3.6-plus\")!;\n return MODELS.find((m) => m.id === \"claude-sonnet-4-6\")!;\n}\n\nexport interface ContextWindowOptions {\n provider?: Provider;\n accountId?: string;\n}\n\nexport function usesOpenAICodexTransport(options?: ContextWindowOptions): boolean {\n return options?.provider === \"openai\" && Boolean(options.accountId);\n}\n\nexport function getContextWindow(modelId: string, options?: ContextWindowOptions): number {\n const model = getModel(modelId);\n if (!model) return 200_000;\n if (usesOpenAICodexTransport(options) && model.codexContextWindow) {\n return model.codexContextWindow;\n }\n return model.contextWindow;\n}\n\n/**\n * The strongest thinking level the given model genuinely uses. Falls back to\n * `\"high\"` for unknown models since every provider we ship accepts it.\n */\nexport function getMaxThinkingLevel(modelId: string): ThinkingLevel {\n return getModel(modelId)?.maxThinkingLevel ?? \"high\";\n}\n\n/**\n * Get the model to use for compaction summarization.\n * - Anthropic: always Sonnet 4.6\n * - OpenAI: cheapest (Codex Mini)\n * - Gemini: use the current model\n * - GLM: GLM-4.7 Flash (cheap alternative)\n * - Moonshot: use the current model (no cheap alternative)\n */\nexport function getSummaryModel(provider: Provider, currentModelId: string): ModelInfo {\n if (provider === \"anthropic\") {\n return MODELS.find((m) => m.id === \"claude-sonnet-4-6\")!;\n }\n if (provider === \"openai\" || provider === \"glm\" || provider === \"deepseek\") {\n const low = getModelsForProvider(provider).find((m) => m.costTier === \"low\");\n if (low) return low;\n }\n // Moonshot or fallback: use current model\n return getModel(currentModelId) ?? getDefaultModel(provider);\n}\n"],"mappings":"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","names":[]}
|