jeo-code 0.11.3 → 0.11.5

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,38 @@ The README mirrors the latest 5 entries — regenerate with `bun run changelog:s
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [0.11.5] - 2026-10-04
13
+ _Anthropic login now runs Opus 5.5 and Sonnet 5.5 as the selected models: the OAuth client version gate and incompatible fast-mode temperature are fixed, with real request and streaming responses verified._
14
+
15
+ ### Added
16
+ - **Anthropic 5.5 model selection** — `opus5.5` / `opus-5.5` select `claude-opus-5-5`; `sonnet5.5` / `sonnet-5.5` select `claude-sonnet-5-5`. Catalog metadata reflects the official 1M context, 128K output and adaptive-thinking support; Opus 5.5 pricing is $4 input / $20 output per million tokens.
17
+
18
+ ### Fixed
19
+ - **Opus 5.5 rejected after OAuth login** — update the shared request User-Agent and billing-header client version from 2.1.63 to 2.1.289, satisfying Anthropic's observed 2.1.280 minimum. The companion Anthropic web-search OAuth path uses the same supported version.
20
+ - **Fast-mode 5.5 requests rejected on temperature** — omit custom temperature for Opus/Sonnet 5.5 and newer before the first request; retain the selected wire model and existing older-model recovery behavior.
21
+
22
+ ### Changed
23
+ - **Anthropic setup recommendation and automatic routing** — Sonnet 5.5 is the recommended setup model and high-tier automatic pick; the complex-tier automatic pick moves from Fable 5 to Opus 5.5 under the existing catalog ranking. Explicit model pins and the legacy bare `opus` / `sonnet` aliases remain unchanged.
24
+
25
+ ### Verified
26
+ - Real Anthropic OAuth requests returned HTTP 200 with exact `claude-opus-5-5` and `claude-sonnet-5-5` response identities in both low-effort and fast mode. Both models also completed real streaming requests with matching `message_start.model` and `message_stop`.
27
+ - Modified behavioral regressions: 292 pass, 0 fail across 11 files; `bun run typecheck` passed. Regression coverage enforces OAuth client version eligibility, first-request sampling compatibility, exact model preservation, setup defaults, pricing and web-search headers.
28
+
29
+ ## [0.11.4] - 2026-10-01
30
+ _The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire._
31
+
32
+ ### Fixed
33
+ - **CI test gate was order-dependent** (`test/stdio-override.ts`, `test/launch-flags.test.ts`, `test/review-fixes.test.ts`, `test/terminal-restore.test.ts`, `test/tui-app.test.ts`, `test/tui-renderer.test.ts`) — three files redefined `process.stdout.isTTY`/`columns`/`rows` with a bare `Object.defineProperty` (non-writable) and restored only when an own descriptor had existed, so on a non-TTY stdout the property stayed read-only; the next file to assign it threw "Attempted to assign to readonly property", and `terminal-restore`'s stranded fake stdin then broke every later launch test (12 failures, Linux CI only, since Bun runs files in readdir order). Overrides now restore the exact prior descriptor or delete the property.
34
+ - **`npm-publish.yml`** — the browser tool tests run in their own `bun test` process (`JEO_SKIP_BROWSER_TESTS=1` for the main suite, `JEO_REQUIRE_BROWSER=1` for `test/browser-tool.test.ts`): in-process Chromium launch/teardown intermittently made the first later CLI spawn exit 0 with empty stdout on GitHub runners. `test/launch-oneshot-slash.test.ts` now asserts the child's exit code and includes its stderr in the failure. Actions bumped to `checkout@v7`/`setup-node@v7`/`upload-artifact@v7`, runner pinned to `ubuntu-24.04`.
35
+
36
+ ### Changed
37
+ - **npm publishing moved to trusted publishing (OIDC)** (`.github/workflows/npm-publish.yml`) — the workflow no longer reads an `NPM_TOKEN` secret (the stored one no longer authenticates: CI's `npm whoami` failed, so the token path could not publish anyway). It upgrades npm to ≥ 11.5.1, checks the OIDC prerequisites (`id-token: write`), and publishes with provenance. npm's registered trusted publisher for `jeo-code` is GitHub Actions / `akillness/jeo-code` / `npm-publish.yml` (`npm trust list jeo-code`). npm is restricting bypass-2FA tokens from Aug 2026 and ending direct publishing with them in Jan 2027, so the token path had a shelf life regardless.
38
+ - **`pack:check` reads npm 12's `pack --json` output** (`scripts/check-package.ts`) — npm ≥ 12 prints `{ "<name>": manifest }` where npm ≤ 11 printed `[manifest]`, so the gate reported every required file as missing once CI upgraded npm. Both shapes are accepted and pinned by a test.
39
+ - **A dry run on an already-released ref** reports "already published" instead of failing on npm's cannot-publish-over check.
40
+
41
+ ### Verified
42
+ - Full publish workflow dry run on GitHub runners: browser hard gate, typecheck, main suite (3622 pass), browser-tool suite (15 pass), `pack:check`, packed-tarball boot smoke, OIDC prerequisites — all green, zero error/warning annotations.
43
+
12
44
  ## [0.11.3] - 2026-10-01
13
45
  _Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it._
14
46
 
@@ -2457,7 +2489,8 @@ _Initial release._
2457
2489
  ### Added
2458
2490
  - Initial jeo-code agent and CLI.
2459
2491
 
2460
- [Unreleased]: https://github.com/akillness/jeo-code/compare/v0.11.3...HEAD
2492
+ [Unreleased]: https://github.com/akillness/jeo-code/compare/v0.11.4...HEAD
2493
+ [0.11.4]: https://github.com/akillness/jeo-code/releases/tag/v0.11.4
2461
2494
  [0.11.3]: https://github.com/akillness/jeo-code/releases/tag/v0.11.3
2462
2495
  [0.11.2]: https://github.com/akillness/jeo-code/releases/tag/v0.11.2
2463
2496
  [0.11.1]: https://github.com/akillness/jeo-code/releases/tag/v0.11.1
package/README.ja.md CHANGED
@@ -336,12 +336,9 @@ bun run dev:doctor # グローバル `jeo` がこのソースを実行
336
336
 
337
337
  ## 公開 (Publishing)
338
338
 
339
- CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリース公開時に自動、または `workflow_dispatch` の手動実行(ドライラン可)。ワークフローは型チェック・テスト・トークン検証(`npm whoami`)の後、`npm publish --provenance` を実行します。
339
+ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリース公開時に自動、または `workflow_dispatch` の手動実行(ドライラン可)。ワークフローはブラウザのハードゲート・型チェック・テスト(ブラウザツールのテストは別プロセス)・`pack:check`・パック済み tarball の起動スモークを経て `npm publish --provenance` を実行します。
340
340
 
341
- 必要な npm トークン権限(リポジトリシークレット `NPM_TOKEN`):
342
-
343
- - `jeo-code` パッケージへの Read/Write 権限を持つ **Granular Access Token**、またはクラシック **Automation** トークン
344
- - 「公開時の **bypass 2FA**」許可が必須 — Automation トークンは常にバイパス、granular トークンはオプションの有効化が必要
341
+ 公開には **npm trusted publishing(OIDC)** を使います — ローテーション・漏洩・2FA 免除が必要な `NPM_TOKEN` シークレットは存在しません(npm は 2026 年 8 月から 2FA バイパストークンを制限し、2027 年 1 月にそのトークンによる直接公開を終了します)。npmjs.com での一度きりの設定: パッケージ `jeo-code` → Settings → Trusted Publisher → GitHub Actions、owner `akillness`、repository `jeo-code`、workflow `npm-publish.yml`、environment は空欄。ジョブには `permissions.id-token: write` と npm ≥ 11.5.1 が必要です(ワークフローが npm 自体を更新します)。
345
342
 
346
343
  ## 謝辞 (Acknowledgements)
347
344
 
@@ -351,10 +348,10 @@ CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリ
351
348
 
352
349
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
353
350
  - **[Unreleased]**
351
+ - **[0.11.5]** (2026-10-04) — Anthropic login now runs Opus 5.5 and Sonnet 5.5 as the selected models: the OAuth client version gate and incompatible fast-mode temperature are fixed, with real request and streaming responses verified.
352
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
354
353
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
355
354
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
356
- - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
357
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
358
355
 
359
356
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
360
357
  <!-- CHANGELOG:END -->
package/README.ko.md CHANGED
@@ -338,12 +338,9 @@ bun run dev:doctor # 전역 `jeo`가 이 소스를 실행하는지 보
338
338
 
339
339
  ## 배포 (Publishing)
340
340
 
341
- CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리즈 게시 시 자동, 또는 `workflow_dispatch` 수동 실행(드라이런 옵션). 워크플로는 타입체크·테스트·토큰 검증(`npm whoami`) 후 `npm publish --provenance`를 실행합니다.
341
+ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리즈 게시 시 자동, 또는 `workflow_dispatch` 수동 실행(드라이런 옵션). 워크플로는 브라우저 하드 게이트·타입체크·테스트(브라우저 도구 테스트는 별도 프로세스)·`pack:check`·패키징된 tarball 부팅 스모크를 거친 뒤 `npm publish --provenance`를 실행합니다.
342
342
 
343
- 필요한 npm 토큰 권한(저장소 시크릿 `NPM_TOKEN`):
344
-
345
- - `jeo-code` 패키지에 Read/Write 권한이 있는 **Granular Access Token**, 또는 클래식 **Automation** 토큰
346
- - "배포 시 **bypass 2FA**" 허용 필수 — Automation 토큰은 항상 우회, granular 토큰은 옵션 활성화 필요
343
+ 배포는 **npm trusted publishing(OIDC)** 을 사용합니다 — 교체·유출·2FA 예외가 필요한 `NPM_TOKEN` 시크릿이 없습니다(npm은 2026년 8월부터 2FA 우회 토큰을 제한하고 2027년 1월에 해당 토큰의 직접 배포를 종료합니다). npmjs.com에서 1회 설정: 패키지 `jeo-code` → Settings → Trusted Publisher → GitHub Actions, owner `akillness`, repository `jeo-code`, workflow `npm-publish.yml`, environment 비움. 잡에는 `permissions.id-token: write`와 npm ≥ 11.5.1이 필요합니다(워크플로가 npm을 직접 업그레이드).
347
344
 
348
345
  ## 감사의 말 (Acknowledgements)
349
346
 
@@ -353,10 +350,10 @@ CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리
353
350
 
354
351
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
355
352
  - **[Unreleased]**
353
+ - **[0.11.5]** (2026-10-04) — Anthropic login now runs Opus 5.5 and Sonnet 5.5 as the selected models: the OAuth client version gate and incompatible fast-mode temperature are fixed, with real request and streaming responses verified.
354
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
356
355
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
357
356
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
358
- - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
359
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
360
357
 
361
358
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
362
359
  <!-- CHANGELOG:END -->
package/README.md CHANGED
@@ -344,12 +344,9 @@ bun run dev:doctor # report whether global `jeo` runs this source (link
344
344
  ## Publishing
345
345
 
346
346
 
347
- CI publishes via `.github/workflows/npm-publish.yml` — triggered by a published GitHub release, or manually with `workflow_dispatch` (optional dry-run). The workflow typechecks, tests, verifies the token (`npm whoami`), then runs `npm publish --provenance`.
347
+ CI publishes via `.github/workflows/npm-publish.yml` — triggered by a published GitHub release, or manually with `workflow_dispatch` (optional dry-run). The workflow runs the browser hard gate, typecheck, the test suite (browser tool tests in their own process), `pack:check`, a packed-tarball boot smoke, then `npm publish --provenance`.
348
348
 
349
- Required npm token permissions (repository secret `NPM_TOKEN`):
350
-
351
- - A **Granular Access Token** with Read/Write access to the `jeo-code` package, or a classic **Automation** token
352
- - "**bypass 2FA** for publishing" must be allowed — Automation tokens always bypass; granular tokens need the option enabled
349
+ Publishing uses **npm trusted publishing (OIDC)** — there is no `NPM_TOKEN` secret to rotate, leak, or exempt from 2FA (npm restricts bypass-2FA tokens from Aug 2026 and ends direct publishing with them in Jan 2027). One-time setup on npmjs.com: package `jeo-code` → Settings → Trusted Publisher → GitHub Actions, owner `akillness`, repository `jeo-code`, workflow `npm-publish.yml`, environment blank. The job needs `permissions.id-token: write` and npm ≥ 11.5.1 (the workflow upgrades npm itself).
353
350
 
354
351
  ## Acknowledgements
355
352
 
@@ -359,10 +356,10 @@ Huge thanks to [gajae-code](https://github.com/Yeachan-Heo/gajae-code) for the i
359
356
 
360
357
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
361
358
  - **[Unreleased]**
359
+ - **[0.11.5]** (2026-10-04) — Anthropic login now runs Opus 5.5 and Sonnet 5.5 as the selected models: the OAuth client version gate and incompatible fast-mode temperature are fixed, with real request and streaming responses verified.
360
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
362
361
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
363
362
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
364
- - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
365
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
366
363
 
367
364
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
368
365
  <!-- CHANGELOG:END -->
package/README.zh.md CHANGED
@@ -334,12 +334,9 @@ bun run dev:doctor # 报告全局 `jeo` 是否运行的是本源码(lin
334
334
 
335
335
  ## 发布 (Publishing)
336
336
 
337
- CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release 时自动触发,或手动 `workflow_dispatch`(可选 dry-run)。工作流执行类型检查、测试、令牌校验(`npm whoami`)后运行 `npm publish --provenance`。
337
+ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release 时自动触发,或手动 `workflow_dispatch`(可选 dry-run)。工作流依次执行浏览器硬门禁、类型检查、测试(浏览器工具测试在独立进程中)、`pack:check`、打包 tarball 的启动冒烟,然后运行 `npm publish --provenance`。
338
338
 
339
- 所需 npm 令牌权限(仓库 secret `NPM_TOKEN`):
340
-
341
- - 对 `jeo-code` 包具有 Read/Write 权限的 **Granular Access Token**,或经典 **Automation** 令牌
342
- - 必须允许"发布时 **bypass 2FA**" — Automation 令牌始终绕过,granular 令牌需启用该选项
339
+ 发布使用 **npm trusted publishing(OIDC)** — 不存在需要轮换、可能泄露或需豁免 2FA 的 `NPM_TOKEN` secret(npm 自 2026 年 8 月起限制绕过 2FA 的令牌,并于 2027 年 1 月终止用其直接发布)。在 npmjs.com 上一次性设置: 包 `jeo-code` → Settings → Trusted Publisher → GitHub Actions,owner `akillness`,repository `jeo-code`,workflow `npm-publish.yml`,environment 留空。该 job 需要 `permissions.id-token: write` 和 npm ≥ 11.5.1(工作流会自行升级 npm)。
343
340
 
344
341
  ## 致谢 (Acknowledgements)
345
342
 
@@ -349,10 +346,10 @@ CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release
349
346
 
350
347
  <!-- CHANGELOG:START (auto-generated from CHANGELOG.md — run `bun run changelog:sync`) -->
351
348
  - **[Unreleased]**
349
+ - **[0.11.5]** (2026-10-04) — Anthropic login now runs Opus 5.5 and Sonnet 5.5 as the selected models: the OAuth client version gate and incompatible fast-mode temperature are fixed, with real request and streaming responses verified.
350
+ - **[0.11.4]** (2026-10-01) — The release pipeline could not actually release: 13 tests failed on Linux CI only, and the stored npm token no longer authenticated. Both are fixed at the root — the suite is order-independent, and publishing no longer depends on a secret that can expire.
352
351
  - **[0.11.3]** (2026-10-01) — Remote control grew from one Telegram bot into one shared daemon serving Telegram, Discord, and Slack — and the workflow gates that were meant to block unverified work (`approve`/`team` plan identity, `done` re-checks, the autopilot ratchet) now actually block it.
353
352
  - **[0.11.2]** (2026-09-30) — OpenAI model pickers now follow the authenticated API and Codex catalogs, including subscription-only models, without hidden or stale entries.
354
- - **[0.11.1]** (2026-08-25) — Every non-interactive `jeo` run hung forever once Telegram notifications were configured — `echo "..." | jeo`, `jeo -p "..."` in CI, any scripted use. The work completed and the command returned; the process just never exited.
355
- - **[0.11.0]** (2026-08-25) — One bad boundary check was corrupting agent context, subagent fan-out, and the Telegram daemon's kill safety at the same time — and none of the three looked related from the outside.
356
353
 
357
354
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
358
355
  <!-- CHANGELOG:END -->
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jeo-code",
3
- "version": "0.11.3",
3
+ "version": "0.11.5",
4
4
  "description": "Clean, highly optimized AI coding agent using spec-first loop",
5
5
  "type": "module",
6
6
  "main": "src/cli.ts",
@@ -76,7 +76,7 @@ const SEARCH_SYSTEM_PROMPT =
76
76
 
77
77
  // Claude Code OAuth request shape (mirrors src/ai/providers/anthropic.ts —
78
78
  // Anthropic OAuth tokens are scoped to Claude Code-shaped requests).
79
- const CLAUDE_CODE_VERSION = "2.1.63";
79
+ const CLAUDE_CODE_VERSION = "2.1.289";
80
80
  const CLAUDE_CODE_SYSTEM_INSTRUCTION = "You are a Claude agent, built on Anthropic's Claude Agent SDK.";
81
81
  const ANTHROPIC_OAUTH_BETA = [
82
82
  "claude-code-20250219",
@@ -27,10 +27,10 @@ export interface ModelCatalogEntry {
27
27
  /** Canonical ids surfaced as a provider's recommended default — the current
28
28
  * (2026-07 deep-research verified) general-availability flagship per provider,
29
29
  * NOT necessarily the single most expensive/most-capable model (e.g. Anthropic's
30
- * actual top tier, claude-fable-5, is pricier than the "recommended" sonnet-5 —
30
+ * actual top tier, claude-fable-5, is pricier than the "recommended" sonnet-5-5 —
31
31
  * recommended means "solid everyday default", not "strongest"). Re-verify and
32
32
  * update whenever a provider ships a new default-tier release. */
33
- const RECOMMENDED: Record<string, true> = { "claude-sonnet-5": true, "gpt-5.5": true, "gemini-3-flash": true, "antigravity/gemini-pro-agent": true, "qwen2.5": true };
33
+ const RECOMMENDED: Record<string, true> = { "claude-sonnet-5-5": true, "gpt-5.5": true, "gemini-3-flash": true, "antigravity/gemini-pro-agent": true, "qwen2.5": true };
34
34
 
35
35
  export function normalizeModelId(id: string): string {
36
36
  return (id ?? "").trim().toLowerCase();
@@ -80,7 +80,13 @@ const STD: ThinkLevel[] = ["low", "medium", "high"];
80
80
  * (`cheapestCredentialed`/`strongestCredentialed`/`compareStrengthAscending`)
81
81
  * now tiebreak on `releaseDate` directly rather than relying on position. */
82
82
  export const MODEL_CATALOG: readonly CatalogModel[] = [
83
- // Anthropic (newest first: sonnet-5 > fable-5 > opus-4-8 > opus-4-7 > sonnet-4-6 > opus-4-6). 4.5-and-below dropped from jeo's exposed model list per user direction.
83
+ // Anthropic (newest first: sonnet-5-5 > opus-5-5 > sonnet-5 > fable-5 > opus-4-8 > opus-4-7 > sonnet-4-6 > opus-4-6). 4.5-and-below dropped from jeo's exposed model list per user direction.
84
+ // 5.5 generation (platform.claude.com/docs/en/models/{opus-5-5,sonnet-5-5}/overview): dateless pinned wire ids
85
+ // `claude-opus-5-5` (released 2026-09-22) / `claude-sonnet-5-5` (2026-09-28), 1M ctx / 128k sync max output, adaptive
86
+ // thinking (Opus 5.5 always on; Sonnet 5.5 on by default), text+image input. Canonical == wire id; anthropic.ts already
87
+ // classifies major >= 5 as adaptive + display:"summarized".
88
+ { canonical: "claude-sonnet-5-5", provider: "anthropic", providerModel: "claude-sonnet-5-5", contextTokens: 1_000_000, maxOutputTokens: 128_000, thinking: FULL, images: true, releaseDate: "2026-09" },
89
+ { canonical: "claude-opus-5-5", provider: "anthropic", providerModel: "claude-opus-5-5", contextTokens: 1_000_000, maxOutputTokens: 128_000, thinking: FULL, images: true, releaseDate: "2026-09" },
84
90
  { canonical: "claude-sonnet-5", provider: "anthropic", providerModel: "claude-sonnet-5", contextTokens: 1_000_000, maxOutputTokens: 128_000, thinking: FULL, images: true, releaseDate: "2026-06" },
85
91
  // Fable 5 = Anthropic's most capable widely-released model (adaptive thinking always on);
86
92
  // Mythos 5 is limited-availability (Project Glasswing) but callable by id for approved accounts.
@@ -15,6 +15,12 @@ export const BUILTIN_ALIASES: ModelAliases = {
15
15
  flash: "gemini-2.5-flash",
16
16
  grok: "grok-4.3",
17
17
  kimi: "kimi-k2-0711-preview",
18
+ // Anthropic 5.5 generation: spellings that name the version. Bare `opus`/`sonnet` above stay on the
19
+ // 4.6 ids (pinned backward-compat); users opt into 5.5 by naming the version.
20
+ "opus-5.5": "claude-opus-5-5",
21
+ "sonnet-5.5": "claude-sonnet-5-5",
22
+ "opus5.5": "claude-opus-5-5",
23
+ "sonnet5.5": "claude-sonnet-5-5",
18
24
  // Antigravity's backend DEPRECATED this wire id (deprecatedModelIds:
19
25
  // { "gemini-3.1-pro-high": { newModelId: "gemini-pro-agent" } }) — keep
20
26
  // existing configs/roles pinned to the old id working on the successor.
package/src/ai/pricing.ts CHANGED
@@ -30,6 +30,10 @@ const PRICE_TABLE: ReadonlyArray<readonly [pattern: string, price: ModelPrice]>
30
30
  ["claude-opus-4-8", { inPerM: 5, outPerM: 25 }],
31
31
  ["claude-fable", { inPerM: 10, outPerM: 50 }],
32
32
  ["claude-mythos", { inPerM: 10, outPerM: 50 }],
33
+ // Opus 5.5 = $4/$20 (Anthropic pricing page). MUST precede the generic `claude-opus` row or the
34
+ // substring match prices it at the legacy $15/$75 and skews cost-ranked routing. Sonnet 5.5 shares
35
+ // Sonnet 5's $2/$10 and is already covered by the `claude-sonnet-5` row below.
36
+ ["claude-opus-5-5", { inPerM: 4, outPerM: 20 }],
33
37
  ["claude-opus", { inPerM: 15, outPerM: 75 }],
34
38
  ["claude-sonnet-5", { inPerM: 2, outPerM: 10 }],
35
39
  ["claude-sonnet", { inPerM: 3, outPerM: 15 }],
@@ -10,7 +10,7 @@ import { jeoEnv } from "../../util/env";
10
10
  const ANTHROPIC_URL = "https://api.anthropic.com/v1/messages";
11
11
 
12
12
  const DEPRECATED_TEMPERATURE = "`temperature` is deprecated for this model.";
13
- const CLAUDE_CODE_VERSION = "2.1.63";
13
+ const CLAUDE_CODE_VERSION = "2.1.289";
14
14
  const CLAUDE_CODE_SYSTEM_INSTRUCTION = "You are a Claude agent, built on Anthropic's Claude Agent SDK.";
15
15
  const CLAUDE_BILLING_HEADER_PREFIX = "x-anthropic-billing-header:";
16
16
  /** Betas needed for API-key requests: interleaved-thinking enables thinking+tools,
@@ -324,7 +324,11 @@ export function anthropicPayload(
324
324
  if (thinkingMode === "budget-effort" && !disableEffort) payload.output_config = { effort: anthropicAdaptiveEffort(effort) };
325
325
  }
326
326
  } else if (includeTemperature && options.temperature !== undefined) {
327
- payload.temperature = options.temperature;
327
+ // Opus/Sonnet 5.5 reject custom sampling even without explicit thinking.
328
+ const version = parseAnthropicVersion(model);
329
+ const fixedSampling = version && (version.kind === "opus" || version.kind === "sonnet")
330
+ && (version.major > 5 || (version.major === 5 && version.minor >= 5));
331
+ if (!fixedSampling) payload.temperature = options.temperature;
328
332
  }
329
333
  if (options.tools?.length) {
330
334
  // NATIVE tool-calling: declare jeo's tools as Anthropic functions. tool_choice