@kenkaiiii/ggcoder 4.3.242 → 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/dist/cli/shared.d.ts.map +1 -1
- package/dist/cli/shared.js +27 -5
- package/dist/cli/shared.js.map +1 -1
- package/dist/config.d.ts +3 -14
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -17
- package/dist/config.js.map +1 -1
- package/dist/core/auth-storage.d.ts +1 -40
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +3 -200
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/auto-update.d.ts +4 -26
- package/dist/core/auto-update.d.ts.map +1 -1
- package/dist/core/auto-update.js +12 -237
- package/dist/core/auto-update.js.map +1 -1
- package/dist/core/claude-code-version.d.ts +1 -9
- package/dist/core/claude-code-version.d.ts.map +1 -1
- package/dist/core/claude-code-version.js +2 -105
- package/dist/core/claude-code-version.js.map +1 -1
- package/dist/core/file-lock.d.ts +1 -5
- package/dist/core/file-lock.d.ts.map +1 -1
- package/dist/core/file-lock.js +2 -75
- package/dist/core/file-lock.js.map +1 -1
- package/dist/core/logger.d.ts +4 -17
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +21 -110
- package/dist/core/logger.js.map +1 -1
- package/dist/core/model-registry.d.ts +1 -54
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +4 -296
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/oauth/anthropic.d.ts +1 -3
- package/dist/core/oauth/anthropic.d.ts.map +1 -1
- package/dist/core/oauth/anthropic.js +2 -96
- package/dist/core/oauth/anthropic.js.map +1 -1
- package/dist/core/oauth/gemini.d.ts +1 -3
- package/dist/core/oauth/gemini.d.ts.map +1 -1
- package/dist/core/oauth/gemini.js +2 -379
- package/dist/core/oauth/gemini.js.map +1 -1
- package/dist/core/oauth/openai.d.ts +1 -3
- package/dist/core/oauth/openai.d.ts.map +1 -1
- package/dist/core/oauth/openai.js +2 -187
- package/dist/core/oauth/openai.js.map +1 -1
- package/dist/core/oauth/pkce.d.ts +1 -4
- package/dist/core/oauth/pkce.d.ts.map +1 -1
- package/dist/core/oauth/pkce.js +2 -16
- package/dist/core/oauth/pkce.js.map +1 -1
- package/dist/core/oauth/types.d.ts +1 -13
- package/dist/core/oauth/types.d.ts.map +1 -1
- package/dist/core/telegram.d.ts +1 -112
- package/dist/core/telegram.d.ts.map +1 -1
- package/dist/core/telegram.js +2 -251
- package/dist/core/telegram.js.map +1 -1
- package/dist/core/thinking-level.d.ts +1 -4
- package/dist/core/thinking-level.d.ts.map +1 -1
- package/dist/core/thinking-level.js +3 -58
- package/dist/core/thinking-level.js.map +1 -1
- package/dist/core/voice-transcriber.d.ts +1 -32
- package/dist/core/voice-transcriber.d.ts.map +1 -1
- package/dist/core/voice-transcriber.js +3 -112
- package/dist/core/voice-transcriber.js.map +1 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +27 -5
- package/dist/ui/App.js.map +1 -1
- package/dist/utils/plan-steps.d.ts +18 -0
- package/dist/utils/plan-steps.d.ts.map +1 -1
- package/dist/utils/plan-steps.js +32 -0
- package/dist/utils/plan-steps.js.map +1 -1
- package/dist/utils/plan-steps.test.js +57 -1
- package/dist/utils/plan-steps.test.js.map +1 -1
- package/package.json +4 -3
- package/dist/core/model-registry.test.d.ts +0 -2
- package/dist/core/model-registry.test.d.ts.map +0 -1
- package/dist/core/model-registry.test.js +0 -95
- package/dist/core/model-registry.test.js.map +0 -1
- package/dist/core/oauth/gemini.test.d.ts +0 -2
- package/dist/core/oauth/gemini.test.d.ts.map +0 -1
- package/dist/core/oauth/gemini.test.js +0 -154
- package/dist/core/oauth/gemini.test.js.map +0 -1
- package/dist/core/thinking-level.test.d.ts +0 -2
- package/dist/core/thinking-level.test.d.ts.map +0 -1
- package/dist/core/thinking-level.test.js +0 -38
- package/dist/core/thinking-level.test.js.map +0 -1
- package/dist/core/voice-transcriber.test.d.ts +0 -2
- package/dist/core/voice-transcriber.test.d.ts.map +0 -1
- package/dist/core/voice-transcriber.test.js +0 -88
- package/dist/core/voice-transcriber.test.js.map +0 -1
package/dist/core/logger.js
CHANGED
|
@@ -1,59 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const MAX_BYTES = 10 * 1024 * 1024; // 10 MB
|
|
8
|
-
let fd = null;
|
|
9
|
-
let sessionId = "";
|
|
10
|
-
let unsubscribers = [];
|
|
11
|
-
function rotateIfNeeded(filePath) {
|
|
12
|
-
try {
|
|
13
|
-
const st = fs.statSync(filePath);
|
|
14
|
-
if (st.size < MAX_BYTES)
|
|
15
|
-
return;
|
|
16
|
-
const rotated = `${filePath}.1`;
|
|
17
|
-
// Replace prior rotation (fs.renameSync overwrites on POSIX; on Windows
|
|
18
|
-
// it fails if dest exists, so unlink first defensively).
|
|
19
|
-
try {
|
|
20
|
-
fs.unlinkSync(rotated);
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
// No prior rotation
|
|
24
|
-
}
|
|
25
|
-
fs.renameSync(filePath, rotated);
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
// Log file doesn't exist yet or stat failed — nothing to rotate
|
|
29
|
-
}
|
|
30
|
-
}
|
|
1
|
+
// The file-writer logger core (open/log/rotate/close) now lives in
|
|
2
|
+
// @kenkaiiii/gg-core. This module keeps ggcoder's "ggcoder"-branded startup
|
|
3
|
+
// line and the EventBus bridge (`attachToEventBus`), which needs the gg-agent
|
|
4
|
+
// `EventBus` type and therefore must stay out of the UI-free core.
|
|
5
|
+
import { openLog, log, registerLogCleanup } from "@kenkaiiii/gg-core";
|
|
6
|
+
export { log, getSessionId, closeLogger } from "@kenkaiiii/gg-core";
|
|
31
7
|
/**
|
|
32
|
-
* Initialize the debug logger. Opens the log file in append
|
|
33
|
-
*
|
|
34
|
-
* session
|
|
35
|
-
* across sessions can be filtered by `grep "sid=<id>"`. No-op if already
|
|
36
|
-
* initialized.
|
|
8
|
+
* Initialize the debug logger for ggcoder. Opens the shared log file in append
|
|
9
|
+
* mode (via gg-core) and writes a one-time "ggcoder started …" line tagged with
|
|
10
|
+
* the session id. No-op if already initialized.
|
|
37
11
|
*/
|
|
38
12
|
export function initLogger(filePath, meta) {
|
|
39
|
-
if (
|
|
40
|
-
return;
|
|
41
|
-
rotateIfNeeded(filePath);
|
|
42
|
-
try {
|
|
43
|
-
fd = fs.openSync(filePath, "a");
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
// Can't open log file — silently disable logging
|
|
13
|
+
if (!openLog(filePath, "ggcoder"))
|
|
47
14
|
return;
|
|
48
|
-
}
|
|
49
|
-
sessionId = randomBytes(4).toString("hex");
|
|
50
|
-
// Visible separator between sessions when back-reading the log.
|
|
51
|
-
try {
|
|
52
|
-
fs.writeSync(fd, "\n");
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
// Write failed — proceed without the separator
|
|
56
|
-
}
|
|
57
15
|
const parts = ["ggcoder"];
|
|
58
16
|
if (meta?.version)
|
|
59
17
|
parts[0] += ` v${meta.version}`;
|
|
@@ -67,41 +25,14 @@ export function initLogger(filePath, meta) {
|
|
|
67
25
|
parts.push(`pid=${process.pid}`);
|
|
68
26
|
log("INFO", "startup", parts.join(" "));
|
|
69
27
|
}
|
|
70
|
-
/** Session identifier included on every log line as `sid=<id>`. */
|
|
71
|
-
export function getSessionId() {
|
|
72
|
-
return sessionId;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Write a timestamped log line. No-op if logger is not initialized.
|
|
76
|
-
*/
|
|
77
|
-
export function log(level, category, message, data) {
|
|
78
|
-
if (fd === null)
|
|
79
|
-
return;
|
|
80
|
-
const ts = new Date().toISOString();
|
|
81
|
-
let line = `[${ts}] [sid=${sessionId}] [${level}] [${category}] ${message}`;
|
|
82
|
-
if (data) {
|
|
83
|
-
const pairs = Object.entries(data)
|
|
84
|
-
.map(([k, v]) => `${k}=${typeof v === "string" ? v : JSON.stringify(v)}`)
|
|
85
|
-
.join(" ");
|
|
86
|
-
line += ` ${pairs}`;
|
|
87
|
-
}
|
|
88
|
-
line += "\n";
|
|
89
|
-
try {
|
|
90
|
-
fs.writeSync(fd, line);
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
// Write failed — don't crash
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
28
|
/**
|
|
97
29
|
* Subscribe to EventBus events and log them. Used by print/json modes.
|
|
98
30
|
*/
|
|
99
31
|
export function attachToEventBus(bus) {
|
|
100
|
-
|
|
101
|
-
unsubs.push(bus.on("tool_call_start", ({ toolCallId, name }) => {
|
|
32
|
+
registerLogCleanup(bus.on("tool_call_start", ({ toolCallId, name }) => {
|
|
102
33
|
log("INFO", "tool", `Tool call started: ${name}`, { id: toolCallId });
|
|
103
34
|
}));
|
|
104
|
-
|
|
35
|
+
registerLogCleanup(bus.on("tool_call_end", ({ toolCallId, result: _result, isError, durationMs }) => {
|
|
105
36
|
const level = isError ? "ERROR" : "INFO";
|
|
106
37
|
log(level, "tool", `Tool call ended`, {
|
|
107
38
|
id: toolCallId,
|
|
@@ -109,7 +40,7 @@ export function attachToEventBus(bus) {
|
|
|
109
40
|
isError: String(isError),
|
|
110
41
|
});
|
|
111
42
|
}));
|
|
112
|
-
|
|
43
|
+
registerLogCleanup(bus.on("turn_end", ({ turn, stopReason, usage }) => {
|
|
113
44
|
log("INFO", "turn", `Turn ${turn} ended`, {
|
|
114
45
|
stopReason,
|
|
115
46
|
inputTokens: String(usage.inputTokens),
|
|
@@ -118,7 +49,7 @@ export function attachToEventBus(bus) {
|
|
|
118
49
|
...(usage.cacheWrite != null && { cacheWrite: String(usage.cacheWrite) }),
|
|
119
50
|
});
|
|
120
51
|
}));
|
|
121
|
-
|
|
52
|
+
registerLogCleanup(bus.on("agent_done", ({ totalTurns, totalUsage }) => {
|
|
122
53
|
log("INFO", "agent", `Agent done`, {
|
|
123
54
|
totalTurns: String(totalTurns),
|
|
124
55
|
inputTokens: String(totalUsage.inputTokens),
|
|
@@ -127,50 +58,30 @@ export function attachToEventBus(bus) {
|
|
|
127
58
|
...(totalUsage.cacheWrite != null && { cacheWrite: String(totalUsage.cacheWrite) }),
|
|
128
59
|
});
|
|
129
60
|
}));
|
|
130
|
-
|
|
61
|
+
registerLogCleanup(bus.on("error", ({ error }) => {
|
|
131
62
|
log("ERROR", "error", error.message);
|
|
132
63
|
}));
|
|
133
|
-
|
|
64
|
+
registerLogCleanup(bus.on("session_start", ({ sessionId }) => {
|
|
134
65
|
log("INFO", "session", `Session started`, { sessionId });
|
|
135
66
|
}));
|
|
136
|
-
|
|
67
|
+
registerLogCleanup(bus.on("model_change", ({ provider, model }) => {
|
|
137
68
|
log("INFO", "model", `Model changed`, { provider, model });
|
|
138
69
|
}));
|
|
139
|
-
|
|
70
|
+
registerLogCleanup(bus.on("compaction_start", ({ messageCount }) => {
|
|
140
71
|
log("INFO", "compaction", `Compaction started`, { messageCount: String(messageCount) });
|
|
141
72
|
}));
|
|
142
|
-
|
|
73
|
+
registerLogCleanup(bus.on("compaction_end", ({ originalCount, newCount }) => {
|
|
143
74
|
log("INFO", "compaction", `Compaction ended`, {
|
|
144
75
|
originalCount: String(originalCount),
|
|
145
76
|
newCount: String(newCount),
|
|
146
77
|
});
|
|
147
78
|
}));
|
|
148
|
-
|
|
79
|
+
registerLogCleanup(bus.on("user_input", ({ content }) => {
|
|
149
80
|
const truncated = content.length > 100 ? content.slice(0, 100) + "..." : content;
|
|
150
81
|
log("INFO", "input", `User input: ${truncated}`);
|
|
151
82
|
}));
|
|
152
|
-
|
|
83
|
+
registerLogCleanup(bus.on("slash_command", ({ name, args }) => {
|
|
153
84
|
log("INFO", "command", `Slash command: /${name}${args ? ` ${args}` : ""}`);
|
|
154
85
|
}));
|
|
155
|
-
unsubscribers.push(...unsubs);
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Write a shutdown line, close the file descriptor, and clean up subscriptions.
|
|
159
|
-
*/
|
|
160
|
-
export function closeLogger() {
|
|
161
|
-
if (fd === null)
|
|
162
|
-
return;
|
|
163
|
-
log("INFO", "shutdown", "ggcoder shutting down");
|
|
164
|
-
try {
|
|
165
|
-
fs.closeSync(fd);
|
|
166
|
-
}
|
|
167
|
-
catch {
|
|
168
|
-
// Ignore close errors
|
|
169
|
-
}
|
|
170
|
-
fd = null;
|
|
171
|
-
for (const unsub of unsubscribers) {
|
|
172
|
-
unsub();
|
|
173
|
-
}
|
|
174
|
-
unsubscribers = [];
|
|
175
86
|
}
|
|
176
87
|
//# sourceMappingURL=logger.js.map
|
package/dist/core/logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export interface ModelInfo {
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
provider: Provider;
|
|
6
|
-
contextWindow: number;
|
|
7
|
-
/**
|
|
8
|
-
* ChatGPT Codex transport uses product-specific windows that can differ from
|
|
9
|
-
* the public API model window. OpenAI OAuth requests include an accountId and
|
|
10
|
-
* route through `/codex/responses`; API-key requests do not.
|
|
11
|
-
*/
|
|
12
|
-
codexContextWindow?: number;
|
|
13
|
-
maxOutputTokens: number;
|
|
14
|
-
supportsThinking: boolean;
|
|
15
|
-
supportsImages: boolean;
|
|
16
|
-
supportsVideo: boolean;
|
|
17
|
-
costTier: "low" | "medium" | "high";
|
|
18
|
-
/**
|
|
19
|
-
* The top reasoning tier this model genuinely uses. Used when thinking is
|
|
20
|
-
* enabled to pick the strongest setting per model:
|
|
21
|
-
* - OpenAI GPT-5.5-era: `xhigh`
|
|
22
|
-
* - OpenAI Pro/Codex/old: clamped to what the model accepts
|
|
23
|
-
* - Claude Opus 4.8 / 4.7 / 4.6 and Sonnet 4.6: `max`
|
|
24
|
-
* - Claude Haiku 4.5: `high` (no adaptive `max` tier)
|
|
25
|
-
* - GLM / Moonshot / Xiaomi / MiniMax / Qwen: `high` — binary-thinking
|
|
26
|
-
* providers ignore the level on the wire, so the value is cosmetic
|
|
27
|
-
* - DeepSeek V4: `xhigh` (DeepSeek maps `xhigh` → its internal `max`)
|
|
28
|
-
*/
|
|
29
|
-
maxThinkingLevel: ThinkingLevel;
|
|
30
|
-
}
|
|
31
|
-
export declare const MODELS: ModelInfo[];
|
|
32
|
-
export declare function getModel(id: string): ModelInfo | undefined;
|
|
33
|
-
export declare function getModelsForProvider(provider: Provider): ModelInfo[];
|
|
34
|
-
export declare function getDefaultModel(provider: Provider): ModelInfo;
|
|
35
|
-
export interface ContextWindowOptions {
|
|
36
|
-
provider?: Provider;
|
|
37
|
-
accountId?: string;
|
|
38
|
-
}
|
|
39
|
-
export declare function usesOpenAICodexTransport(options?: ContextWindowOptions): boolean;
|
|
40
|
-
export declare function getContextWindow(modelId: string, options?: ContextWindowOptions): number;
|
|
41
|
-
/**
|
|
42
|
-
* The strongest thinking level the given model genuinely uses. Falls back to
|
|
43
|
-
* `"high"` for unknown models since every provider we ship accepts it.
|
|
44
|
-
*/
|
|
45
|
-
export declare function getMaxThinkingLevel(modelId: string): ThinkingLevel;
|
|
46
|
-
/**
|
|
47
|
-
* Get the model to use for compaction summarization.
|
|
48
|
-
* - Anthropic: always Sonnet 4.6
|
|
49
|
-
* - OpenAI: cheapest (Codex Mini)
|
|
50
|
-
* - Gemini: use the current model
|
|
51
|
-
* - GLM: GLM-4.7 Flash (cheap alternative)
|
|
52
|
-
* - Moonshot: use the current model (no cheap alternative)
|
|
53
|
-
*/
|
|
54
|
-
export declare function getSummaryModel(provider: Provider, currentModelId: string): ModelInfo;
|
|
1
|
+
export * from "@kenkaiiii/gg-core/models";
|
|
55
2
|
//# sourceMappingURL=model-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"AAGA,cAAc,2BAA2B,CAAC"}
|
|
@@ -1,297 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
{
|
|
6
|
-
id: "claude-opus-4-8",
|
|
7
|
-
name: "Claude Opus 4.8",
|
|
8
|
-
provider: "anthropic",
|
|
9
|
-
contextWindow: 1_000_000,
|
|
10
|
-
maxOutputTokens: 128_000,
|
|
11
|
-
supportsThinking: true,
|
|
12
|
-
supportsImages: true,
|
|
13
|
-
supportsVideo: false,
|
|
14
|
-
costTier: "high",
|
|
15
|
-
maxThinkingLevel: "max",
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
id: "claude-sonnet-4-6",
|
|
19
|
-
name: "Claude Sonnet 4.6",
|
|
20
|
-
provider: "anthropic",
|
|
21
|
-
contextWindow: 1_000_000,
|
|
22
|
-
maxOutputTokens: 64_000,
|
|
23
|
-
supportsThinking: true,
|
|
24
|
-
supportsImages: true,
|
|
25
|
-
supportsVideo: false,
|
|
26
|
-
costTier: "medium",
|
|
27
|
-
maxThinkingLevel: "max",
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
id: "claude-haiku-4-5-20251001",
|
|
31
|
-
name: "Claude Haiku 4.5",
|
|
32
|
-
provider: "anthropic",
|
|
33
|
-
contextWindow: 200_000,
|
|
34
|
-
maxOutputTokens: 64_000,
|
|
35
|
-
supportsThinking: true,
|
|
36
|
-
supportsImages: true,
|
|
37
|
-
supportsVideo: false,
|
|
38
|
-
costTier: "low",
|
|
39
|
-
maxThinkingLevel: "high",
|
|
40
|
-
},
|
|
41
|
-
// ── OpenAI (Codex) ─────────────────────────────────────
|
|
42
|
-
{
|
|
43
|
-
id: "gpt-5.5",
|
|
44
|
-
name: "GPT-5.5",
|
|
45
|
-
provider: "openai",
|
|
46
|
-
contextWindow: 1_050_000,
|
|
47
|
-
codexContextWindow: 272_000,
|
|
48
|
-
maxOutputTokens: 128_000,
|
|
49
|
-
supportsThinking: true,
|
|
50
|
-
supportsImages: true,
|
|
51
|
-
supportsVideo: false,
|
|
52
|
-
costTier: "high",
|
|
53
|
-
maxThinkingLevel: "xhigh",
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
id: "gpt-5.4",
|
|
57
|
-
name: "GPT-5.4",
|
|
58
|
-
provider: "openai",
|
|
59
|
-
contextWindow: 1_050_000,
|
|
60
|
-
codexContextWindow: 272_000,
|
|
61
|
-
maxOutputTokens: 128_000,
|
|
62
|
-
supportsThinking: true,
|
|
63
|
-
supportsImages: true,
|
|
64
|
-
supportsVideo: false,
|
|
65
|
-
costTier: "high",
|
|
66
|
-
maxThinkingLevel: "xhigh",
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
id: "gpt-5.4-mini",
|
|
70
|
-
name: "GPT-5.4 Mini",
|
|
71
|
-
provider: "openai",
|
|
72
|
-
contextWindow: 400_000,
|
|
73
|
-
maxOutputTokens: 128_000,
|
|
74
|
-
supportsThinking: true,
|
|
75
|
-
supportsImages: true,
|
|
76
|
-
supportsVideo: false,
|
|
77
|
-
costTier: "low",
|
|
78
|
-
maxThinkingLevel: "xhigh",
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
id: "gpt-5.3-codex",
|
|
82
|
-
name: "GPT-5.3 Codex",
|
|
83
|
-
provider: "openai",
|
|
84
|
-
contextWindow: 400_000,
|
|
85
|
-
maxOutputTokens: 128_000,
|
|
86
|
-
supportsThinking: true,
|
|
87
|
-
supportsImages: true,
|
|
88
|
-
supportsVideo: false,
|
|
89
|
-
costTier: "high",
|
|
90
|
-
maxThinkingLevel: "xhigh",
|
|
91
|
-
},
|
|
92
|
-
// ── Gemini ─────────────────────────────────────────────
|
|
93
|
-
{
|
|
94
|
-
id: "gemini-3.1-flash-lite-preview",
|
|
95
|
-
name: "Gemini 3.1 Flash Lite Preview",
|
|
96
|
-
provider: "gemini",
|
|
97
|
-
contextWindow: 1_048_576,
|
|
98
|
-
maxOutputTokens: 65_536,
|
|
99
|
-
supportsThinking: true,
|
|
100
|
-
supportsImages: true,
|
|
101
|
-
supportsVideo: true,
|
|
102
|
-
costTier: "low",
|
|
103
|
-
maxThinkingLevel: "high",
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
id: "gemini-3.5-flash",
|
|
107
|
-
name: "Gemini 3.5 Flash",
|
|
108
|
-
provider: "gemini",
|
|
109
|
-
contextWindow: 1_048_576,
|
|
110
|
-
maxOutputTokens: 65_536,
|
|
111
|
-
supportsThinking: true,
|
|
112
|
-
supportsImages: true,
|
|
113
|
-
supportsVideo: true,
|
|
114
|
-
costTier: "low",
|
|
115
|
-
maxThinkingLevel: "high",
|
|
116
|
-
},
|
|
117
|
-
// ── Moonshot (Kimi) ────────────────────────────────────
|
|
118
|
-
{
|
|
119
|
-
id: "kimi-k2.6",
|
|
120
|
-
name: "Kimi K2.6",
|
|
121
|
-
provider: "moonshot",
|
|
122
|
-
contextWindow: 262_144,
|
|
123
|
-
maxOutputTokens: 262_144,
|
|
124
|
-
supportsThinking: true,
|
|
125
|
-
supportsImages: true,
|
|
126
|
-
supportsVideo: true,
|
|
127
|
-
costTier: "medium",
|
|
128
|
-
maxThinkingLevel: "high",
|
|
129
|
-
},
|
|
130
|
-
// ── Z.AI (GLM) ─────────────────────────────────────────
|
|
131
|
-
{
|
|
132
|
-
id: "glm-5.1",
|
|
133
|
-
name: "GLM-5.1",
|
|
134
|
-
provider: "glm",
|
|
135
|
-
contextWindow: 204_800,
|
|
136
|
-
maxOutputTokens: 131_072,
|
|
137
|
-
supportsThinking: true,
|
|
138
|
-
supportsImages: false,
|
|
139
|
-
supportsVideo: false,
|
|
140
|
-
costTier: "medium",
|
|
141
|
-
maxThinkingLevel: "high",
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
id: "glm-4.7",
|
|
145
|
-
name: "GLM-4.7",
|
|
146
|
-
provider: "glm",
|
|
147
|
-
contextWindow: 200_000,
|
|
148
|
-
maxOutputTokens: 131_072,
|
|
149
|
-
supportsThinking: true,
|
|
150
|
-
supportsImages: false,
|
|
151
|
-
supportsVideo: false,
|
|
152
|
-
costTier: "low",
|
|
153
|
-
maxThinkingLevel: "high",
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
id: "glm-4.7-flash",
|
|
157
|
-
name: "GLM-4.7 Flash",
|
|
158
|
-
provider: "glm",
|
|
159
|
-
contextWindow: 200_000,
|
|
160
|
-
maxOutputTokens: 131_072,
|
|
161
|
-
supportsThinking: true,
|
|
162
|
-
supportsImages: false,
|
|
163
|
-
supportsVideo: false,
|
|
164
|
-
costTier: "low",
|
|
165
|
-
maxThinkingLevel: "high",
|
|
166
|
-
},
|
|
167
|
-
// ── MiniMax ────────────────────────────────────────────
|
|
168
|
-
{
|
|
169
|
-
id: "MiniMax-M3",
|
|
170
|
-
name: "MiniMax M3",
|
|
171
|
-
provider: "minimax",
|
|
172
|
-
contextWindow: 1_000_000,
|
|
173
|
-
maxOutputTokens: 131_072,
|
|
174
|
-
supportsThinking: true,
|
|
175
|
-
supportsImages: true,
|
|
176
|
-
supportsVideo: true,
|
|
177
|
-
costTier: "medium",
|
|
178
|
-
maxThinkingLevel: "high",
|
|
179
|
-
},
|
|
180
|
-
// ── Xiaomi (MiMo) ──────────────────────────────────────
|
|
181
|
-
{
|
|
182
|
-
id: "mimo-v2-pro",
|
|
183
|
-
name: "MiMo-V2-Pro",
|
|
184
|
-
provider: "xiaomi",
|
|
185
|
-
contextWindow: 1_000_000,
|
|
186
|
-
maxOutputTokens: 131_072,
|
|
187
|
-
supportsThinking: true,
|
|
188
|
-
supportsImages: false,
|
|
189
|
-
supportsVideo: false,
|
|
190
|
-
costTier: "medium",
|
|
191
|
-
maxThinkingLevel: "high",
|
|
192
|
-
},
|
|
193
|
-
// ── DeepSeek ───────────────────────────────────────────
|
|
194
|
-
{
|
|
195
|
-
id: "deepseek-v4-pro",
|
|
196
|
-
name: "DeepSeek V4 Pro",
|
|
197
|
-
provider: "deepseek",
|
|
198
|
-
contextWindow: 1_048_576,
|
|
199
|
-
maxOutputTokens: 384_000,
|
|
200
|
-
supportsThinking: true,
|
|
201
|
-
supportsImages: false,
|
|
202
|
-
supportsVideo: false,
|
|
203
|
-
costTier: "high",
|
|
204
|
-
// DeepSeek V4 maps `xhigh` → its internal `max` tier.
|
|
205
|
-
maxThinkingLevel: "xhigh",
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
id: "deepseek-v4-flash",
|
|
209
|
-
name: "DeepSeek V4 Flash",
|
|
210
|
-
provider: "deepseek",
|
|
211
|
-
contextWindow: 1_048_576,
|
|
212
|
-
maxOutputTokens: 384_000,
|
|
213
|
-
supportsThinking: true,
|
|
214
|
-
supportsImages: false,
|
|
215
|
-
supportsVideo: false,
|
|
216
|
-
costTier: "low",
|
|
217
|
-
maxThinkingLevel: "xhigh",
|
|
218
|
-
},
|
|
219
|
-
// ── OpenRouter ─────────────────────────────────────────
|
|
220
|
-
{
|
|
221
|
-
id: "qwen/qwen3.6-plus",
|
|
222
|
-
name: "Qwen3.6-Plus",
|
|
223
|
-
provider: "openrouter",
|
|
224
|
-
contextWindow: 1_000_000,
|
|
225
|
-
maxOutputTokens: 65_536,
|
|
226
|
-
supportsThinking: true,
|
|
227
|
-
supportsImages: false,
|
|
228
|
-
supportsVideo: false,
|
|
229
|
-
costTier: "medium",
|
|
230
|
-
maxThinkingLevel: "high",
|
|
231
|
-
},
|
|
232
|
-
];
|
|
233
|
-
export function getModel(id) {
|
|
234
|
-
return MODELS.find((m) => m.id === id);
|
|
235
|
-
}
|
|
236
|
-
export function getModelsForProvider(provider) {
|
|
237
|
-
return MODELS.filter((m) => m.provider === provider);
|
|
238
|
-
}
|
|
239
|
-
export function getDefaultModel(provider) {
|
|
240
|
-
if (provider === "xiaomi")
|
|
241
|
-
return MODELS.find((m) => m.id === "mimo-v2-pro");
|
|
242
|
-
if (provider === "openai")
|
|
243
|
-
return MODELS.find((m) => m.id === "gpt-5.5");
|
|
244
|
-
if (provider === "gemini")
|
|
245
|
-
return MODELS.find((m) => m.id === "gemini-3.1-flash-lite-preview");
|
|
246
|
-
if (provider === "glm")
|
|
247
|
-
return MODELS.find((m) => m.id === "glm-5.1");
|
|
248
|
-
if (provider === "moonshot")
|
|
249
|
-
return MODELS.find((m) => m.id === "kimi-k2.6");
|
|
250
|
-
if (provider === "minimax")
|
|
251
|
-
return MODELS.find((m) => m.id === "MiniMax-M3");
|
|
252
|
-
if (provider === "deepseek")
|
|
253
|
-
return MODELS.find((m) => m.id === "deepseek-v4-pro");
|
|
254
|
-
if (provider === "openrouter")
|
|
255
|
-
return MODELS.find((m) => m.id === "qwen/qwen3.6-plus");
|
|
256
|
-
return MODELS.find((m) => m.id === "claude-sonnet-4-6");
|
|
257
|
-
}
|
|
258
|
-
export function usesOpenAICodexTransport(options) {
|
|
259
|
-
return options?.provider === "openai" && Boolean(options.accountId);
|
|
260
|
-
}
|
|
261
|
-
export function getContextWindow(modelId, options) {
|
|
262
|
-
const model = getModel(modelId);
|
|
263
|
-
if (!model)
|
|
264
|
-
return 200_000;
|
|
265
|
-
if (usesOpenAICodexTransport(options) && model.codexContextWindow) {
|
|
266
|
-
return model.codexContextWindow;
|
|
267
|
-
}
|
|
268
|
-
return model.contextWindow;
|
|
269
|
-
}
|
|
270
|
-
/**
|
|
271
|
-
* The strongest thinking level the given model genuinely uses. Falls back to
|
|
272
|
-
* `"high"` for unknown models since every provider we ship accepts it.
|
|
273
|
-
*/
|
|
274
|
-
export function getMaxThinkingLevel(modelId) {
|
|
275
|
-
return getModel(modelId)?.maxThinkingLevel ?? "high";
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Get the model to use for compaction summarization.
|
|
279
|
-
* - Anthropic: always Sonnet 4.6
|
|
280
|
-
* - OpenAI: cheapest (Codex Mini)
|
|
281
|
-
* - Gemini: use the current model
|
|
282
|
-
* - GLM: GLM-4.7 Flash (cheap alternative)
|
|
283
|
-
* - Moonshot: use the current model (no cheap alternative)
|
|
284
|
-
*/
|
|
285
|
-
export function getSummaryModel(provider, currentModelId) {
|
|
286
|
-
if (provider === "anthropic") {
|
|
287
|
-
return MODELS.find((m) => m.id === "claude-sonnet-4-6");
|
|
288
|
-
}
|
|
289
|
-
if (provider === "openai" || provider === "glm" || provider === "deepseek") {
|
|
290
|
-
const low = getModelsForProvider(provider).find((m) => m.costTier === "low");
|
|
291
|
-
if (low)
|
|
292
|
-
return low;
|
|
293
|
-
}
|
|
294
|
-
// Moonshot or fallback: use current model
|
|
295
|
-
return getModel(currentModelId) ?? getDefaultModel(provider);
|
|
296
|
-
}
|
|
1
|
+
// Moved to @kenkaiiii/gg-core. This shim re-exports it so existing relative
|
|
2
|
+
// imports (`./model-registry.js`) and the `@kenkaiiii/ggcoder/models` subpath
|
|
3
|
+
// export keep resolving unchanged.
|
|
4
|
+
export * from "@kenkaiiii/gg-core/models";
|
|
297
5
|
//# sourceMappingURL=model-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,mCAAmC;AACnC,cAAc,2BAA2B,CAAC"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function loginAnthropic(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
|
|
3
|
-
export declare function refreshAnthropicToken(refreshToken: string): Promise<OAuthCredentials>;
|
|
1
|
+
export { loginAnthropic, refreshAnthropicToken } from "@kenkaiiii/gg-core";
|
|
4
2
|
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/anthropic.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC"}
|