jeo-code 0.6.24 → 0.6.26
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/CHANGELOG.md +13 -0
- package/README.ja.md +2 -2
- package/README.ko.md +2 -2
- package/README.md +2 -2
- package/README.zh.md +2 -2
- package/package.json +1 -1
- package/src/ai/model-manager.ts +7 -4
- package/src/ai/providers/anthropic.ts +4 -2
- package/src/ai/providers/antigravity.ts +5 -1
- package/src/ai/providers/gemini.ts +4 -3
- package/src/tui/components/ascii-art.ts +44 -43
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
6
6
|
|
|
7
7
|
The README mirrors the latest 5 entries — regenerate with `bun run changelog:sync`.
|
|
8
8
|
|
|
9
|
+
## [0.6.26] - 2026-06-19
|
|
10
|
+
_The forge emblem is redrawn again as the mascot crayfish, foregrounding its signature pincer claws (집게)._
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- **Forge emblem redrawn as the mascot crayfish with raised pincer claws (집게).** The compact and grand forge marks (`FORGE_MARK_ART` / `_GRAND`) now read as the neon crayfish (가재) from `assets/character.png`, foregrounding its defining feature — two raised pincer claws on angled arms (`◣◣ ◢◢` jaws over `◆══╲ ╱══◆` arms) above the glowing eye/terminal cluster (`◉◉◉`) and a rounded carapace/tail. Purely pictographic and wordless (no embedded lettering), width-1 glyphs only so the TUI's padding/centering math stays exact; the blink frames snap the claws shut so the crayfish "clicks". Cross-checked against gajae-code's image-based crab/crayfish brand and the shared blue→violet→pink neon palette. The grand variant stays wide enough (30 cols) to keep the narrow-box compact fallback reachable.
|
|
14
|
+
|
|
15
|
+
## [0.6.25] - 2026-06-19
|
|
16
|
+
_Reasoning works at every thinking level (gajae parity), and the forge emblem is redrawn as the neon-lens coding wizard._
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **Reasoning now activates at EVERY thinking level — no level restriction (gajae parity).** Previously the lowest tier disabled reasoning entirely: `thinkingToReasoningEffort` collapsed `minimal`→`low`, and the provider budgets treated `minimal`/unset effort as OFF, so picking the lowest level (or `/fast`) silently turned thinking off. `minimal` is now a genuine lightest reasoning effort threaded end to end — Anthropic (`minimal → 2000` budget_tokens), Gemini (`minimal → 2000`, clamped under the output cap), and Antigravity-Claude (`minimal → 2000`) all enable scaling-depth thinking for `minimal`/`low`/`medium`/`high`, matching gajae-code's `[Minimal, Low, Medium, High]` effort set. Only a fully UNSET effort stays non-thinking (the explicit off path). `xhigh` still maps to the deepest `high` tier the provider APIs accept.
|
|
20
|
+
- **Forge emblem redrawn as the mascot neon-lens coding wizard.** The compact and grand forge marks (`FORGE_MARK_ART` / `_GRAND`) now read as the character from `assets/character.png` — a pointed wizard hat with a twinkling star tip, the glowing asymmetric ◆/◇ neon lens eyes on a nose-bridge, and the violet gown shoulders cradling the glowing terminal screen the wizard holds (`◉◉◉`). Purely pictographic and wordless (no embedded lettering), width-1 glyphs only so the TUI's padding/centering math stays exact; the blink frames twinkle the star and wink the lenses.
|
|
21
|
+
|
|
9
22
|
## [0.6.24] - 2026-06-19
|
|
10
23
|
_`/provider` opens an interactive onboarding selector (OAuth vs API-compatible), and OpenAI-compatible backends gain per-vendor native-reasoning formats._
|
|
11
24
|
|
package/README.ja.md
CHANGED
|
@@ -204,11 +204,11 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
|
|
|
204
204
|
## 変更履歴 (Changelog)
|
|
205
205
|
|
|
206
206
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
207
|
+
- **[0.6.26]** (2026-06-19) — The forge emblem is redrawn again as the mascot crayfish, foregrounding its signature pincer claws (집게).
|
|
208
|
+
- **[0.6.25]** (2026-06-19) — Reasoning works at every thinking level (gajae parity), and the forge emblem is redrawn as the neon-lens coding wizard.
|
|
207
209
|
- **[0.6.24]** (2026-06-19) — `/provider` opens an interactive onboarding selector (OAuth vs API-compatible), and OpenAI-compatible backends gain per-vendor native-reasoning formats.
|
|
208
210
|
- **[0.6.23]** (2026-06-19) — Live reasoning/thinking streams in the TUI across every provider, three new OpenAI-compatible backends (LM Studio, xAI, Kimi) join the auth/discovery/catalog surface, and Gemini gains native function-calling.
|
|
209
211
|
- **[0.6.22]** (2026-06-18) — Extended-thinking activation is now consistent across providers: a `low` session thinking level enables reasoning everywhere.
|
|
210
|
-
- **[0.6.21]** (2026-06-18) — Session thinking level now reaches the provider's actual reasoning depth, not just the token ceiling.
|
|
211
|
-
- **[0.6.20]** (2026-06-18) — Launch REPL internals decomposed into testable modules: `@mention` path completion, slash-command view renderers, and slash-command handlers extracted from the monolithic `launch.ts` into dedicated files with full unit-test coverage.
|
|
212
212
|
|
|
213
213
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
214
214
|
<!-- CHANGELOG:END -->
|
package/README.ko.md
CHANGED
|
@@ -204,11 +204,11 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
|
|
|
204
204
|
## 변경 이력 (Changelog)
|
|
205
205
|
|
|
206
206
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
207
|
+
- **[0.6.26]** (2026-06-19) — The forge emblem is redrawn again as the mascot crayfish, foregrounding its signature pincer claws (집게).
|
|
208
|
+
- **[0.6.25]** (2026-06-19) — Reasoning works at every thinking level (gajae parity), and the forge emblem is redrawn as the neon-lens coding wizard.
|
|
207
209
|
- **[0.6.24]** (2026-06-19) — `/provider` opens an interactive onboarding selector (OAuth vs API-compatible), and OpenAI-compatible backends gain per-vendor native-reasoning formats.
|
|
208
210
|
- **[0.6.23]** (2026-06-19) — Live reasoning/thinking streams in the TUI across every provider, three new OpenAI-compatible backends (LM Studio, xAI, Kimi) join the auth/discovery/catalog surface, and Gemini gains native function-calling.
|
|
209
211
|
- **[0.6.22]** (2026-06-18) — Extended-thinking activation is now consistent across providers: a `low` session thinking level enables reasoning everywhere.
|
|
210
|
-
- **[0.6.21]** (2026-06-18) — Session thinking level now reaches the provider's actual reasoning depth, not just the token ceiling.
|
|
211
|
-
- **[0.6.20]** (2026-06-18) — Launch REPL internals decomposed into testable modules: `@mention` path completion, slash-command view renderers, and slash-command handlers extracted from the monolithic `launch.ts` into dedicated files with full unit-test coverage.
|
|
212
212
|
|
|
213
213
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
214
214
|
<!-- CHANGELOG:END -->
|
package/README.md
CHANGED
|
@@ -204,11 +204,11 @@ Required npm token permissions (repository secret `NPM_TOKEN`):
|
|
|
204
204
|
## Changelog
|
|
205
205
|
|
|
206
206
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
207
|
+
- **[0.6.26]** (2026-06-19) — The forge emblem is redrawn again as the mascot crayfish, foregrounding its signature pincer claws (집게).
|
|
208
|
+
- **[0.6.25]** (2026-06-19) — Reasoning works at every thinking level (gajae parity), and the forge emblem is redrawn as the neon-lens coding wizard.
|
|
207
209
|
- **[0.6.24]** (2026-06-19) — `/provider` opens an interactive onboarding selector (OAuth vs API-compatible), and OpenAI-compatible backends gain per-vendor native-reasoning formats.
|
|
208
210
|
- **[0.6.23]** (2026-06-19) — Live reasoning/thinking streams in the TUI across every provider, three new OpenAI-compatible backends (LM Studio, xAI, Kimi) join the auth/discovery/catalog surface, and Gemini gains native function-calling.
|
|
209
211
|
- **[0.6.22]** (2026-06-18) — Extended-thinking activation is now consistent across providers: a `low` session thinking level enables reasoning everywhere.
|
|
210
|
-
- **[0.6.21]** (2026-06-18) — Session thinking level now reaches the provider's actual reasoning depth, not just the token ceiling.
|
|
211
|
-
- **[0.6.20]** (2026-06-18) — Launch REPL internals decomposed into testable modules: `@mention` path completion, slash-command view renderers, and slash-command handlers extracted from the monolithic `launch.ts` into dedicated files with full unit-test coverage.
|
|
212
212
|
|
|
213
213
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
214
214
|
<!-- CHANGELOG:END -->
|
package/README.zh.md
CHANGED
|
@@ -204,11 +204,11 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
|
|
|
204
204
|
## 更新日志 (Changelog)
|
|
205
205
|
|
|
206
206
|
<!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
|
|
207
|
+
- **[0.6.26]** (2026-06-19) — The forge emblem is redrawn again as the mascot crayfish, foregrounding its signature pincer claws (집게).
|
|
208
|
+
- **[0.6.25]** (2026-06-19) — Reasoning works at every thinking level (gajae parity), and the forge emblem is redrawn as the neon-lens coding wizard.
|
|
207
209
|
- **[0.6.24]** (2026-06-19) — `/provider` opens an interactive onboarding selector (OAuth vs API-compatible), and OpenAI-compatible backends gain per-vendor native-reasoning formats.
|
|
208
210
|
- **[0.6.23]** (2026-06-19) — Live reasoning/thinking streams in the TUI across every provider, three new OpenAI-compatible backends (LM Studio, xAI, Kimi) join the auth/discovery/catalog surface, and Gemini gains native function-calling.
|
|
209
211
|
- **[0.6.22]** (2026-06-18) — Extended-thinking activation is now consistent across providers: a `low` session thinking level enables reasoning everywhere.
|
|
210
|
-
- **[0.6.21]** (2026-06-18) — Session thinking level now reaches the provider's actual reasoning depth, not just the token ceiling.
|
|
211
|
-
- **[0.6.20]** (2026-06-18) — Launch REPL internals decomposed into testable modules: `@mention` path completion, slash-command view renderers, and slash-command handlers extracted from the monolithic `launch.ts` into dedicated files with full unit-test coverage.
|
|
212
212
|
|
|
213
213
|
See [CHANGELOG.md](CHANGELOG.md) for the full history.
|
|
214
214
|
<!-- CHANGELOG:END -->
|
package/package.json
CHANGED
package/src/ai/model-manager.ts
CHANGED
|
@@ -100,13 +100,16 @@ export function thinkingMaxTokens(level?: "minimal" | "low" | "medium" | "high"
|
|
|
100
100
|
return 16000;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
/** Map the thinking level to an OpenAI reasoning-effort tier. `minimal`
|
|
104
|
-
* (
|
|
103
|
+
/** Map the thinking level to an OpenAI reasoning-effort tier. `minimal` is preserved as a
|
|
104
|
+
* genuine (lightest) reasoning effort — NOT collapsed to `low` — so reasoning works at EVERY
|
|
105
|
+
* thinking level (gajae parity: Minimal is a real effort). Only an unset level returns undefined
|
|
106
|
+
* (reasoning off). `xhigh` maps to `high`, the deepest tier the provider APIs accept. */
|
|
105
107
|
export function thinkingToReasoningEffort(
|
|
106
108
|
level?: "minimal" | "low" | "medium" | "high" | "xhigh",
|
|
107
|
-
): "low" | "medium" | "high" | undefined {
|
|
109
|
+
): "minimal" | "low" | "medium" | "high" | undefined {
|
|
108
110
|
if (!level) return undefined;
|
|
109
|
-
if (level === "minimal"
|
|
111
|
+
if (level === "minimal") return "minimal";
|
|
112
|
+
if (level === "low") return "low";
|
|
110
113
|
if (level === "high" || level === "xhigh") return "high";
|
|
111
114
|
return "medium";
|
|
112
115
|
}
|
|
@@ -73,11 +73,13 @@ function anthropicSystemBlocks(
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
/** Anthropic extended-thinking budget by reasoning effort (kept under max_tokens). Cross-provider
|
|
76
|
-
* parity (matches Gemini's tiers): low/medium/high
|
|
77
|
-
*
|
|
76
|
+
* parity (matches Gemini's tiers): minimal/low/medium/high ALL enable thinking with scaling
|
|
77
|
+
* depth — reasoning works at every thinking level (gajae parity: Minimal is a real effort).
|
|
78
|
+
* Only an UNSET effort stays non-thinking (the explicit /fast off path). */
|
|
78
79
|
function anthropicThinkingBudget(effort: CallOptions["reasoningEffort"], maxTokens: number): number | undefined {
|
|
79
80
|
let budget: number;
|
|
80
81
|
switch (effort) {
|
|
82
|
+
case "minimal": budget = 2000; break;
|
|
81
83
|
case "low": budget = 4000; break;
|
|
82
84
|
case "medium": budget = 10000; break;
|
|
83
85
|
case "high": budget = 24000; break;
|
|
@@ -9,11 +9,15 @@ import { geminiThinkingBudget } from "./gemini";
|
|
|
9
9
|
const ANTIGRAVITY_DAILY_ENDPOINT = "https://daily-cloudcode-pa.googleapis.com";
|
|
10
10
|
const ANTIGRAVITY_SANDBOX_ENDPOINT = "https://daily-cloudcode-pa.sandbox.googleapis.com";
|
|
11
11
|
|
|
12
|
+
|
|
12
13
|
/** Anthropic-style thinking budget for Claude served via CCA. gemini's budget fn
|
|
13
14
|
* returns undefined for claude ids, which left antigravity Claude with NO thinking
|
|
14
|
-
* requested (the opus "no reasoning" gap). Mirrors anthropic's effort→budget tiers
|
|
15
|
+
* requested (the opus "no reasoning" gap). Mirrors anthropic's effort→budget tiers —
|
|
16
|
+
* minimal/low/medium/high ALL think (gajae parity: reasoning at every level); only an
|
|
17
|
+
* UNSET effort stays non-thinking. */
|
|
15
18
|
function antigravityClaudeThinkingBudget(effort: CallOptions["reasoningEffort"]): number | undefined {
|
|
16
19
|
switch (effort) {
|
|
20
|
+
case "minimal": return 2000;
|
|
17
21
|
case "low": return 4000;
|
|
18
22
|
case "medium": return 10000;
|
|
19
23
|
case "high": return 24000;
|
|
@@ -24,14 +24,15 @@ export function geminiThinkingBudget(model: string, effort?: CallOptions["reason
|
|
|
24
24
|
const floor = m.includes("pro") ? 128 : 0; // pro-class cannot fully disable thinking
|
|
25
25
|
let budget: number;
|
|
26
26
|
switch (effort) {
|
|
27
|
+
// minimal/low/medium/high ALL enable thinking with scaling depth — reasoning works at
|
|
28
|
+
// every thinking level (gajae parity: Minimal is a real effort). Only an UNSET effort
|
|
29
|
+
// falls through to the floor (off for flash-class, the API minimum for pro-class).
|
|
30
|
+
case "minimal": budget = Math.max(floor, 2000); break;
|
|
27
31
|
case "low": budget = 4000; break;
|
|
28
32
|
case "medium": budget = 10000; break;
|
|
29
33
|
case "high": budget = 24000; break;
|
|
30
|
-
case "minimal":
|
|
31
34
|
default: budget = floor;
|
|
32
35
|
}
|
|
33
|
-
// Thought tokens bill against maxOutputTokens: keep at least ~1K of the output
|
|
34
|
-
// budget for visible text, or thinking starves the reply to an empty MAX_TOKENS.
|
|
35
36
|
if (typeof maxTokens === "number") budget = Math.min(budget, Math.max(floor, maxTokens - 1024));
|
|
36
37
|
return budget;
|
|
37
38
|
}
|
|
@@ -412,50 +412,52 @@ export async function animateFrames(stage: AsciiStage, opts: AnimateFramesOption
|
|
|
412
412
|
}
|
|
413
413
|
return total;
|
|
414
414
|
}
|
|
415
|
-
/** The compact jeo forge mark: a clean, wordless pictograph of the mascot
|
|
416
|
-
* crayfish
|
|
417
|
-
*
|
|
418
|
-
* (
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
*
|
|
422
|
-
*
|
|
415
|
+
/** The compact jeo forge mark: a clean, wordless pictograph of the mascot — the
|
|
416
|
+
* neon crayfish (가재) from assets/character.png, read for its signature feature:
|
|
417
|
+
* the two raised pincer CLAWS (집게). Read top→bottom: the open pincer jaws
|
|
418
|
+
* (◣◣ / ◢◢) reaching up, the claw arms (◆══╲ ╱══◆) angling into the body where
|
|
419
|
+
* the blue ◆ knuckles meet, the head with its glowing eye/terminal cluster
|
|
420
|
+
* (◉◉◉), then the rounded carapace/tail (╲▔▔╱). The mark is purely symbolic —
|
|
421
|
+
* NO embedded lettering (the brand wordmark lives in the welcome header, not
|
|
422
|
+
* under the emblem); the JEO identity is carried by the crayfish-claw silhouette
|
|
423
|
+
* alone. Width-1 glyphs only (box drawing + geometrics) so padding/centering
|
|
424
|
+
* math stays exact. Frame 0 is the static symbol. */
|
|
423
425
|
export const FORGE_MARK_ART: string[] = [
|
|
424
|
-
"
|
|
425
|
-
"
|
|
426
|
-
"
|
|
427
|
-
"
|
|
426
|
+
" ◣◣ ◢◢ ",
|
|
427
|
+
" ◆══╲ ╱══◆ ",
|
|
428
|
+
" ╲◉◉◉╱ ",
|
|
429
|
+
" ╲▔▔╱ "
|
|
428
430
|
];
|
|
429
431
|
|
|
430
432
|
export const FORGE_MARK_ART_ASCII: string[] = [
|
|
431
|
-
"
|
|
432
|
-
"
|
|
433
|
-
"
|
|
434
|
-
"
|
|
433
|
+
" // \\\\ ",
|
|
434
|
+
" o==\\ /==o ",
|
|
435
|
+
" \\ooo/ ",
|
|
436
|
+
" \\__/ "
|
|
435
437
|
];
|
|
436
438
|
|
|
437
|
-
/**
|
|
438
|
-
* carapace
|
|
439
|
-
*
|
|
440
|
-
*
|
|
441
|
-
*
|
|
439
|
+
/** Claw-snap blink frames for the compact crayfish forge mark: the arms, head and
|
|
440
|
+
* carapace stay fixed while the two pincer jaws SNAP shut (◣◣/◢◢ open → ◢◣/◢◣
|
|
441
|
+
* closed), so the crayfish "clicks" its claws. Frame 0 === FORGE_MARK_ART, so a
|
|
442
|
+
* frameless render is byte-identical to the static symbol. All lines share the
|
|
443
|
+
* same width and width-1 glyphs. */
|
|
442
444
|
export const FORGE_MARK_FRAMES: string[][] = [
|
|
443
445
|
FORGE_MARK_ART,
|
|
444
446
|
[
|
|
445
|
-
"
|
|
446
|
-
"
|
|
447
|
-
"
|
|
448
|
-
"
|
|
447
|
+
" ◢◣ ◢◣ ",
|
|
448
|
+
" ◆══╲ ╱══◆ ",
|
|
449
|
+
" ╲◉◉◉╱ ",
|
|
450
|
+
" ╲▔▔╱ "
|
|
449
451
|
]
|
|
450
452
|
];
|
|
451
453
|
|
|
452
454
|
export const FORGE_MARK_FRAMES_ASCII: string[][] = [
|
|
453
455
|
FORGE_MARK_ART_ASCII,
|
|
454
456
|
[
|
|
455
|
-
"
|
|
456
|
-
"
|
|
457
|
-
"
|
|
458
|
-
"
|
|
457
|
+
" >< >< ",
|
|
458
|
+
" o==\\ /==o ",
|
|
459
|
+
" \\ooo/ ",
|
|
460
|
+
" \\__/ "
|
|
459
461
|
]
|
|
460
462
|
];
|
|
461
463
|
|
|
@@ -465,24 +467,23 @@ export function forgeMarkFrameCount(): number {
|
|
|
465
467
|
}
|
|
466
468
|
|
|
467
469
|
/** Grand hero variant for the welcome forge box (gjc-style spacious banner): the
|
|
468
|
-
* same mascot crayfish rendered large and wordless —
|
|
469
|
-
*
|
|
470
|
-
*
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
* exact. */
|
|
470
|
+
* same mascot crayfish rendered large and wordless — the two raised pincer claws
|
|
471
|
+
* (◣◣ / ◢◢, the 집게 feature) on wide arms (◆══╲ ╱══◆), the head with its glowing
|
|
472
|
+
* eye/terminal cluster (◉ ◉ ◉), and the broad rounded carapace/tail (╲▔▔▔▔▔╱).
|
|
473
|
+
* Purely symbolic — NO embedded lettering or caption. Width-1 glyphs only so
|
|
474
|
+
* padding/centering math stays exact. */
|
|
474
475
|
export const FORGE_MARK_ART_GRAND: string[] = [
|
|
475
|
-
"
|
|
476
|
-
"
|
|
477
|
-
"
|
|
478
|
-
"
|
|
476
|
+
" ◣◣ ◢◢ ",
|
|
477
|
+
" ◆══╲ ╱══◆ ",
|
|
478
|
+
" ╲ ◉ ◉ ◉ ╱ ",
|
|
479
|
+
" ╲▔▔▔▔▔▔▔▔▔╱ "
|
|
479
480
|
];
|
|
480
481
|
|
|
481
482
|
export const FORGE_MARK_ART_GRAND_ASCII: string[] = [
|
|
482
|
-
"
|
|
483
|
-
"
|
|
484
|
-
"
|
|
485
|
-
"
|
|
483
|
+
" // \\\\ ",
|
|
484
|
+
" o==\\ /==o ",
|
|
485
|
+
" \\ o o o / ",
|
|
486
|
+
" \\_________/ "
|
|
486
487
|
];
|
|
487
488
|
|
|
488
489
|
|