jeo-code 0.12.3 → 0.12.4

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 CHANGED
@@ -9,6 +9,17 @@ The README mirrors the latest 5 entries — regenerate with `bun run changelog:s
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.12.4] - 2026-10-17
13
+ _Refresh Antigravity provider (`antigravity/*`) account catalogs with `antigravity/hub/2.23.1` so entitled Gemini 4 Argon and Gemini 3.8 Flash tiers appear directly in `/model provider antigravity`._
14
+
15
+ ### Fixed
16
+ - **Antigravity provider client identity & Argon catalog visibility** (`src/ai/providers/antigravity.ts`, `src/ai/model-discovery.ts`) — updated `getAntigravityUserAgent()` from `antigravity/1.104.0` to `antigravity/hub/2.23.1` (`jeopi` v16.6.3 parity) so `daily-cloudcode-pa.googleapis.com/v1internal:fetchAvailableModels` returns entitled `gemini-4-argon-{low,medium,high}` and `gemini-3.8-flash-*` tiers. Preserved named non-recommended chat models (`displayName`) alongside `agentModelSorts`/`tieredModelIds`/`defaultAgentModelId` while excluding explicit non-chat (`tabModelIds`, `imageGenerationModelIds`, `audioTranscriptionModelIds`, `deprecatedModelIds`), internal, and unnamed rows.
17
+ - **Client-UA-scoped Antigravity model cache invalidation** (`src/ai/model-cache.ts`) — included `getAntigravityUserAgent()` in `antigravityAccountScope` so client User-Agent updates immediately invalidate stale cached model lists without waiting for the 6-hour TTL.
18
+ - **In-name `-medium` thinking depth recognition** (`src/ai/providers/gemini.ts`, `src/ai/model-catalog.ts`) — `geminiNamedEffort` and `inferCatalogMetadata` now recognize `-medium` model suffixes (`gemini-4-argon-medium`, `gemini-3.8-flash-medium`) so unset `reasoningEffort` defaults to `medium` thinking depth.
19
+
20
+ ### Verified
21
+ - Focused Antigravity/Gemini/discovery/catalog regression suites (`175 pass, 0 fail`), `bun run typecheck`, `bun run build`, `bun run pack:check`, and live `antigravity/gemini-4-argon-{low,medium,high}` discovery + `antigravity/gemini-4-argon-medium` inference (`HTTP 200`).
22
+
12
23
  ## [0.12.3] - 2026-10-17
13
24
  _Anthropic static model catalog trimmed to claude-5.x with live API discovery, and `/route off` strictly fixes the active model with no failover._
14
25
 
package/README.ja.md CHANGED
@@ -416,10 +416,10 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
416
416
 
417
417
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
418
418
  - **[Unreleased]**
419
+ - **[0.12.4]** (2026-10-17) — Refresh Antigravity provider (`antigravity/*`) account catalogs with `antigravity/hub/2.23.1` so entitled Gemini 4 Argon and Gemini 3.8 Flash tiers appear directly in `/model provider antigravity`.
419
420
  - **[0.12.3]** (2026-10-17) — Anthropic static model catalog trimmed to claude-5.x with live API discovery, and `/route off` strictly fixes the active model with no failover.
420
421
  - **[0.12.2]** (2026-10-16) — Select Argon through the official agy full agent, with its own live catalog and session, separately from jeo's Cloud Code Assist backend.
421
422
  - **[0.12.1]** (2026-10-16) — Logged-in OpenAI subscription models were invisible on proxy-configured machines.
422
- - **[0.12.0]** (2026-10-16) — Karpathy behavioral guardrails become always-on discipline, and skill routing gains an ECC single-harness inventory plus a Jev-style advisory router.
423
423
 
424
424
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
425
425
  <!-- CHANGELOG:END -->
package/README.ko.md CHANGED
@@ -417,10 +417,10 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
417
417
 
418
418
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
419
419
  - **[Unreleased]**
420
+ - **[0.12.4]** (2026-10-17) — Refresh Antigravity provider (`antigravity/*`) account catalogs with `antigravity/hub/2.23.1` so entitled Gemini 4 Argon and Gemini 3.8 Flash tiers appear directly in `/model provider antigravity`.
420
421
  - **[0.12.3]** (2026-10-17) — Anthropic static model catalog trimmed to claude-5.x with live API discovery, and `/route off` strictly fixes the active model with no failover.
421
422
  - **[0.12.2]** (2026-10-16) — Select Argon through the official agy full agent, with its own live catalog and session, separately from jeo's Cloud Code Assist backend.
422
423
  - **[0.12.1]** (2026-10-16) — Logged-in OpenAI subscription models were invisible on proxy-configured machines.
423
- - **[0.12.0]** (2026-10-16) — Karpathy behavioral guardrails become always-on discipline, and skill routing gains an ECC single-harness inventory plus a Jev-style advisory router.
424
424
 
425
425
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
426
426
  <!-- CHANGELOG:END -->
package/README.md CHANGED
@@ -409,10 +409,10 @@ Huge thanks to [gajae-code](https://github.com/Yeachan-Heo/gajae-code) for the i
409
409
 
410
410
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
411
411
  - **[Unreleased]**
412
+ - **[0.12.4]** (2026-10-17) — Refresh Antigravity provider (`antigravity/*`) account catalogs with `antigravity/hub/2.23.1` so entitled Gemini 4 Argon and Gemini 3.8 Flash tiers appear directly in `/model provider antigravity`.
412
413
  - **[0.12.3]** (2026-10-17) — Anthropic static model catalog trimmed to claude-5.x with live API discovery, and `/route off` strictly fixes the active model with no failover.
413
414
  - **[0.12.2]** (2026-10-16) — Select Argon through the official agy full agent, with its own live catalog and session, separately from jeo's Cloud Code Assist backend.
414
415
  - **[0.12.1]** (2026-10-16) — Logged-in OpenAI subscription models were invisible on proxy-configured machines.
415
- - **[0.12.0]** (2026-10-16) — Karpathy behavioral guardrails become always-on discipline, and skill routing gains an ECC single-harness inventory plus a Jev-style advisory router.
416
416
 
417
417
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
418
418
  <!-- CHANGELOG:END -->
package/README.zh.md CHANGED
@@ -414,10 +414,10 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
414
414
 
415
415
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
416
416
  - **[Unreleased]**
417
+ - **[0.12.4]** (2026-10-17) — Refresh Antigravity provider (`antigravity/*`) account catalogs with `antigravity/hub/2.23.1` so entitled Gemini 4 Argon and Gemini 3.8 Flash tiers appear directly in `/model provider antigravity`.
417
418
  - **[0.12.3]** (2026-10-17) — Anthropic static model catalog trimmed to claude-5.x with live API discovery, and `/route off` strictly fixes the active model with no failover.
418
419
  - **[0.12.2]** (2026-10-16) — Select Argon through the official agy full agent, with its own live catalog and session, separately from jeo's Cloud Code Assist backend.
419
420
  - **[0.12.1]** (2026-10-16) — Logged-in OpenAI subscription models were invisible on proxy-configured machines.
420
- - **[0.12.0]** (2026-10-16) — Karpathy behavioral guardrails become always-on discipline, and skill routing gains an ECC single-harness inventory plus a Jev-style advisory router.
421
421
 
422
422
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
423
423
  <!-- CHANGELOG:END -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jeo-code",
3
- "version": "0.12.3",
3
+ "version": "0.12.4",
4
4
  "description": "Clean, highly optimized AI coding agent using spec-first loop",
5
5
  "type": "module",
6
6
  "main": "src/cli.ts",
@@ -22,6 +22,7 @@ import { jeoEnv } from "../util/env";
22
22
  import { recordLiveCodexModels, recordLiveProviderModels, setAntigravityAccountScope, setOpenAIOauthAccountScope } from "./model-catalog";
23
23
  import type { Credential } from "../auth";
24
24
  import { getStoredOAuth, snapshotProvider } from "../auth/storage";
25
+ import { getAntigravityUserAgent } from "./providers/antigravity";
25
26
  import { extractChatgptAccountId } from "./providers/openai-responses";
26
27
  import type { ProviderName } from "./types";
27
28
 
@@ -87,7 +88,7 @@ export async function antigravityAccountScope(credential?: Credential): Promise<
87
88
  || process.env.GOOGLE_CLOUD_PROJECT?.trim()
88
89
  || process.env.GOOGLE_CLOUD_PROJECT_ID?.trim()
89
90
  || "";
90
- return createHash("sha256").update(`${providerSlot}\u0000${identity}\u0000${projectId}`, "utf8").digest("hex");
91
+ return createHash("sha256").update(`${providerSlot}\u0000${identity}\u0000${projectId}\u0000${getAntigravityUserAgent()}`, "utf8").digest("hex");
91
92
  } catch {
92
93
  return undefined;
93
94
  }
@@ -618,7 +618,7 @@ export function inferCatalogMetadata(modelId: string): CatalogModel | undefined
618
618
  providerModel: id,
619
619
  contextTokens: 1_000_000,
620
620
  maxOutputTokens: 65_536,
621
- thinking: !reasons ? [] : big3 || id.includes("thinking") || id.includes("-high") || id.includes("-low") ? FULL : STD,
621
+ thinking: !reasons ? [] : big3 || id.includes("thinking") || id.includes("-high") || id.includes("-medium") || id.includes("-low") ? FULL : STD,
622
622
  images: true,
623
623
  company: antigravity ? "Google Antigravity" : "Google",
624
624
  };
@@ -212,7 +212,7 @@ function isGeminiChatModel(id: string): boolean {
212
212
  }
213
213
 
214
214
  type CodexModelRow = { slug?: string; id?: string; visibility?: string; supported_in_api?: boolean; priority?: number };
215
- type AntigravityModelRow = { slug?: string; id?: string; name?: string; isInternal?: boolean; model?: string };
215
+ type AntigravityModelRow = { slug?: string; id?: string; name?: string; displayName?: string; isInternal?: boolean; model?: string };
216
216
 
217
217
  function normalizeAntigravityModelId(id: string): string {
218
218
  return id.replace(/^models\//, "").replace(/^antigravity\//, "");
@@ -250,8 +250,9 @@ export function parseModelsBody(provider: ProviderName, body: unknown, opts: { o
250
250
  // (MODEL_PLACEHOLDER_*) and must never be surfaced. The response's OWN
251
251
  // metadata decides what to show — no hard-coded model lists:
252
252
  // Agent sorts and tiered model ids are complementary chat offerings, not
253
- // interchangeable allowlists. Include both plus the declared default;
254
- // only older responses without these fields need non-chat role filtering.
253
+ // interchangeable allowlists. Include both plus the declared default and
254
+ // named non-recommended chat models; exclude explicit non-chat roles and
255
+ // unnamed unreferenced rows.
255
256
  const payload = body as {
256
257
  models?: Record<string, AntigravityModelRow> | AntigravityModelRow[];
257
258
  agentModelSorts?: { groups?: { modelIds?: string[] }[] }[];
@@ -280,13 +281,16 @@ export function parseModelsBody(provider: ProviderName, body: unknown, opts: { o
280
281
  if (typeof payload.defaultAgentModelId === "string") agentIds.add(normalizeAntigravityModelId(payload.defaultAgentModelId));
281
282
  const hasChatModelMetadata = Array.isArray(payload.agentModelSorts)
282
283
  || payload.tieredModelIds !== undefined || payload.defaultAgentModelId !== undefined;
283
- const nonChat = new Set([
284
+ const explicitNonChat = new Set([
284
285
  ...roleIds(payload.tabModelIds),
285
286
  ...roleIds(payload.imageGenerationModelIds),
286
287
  ...roleIds(payload.audioTranscriptionModelIds),
288
+ ...deprecated,
289
+ ]);
290
+ const nonChat = new Set([
291
+ ...explicitNonChat,
287
292
  ...roleIds(payload.commitMessageModelIds),
288
293
  ...roleIds(payload.mqueryModelIds),
289
- ...deprecated,
290
294
  ]);
291
295
  const rawModels = payload.models;
292
296
  const entries = Array.isArray(rawModels)
@@ -297,7 +301,10 @@ export function parseModelsBody(provider: ProviderName, body: unknown, opts: { o
297
301
  .filter(([id, model]) =>
298
302
  id.length > 0 &&
299
303
  model?.isInternal !== true &&
300
- (hasChatModelMetadata ? agentIds.has(id) : !nonChat.has(id)))
304
+ !explicitNonChat.has(id) &&
305
+ (hasChatModelMetadata
306
+ ? agentIds.size > 0 && (agentIds.has(id) || (!nonChat.has(id) && typeof model?.displayName === "string" && model.displayName.trim().length > 0))
307
+ : !nonChat.has(id)))
301
308
  .map(([id]) => `antigravity/${id}`);
302
309
  }
303
310
  if (provider === "gemini") {
@@ -28,10 +28,10 @@ function antigravityClaudeThinkingBudget(effort: CallOptions["reasoningEffort"])
28
28
  const ENDPOINTS = [ANTIGRAVITY_DAILY_ENDPOINT, ANTIGRAVITY_SANDBOX_ENDPOINT] as const;
29
29
 
30
30
  export function getAntigravityUserAgent(): string {
31
- const version = process.env.PI_AI_ANTIGRAVITY_VERSION || "1.104.0";
31
+ const version = process.env.PI_AI_ANTIGRAVITY_VERSION || "2.23.1";
32
32
  const os = process.platform === "win32" ? "windows" : process.platform;
33
33
  const arch = process.arch === "x64" ? "amd64" : process.arch === "ia32" ? "386" : process.arch;
34
- return `antigravity/${version} ${os}/${arch}`;
34
+ return `antigravity/hub/${version} ${os}/${arch}`;
35
35
  }
36
36
 
37
37
  function antigravityModelId(model: string): string {
@@ -48,6 +48,7 @@ export function geminiThinkingBudget(model: string, effort?: CallOptions["reason
48
48
  * the documented thought-token burn protection). Expects a lowercased id. */
49
49
  function geminiNamedEffort(m: string): CallOptions["reasoningEffort"] | undefined {
50
50
  return m.includes("-high") ? "high"
51
+ : m.includes("-medium") ? "medium"
51
52
  : m.includes("-low") ? "low"
52
53
  : m.includes("thinking") ? "medium"
53
54
  : undefined;