@trydecember/cli 0.3.18 → 0.3.20
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 +1 -1
- package/dist/december.js +534 -97
- package/package.json +1 -1
- package/scripts/postinstall.js +20 -4
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ December is an AI coding agent that lives in your terminal. It understands your
|
|
|
10
10
|
|
|
11
11
|
- **Writes code & runs commands:** Ask it to build features, fix bugs, or run tests. It does the work for you.
|
|
12
12
|
- **Cloud Handoff:** Use _/handoff_ to continue your session on **<a href="https://trydecember.com" target="_blank">trydecember.com</a>**
|
|
13
|
-
- **Bring your own AI:** Use API keys for OpenAI, Anthropic, Gemini, and
|
|
13
|
+
- **Bring your own AI:** Use API keys for OpenAI, Anthropic, Gemini, and 20+ others, or log in via December to use December credits.
|
|
14
14
|
|
|
15
15
|
### Get Started
|
|
16
16
|
|
package/dist/december.js
CHANGED
|
@@ -654,21 +654,33 @@ function getModelContextWindow(value) {
|
|
|
654
654
|
}
|
|
655
655
|
if (lower.includes("gemini"))
|
|
656
656
|
return 1e6;
|
|
657
|
+
if (lower.includes("claude-5") || lower.includes("opus-5") || lower.includes("sonnet-5") || lower.includes("fable-5"))
|
|
658
|
+
return 1e6;
|
|
657
659
|
if (lower.includes("claude"))
|
|
658
660
|
return 200000;
|
|
659
|
-
if (lower.includes("
|
|
660
|
-
return
|
|
661
|
+
if (lower.includes("grok"))
|
|
662
|
+
return 500000;
|
|
663
|
+
if (lower.includes("codestral") || lower.includes("mistral-large") || lower.includes("devstral") || lower.includes("ministral") || lower.includes("mistral-medium") || lower.includes("mistral-small") || lower.includes("command-a"))
|
|
664
|
+
return 262144;
|
|
665
|
+
if (lower.includes("gpt-5.6") || lower.includes("gpt-5.5"))
|
|
666
|
+
return 1050000;
|
|
667
|
+
if (lower.includes("gpt-5.4"))
|
|
668
|
+
return 400000;
|
|
661
669
|
if (lower.includes("gpt-5"))
|
|
662
670
|
return 200000;
|
|
671
|
+
if (lower.includes("o4") || lower.includes("o3") || lower.includes("o1"))
|
|
672
|
+
return 200000;
|
|
673
|
+
if (lower.includes("deepseek-v4"))
|
|
674
|
+
return 1e6;
|
|
663
675
|
if (lower.includes("gpt-4.5"))
|
|
664
676
|
return 128000;
|
|
665
677
|
if (lower.includes("gpt-4"))
|
|
666
678
|
return 128000;
|
|
667
679
|
if (lower.includes("gpt-3.5"))
|
|
668
680
|
return 16385;
|
|
669
|
-
if (lower.includes("deepseek"))
|
|
681
|
+
if (lower.includes("deepseek") || lower.includes("glm"))
|
|
670
682
|
return 128000;
|
|
671
|
-
if (lower.includes("llama-3.3") || lower.includes("llama-3.1") || lower.includes("llama3.3") || lower.includes("llama3.1") || lower.includes("mistral-nemo")) {
|
|
683
|
+
if (lower.includes("llama-4") || lower.includes("llama-3.3") || lower.includes("llama-3.1") || lower.includes("llama3.3") || lower.includes("llama3.1") || lower.includes("mistral-nemo") || lower.includes("gpt-oss")) {
|
|
672
684
|
return 128000;
|
|
673
685
|
}
|
|
674
686
|
if (lower.includes("qwen2.5-coder") || lower.includes("qwen2.5") || lower.includes("qwen")) {
|
|
@@ -700,31 +712,41 @@ var init_models = __esm(() => {
|
|
|
700
712
|
"gemini-3.5-flash": 1e6,
|
|
701
713
|
"gemini-3.5-flash-lite": 1e6,
|
|
702
714
|
"gemini-3-pro-preview": 1e6,
|
|
703
|
-
"gemini-3.1-pro": 1e6,
|
|
704
715
|
"gemini-2.5-pro": 1e6,
|
|
705
716
|
"gemini-2.5-flash": 1e6,
|
|
706
|
-
"
|
|
707
|
-
"
|
|
708
|
-
"claude-
|
|
709
|
-
"claude-
|
|
710
|
-
"claude-
|
|
711
|
-
"claude-
|
|
712
|
-
"claude-
|
|
713
|
-
"claude-
|
|
714
|
-
"claude-
|
|
715
|
-
"
|
|
716
|
-
"
|
|
717
|
-
"
|
|
718
|
-
"gpt-5.
|
|
719
|
-
"gpt-5.
|
|
720
|
-
"
|
|
721
|
-
|
|
722
|
-
"
|
|
717
|
+
"gemini-1.5-pro": 1e6,
|
|
718
|
+
"gemini-1.5-flash": 1e6,
|
|
719
|
+
"claude-opus-5": 1e6,
|
|
720
|
+
"claude-sonnet-5": 1e6,
|
|
721
|
+
"claude-fable-5": 1e6,
|
|
722
|
+
"claude-haiku-4.5": 200000,
|
|
723
|
+
"claude-opus-4.8": 200000,
|
|
724
|
+
"claude-opus-4.7": 200000,
|
|
725
|
+
"claude-sonnet-4.6": 200000,
|
|
726
|
+
"claude-opus-4.6": 200000,
|
|
727
|
+
"claude-opus-4.5": 200000,
|
|
728
|
+
"claude-sonnet-4.5": 200000,
|
|
729
|
+
"gpt-5.6-sol": 1050000,
|
|
730
|
+
"gpt-5.6-terra": 1050000,
|
|
731
|
+
"gpt-5.6-luna": 1050000,
|
|
732
|
+
"gpt-5.5-pro": 1050000,
|
|
733
|
+
"gpt-5.5": 1050000,
|
|
734
|
+
"gpt-5.4-pro": 400000,
|
|
735
|
+
"gpt-5.4-mini": 400000,
|
|
736
|
+
"o4-mini": 200000,
|
|
737
|
+
"o3-pro": 200000,
|
|
738
|
+
o3: 200000,
|
|
739
|
+
"o1-pro": 200000,
|
|
723
740
|
"gpt-4o": 128000,
|
|
724
741
|
"gpt-4o-mini": 128000,
|
|
725
|
-
"
|
|
726
|
-
"deepseek-
|
|
727
|
-
"
|
|
742
|
+
"deepseek-v4-pro": 1e6,
|
|
743
|
+
"deepseek-v4-flash": 1e6,
|
|
744
|
+
"grok-4.6": 500000,
|
|
745
|
+
"grok-4.5": 500000,
|
|
746
|
+
"grok-4.3": 500000,
|
|
747
|
+
"grok-4.20": 500000,
|
|
748
|
+
"grok-build-0.1": 500000,
|
|
749
|
+
"command-a-03-2025": 256000
|
|
728
750
|
};
|
|
729
751
|
});
|
|
730
752
|
|
|
@@ -9568,11 +9590,48 @@ function resolveOpenAIModel(model) {
|
|
|
9568
9590
|
}
|
|
9569
9591
|
return name;
|
|
9570
9592
|
}
|
|
9593
|
+
function normalizeErrorResponse(text) {
|
|
9594
|
+
try {
|
|
9595
|
+
const data = JSON.parse(text);
|
|
9596
|
+
if (data && typeof data === "object") {
|
|
9597
|
+
if (typeof data.error === "string") {
|
|
9598
|
+
return JSON.stringify({ error: { message: data.error } });
|
|
9599
|
+
}
|
|
9600
|
+
if (!data.error) {
|
|
9601
|
+
const message = data.message || data.detail || data.msg || data.error_msg || data.title;
|
|
9602
|
+
if (message) {
|
|
9603
|
+
return JSON.stringify({
|
|
9604
|
+
error: {
|
|
9605
|
+
message: typeof message === "string" ? message : JSON.stringify(message),
|
|
9606
|
+
type: data.type || "api_error",
|
|
9607
|
+
code: data.code
|
|
9608
|
+
}
|
|
9609
|
+
});
|
|
9610
|
+
}
|
|
9611
|
+
}
|
|
9612
|
+
}
|
|
9613
|
+
} catch {}
|
|
9614
|
+
return text;
|
|
9615
|
+
}
|
|
9616
|
+
async function providerFetch(url, init) {
|
|
9617
|
+
const res = await fetch(url, init);
|
|
9618
|
+
if (!res.ok) {
|
|
9619
|
+
const text = await res.text();
|
|
9620
|
+
const normalized = normalizeErrorResponse(text);
|
|
9621
|
+
return new Response(normalized, {
|
|
9622
|
+
status: res.status,
|
|
9623
|
+
statusText: res.statusText,
|
|
9624
|
+
headers: res.headers
|
|
9625
|
+
});
|
|
9626
|
+
}
|
|
9627
|
+
return res;
|
|
9628
|
+
}
|
|
9571
9629
|
function openaiProvider(baseURL, apiKey, defaultHeaders, customClient) {
|
|
9572
9630
|
const client = customClient || new OpenAI({
|
|
9573
9631
|
baseURL,
|
|
9574
9632
|
apiKey: apiKey || process.env.OPENAI_API_KEY || "dummy-key",
|
|
9575
|
-
defaultHeaders
|
|
9633
|
+
defaultHeaders,
|
|
9634
|
+
fetch: providerFetch
|
|
9576
9635
|
});
|
|
9577
9636
|
return createProvider({
|
|
9578
9637
|
id: "openai",
|
|
@@ -104080,9 +104139,9 @@ var init_gemini = __esm(() => {
|
|
|
104080
104139
|
});
|
|
104081
104140
|
|
|
104082
104141
|
// ../../packages/providers/src/providers/openrouter.ts
|
|
104083
|
-
function openrouterProvider(apiKey) {
|
|
104142
|
+
function openrouterProvider(apiKey, customBaseProvider) {
|
|
104084
104143
|
const key = apiKey || process.env.OPENROUTER_API_KEY;
|
|
104085
|
-
const baseProvider = openaiProvider("https://openrouter.ai/api/v1", key, {
|
|
104144
|
+
const baseProvider = customBaseProvider || openaiProvider("https://openrouter.ai/api/v1", key, {
|
|
104086
104145
|
"HTTP-Referer": "https://trydecember.com",
|
|
104087
104146
|
"X-Title": "December"
|
|
104088
104147
|
});
|
|
@@ -104234,6 +104293,114 @@ var init_zai = __esm(() => {
|
|
|
104234
104293
|
};
|
|
104235
104294
|
});
|
|
104236
104295
|
|
|
104296
|
+
// ../../packages/providers/src/providers/nvidia.ts
|
|
104297
|
+
var NvidiaProvider;
|
|
104298
|
+
var init_nvidia = __esm(() => {
|
|
104299
|
+
init_openai2();
|
|
104300
|
+
NvidiaProvider = class NvidiaProvider extends OpenAIProvider {
|
|
104301
|
+
id = "nvidia";
|
|
104302
|
+
constructor(apiKey) {
|
|
104303
|
+
super("https://integrate.api.nvidia.com/v1", apiKey || process.env.NVIDIA_API_KEY);
|
|
104304
|
+
}
|
|
104305
|
+
};
|
|
104306
|
+
});
|
|
104307
|
+
|
|
104308
|
+
// ../../packages/providers/src/providers/sambanova.ts
|
|
104309
|
+
var SambaNovaProvider;
|
|
104310
|
+
var init_sambanova = __esm(() => {
|
|
104311
|
+
init_openai2();
|
|
104312
|
+
SambaNovaProvider = class SambaNovaProvider extends OpenAIProvider {
|
|
104313
|
+
id = "sambanova";
|
|
104314
|
+
constructor(apiKey) {
|
|
104315
|
+
super("https://api.sambanova.ai/v1", apiKey || process.env.SAMBANOVA_API_KEY);
|
|
104316
|
+
}
|
|
104317
|
+
};
|
|
104318
|
+
});
|
|
104319
|
+
|
|
104320
|
+
// ../../packages/providers/src/providers/cerebras.ts
|
|
104321
|
+
var CerebrasProvider;
|
|
104322
|
+
var init_cerebras = __esm(() => {
|
|
104323
|
+
init_openai2();
|
|
104324
|
+
CerebrasProvider = class CerebrasProvider extends OpenAIProvider {
|
|
104325
|
+
id = "cerebras";
|
|
104326
|
+
constructor(apiKey) {
|
|
104327
|
+
super("https://api.cerebras.ai/v1", apiKey || process.env.CEREBRAS_API_KEY);
|
|
104328
|
+
}
|
|
104329
|
+
};
|
|
104330
|
+
});
|
|
104331
|
+
|
|
104332
|
+
// ../../packages/providers/src/providers/siliconflow.ts
|
|
104333
|
+
var SiliconFlowProvider;
|
|
104334
|
+
var init_siliconflow = __esm(() => {
|
|
104335
|
+
init_openai2();
|
|
104336
|
+
SiliconFlowProvider = class SiliconFlowProvider extends OpenAIProvider {
|
|
104337
|
+
id = "siliconflow";
|
|
104338
|
+
constructor(apiKey) {
|
|
104339
|
+
super("https://api.siliconflow.cn/v1", apiKey || process.env.SILICONFLOW_API_KEY);
|
|
104340
|
+
}
|
|
104341
|
+
};
|
|
104342
|
+
});
|
|
104343
|
+
|
|
104344
|
+
// ../../packages/providers/src/providers/together.ts
|
|
104345
|
+
var TogetherProvider;
|
|
104346
|
+
var init_together = __esm(() => {
|
|
104347
|
+
init_openai2();
|
|
104348
|
+
TogetherProvider = class TogetherProvider extends OpenAIProvider {
|
|
104349
|
+
id = "together";
|
|
104350
|
+
constructor(apiKey) {
|
|
104351
|
+
super("https://api.together.xyz/v1", apiKey || process.env.TOGETHER_API_KEY);
|
|
104352
|
+
}
|
|
104353
|
+
};
|
|
104354
|
+
});
|
|
104355
|
+
|
|
104356
|
+
// ../../packages/providers/src/providers/hyperbolic.ts
|
|
104357
|
+
var HyperbolicProvider;
|
|
104358
|
+
var init_hyperbolic = __esm(() => {
|
|
104359
|
+
init_openai2();
|
|
104360
|
+
HyperbolicProvider = class HyperbolicProvider extends OpenAIProvider {
|
|
104361
|
+
id = "hyperbolic";
|
|
104362
|
+
constructor(apiKey) {
|
|
104363
|
+
super("https://api.hyperbolic.xyz/v1", apiKey || process.env.HYPERBOLIC_API_KEY);
|
|
104364
|
+
}
|
|
104365
|
+
};
|
|
104366
|
+
});
|
|
104367
|
+
|
|
104368
|
+
// ../../packages/providers/src/providers/fireworks.ts
|
|
104369
|
+
var FireworksProvider;
|
|
104370
|
+
var init_fireworks = __esm(() => {
|
|
104371
|
+
init_openai2();
|
|
104372
|
+
FireworksProvider = class FireworksProvider extends OpenAIProvider {
|
|
104373
|
+
id = "fireworks";
|
|
104374
|
+
constructor(apiKey) {
|
|
104375
|
+
super("https://api.fireworks.ai/inference/v1", apiKey || process.env.FIREWORKS_API_KEY);
|
|
104376
|
+
}
|
|
104377
|
+
};
|
|
104378
|
+
});
|
|
104379
|
+
|
|
104380
|
+
// ../../packages/providers/src/providers/perplexity.ts
|
|
104381
|
+
var PerplexityProvider;
|
|
104382
|
+
var init_perplexity = __esm(() => {
|
|
104383
|
+
init_openai2();
|
|
104384
|
+
PerplexityProvider = class PerplexityProvider extends OpenAIProvider {
|
|
104385
|
+
id = "perplexity";
|
|
104386
|
+
constructor(apiKey) {
|
|
104387
|
+
super("https://api.perplexity.ai", apiKey || process.env.PERPLEXITY_API_KEY);
|
|
104388
|
+
}
|
|
104389
|
+
};
|
|
104390
|
+
});
|
|
104391
|
+
|
|
104392
|
+
// ../../packages/providers/src/providers/cohere.ts
|
|
104393
|
+
var CohereProvider;
|
|
104394
|
+
var init_cohere = __esm(() => {
|
|
104395
|
+
init_openai2();
|
|
104396
|
+
CohereProvider = class CohereProvider extends OpenAIProvider {
|
|
104397
|
+
id = "cohere";
|
|
104398
|
+
constructor(apiKey) {
|
|
104399
|
+
super("https://api.cohere.com/v2", apiKey || process.env.COHERE_API_KEY);
|
|
104400
|
+
}
|
|
104401
|
+
};
|
|
104402
|
+
});
|
|
104403
|
+
|
|
104237
104404
|
// ../../packages/providers/src/providers/ollama.ts
|
|
104238
104405
|
function resolveOllamaModel(model) {
|
|
104239
104406
|
let name = model || "qwen2.5-coder:7b";
|
|
@@ -104375,18 +104542,27 @@ var init_ollama = __esm(() => {
|
|
|
104375
104542
|
var exports_src3 = {};
|
|
104376
104543
|
__export(exports_src3, {
|
|
104377
104544
|
AnthropicProvider: () => AnthropicProvider,
|
|
104545
|
+
CerebrasProvider: () => CerebrasProvider,
|
|
104546
|
+
CohereProvider: () => CohereProvider,
|
|
104378
104547
|
DeepSeekProvider: () => DeepSeekProvider,
|
|
104548
|
+
FireworksProvider: () => FireworksProvider,
|
|
104379
104549
|
GeminiProvider: () => GeminiProvider,
|
|
104380
104550
|
GroqProvider: () => GroqProvider,
|
|
104381
104551
|
HuggingFaceProvider: () => HuggingFaceProvider,
|
|
104552
|
+
HyperbolicProvider: () => HyperbolicProvider,
|
|
104382
104553
|
KimiProvider: () => KimiProvider,
|
|
104383
104554
|
MODEL_CONTEXT_WINDOWS: () => MODEL_CONTEXT_WINDOWS,
|
|
104384
104555
|
MistralProvider: () => MistralProvider,
|
|
104385
104556
|
MoonshotProvider: () => MoonshotProvider,
|
|
104557
|
+
NvidiaProvider: () => NvidiaProvider,
|
|
104386
104558
|
OPENROUTER_DEFAULT_MAX_TOKENS: () => OPENROUTER_DEFAULT_MAX_TOKENS,
|
|
104387
104559
|
OPENROUTER_MIN_AFFORDABLE_TOKENS: () => OPENROUTER_MIN_AFFORDABLE_TOKENS,
|
|
104388
104560
|
OllamaProvider: () => OllamaProvider,
|
|
104389
104561
|
OpenAIProvider: () => OpenAIProvider,
|
|
104562
|
+
PerplexityProvider: () => PerplexityProvider,
|
|
104563
|
+
SambaNovaProvider: () => SambaNovaProvider,
|
|
104564
|
+
SiliconFlowProvider: () => SiliconFlowProvider,
|
|
104565
|
+
TogetherProvider: () => TogetherProvider,
|
|
104390
104566
|
XAIProvider: () => XAIProvider,
|
|
104391
104567
|
ZAIProvider: () => ZAIProvider,
|
|
104392
104568
|
anthropicProvider: () => anthropicProvider,
|
|
@@ -104418,6 +104594,15 @@ var init_src3 = __esm(() => {
|
|
|
104418
104594
|
init_moonshot();
|
|
104419
104595
|
init_xai();
|
|
104420
104596
|
init_zai();
|
|
104597
|
+
init_nvidia();
|
|
104598
|
+
init_sambanova();
|
|
104599
|
+
init_cerebras();
|
|
104600
|
+
init_siliconflow();
|
|
104601
|
+
init_together();
|
|
104602
|
+
init_hyperbolic();
|
|
104603
|
+
init_fireworks();
|
|
104604
|
+
init_perplexity();
|
|
104605
|
+
init_cohere();
|
|
104421
104606
|
init_ollama();
|
|
104422
104607
|
});
|
|
104423
104608
|
|
|
@@ -108985,6 +109170,9 @@ async function streamAssistantResponse(agent, eventQueue, signal, turnCount = 1)
|
|
|
108985
109170
|
});
|
|
108986
109171
|
}
|
|
108987
109172
|
const tc = activeToolCalls.get(chunk.id);
|
|
109173
|
+
if (chunk.name && !tc.name) {
|
|
109174
|
+
tc.name = chunk.name;
|
|
109175
|
+
}
|
|
108988
109176
|
if (chunk.inputDelta) {
|
|
108989
109177
|
tc.input += chunk.inputDelta;
|
|
108990
109178
|
}
|
|
@@ -179626,13 +179814,35 @@ function instantiateProvider(provider, apiKey) {
|
|
|
179626
179814
|
return anthropicProvider("https://api.kimi.com/coding", apiKey);
|
|
179627
179815
|
case "moonshot":
|
|
179628
179816
|
case "moonshoot":
|
|
179629
|
-
return openaiProvider("https://api.moonshot.
|
|
179817
|
+
return openaiProvider("https://api.moonshot.ai/v1", apiKey);
|
|
179630
179818
|
case "mistral":
|
|
179631
179819
|
return openaiProvider("https://api.mistral.ai/v1", apiKey);
|
|
179632
179820
|
case "xai":
|
|
179633
179821
|
return openaiProvider("https://api.x.ai/v1", apiKey);
|
|
179634
179822
|
case "zai":
|
|
179635
|
-
return openaiProvider("https://api.
|
|
179823
|
+
return openaiProvider("https://api.z.ai/api/coding/paas/v4", apiKey);
|
|
179824
|
+
case "nvidia":
|
|
179825
|
+
case "nim":
|
|
179826
|
+
return openaiProvider("https://integrate.api.nvidia.com/v1", apiKey);
|
|
179827
|
+
case "sambanova":
|
|
179828
|
+
return openaiProvider("https://api.sambanova.ai/v1", apiKey);
|
|
179829
|
+
case "cerebras":
|
|
179830
|
+
return openaiProvider("https://api.cerebras.ai/v1", apiKey);
|
|
179831
|
+
case "siliconflow":
|
|
179832
|
+
case "siliconcloud":
|
|
179833
|
+
return openaiProvider("https://api.siliconflow.cn/v1", apiKey);
|
|
179834
|
+
case "together":
|
|
179835
|
+
case "togetherai":
|
|
179836
|
+
return openaiProvider("https://api.together.xyz/v1", apiKey);
|
|
179837
|
+
case "hyperbolic":
|
|
179838
|
+
return openaiProvider("https://api.hyperbolic.xyz/v1", apiKey);
|
|
179839
|
+
case "fireworks":
|
|
179840
|
+
case "fireworksai":
|
|
179841
|
+
return openaiProvider("https://api.fireworks.ai/inference/v1", apiKey);
|
|
179842
|
+
case "perplexity":
|
|
179843
|
+
return openaiProvider("https://api.perplexity.ai", apiKey);
|
|
179844
|
+
case "cohere":
|
|
179845
|
+
return openaiProvider("https://api.cohere.com/v2", apiKey);
|
|
179636
179846
|
case "ollama": {
|
|
179637
179847
|
let endpoint = "http://localhost:11434/v1";
|
|
179638
179848
|
if (apiKey && (apiKey.startsWith("http://") || apiKey.startsWith("https://"))) {
|
|
@@ -265964,20 +266174,35 @@ function formatProviderName(provider) {
|
|
|
265964
266174
|
function ByokKeyMenu(props) {
|
|
265965
266175
|
const { selectedProvider, apiKey, setApiKey, handleKeySubmit, isStreaming, authError } = props;
|
|
265966
266176
|
const formattedProvider = formatProviderName(selectedProvider);
|
|
266177
|
+
const keyUrl = selectedProvider ? PROVIDER_KEY_URLS[selectedProvider] : undefined;
|
|
265967
266178
|
return /* @__PURE__ */ jsx_runtime21.jsxs(Box_default, {
|
|
265968
266179
|
flexDirection: "column",
|
|
265969
266180
|
paddingX: THEME.padding.paddingX,
|
|
265970
266181
|
children: [
|
|
265971
|
-
/* @__PURE__ */ jsx_runtime21.
|
|
266182
|
+
/* @__PURE__ */ jsx_runtime21.jsxs(Box_default, {
|
|
266183
|
+
flexDirection: "column",
|
|
265972
266184
|
marginBottom: 1,
|
|
265973
|
-
children:
|
|
265974
|
-
|
|
265975
|
-
|
|
265976
|
-
|
|
265977
|
-
|
|
265978
|
-
|
|
265979
|
-
|
|
265980
|
-
|
|
266185
|
+
children: [
|
|
266186
|
+
/* @__PURE__ */ jsx_runtime21.jsxs(Text3, {
|
|
266187
|
+
color: THEME.colors.text,
|
|
266188
|
+
children: [
|
|
266189
|
+
"Enter API Key for ",
|
|
266190
|
+
formattedProvider,
|
|
266191
|
+
":"
|
|
266192
|
+
]
|
|
266193
|
+
}),
|
|
266194
|
+
keyUrl && /* @__PURE__ */ jsx_runtime21.jsxs(Text3, {
|
|
266195
|
+
italic: true,
|
|
266196
|
+
color: THEME.colors.text,
|
|
266197
|
+
children: [
|
|
266198
|
+
"Don't have an API key? Get one at ",
|
|
266199
|
+
/* @__PURE__ */ jsx_runtime21.jsx(Text3, {
|
|
266200
|
+
color: THEME.colors.brand,
|
|
266201
|
+
children: keyUrl
|
|
266202
|
+
})
|
|
266203
|
+
]
|
|
266204
|
+
})
|
|
266205
|
+
]
|
|
265981
266206
|
}),
|
|
265982
266207
|
/* @__PURE__ */ jsx_runtime21.jsxs(Box_default, {
|
|
265983
266208
|
children: [
|
|
@@ -266019,7 +266244,7 @@ function ByokKeyMenu(props) {
|
|
|
266019
266244
|
]
|
|
266020
266245
|
});
|
|
266021
266246
|
}
|
|
266022
|
-
var jsx_runtime21, PROVIDER_NAMES;
|
|
266247
|
+
var jsx_runtime21, PROVIDER_NAMES, PROVIDER_KEY_URLS;
|
|
266023
266248
|
var init_byok_key_menu = __esm(async () => {
|
|
266024
266249
|
init_theme();
|
|
266025
266250
|
await __promiseAll([
|
|
@@ -266031,19 +266256,59 @@ var init_byok_key_menu = __esm(async () => {
|
|
|
266031
266256
|
jsx_runtime21 = __toESM(require_jsx_runtime(), 1);
|
|
266032
266257
|
PROVIDER_NAMES = {
|
|
266033
266258
|
anthropic: "Anthropic",
|
|
266259
|
+
cerebras: "Cerebras",
|
|
266260
|
+
cohere: "Cohere",
|
|
266034
266261
|
deepseek: "DeepSeek",
|
|
266262
|
+
fireworks: "Fireworks AI",
|
|
266035
266263
|
google: "Google",
|
|
266036
266264
|
groq: "Groq",
|
|
266037
266265
|
huggingface: "Hugging Face",
|
|
266266
|
+
hyperbolic: "Hyperbolic",
|
|
266038
266267
|
kimi: "Kimi",
|
|
266039
266268
|
mistral: "Mistral",
|
|
266269
|
+
moonshot: "Moonshot AI",
|
|
266040
266270
|
moonshoot: "Moonshoot AI",
|
|
266271
|
+
nvidia: "NVIDIA NIM",
|
|
266041
266272
|
ollama: "Ollama",
|
|
266042
266273
|
openai: "OpenAI",
|
|
266043
266274
|
openrouter: "OpenRouter",
|
|
266275
|
+
perplexity: "Perplexity AI",
|
|
266276
|
+
sambanova: "SambaNova Cloud",
|
|
266277
|
+
siliconflow: "SiliconFlow",
|
|
266278
|
+
together: "Together AI",
|
|
266044
266279
|
xAI: "xAI",
|
|
266280
|
+
xai: "xAI",
|
|
266045
266281
|
zai: "ZAI"
|
|
266046
266282
|
};
|
|
266283
|
+
PROVIDER_KEY_URLS = {
|
|
266284
|
+
anthropic: "https://console.anthropic.com/settings/keys",
|
|
266285
|
+
cerebras: "https://cloud.cerebras.ai/",
|
|
266286
|
+
cohere: "https://dashboard.cohere.com/api-keys",
|
|
266287
|
+
deepseek: "https://platform.deepseek.com/api_keys",
|
|
266288
|
+
fireworks: "https://app.fireworks.ai/api-keys",
|
|
266289
|
+
google: "https://aistudio.google.com/app/apikey",
|
|
266290
|
+
gemini: "https://aistudio.google.com/app/apikey",
|
|
266291
|
+
groq: "https://console.groq.com/keys",
|
|
266292
|
+
huggingface: "https://huggingface.co/settings/tokens",
|
|
266293
|
+
hyperbolic: "https://app.hyperbolic.ai/settings",
|
|
266294
|
+
kimi: "https://platform.moonshot.ai/console/api-keys",
|
|
266295
|
+
mistral: "https://console.mistral.ai/api-keys/",
|
|
266296
|
+
moonshot: "https://platform.moonshot.ai/console/api-keys",
|
|
266297
|
+
moonshoot: "https://platform.moonshot.ai/console/api-keys",
|
|
266298
|
+
nvidia: "https://build.nvidia.com/",
|
|
266299
|
+
ollama: "https://ollama.com/download",
|
|
266300
|
+
openai: "https://platform.openai.com/api-keys",
|
|
266301
|
+
openrouter: "https://openrouter.ai/settings/keys",
|
|
266302
|
+
perplexity: "https://www.perplexity.ai/settings/api",
|
|
266303
|
+
sambanova: "https://cloud.sambanova.ai/apis",
|
|
266304
|
+
siliconflow: "https://cloud.siliconflow.cn/account/ak",
|
|
266305
|
+
siliconcloud: "https://cloud.siliconflow.cn/account/ak",
|
|
266306
|
+
together: "https://api.together.ai/settings/api-keys",
|
|
266307
|
+
togetherai: "https://api.together.ai/settings/api-keys",
|
|
266308
|
+
xAI: "https://console.x.ai/",
|
|
266309
|
+
xai: "https://console.x.ai/",
|
|
266310
|
+
zai: "https://open.bigmodel.cn/usercenter/apikeys"
|
|
266311
|
+
};
|
|
266047
266312
|
});
|
|
266048
266313
|
|
|
266049
266314
|
// ../../node_modules/.bun/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js
|
|
@@ -266493,16 +266758,25 @@ function ByokProviderMenu(props) {
|
|
|
266493
266758
|
/* @__PURE__ */ jsx_runtime22.jsx(SelectInput_default, {
|
|
266494
266759
|
items: [
|
|
266495
266760
|
{ label: "Anthropic", value: "anthropic" },
|
|
266761
|
+
{ label: "Cerebras", value: "cerebras" },
|
|
266762
|
+
{ label: "Cohere", value: "cohere" },
|
|
266496
266763
|
{ label: "DeepSeek", value: "deepseek" },
|
|
266764
|
+
{ label: "Fireworks AI", value: "fireworks" },
|
|
266497
266765
|
{ label: "Google", value: "google" },
|
|
266498
266766
|
{ label: "Groq", value: "groq" },
|
|
266499
266767
|
{ label: "Hugging Face", value: "huggingface" },
|
|
266768
|
+
{ label: "Hyperbolic", value: "hyperbolic" },
|
|
266500
266769
|
{ label: "Kimi", value: "kimi" },
|
|
266501
266770
|
{ label: "Mistral", value: "mistral" },
|
|
266502
266771
|
{ label: "Moonshot AI", value: "moonshot" },
|
|
266772
|
+
{ label: "NVIDIA NIM", value: "nvidia" },
|
|
266503
266773
|
{ label: "Ollama (Local Models)", value: "ollama" },
|
|
266504
266774
|
{ label: "OpenAI", value: "openai" },
|
|
266505
266775
|
{ label: "OpenRouter", value: "openrouter" },
|
|
266776
|
+
{ label: "Perplexity AI", value: "perplexity" },
|
|
266777
|
+
{ label: "SambaNova Cloud", value: "sambanova" },
|
|
266778
|
+
{ label: "SiliconFlow", value: "siliconflow" },
|
|
266779
|
+
{ label: "Together AI", value: "together" },
|
|
266506
266780
|
{ label: "xAI", value: "xai" },
|
|
266507
266781
|
{ label: "ZAI", value: "zai" }
|
|
266508
266782
|
],
|
|
@@ -269623,6 +269897,7 @@ __export(exports_src6, {
|
|
|
269623
269897
|
MessageList: () => MessageList,
|
|
269624
269898
|
ModelSelectMenu: () => ModelSelectMenu,
|
|
269625
269899
|
OllamaSetupMenu: () => OllamaSetupMenu,
|
|
269900
|
+
PROVIDER_KEY_URLS: () => PROVIDER_KEY_URLS,
|
|
269626
269901
|
PROVIDER_NAMES: () => PROVIDER_NAMES,
|
|
269627
269902
|
Pill: () => Pill,
|
|
269628
269903
|
PlanApproveMenu: () => PlanApproveMenu,
|
|
@@ -270450,6 +270725,10 @@ async function fetchOpenRouterModels(apiKey, forceRefresh = false) {
|
|
|
270450
270725
|
var FALLBACK_OPENROUTER_MODELS, cachedModels = null, cacheTimestamp = 0, CACHE_TTL_MS;
|
|
270451
270726
|
var init_openrouter_models = __esm(() => {
|
|
270452
270727
|
FALLBACK_OPENROUTER_MODELS = [
|
|
270728
|
+
{
|
|
270729
|
+
label: "(free) Google: Gemma 4 26B A4B",
|
|
270730
|
+
value: "google/gemma-4-26b-a4b-it:free"
|
|
270731
|
+
},
|
|
270453
270732
|
{
|
|
270454
270733
|
label: "(free) Meta: Llama 3 8B Instruct",
|
|
270455
270734
|
value: "meta-llama/llama-3-8b-instruct:free"
|
|
@@ -270462,19 +270741,23 @@ var init_openrouter_models = __esm(() => {
|
|
|
270462
270741
|
label: "(free) DeepSeek: DeepSeek R1",
|
|
270463
270742
|
value: "deepseek/deepseek-r1:free"
|
|
270464
270743
|
},
|
|
270465
|
-
{
|
|
270466
|
-
|
|
270467
|
-
value: "google/gemini-2.0-flash-exp:free"
|
|
270468
|
-
},
|
|
270744
|
+
{ label: "Anthropic: Claude Opus 5", value: "anthropic/claude-opus-5" },
|
|
270745
|
+
{ label: "Anthropic: Claude Sonnet 5", value: "anthropic/claude-sonnet-5" },
|
|
270469
270746
|
{ label: "Anthropic: Claude 3.7 Sonnet", value: "anthropic/claude-3.7-sonnet" },
|
|
270470
270747
|
{ label: "Anthropic: Claude 3.5 Sonnet", value: "anthropic/claude-3.5-sonnet" },
|
|
270471
270748
|
{ label: "DeepSeek: DeepSeek R1", value: "deepseek/deepseek-r1" },
|
|
270472
270749
|
{ label: "DeepSeek: DeepSeek V3", value: "deepseek/deepseek-chat" },
|
|
270473
270750
|
{ label: "Google: Gemini 3.7 Flash", value: "google/gemini-3.7-flash" },
|
|
270474
270751
|
{ label: "Google: Gemini 3.6 Flash", value: "google/gemini-3.6-flash" },
|
|
270752
|
+
{ label: "Meta: Llama 4 Scout", value: "meta-llama/llama-4-scout" },
|
|
270475
270753
|
{ label: "Meta: Llama 3.3 70B Instruct", value: "meta-llama/llama-3.3-70b-instruct" },
|
|
270754
|
+
{ label: "Mistral: Mistral Large", value: "mistralai/mistral-large-2512" },
|
|
270755
|
+
{ label: "Mistral: Codestral", value: "mistralai/codestral-2508" },
|
|
270756
|
+
{ label: "OpenAI: GPT-5.6 Sol", value: "openai/gpt-5.6-sol" },
|
|
270757
|
+
{ label: "OpenAI: GPT-5.4 Mini", value: "openai/gpt-5.4-mini" },
|
|
270476
270758
|
{ label: "OpenAI: GPT-4o", value: "openai/gpt-4o" },
|
|
270477
|
-
{ label: "OpenAI: o3-mini", value: "openai/o3-mini" }
|
|
270759
|
+
{ label: "OpenAI: o3-mini", value: "openai/o3-mini" },
|
|
270760
|
+
{ label: "SpaceXAI: Grok 4.6", value: "x-ai/grok-4.6" }
|
|
270478
270761
|
];
|
|
270479
270762
|
CACHE_TTL_MS = 10 * 60 * 1000;
|
|
270480
270763
|
});
|
|
@@ -270554,107 +270837,211 @@ var getProviderModels = (provider) => {
|
|
|
270554
270837
|
switch (provider) {
|
|
270555
270838
|
case "anthropic":
|
|
270556
270839
|
return [
|
|
270557
|
-
{ label: "Claude
|
|
270558
|
-
{ label: "Claude Opus 5", value: "claude-opus-5" },
|
|
270840
|
+
{ label: "Claude Opus 5 (Recommended)", value: "claude-opus-5" },
|
|
270559
270841
|
{ label: "Claude Sonnet 5", value: "claude-sonnet-5" },
|
|
270560
|
-
{ label: "Claude
|
|
270561
|
-
{ label: "Claude
|
|
270562
|
-
{ label: "Claude
|
|
270563
|
-
{ label: "Claude
|
|
270564
|
-
{ label: "Claude
|
|
270565
|
-
{ label: "Claude
|
|
270842
|
+
{ label: "Claude Fable 5", value: "claude-fable-5" },
|
|
270843
|
+
{ label: "Claude Haiku 4.5", value: "claude-haiku-4.5" },
|
|
270844
|
+
{ label: "Claude Opus 4.8", value: "claude-opus-4.8" },
|
|
270845
|
+
{ label: "Claude Opus 4.7", value: "claude-opus-4.7" },
|
|
270846
|
+
{ label: "Claude Sonnet 4.6", value: "claude-sonnet-4.6" },
|
|
270847
|
+
{ label: "Claude Opus 4.6", value: "claude-opus-4.6" },
|
|
270848
|
+
{ label: "Claude Opus 4.5", value: "claude-opus-4.5" },
|
|
270849
|
+
{ label: "Claude Sonnet 4.5", value: "claude-sonnet-4.5" }
|
|
270566
270850
|
];
|
|
270567
270851
|
case "google":
|
|
270568
270852
|
case "gemini":
|
|
270569
270853
|
return [
|
|
270854
|
+
{ label: "Gemini 3.7 Flash (Recommended)", value: "gemini-3.7-flash" },
|
|
270570
270855
|
{ label: "Gemini 3.6 Flash", value: "gemini-3.6-flash" },
|
|
270571
|
-
{ label: "Gemini 3.7 Flash", value: "gemini-3.7-flash" },
|
|
270572
|
-
{ label: "Gemini 2.5 Flash", value: "gemini-2.5-flash" },
|
|
270573
|
-
{ label: "Gemini 2.5 Pro", value: "gemini-2.5-pro" },
|
|
270574
270856
|
{ label: "Gemini 3.5 Flash", value: "gemini-3.5-flash" },
|
|
270575
270857
|
{ label: "Gemini 3.5 Flash Lite", value: "gemini-3.5-flash-lite" },
|
|
270576
270858
|
{ label: "Gemini 3 Pro Preview", value: "gemini-3-pro-preview" },
|
|
270577
|
-
{ label: "Gemini 2.
|
|
270578
|
-
{ label: "Gemini 2.
|
|
270859
|
+
{ label: "Gemini 2.5 Pro", value: "gemini-2.5-pro" },
|
|
270860
|
+
{ label: "Gemini 2.5 Flash", value: "gemini-2.5-flash" },
|
|
270579
270861
|
{ label: "Gemini 1.5 Pro", value: "gemini-1.5-pro" },
|
|
270580
270862
|
{ label: "Gemini 1.5 Flash", value: "gemini-1.5-flash" }
|
|
270581
270863
|
];
|
|
270582
270864
|
case "openai":
|
|
270583
270865
|
return [
|
|
270584
|
-
{ label: "GPT-5.6 Sol", value: "gpt-5.6-sol" },
|
|
270866
|
+
{ label: "GPT-5.6 Sol (Recommended)", value: "gpt-5.6-sol" },
|
|
270585
270867
|
{ label: "GPT-5.6 Terra", value: "gpt-5.6-terra" },
|
|
270586
270868
|
{ label: "GPT-5.6 Luna", value: "gpt-5.6-luna" },
|
|
270587
|
-
{ label: "GPT-5.5
|
|
270869
|
+
{ label: "GPT-5.5 Pro", value: "gpt-5.5-pro" },
|
|
270870
|
+
{ label: "GPT-5.5", value: "gpt-5.5" },
|
|
270871
|
+
{ label: "GPT-5.4 Pro", value: "gpt-5.4-pro" },
|
|
270588
270872
|
{ label: "GPT-5.4 Mini", value: "gpt-5.4-mini" },
|
|
270589
|
-
{ label: "
|
|
270590
|
-
{ label: "
|
|
270591
|
-
{ label: "
|
|
270873
|
+
{ label: "o4-mini", value: "o4-mini" },
|
|
270874
|
+
{ label: "o3-pro", value: "o3-pro" },
|
|
270875
|
+
{ label: "o3", value: "o3" },
|
|
270876
|
+
{ label: "o1-pro", value: "o1-pro" },
|
|
270592
270877
|
{ label: "GPT-4o", value: "gpt-4o" },
|
|
270593
|
-
{ label: "GPT-4o Mini", value: "gpt-4o-mini" }
|
|
270594
|
-
{ label: "GPT-4 Turbo", value: "gpt-4-turbo" }
|
|
270878
|
+
{ label: "GPT-4o Mini", value: "gpt-4o-mini" }
|
|
270595
270879
|
];
|
|
270596
270880
|
case "openrouter":
|
|
270597
270881
|
return FALLBACK_OPENROUTER_MODELS;
|
|
270598
270882
|
case "deepseek":
|
|
270599
270883
|
return [
|
|
270600
|
-
{ label: "DeepSeek V4 Pro", value: "deepseek-v4-pro" },
|
|
270601
|
-
{ label: "DeepSeek V4 Flash", value: "deepseek-v4-flash" }
|
|
270602
|
-
{ label: "DeepSeek Chat (V3)", value: "deepseek-chat" },
|
|
270603
|
-
{ label: "DeepSeek Reasoner (R1)", value: "deepseek-reasoner" },
|
|
270604
|
-
{ label: "DeepSeek Coder", value: "deepseek-coder" }
|
|
270884
|
+
{ label: "DeepSeek V4 Pro (Recommended)", value: "deepseek-v4-pro" },
|
|
270885
|
+
{ label: "DeepSeek V4 Flash", value: "deepseek-v4-flash" }
|
|
270605
270886
|
];
|
|
270606
270887
|
case "groq":
|
|
270607
270888
|
return [
|
|
270608
|
-
{ label: "
|
|
270609
|
-
{ label: "
|
|
270610
|
-
{ label: "
|
|
270611
|
-
{ label: "
|
|
270889
|
+
{ label: "GPT-OSS 120B (Recommended)", value: "openai/gpt-oss-120b" },
|
|
270890
|
+
{ label: "GPT-OSS 20B", value: "openai/gpt-oss-20b" },
|
|
270891
|
+
{ label: "Qwen 3.6 27B", value: "qwen/qwen3.6-27b" },
|
|
270892
|
+
{ label: "Qwen 3.8 27B", value: "qwen/qwen3.8-27b" },
|
|
270893
|
+
{ label: "DeepSeek R1 Distill Llama 70B", value: "deepseek-r1-distill-llama-70b" },
|
|
270894
|
+
{ label: "Groq Compound System", value: "groq/compound" }
|
|
270612
270895
|
];
|
|
270613
270896
|
case "huggingface":
|
|
270614
270897
|
return [
|
|
270615
|
-
{
|
|
270898
|
+
{
|
|
270899
|
+
label: "Llama 3.3 70B Instruct (Recommended)",
|
|
270900
|
+
value: "meta-llama/Llama-3.3-70B-Instruct"
|
|
270901
|
+
},
|
|
270902
|
+
{ label: "Llama 3.1 8B Instruct", value: "meta-llama/Meta-Llama-3.1-8B-Instruct" },
|
|
270616
270903
|
{ label: "Llama 3 8B Instruct", value: "meta-llama/Meta-Llama-3-8B-Instruct" },
|
|
270617
|
-
{ label: "Qwen 2.5 Coder 32B", value: "Qwen/Qwen2.5-Coder-32B-Instruct" }
|
|
270904
|
+
{ label: "Qwen 2.5 Coder 32B", value: "Qwen/Qwen2.5-Coder-32B-Instruct" },
|
|
270905
|
+
{ label: "Qwen 2.5 72B", value: "Qwen/Qwen2.5-72B-Instruct" }
|
|
270618
270906
|
];
|
|
270619
270907
|
case "kimi":
|
|
270620
270908
|
case "moonshot":
|
|
270621
270909
|
case "moonshoot":
|
|
270622
270910
|
return [
|
|
270623
|
-
{ label: "
|
|
270624
|
-
{ label: "
|
|
270625
|
-
{ label: "
|
|
270626
|
-
{ label: "Kimi
|
|
270911
|
+
{ label: "Kimi K3 (Recommended)", value: "kimi-k3" },
|
|
270912
|
+
{ label: "Kimi K2.7 Code", value: "kimi-k2.7-code" },
|
|
270913
|
+
{ label: "Kimi K2.7 Code Highspeed", value: "kimi-k2.7-code-highspeed" },
|
|
270914
|
+
{ label: "Kimi K2.6", value: "kimi-k2.6" },
|
|
270915
|
+
{ label: "Kimi K2.5", value: "kimi-k2.5" }
|
|
270627
270916
|
];
|
|
270628
270917
|
case "mistral":
|
|
270629
270918
|
return [
|
|
270630
|
-
{ label: "Mistral Large", value: "mistral-large-latest" },
|
|
270919
|
+
{ label: "Mistral Large (Recommended)", value: "mistral-large-latest" },
|
|
270631
270920
|
{ label: "Mistral Medium", value: "mistral-medium-latest" },
|
|
270632
270921
|
{ label: "Mistral Small", value: "mistral-small-latest" },
|
|
270633
270922
|
{ label: "Codestral", value: "codestral-latest" },
|
|
270923
|
+
{ label: "Devstral", value: "devstral-latest" },
|
|
270924
|
+
{ label: "Devstral 2", value: "devstral-2512" },
|
|
270925
|
+
{ label: "Ministral 14B", value: "ministral-14b-latest" },
|
|
270926
|
+
{ label: "Ministral 8B", value: "ministral-8b-latest" },
|
|
270927
|
+
{ label: "Ministral 3B", value: "ministral-3b-latest" },
|
|
270634
270928
|
{ label: "Pixtral Large", value: "pixtral-large-latest" }
|
|
270635
270929
|
];
|
|
270636
270930
|
case "xai":
|
|
270637
270931
|
return [
|
|
270932
|
+
{ label: "Grok 4.6 (Recommended)", value: "grok-4.6" },
|
|
270638
270933
|
{ label: "Grok 4.5", value: "grok-4.5" },
|
|
270639
|
-
{ label: "Grok
|
|
270640
|
-
{ label: "Grok
|
|
270641
|
-
{ label: "Grok
|
|
270934
|
+
{ label: "Grok 4.3", value: "grok-4.3" },
|
|
270935
|
+
{ label: "Grok 4.20", value: "grok-4.20" },
|
|
270936
|
+
{ label: "Grok Build 0.1", value: "grok-build-0.1" }
|
|
270642
270937
|
];
|
|
270643
270938
|
case "zai":
|
|
270644
270939
|
return [
|
|
270645
|
-
{ label: "
|
|
270646
|
-
{ label: "GLM
|
|
270940
|
+
{ label: "GLM 5 (Recommended)", value: "glm-5" },
|
|
270941
|
+
{ label: "GLM 5 Turbo", value: "glm-5-turbo" },
|
|
270942
|
+
{ label: "GLM 4.7", value: "glm-4.7" },
|
|
270943
|
+
{ label: "GLM 4.7 Flash", value: "glm-4.7-flash" },
|
|
270944
|
+
{ label: "GLM 4.5 Air", value: "glm-4.5-air" },
|
|
270945
|
+
{ label: "GLM 4 Plus", value: "glm-4-plus" },
|
|
270946
|
+
{ label: "GLM 4 Flash", value: "glm-4-flash" }
|
|
270947
|
+
];
|
|
270948
|
+
case "nvidia":
|
|
270949
|
+
case "nim":
|
|
270950
|
+
return [
|
|
270951
|
+
{ label: "GPT-OSS 120B (Recommended)", value: "openai/gpt-oss-120b" },
|
|
270952
|
+
{ label: "GPT-OSS 20B", value: "openai/gpt-oss-20b" },
|
|
270953
|
+
{ label: "Nemotron 3.5 Lightning", value: "nvidia/nemotron-3.5-lightning-30b-a3b" },
|
|
270954
|
+
{ label: "Nemotron 3 Super 120B", value: "nvidia/nemotron-3-super-120b-a12b" },
|
|
270955
|
+
{ label: "Nemotron 3 Ultra 550B", value: "nvidia/nemotron-3-ultra-550b-a55b" },
|
|
270956
|
+
{ label: "Llama 3.2 11B Vision", value: "meta/llama-3.2-11b-vision-instruct" },
|
|
270957
|
+
{ label: "Kimi K3", value: "moonshotai/kimi-k3" },
|
|
270958
|
+
{ label: "MiniMax M3", value: "minimaxai/minimax-m3" }
|
|
270959
|
+
];
|
|
270960
|
+
case "sambanova":
|
|
270961
|
+
return [
|
|
270962
|
+
{
|
|
270963
|
+
label: "Llama 3.3 70B Instruct (Recommended)",
|
|
270964
|
+
value: "Meta-Llama-3.3-70B-Instruct"
|
|
270965
|
+
},
|
|
270966
|
+
{ label: "DeepSeek R1", value: "DeepSeek-R1" },
|
|
270967
|
+
{ label: "DeepSeek V3", value: "DeepSeek-V3" },
|
|
270968
|
+
{ label: "Llama 3.1 8B Instruct", value: "Meta-Llama-3.1-8B-Instruct" }
|
|
270969
|
+
];
|
|
270970
|
+
case "cerebras":
|
|
270971
|
+
return [
|
|
270972
|
+
{ label: "GPT-OSS 120B (Recommended)", value: "gpt-oss-120b" },
|
|
270973
|
+
{ label: "Gemma 4 31B", value: "gemma-4-31b" }
|
|
270974
|
+
];
|
|
270975
|
+
case "siliconflow":
|
|
270976
|
+
case "siliconcloud":
|
|
270977
|
+
return [
|
|
270978
|
+
{ label: "DeepSeek R1 (Recommended)", value: "deepseek-ai/DeepSeek-R1" },
|
|
270979
|
+
{ label: "DeepSeek V3", value: "deepseek-ai/DeepSeek-V3" },
|
|
270980
|
+
{ label: "Qwen 2.5 Coder 32B", value: "Qwen/Qwen2.5-Coder-32B-Instruct" },
|
|
270981
|
+
{ label: "Qwen 2.5 72B", value: "Qwen/Qwen2.5-72B-Instruct" }
|
|
270982
|
+
];
|
|
270983
|
+
case "together":
|
|
270984
|
+
case "togetherai":
|
|
270985
|
+
return [
|
|
270986
|
+
{
|
|
270987
|
+
label: "Llama 3.3 70B Turbo (Recommended)",
|
|
270988
|
+
value: "meta-llama/Llama-3.3-70B-Instruct-Turbo"
|
|
270989
|
+
},
|
|
270990
|
+
{ label: "DeepSeek R1", value: "deepseek-ai/DeepSeek-R1" },
|
|
270991
|
+
{ label: "DeepSeek V3", value: "deepseek-ai/DeepSeek-V3" }
|
|
270992
|
+
];
|
|
270993
|
+
case "hyperbolic":
|
|
270994
|
+
return [
|
|
270995
|
+
{ label: "DeepSeek R1 (Recommended)", value: "deepseek-ai/DeepSeek-R1" },
|
|
270996
|
+
{ label: "DeepSeek V3", value: "deepseek-ai/DeepSeek-V3" },
|
|
270997
|
+
{ label: "Llama 3.3 70B", value: "meta-llama/Llama-3.3-70B-Instruct" },
|
|
270998
|
+
{ label: "Llama 3.1 405B", value: "meta-llama/Meta-Llama-3.1-405B-Instruct" },
|
|
270999
|
+
{ label: "Llama 3.1 70B", value: "meta-llama/Meta-Llama-3.1-70B-Instruct" },
|
|
271000
|
+
{ label: "Qwen 2.5 Coder 32B", value: "Qwen/Qwen2.5-Coder-32B-Instruct" },
|
|
271001
|
+
{ label: "Qwen 2.5 72B", value: "Qwen/Qwen2.5-72B-Instruct" }
|
|
271002
|
+
];
|
|
271003
|
+
case "fireworks":
|
|
271004
|
+
case "fireworksai":
|
|
271005
|
+
return [
|
|
271006
|
+
{
|
|
271007
|
+
label: "DeepSeek R1 (Recommended)",
|
|
271008
|
+
value: "accounts/fireworks/models/deepseek-r1"
|
|
271009
|
+
},
|
|
271010
|
+
{ label: "DeepSeek V3", value: "accounts/fireworks/models/deepseek-v3" },
|
|
271011
|
+
{
|
|
271012
|
+
label: "Llama 3.3 70B",
|
|
271013
|
+
value: "accounts/fireworks/models/llama-v3p3-70b-instruct"
|
|
271014
|
+
},
|
|
271015
|
+
{
|
|
271016
|
+
label: "Llama 3.1 405B",
|
|
271017
|
+
value: "accounts/fireworks/models/llama-v3p1-405b-instruct"
|
|
271018
|
+
},
|
|
271019
|
+
{
|
|
271020
|
+
label: "Qwen 2.5 Coder 32B",
|
|
271021
|
+
value: "accounts/fireworks/models/qwen2p5-coder-32b-instruct"
|
|
271022
|
+
},
|
|
271023
|
+
{ label: "Qwen 2.5 72B", value: "accounts/fireworks/models/qwen2p5-72b-instruct" }
|
|
271024
|
+
];
|
|
271025
|
+
case "perplexity":
|
|
271026
|
+
return [
|
|
271027
|
+
{ label: "Sonar Reasoning Pro (Recommended)", value: "sonar-reasoning-pro" },
|
|
271028
|
+
{ label: "Sonar Pro", value: "sonar-pro" },
|
|
271029
|
+
{ label: "Sonar", value: "sonar" }
|
|
271030
|
+
];
|
|
271031
|
+
case "cohere":
|
|
271032
|
+
return [
|
|
271033
|
+
{ label: "Command A (Recommended)", value: "command-a-03-2025" },
|
|
271034
|
+
{ label: "Command R+", value: "command-r-plus-08-2024" },
|
|
271035
|
+
{ label: "Command R", value: "command-r-08-2024" }
|
|
270647
271036
|
];
|
|
270648
271037
|
case "december":
|
|
270649
271038
|
case "december_proxy":
|
|
270650
271039
|
return [
|
|
270651
|
-
{ label: "Gemini 3.6 Flash", value: "gemini-3.6-flash" },
|
|
270652
271040
|
{ label: "Gemini 3.7 Flash", value: "gemini-3.7-flash" },
|
|
270653
|
-
{ label: "Claude
|
|
270654
|
-
{ label: "
|
|
270655
|
-
{ label: "
|
|
270656
|
-
{ label: "
|
|
270657
|
-
{ label: "DeepSeek Reasoner (R1)", value: "deepseek-reasoner" }
|
|
271041
|
+
{ label: "Claude Sonnet 5", value: "claude-sonnet-5" },
|
|
271042
|
+
{ label: "GPT-5.6 Sol", value: "gpt-5.6-sol" },
|
|
271043
|
+
{ label: "DeepSeek V4 Pro", value: "deepseek-v4-pro" },
|
|
271044
|
+
{ label: "o4-mini", value: "o4-mini" }
|
|
270658
271045
|
];
|
|
270659
271046
|
case "ollama":
|
|
270660
271047
|
return [
|
|
@@ -270699,6 +271086,15 @@ var getProviderModels = (provider) => {
|
|
|
270699
271086
|
"mistral",
|
|
270700
271087
|
"xai",
|
|
270701
271088
|
"zai",
|
|
271089
|
+
"nvidia",
|
|
271090
|
+
"sambanova",
|
|
271091
|
+
"cerebras",
|
|
271092
|
+
"siliconflow",
|
|
271093
|
+
"together",
|
|
271094
|
+
"hyperbolic",
|
|
271095
|
+
"fireworks",
|
|
271096
|
+
"perplexity",
|
|
271097
|
+
"cohere",
|
|
270702
271098
|
"ollama",
|
|
270703
271099
|
"december_proxy"
|
|
270704
271100
|
];
|
|
@@ -270738,15 +271134,19 @@ function inferProviderFromModel(modelName) {
|
|
|
270738
271134
|
const lower2 = (modelName || "").toLowerCase();
|
|
270739
271135
|
if (lower2.startsWith("claude") || lower2.startsWith("anthropic/"))
|
|
270740
271136
|
return "anthropic";
|
|
270741
|
-
if (lower2.startsWith("gpt") || lower2.startsWith("o1") || lower2.startsWith("o3") || lower2.startsWith("openai/"))
|
|
271137
|
+
if (lower2.startsWith("gpt") || lower2.startsWith("o1") || lower2.startsWith("o3") || lower2.startsWith("o4") || lower2.startsWith("openai/"))
|
|
270742
271138
|
return "openai";
|
|
270743
271139
|
if (lower2.startsWith("gemini") || lower2.startsWith("google/"))
|
|
270744
271140
|
return "google";
|
|
271141
|
+
if (lower2.startsWith("sonar") || lower2.startsWith("perplexity"))
|
|
271142
|
+
return "perplexity";
|
|
271143
|
+
if (lower2.startsWith("command") || lower2.startsWith("cohere"))
|
|
271144
|
+
return "cohere";
|
|
270745
271145
|
if (lower2.startsWith("deepseek"))
|
|
270746
271146
|
return "deepseek";
|
|
270747
271147
|
if (lower2.startsWith("groq") || lower2.includes("llama-3.3-70b-versatile"))
|
|
270748
271148
|
return "groq";
|
|
270749
|
-
if (lower2.startsWith("mistral") || lower2.startsWith("codestral") || lower2.startsWith("pixtral"))
|
|
271149
|
+
if (lower2.startsWith("mistral") || lower2.startsWith("codestral") || lower2.startsWith("pixtral") || lower2.startsWith("ministral") || lower2.startsWith("devstral"))
|
|
270750
271150
|
return "mistral";
|
|
270751
271151
|
if (lower2.startsWith("moonshot") || lower2.startsWith("kimi"))
|
|
270752
271152
|
return "moonshot";
|
|
@@ -270754,6 +271154,20 @@ function inferProviderFromModel(modelName) {
|
|
|
270754
271154
|
return "xai";
|
|
270755
271155
|
if (lower2.startsWith("zai") || lower2.startsWith("glm"))
|
|
270756
271156
|
return "zai";
|
|
271157
|
+
if (lower2.startsWith("nvidia") || lower2.startsWith("nim") || lower2.includes("nemotron"))
|
|
271158
|
+
return "nvidia";
|
|
271159
|
+
if (lower2.startsWith("sambanova"))
|
|
271160
|
+
return "sambanova";
|
|
271161
|
+
if (lower2.startsWith("cerebras"))
|
|
271162
|
+
return "cerebras";
|
|
271163
|
+
if (lower2.startsWith("siliconflow") || lower2.startsWith("siliconcloud"))
|
|
271164
|
+
return "siliconflow";
|
|
271165
|
+
if (lower2.startsWith("together"))
|
|
271166
|
+
return "together";
|
|
271167
|
+
if (lower2.startsWith("hyperbolic"))
|
|
271168
|
+
return "hyperbolic";
|
|
271169
|
+
if (lower2.startsWith("fireworks") || lower2.startsWith("accounts/fireworks/"))
|
|
271170
|
+
return "fireworks";
|
|
270757
271171
|
if (lower2.includes("meta-llama") || lower2.includes("qwen/"))
|
|
270758
271172
|
return "huggingface";
|
|
270759
271173
|
if (lower2.includes("ollama") || lower2.includes("llama") || lower2.includes("qwen"))
|
|
@@ -270807,6 +271221,15 @@ var init_usage_rates2 = __esm(() => {
|
|
|
270807
271221
|
kimi: "https://platform.moonshot.cn/console/recharge",
|
|
270808
271222
|
xai: "https://console.x.ai/",
|
|
270809
271223
|
zai: "https://open.bigmodel.cn/usercenter/apikeys",
|
|
271224
|
+
nvidia: "https://build.nvidia.com/",
|
|
271225
|
+
sambanova: "https://cloud.sambanova.ai/",
|
|
271226
|
+
cerebras: "https://cloud.cerebras.ai/",
|
|
271227
|
+
siliconflow: "https://cloud.siliconflow.cn/account/ak",
|
|
271228
|
+
together: "https://api.together.ai/settings/billing",
|
|
271229
|
+
hyperbolic: "https://app.hyperbolic.ai/settings",
|
|
271230
|
+
fireworks: "https://app.fireworks.ai/settings/billing",
|
|
271231
|
+
perplexity: "https://www.perplexity.ai/settings/api",
|
|
271232
|
+
cohere: "https://dashboard.cohere.com/billing",
|
|
270810
271233
|
huggingface: "https://huggingface.co/settings/billing",
|
|
270811
271234
|
ollama: "http://localhost:11434"
|
|
270812
271235
|
};
|
|
@@ -270824,6 +271247,15 @@ var init_usage_rates2 = __esm(() => {
|
|
|
270824
271247
|
kimi: "Moonshot AI (Kimi)",
|
|
270825
271248
|
xai: "xAI Console",
|
|
270826
271249
|
zai: "Zhipu AI (GLM)",
|
|
271250
|
+
nvidia: "NVIDIA NIM",
|
|
271251
|
+
sambanova: "SambaNova Cloud",
|
|
271252
|
+
cerebras: "Cerebras Inference",
|
|
271253
|
+
siliconflow: "SiliconFlow (SiliconCloud)",
|
|
271254
|
+
together: "Together AI",
|
|
271255
|
+
hyperbolic: "Hyperbolic",
|
|
271256
|
+
fireworks: "Fireworks AI",
|
|
271257
|
+
perplexity: "Perplexity AI",
|
|
271258
|
+
cohere: "Cohere",
|
|
270827
271259
|
huggingface: "Hugging Face",
|
|
270828
271260
|
ollama: "Ollama (Local)"
|
|
270829
271261
|
};
|
|
@@ -270896,7 +271328,7 @@ async function processAgentStream({
|
|
|
270896
271328
|
return msg;
|
|
270897
271329
|
const blocks = [...msg.blocks || []];
|
|
270898
271330
|
let finalMsg = { ...msg };
|
|
270899
|
-
const isStatusMessage = (content) => content === "Thinking..." || content === "Searching..." || content === "Reading..." || content === "Planning..." || content === "Coding..." || content === "Executing..." || content === "Testing..." || content === "Verifying..." || content === "Refining..." || content === "Finalizing..." || content === "Working..." || content === "Preparing..." || content === "Compacting..." || content === "Generating..." || content === "Analyzing..." || content === "Analyzing prompt..." || content === "Generating questions..." || content === "Understanding..." || content.startsWith("Rate limit") || content.startsWith("High demand") || content.startsWith("LLM Provider rate limit") || content.startsWith("LLM Provider high demand");
|
|
271331
|
+
const isStatusMessage = (content) => content === "Thinking..." || content === "Searching..." || content === "Reading..." || content === "Planning..." || content === "Coding..." || content === "Executing..." || content === "Testing..." || content === "Verifying..." || content === "Refining..." || content === "Finalizing..." || content === "Working..." || content === "Preparing..." || content === "Compacting..." || content === "Generating..." || content === "Analyzing..." || content === "Analyzing prompt..." || content === "Generating questions..." || content === "Understanding..." || content.startsWith("Preparing") || content.startsWith("Rate limit") || content.startsWith("High demand") || content.startsWith("LLM Provider rate limit") || content.startsWith("LLM Provider high demand");
|
|
270900
271332
|
for (const event of eventsToProcess) {
|
|
270901
271333
|
switch (event.type) {
|
|
270902
271334
|
case "TurnStart":
|
|
@@ -270955,7 +271387,11 @@ async function processAgentStream({
|
|
|
270955
271387
|
case "ThinkingChunk": {
|
|
270956
271388
|
break;
|
|
270957
271389
|
}
|
|
270958
|
-
case "ToolCallStart":
|
|
271390
|
+
case "ToolCallStart": {
|
|
271391
|
+
const lastBlock = blocks[blocks.length - 1];
|
|
271392
|
+
if (lastBlock && lastBlock.type === "text" && isStatusMessage(lastBlock.content)) {
|
|
271393
|
+
blocks.pop();
|
|
271394
|
+
}
|
|
270959
271395
|
blocks.push({
|
|
270960
271396
|
type: "command",
|
|
270961
271397
|
toolCallId: event.toolCall.id,
|
|
@@ -270966,6 +271402,7 @@ async function processAgentStream({
|
|
|
270966
271402
|
output: ""
|
|
270967
271403
|
});
|
|
270968
271404
|
break;
|
|
271405
|
+
}
|
|
270969
271406
|
case "ToolExecutionUpdate": {
|
|
270970
271407
|
const runningCmd = blocks.find((b2) => b2.type === "command" && b2.toolCallId === event.toolCallId);
|
|
270971
271408
|
if (runningCmd && runningCmd.status === "running") {
|
|
@@ -273044,7 +273481,7 @@ import path22 from "node:path";
|
|
|
273044
273481
|
// package.json
|
|
273045
273482
|
var package_default = {
|
|
273046
273483
|
name: "@trydecember/cli",
|
|
273047
|
-
version: "0.3.
|
|
273484
|
+
version: "0.3.20",
|
|
273048
273485
|
description: "AI coding agent for terminal and cloud.",
|
|
273049
273486
|
homepage: "https://trydecember.com",
|
|
273050
273487
|
repository: {
|
package/package.json
CHANGED
package/scripts/postinstall.js
CHANGED
|
@@ -1,15 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import fs from 'node:fs'
|
|
2
3
|
|
|
3
4
|
// Skip in CI or monorepo development builds
|
|
4
5
|
if (process.env.CI || process.env.NODE_ENV === 'development') {
|
|
5
6
|
process.exit(0)
|
|
6
7
|
}
|
|
7
8
|
|
|
8
|
-
const BLUE = '\x1b[38;2;
|
|
9
|
+
const BLUE = '\x1b[38;2;137;180;248m'
|
|
9
10
|
const WHITE = '\x1b[38;2;244;244;245m'
|
|
10
11
|
const TRUNK = '\x1b[38;2;63;63;70m'
|
|
11
12
|
const RESET = '\x1b[0m'
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
const message = `\n${BLUE}✱${RESET} ${WHITE}december successfully installed${RESET}\n${TRUNK}│${RESET}\n${BLUE}✱${RESET} run ${BLUE}december${RESET} to start your session\n\n`
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
if (process.platform !== 'win32' && fs.existsSync('/dev/tty')) {
|
|
18
|
+
const tty = fs.createWriteStream('/dev/tty')
|
|
19
|
+
tty.write(message)
|
|
20
|
+
tty.end()
|
|
21
|
+
process.exit(0)
|
|
22
|
+
}
|
|
23
|
+
} catch {
|
|
24
|
+
// Intentionally swallowed: fallback to stderr if /dev/tty is unavailable
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
process.stderr.write(message)
|
|
29
|
+
} catch {
|
|
30
|
+
// Intentionally swallowed: ignore write failure if streams are closed
|
|
31
|
+
}
|