@kenkaiiii/gg-core 5.74.3 → 5.75.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/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # @kenkaiiii/gg-core
2
+
3
+ <p align="center">
4
+ <strong>Model registry, auth storage and local-model discovery. No UI, no agent loop.</strong>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <a href="https://www.npmjs.com/package/@kenkaiiii/gg-core"><img src="https://img.shields.io/npm/v/@kenkaiiii/gg-core?style=for-the-badge" alt="npm version"></a>
9
+ <a href="../../LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="MIT License"></a>
10
+ </p>
11
+
12
+ The shared foundation under GG Coder's app and CLI. It depends only on [`@kenkaiiii/gg-ai`](../gg-ai/README.md), never on React, Ink or the agent loop.
13
+
14
+ Part of the [GG Framework](../../README.md) monorepo.
15
+
16
+ ---
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ npm i @kenkaiiii/gg-core
22
+ ```
23
+
24
+ ---
25
+
26
+ ## What's inside
27
+
28
+ | Area | Main exports |
29
+ |---|---|
30
+ | Model registry | `getModel`, `getAllModels`, `getModelsForProvider`, `getDefaultModel`, `getContextWindow` |
31
+ | Thinking levels | `getSupportedThinkingLevels`, `getMaxThinkingLevel`, `getDefaultThinkingLevel` |
32
+ | Auth storage | `AuthStorage` (reads and writes `~/.gg/auth.json`, refreshes OAuth tokens) |
33
+ | OAuth | Anthropic, OpenAI, Gemini, Kimi and xAI login flows |
34
+ | Local models | `discoverLocalModels` (Ollama, LM Studio, llama.cpp, vLLM, custom endpoints) |
35
+ | Paths | `getAppPaths` (every file under `~/.gg/`) |
36
+ | Other | Logger, file lock, usage limits, Telegram, voice transcription, auto-update |
37
+
38
+ Two lighter subpath entries skip the rest of the package:
39
+
40
+ ```ts
41
+ import { getModel } from "@kenkaiiii/gg-core/models";
42
+ import { getAppPaths } from "@kenkaiiii/gg-core/paths";
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Example
48
+
49
+ ```ts
50
+ import { AuthStorage, discoverLocalModels, getModel } from "@kenkaiiii/gg-core";
51
+
52
+ const model = getModel("claude-sonnet-5-5");
53
+ console.log(model?.contextWindow);
54
+
55
+ const auth = new AuthStorage();
56
+ const token = await auth.resolveToken("anthropic");
57
+
58
+ const { models } = await discoverLocalModels();
59
+ console.log(models.map((m) => m.id));
60
+ ```
61
+
62
+ `AuthStorage` throws `NotLoggedInError` when a provider has no stored credentials.
63
+
64
+ ---
65
+
66
+ ## License
67
+
68
+ MIT
@@ -1920,9 +1920,10 @@ var NotLoggedInError = class extends Error {
1920
1920
  // src/model-registry.ts
1921
1921
  var MODELS = [
1922
1922
  // ── Anthropic ──────────────────────────────────────────
1923
- // NOTE: Claude Mythos 5 (`claude-mythos-5`) is kept commented out — it's a
1924
- // Project Glasswing (limited, invitation-only) model unavailable to most
1925
- // users. Re-enable once it's generally available.
1923
+ // NOTE: Claude Mythos 5.1 (`claude-mythos-5-1`, 2026-09-01) is kept commented
1924
+ // out — it's a Project Glasswing model, still "Active (invite only)" in
1925
+ // Anthropic's docs and unavailable to most users. Re-enable once it's
1926
+ // generally available.
1926
1927
  {
1927
1928
  // Released 2026-09-01 — replaces Fable 5 at the same $10/$50 MTok (cache
1928
1929
  // reads drop to $0.25). Always-on adaptive thinking steered by effort;
@@ -1944,8 +1945,8 @@ var MODELS = [
1944
1945
  // // Mythos-class model offered through Project Glasswing (limited
1945
1946
  // // availability, invitation-only). Same underlying model as Fable 5.1 with
1946
1947
  // // some safeguards lifted; kept here so approved accounts can select it.
1947
- // id: "claude-mythos-5",
1948
- // name: "Claude Mythos 5",
1948
+ // id: "claude-mythos-5-1",
1949
+ // name: "Claude Mythos 5.1",
1949
1950
  // provider: "anthropic",
1950
1951
  // contextWindow: 1_000_000,
1951
1952
  // maxOutputTokens: 128_000,
@@ -1991,16 +1992,24 @@ var MODELS = [
1991
1992
  maxThinkingLevel: "max"
1992
1993
  },
1993
1994
  {
1994
- id: "claude-haiku-4-5-20251001",
1995
- name: "Claude Haiku 4.5",
1995
+ // Released 2026-10-07 — replaces Haiku 4.5 at $0.10/$0.50 MTok (prompts
1996
+ // up to 100K tokens; $0.50/$2.50 above). 1M context, 128K output, image
1997
+ // input. Adaptive thinking with the full effort ladder (low→max, xhigh
1998
+ // included; API default `medium`) — manual budget_tokens, non-default
1999
+ // sampling params and assistant prefill all 400. No server-side refusal
2000
+ // fallback: `fallbacks: "default"` is accepted but a refusal stays a
2001
+ // refusal. Haiku 4.5 is retired here — a session that still has it saved
2002
+ // falls back to the provider default on next start.
2003
+ id: "claude-haiku-5-5",
2004
+ name: "Claude Haiku 5.5",
1996
2005
  provider: "anthropic",
1997
- contextWindow: 2e5,
1998
- maxOutputTokens: 64e3,
2006
+ contextWindow: 1e6,
2007
+ maxOutputTokens: 128e3,
1999
2008
  supportsThinking: true,
2000
2009
  supportsImages: true,
2001
2010
  supportsVideo: false,
2002
2011
  costTier: "low",
2003
- maxThinkingLevel: "high"
2012
+ maxThinkingLevel: "max"
2004
2013
  },
2005
2014
  // ── OpenAI (Codex) ─────────────────────────────────────
2006
2015
  {
@@ -2290,6 +2299,25 @@ var MODELS = [
2290
2299
  costTier: "medium",
2291
2300
  maxThinkingLevel: "high"
2292
2301
  },
2302
+ // K2.7 Code HighSpeed — the same model as K2.7 Code served at ~180 tok/s
2303
+ // (up to ~260 on short contexts), 256K context (platform.kimi.ai model list,
2304
+ // 2026-10-08). The `kimi-k2.7-code` prefix gives it K2.7's always-thinking
2305
+ // wire handling in gg-ai. The Kimi For Coding endpoint lists this model as
2306
+ // `kimi-for-coding-highspeed`; like `kimi-k2.7-code` and `kimi-k3`, we send
2307
+ // the public id there too.
2308
+ {
2309
+ id: "kimi-k2.7-code-highspeed",
2310
+ name: "Kimi K2.7 Code HighSpeed",
2311
+ provider: "moonshot",
2312
+ contextWindow: 262144,
2313
+ maxOutputTokens: 262144,
2314
+ supportsThinking: true,
2315
+ supportsImages: true,
2316
+ supportsVideo: true,
2317
+ maxVideoBytes: 100 * 1024 * 1024,
2318
+ costTier: "medium",
2319
+ maxThinkingLevel: "high"
2320
+ },
2293
2321
  // ── Z.AI (GLM) ─────────────────────────────────────────
2294
2322
  // Two GLM entries, both live on the coding endpoint (verified against its
2295
2323
  // /models list). The pre-5.3 ids stay retired: they routed to strictly worse
@@ -2465,23 +2493,47 @@ var MODELS = [
2465
2493
  // billing follows each backend's rates on the HF account (small free tier).
2466
2494
  // Model ids are Hub repo paths, so they intentionally contain a slash — the
2467
2495
  // same shape local/ vLLM ids already use (`local/vllm/Qwen/Qwen3-32B`).
2496
+ // Live GET /v1/models (2026-10-08) is the source for hosts, context and
2497
+ // modalities. Qwen3 Coder 480B is retired here: only one tool-calling host
2498
+ // (Novita) still served it. We keep bare repo ids (no :auto suffix) so the
2499
+ // picker matches what GET /v1/models reports.
2468
2500
  {
2469
- // Qwen's open flagship for agentic coding — tool-calling native, non-thinking
2470
- // (the Coder line dropped the <think> block). 262K native context (1M needs
2471
- // YaRN, which the router doesn't apply), 131K max output. :auto suffix lets
2472
- // HF pick the backend with capacity; we keep the bare repo id so the picker
2473
- // matches what GET /v1/models reports.
2474
- id: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
2475
- name: "Qwen3 Coder 480B",
2501
+ // Moonshot's open coding model. Served with tool calling by Novita and
2502
+ // DeepInfra at 262K context, with image input (video is a Moonshot-API-only
2503
+ // upload path). It always thinks, but the router has no documented effort
2504
+ // control for it, so we register it as non-thinking: we never send a
2505
+ // reasoning_effort that a host might reject. Output is capped at half the
2506
+ // window so the input keeps room.
2507
+ id: "moonshotai/Kimi-K2.7-Code",
2508
+ name: "Kimi K2.7 Code",
2476
2509
  provider: "huggingface",
2477
2510
  contextWindow: 262144,
2478
2511
  maxOutputTokens: 131072,
2479
2512
  supportsThinking: false,
2480
- supportsImages: false,
2513
+ supportsImages: true,
2481
2514
  supportsVideo: false,
2482
2515
  costTier: "medium",
2483
2516
  maxThinkingLevel: "low"
2484
2517
  },
2518
+ {
2519
+ // DeepSeek V4.1 Flash open weights: 1M context and image input on four
2520
+ // tool-calling hosts (Novita, Fireworks, Baseten, DeepInfra; $0.20–0.30 in /
2521
+ // $0.60–1.20 out per MTok). It is listed before gpt-oss so it becomes the
2522
+ // low-tier summary model, because its 1M window can take a full long
2523
+ // session. Thinking control over the router is unverified, so it is
2524
+ // registered as non-thinking. Output is a conservative 131K: hosts don't
2525
+ // publish the 384K first-party cap.
2526
+ id: "deepseek-ai/DeepSeek-V4.1-Flash",
2527
+ name: "DeepSeek V4.1 Flash",
2528
+ provider: "huggingface",
2529
+ contextWindow: 1048576,
2530
+ maxOutputTokens: 131072,
2531
+ supportsThinking: false,
2532
+ supportsImages: true,
2533
+ supportsVideo: false,
2534
+ costTier: "low",
2535
+ maxThinkingLevel: "low"
2536
+ },
2485
2537
  {
2486
2538
  // OpenAI's open-weight 120B MoE (5.1B active) — general-purpose, tool-calling
2487
2539
  // native, adjustable reasoning effort (low/medium/high, default medium) over
@@ -2542,8 +2594,7 @@ function getDefaultModel(provider) {
2542
2594
  if (provider === "moonshot") return MODELS.find((m) => m.id === "kimi-k3");
2543
2595
  if (provider === "minimax") return MODELS.find((m) => m.id === "MiniMax-M3");
2544
2596
  if (provider === "deepseek") return MODELS.find((m) => m.id === "deepseek-v4-pro");
2545
- if (provider === "huggingface")
2546
- return MODELS.find((m) => m.id === "Qwen/Qwen3-Coder-480B-A35B-Instruct");
2597
+ if (provider === "huggingface") return MODELS.find((m) => m.id === "moonshotai/Kimi-K2.7-Code");
2547
2598
  if (provider === "openrouter") return MODELS.find((m) => m.id === "qwen/qwen3.8-max");
2548
2599
  if (provider === "sakana") return MODELS.find((m) => m.id === "fugu");
2549
2600
  if (provider === "xai") return MODELS.find((m) => m.id === "grok-4.7");
@@ -2655,4 +2706,4 @@ export {
2655
2706
  getDefaultThinkingLevel,
2656
2707
  getSummaryModel
2657
2708
  };
2658
- //# sourceMappingURL=chunk-EIFHG5TX.js.map
2709
+ //# sourceMappingURL=chunk-OKCKN76P.js.map