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 +34 -1
- package/README.ja.md +4 -7
- package/README.ko.md +4 -7
- package/README.md +4 -7
- package/README.zh.md +4 -7
- package/package.json +1 -1
- package/src/agent/web-search.ts +1 -1
- package/src/ai/model-catalog-compat.ts +2 -2
- package/src/ai/model-catalog.ts +7 -1
- package/src/ai/model-registry.ts +6 -0
- package/src/ai/pricing.ts +4 -0
- package/src/ai/providers/anthropic.ts +6 -2
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.
|
|
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` の手動実行(ドライラン可)
|
|
339
|
+
CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリース公開時に自動、または `workflow_dispatch` の手動実行(ドライラン可)。ワークフローはブラウザのハードゲート・型チェック・テスト(ブラウザツールのテストは別プロセス)・`pack:check`・パック済み tarball の起動スモークを経て `npm publish --provenance` を実行します。
|
|
340
340
|
|
|
341
|
-
|
|
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` 수동 실행(드라이런 옵션). 워크플로는
|
|
341
|
+
CI는 `.github/workflows/npm-publish.yml`로 배포합니다 — GitHub 릴리즈 게시 시 자동, 또는 `workflow_dispatch` 수동 실행(드라이런 옵션). 워크플로는 브라우저 하드 게이트·타입체크·테스트(브라우저 도구 테스트는 별도 프로세스)·`pack:check`·패키징된 tarball 부팅 스모크를 거친 뒤 `npm publish --provenance`를 실행합니다.
|
|
342
342
|
|
|
343
|
-
|
|
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
|
|
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
|
-
|
|
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)
|
|
337
|
+
CI 通过 `.github/workflows/npm-publish.yml` 发布 — GitHub 发布 release 时自动触发,或手动 `workflow_dispatch`(可选 dry-run)。工作流依次执行浏览器硬门禁、类型检查、测试(浏览器工具测试在独立进程中)、`pack:check`、打包 tarball 的启动冒烟,然后运行 `npm publish --provenance`。
|
|
338
338
|
|
|
339
|
-
|
|
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
package/src/agent/web-search.ts
CHANGED
|
@@ -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.
|
|
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();
|
package/src/ai/model-catalog.ts
CHANGED
|
@@ -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.
|
package/src/ai/model-registry.ts
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|