diff --git a/CHANGELOG.md b/CHANGELOG.md index 783cbdd7..8e3c7bb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.4.0] - 2026-08-02 + ### Added - **Fusion models — give a text-only model vision.** Some strong reasoning @@ -49,11 +51,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 refers to. `deepseek-v4-pro`, `deepseek-v4-flash`, `glm-5.2`, and `glm-5.1` are now marked vision-less in the model table. - [claude-code-router]: https://ccrdesk.top/en/configuration/fusion-models/ + Fusion models, the `/fusion` command and the shared persisted-model + resolution below all land in #771. -### Added + [claude-code-router]: https://ccrdesk.top/en/configuration/fusion-models/ -- **GPT-5.6 (Sol / Terra / Luna).** OpenAI's current frontier generation is +- **GPT-5.6 (Sol / Terra / Luna)** (#773). OpenAI's current frontier generation is three durable capability tiers on one generation rather than a size ladder: Sol is the flagship, Terra balances capability against cost, Luna is the cheap high-volume tier, and `gpt-5.6` is OpenAI's alias for Sol. All four are @@ -74,9 +77,61 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 (`SUBSCRIPTION_MODELS`) is also untouched, since which models that backend serves is a wire fact that has to be observed rather than assumed. +- **`AskUserQuestion` actually asks.** The tool was advertised but never + wired: its raw JSON payload was returned to the model as the tool result, + so the model saw a blob instead of the user seeing a picker. The TUI now + renders a real multiple-choice dialog and sends the choice back (#774). + +- **Four more OpenAI-compatible providers** — `groq`, `cerebras`, `baseten` + and `xai` — bringing the registry to 30. Each ships a curated model list + that live `/models` discovery extends rather than replaces (#784). + +- **Fusion models are runnable under the Terminal-Bench harness.** A fusion + model lives in global config and is selected by name, so a fresh eval + container could not resolve one; `--ak fusion=+` seeds the + record and the base provider (#787). + ### Fixed -- **OpenRouter's curated model list offered ids OpenRouter had delisted.** The +- **Reasoning effort never reached the wire for any OpenAI-compatible + provider.** `--effort` was emitted only on the Anthropic branch, so every + DeepSeek/OpenRouter/GLM run silently ignored it — including benchmark runs + that reported an effort setting in their config and sent nothing (#776). + +- **The first-party OpenAI provider chose its wire protocol from the auth + mode**, not the model: an API key meant Chat Completions, which rejects + tools outright for some reasoning models (`gpt-5.6-luna` 400s even with no + effort set). Protocol now follows the model and auth only picks the route, + which is what makes those models usable on an API key at all (#783). + +- **Cached prompt tokens were billed at the full input rate.** `prompt_tokens` + includes tokens served from the cache, and the cached count was dropped, so + a heavily-cached turn over-reported its cost several-fold. Both wires now + split cache reads out. The same change surfaced that OpenRouter's streamed + reasoning was discarded entirely — it sends `delta.reasoning`, and only + `reasoning_content` was read (#785). + +- **`result.usage` omitted cumulative cache tokens**, so anything pricing it + billed the cached portion at nothing, and `/goal`'s token budget saw a + fraction of what had been spent. Turn cost is now read from the cost + tracker, which prices each response individually — pricing the aggregate + crosses a per-request tier boundary no single request came near (#786). + +- **Headless runs reported success after stopping early.** A cut-short run, + a loop-guard kill, and a plan-mode trap all surfaced as + `subtype: "success"`; `/goal` then treated the result as evidence of + progress and re-ran on cancels and errors (#777, #778, #779, #780). + +- **A rejected image ended the turn instead of being recovered.** The + "too many images" path is now classified and retried, and the reactive + recovery lane — dead since a typed error stopped matching a string-only + gate — runs again (#781, #782). + +- **TUI:** the header box lost its right border and could lose the border + entirely on first paint (#769, #770); the scrollbar stretched its sibling + and blanked the transcript on terminal resize (#775). + +- **OpenRouter's curated model list offered ids OpenRouter had delisted** (#773). The OpenAI section still led with `openai/gpt-5` / `openai/gpt-4o` / `openai/o1` while the gateway had moved on to the `gpt-5.6` family, and `openai/o1-mini` had been removed upstream entirely — so the /model picker @@ -101,7 +156,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 drift reads as a model one surface offers and the other drops, so the provider now reads the registry. -- **`/model` listed one provider instead of every configured one.** Step 1 of +- **`/model` listed one provider instead of every configured one** (#772). Step 1 of the picker showed a single row — `anthropic · 22 models` — no matter how many providers were set up. `model.options` was a stub: it called the `get_settings` control, which describes only the provider the session is @@ -142,7 +197,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 reports that reason instead of inventing a provider row. - **`--model`/`/model` selection is now resolved from one rule at every - entrypoint.** The persisted `/model` choice was applied only in the + entrypoint** (#771). The persisted `/model` choice was applied only in the interactive agent-server, and only *after* the provider was constructed (`_build_runtime`'s post-construction `provider.model = ...`). Headless (`-p`) ignored it entirely, so a `/model` switch had to be re-stated with @@ -160,7 +215,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed -- **Permissions are now loose by default and easy to change.** `/mode` is +- **Permissions are now loose by default and easy to change** (#768). `/mode` is renamed `/permissions` (the old name still works as an alias) and bare `/permissions` opens a three-option picker — *Ask for approval*, *Approve for me*, *Full Access* — instead of requiring a raw mode name. A bare interactive diff --git a/README.md b/README.md index 53ba7491..67cfcafc 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ The `session`, `settings`, and `env` blocks are optional — sensible defaults a ## 📰 News +- **2026-08-02 (v1.4.0):** **Fusion models — give a text-only model vision (#771, #787)** — several strong reasoning models cannot see images at all: `deepseek-v4-pro` rejects an image content block outright (`400 unknown variant \`image_url\``), so pasting a screenshot, `@`-mentioning one, or letting `Read` return one ended the turn. A **fusion model** pairs that base model with a second, vision-capable one — every image is described by the vision model first, and the base model reads the description. `/fusion create ` saves one; it then behaves like a normal model in the `/model` picker, as `--model `, in `-p`, and across restarts. Ported from [claude-code-router](https://ccrdesk.top/en/configuration/fusion-models/)'s Fusion Model concept, with one deliberate difference: CCR is a proxy, so it can only offer vision as a *tool* the model may choose to call — which cannot help a pasted image, already on the wire before the model gets a turn. ClawCodex owns the agent loop, so it substitutes images in place, covering paste, `@file.png`, `Read`, and Bash image output at once. Verified end to end on Terminal-Bench 2.1's `code-from-image` task — transcribing handwritten pseudocode from a PNG and reproducing its output — with `deepseek-v4-flash` + `openai:gpt-5.6-luna` (#787); the base model alone returns a 400 on the same image. **Also in v1.4.0:** GPT-5.6 Sol/Terra/Luna (#773); four more OpenAI-compatible providers — groq, cerebras, baseten, xai — taking the registry to 30 (#784); `/mode` becomes `/permissions` with a three-level picker and Full Access by default (#768); `AskUserQuestion` finally renders a real picker instead of returning JSON to the model (#774); the OpenAI provider now picks its wire protocol from the model rather than the auth mode, which is what makes `gpt-5.6-luna` usable on an API key (#783); cached prompt tokens are billed at the cache rate instead of the full input rate, and OpenRouter's streamed reasoning is no longer discarded (#785, #786); and headless runs stop reporting a cut-short run as a success (#777–#782). - **2026-07-29 (v1.3.0):** **ClawCodex scores 80.9% on Terminal-Bench 2.1 — a top-tier open-source result on Opus 5 (#720–#725, #747–#754)** — running headless on `claude-opus-5` at `effort=xhigh`, ClawCodex solved **72 of 89** Terminal-Bench 2.1 tasks: **80.9% pass@1** on a single run. On the [public 2.1 leaderboard](https://www.tbench.ai/leaderboard/terminal-bench/2.1) (k=5 averages) that would slot **around third** — behind Claude Code / Fable 5 (83.8%) and Codex / GPT-5.5 (83.1%), statistically level with the 79–80% cluster, and **ahead of Claude Code on Opus 4.8 (78.9%) and Sonnet 5 (74.6%)**. Getting there was open, unglamorous parity work: a Harbor eval adapter (`eval/harbor/`) for three-way ClawCodex-vs-openclaude-vs-Claude-Code runs (#720, #724, #725), then a run of prompt- and reliability-parity fixes — restored task-tool skip conditions and parallel-tool guidance, deferred nonessential initial tools, and recovery of trials lost to empty turns and transport drops (#747–#754). **Also in v1.3.0:** `claude-opus-5` support with an interactive `/effort` fix (#746), bounded persistent memory with a background self-improvement review (#731), a VS Code extension driving the agent-server over stdio (#727), image-paste input with an `[Image #N]` un-attach chip (#761, #762), the `CLAUDE.md → CLAWCODEX.md` context-file rebrand (#732), and transport-retry hardening (#757, #760). Stated plainly: this is a single k=1 pass (binomial 1σ ±4.2pp) against the board's k=5 ± ~1.2pp averages, benchmarked on `main` at #756 (before the v1.3.0 tag), so read it as directional rather than a ranked submission. - **2026-07-13:** **`/eco` token compression — -80% Bash-output tokens, measured, now a headline (#708, #712)** — a new session toggle compresses the model-bound rendering of every Bash result with deterministic filters ported from [RTK](https://github.com/rtk-ai/rtk)'s method set: failure-focused test summaries (kept error lines are never rewritten), `git`/`pip`/`npm` ceremony stripping, log dedup with `[×N]` counts, and a recoverable head-cap — all behind a **never-worse** guard, with every lossy compression teeing the full output to disk behind a runnable recovery hint (#708). A reproducible benchmark (`eval/eco/`) replays 27 real command outputs through the exact production pipeline and counts real tokenizer tokens: **92,989 → 17,767 (-80%)** corpus-wide, -88% on filter hits, plus an honestly conservative recompute of RTK's own 30-minute-session model (-19% under their averaged assumptions — real sessions are fat-tailed) (#712). Full tables: the [`/eco` section](#eco-benchmark) and [`eval/eco/results/`](eval/eco/results/results.md). - **2026-07-12 (v1.1.0):** **ClawCodex v1.1.0 — run OpenAI *and* Claude models on your subscription, not metered API billing** — the headline of 1.1.0 is **subscription auth for the two biggest model families**, so you can point ClawCodex at a plan you already pay for. **Sign in with ChatGPT (#698):** `clawcodex login → openai → subscription` (browser, device-code, or import from an existing Codex CLI login) routes requests through the ChatGPT Codex backend's Responses API — `gpt-5.5`, `gpt-5.4`, `gpt-5.4-mini`, and `gpt-5.3-codex-spark` on your Plus/Pro allowance, with encrypted-reasoning replay across turns and **$0** metered cost. **Claude Pro/Max (#697):** `clawcodex login → anthropic → subscription` connects a Claude subscription via OAuth (PKCE) with automatic token refresh and the same $0 accounting; follow-ups repaired the login after Anthropic moved its OAuth endpoints to `platform.claude.com` (#702) and stopped sending adaptive thinking to models that don't support it (#699). A configured API key always wins, and subscription usage reports `billing_mode: subscription`. **More models:** a Meta (`api.meta.ai`) provider with the 1M-context `muse-spark-1.1` reasoning model (#692) and refreshed MiniMax parameters (#696). **Workflow & TUI:** `/plan` mode with implicit plan-mode entry/exit (#676), `--worktree/-w` session isolation for parallel runs in separate git worktrees (#672), the `/memory` picker + `$EDITOR` spawn (#693), config/state directories rebranded `.claude → .clawcodex` with a one-time migration (#678), `/logo` startup color schemes (#677), plus TUI polish — Tab accepts the suggested placeholder (#690), past inputs get the Claude-Code highlight band (#691), clickable agent URLs (#694), and a per-terminal link-open affordance (#701). **Quality:** semantic tool-input coercion with parity validation errors (#700) and looser, Claude-Code-faithful permission granting (#673). @@ -144,7 +145,6 @@ The `session`, `settings`, and `env` blocks are optional — sensible defaults a - **2026-06-30 (v0.7.0):** **ClawCodex v0.7.0 — TUI auto-theming, faithful inline rendering & a Claude-Code-style tool trail** — the Ink TUI now detects your terminal's background color (OSC 11) on startup and selects the light/dark theme to match, so text stays readable on any terminal with no env var needed (#577). Inline mode renders *truly* inline like Claude Code: no screen wipe on launch, and no overlap with prior terminal output on startup or with the returning shell prompt on exit (#573, #575). The tool trail reads Claude-style — workspace-relative paths (`Read(src/foo.ts)`), `Grep(pattern)` labels, and a `Read N lines` result collapse (#574) — and the banner gains a 🦞 mascot with brighter secondary text on dark themes (#576). - **2026-06-24 (v0.6.0):** **ClawCodex v0.6.0 — interactive TUI REPL parity** — a batch of input ports brings the Python REPL to parity with the ink reference: a working slash-command menu (execute / complete / filter like the ink REPL), the sparkle spinner with a live token + elapsed busy row, context-aware prompt footer hints (interrupt / bash / grammar), the `?` shortcuts help panel, an `@` file-mention dropdown with in-place splice, double-press Ctrl+C / Ctrl+D to exit, Ctrl+R history search + double-Esc clear-draft, a `[Pasted text #N +K lines]` large-paste placeholder, and the completed command queue (drain queued prompts + dim preview). Login docs now list all 25 providers (#383). - **2026-06-23:** **One-click installer** — `curl -fsSL https://clawcodex.app/install.sh | bash` installs uv (no sudo), provisions Python 3.10+, clones to `~/.clawcodex`, creates a lock-pinned venv, and registers `clawcodex` on PATH; ships status / doctor / verify / update / uninstall subcommands, is safe to re-run, and works on macOS / Linux / WSL. -- **2026-06-21:** **18 new LLM providers — the registry grows 7 → 25 (#377)** — a data-driven `ProviderSpec` registry adds 18 OpenAI-compatible backends (nvidia-nim, fireworks, together, moonshot/Kimi, novita, siliconflow, deepinfra, stepfun, arcee, huggingface, volcengine, xiaomi-mimo, atlascloud, wanjie-ark, plus local ollama / vllm / sglang) alongside the hand-written providers; alias-aware config resolution, standard env-var key fallback (e.g. `TOGETHER_API_KEY`), and keyless local servers. 📚 Older items have moved to the full **[News archive](docs/NEWS.md)**. *** diff --git a/docs/NEWS.md b/docs/NEWS.md index ecc8ec72..7e27b037 100644 --- a/docs/NEWS.md +++ b/docs/NEWS.md @@ -2,6 +2,7 @@ Full news history for ClawCodex. The [README News section](../README.md#-news) keeps only the 10 most recent items. +- **2026-08-02 (v1.4.0):** **Fusion models — give a text-only model vision (#771, #787)** — several strong reasoning models cannot see images at all: `deepseek-v4-pro` rejects an image content block outright (`400 unknown variant \`image_url\``), so pasting a screenshot, `@`-mentioning one, or letting `Read` return one ended the turn. A **fusion model** pairs that base model with a second, vision-capable one — every image is described by the vision model first, and the base model reads the description. `/fusion create ` saves one; it then behaves like a normal model in the `/model` picker, as `--model `, in `-p`, and across restarts. Ported from [claude-code-router](https://ccrdesk.top/en/configuration/fusion-models/)'s Fusion Model concept, with one deliberate difference: CCR is a proxy, so it can only offer vision as a *tool* the model may choose to call — which cannot help a pasted image, already on the wire before the model gets a turn. ClawCodex owns the agent loop, so it substitutes images in place, covering paste, `@file.png`, `Read`, and Bash image output at once. Verified end to end on Terminal-Bench 2.1's `code-from-image` task — transcribing handwritten pseudocode from a PNG and reproducing its output — with `deepseek-v4-flash` + `openai:gpt-5.6-luna` (#787); the base model alone returns a 400 on the same image. **Also in v1.4.0:** GPT-5.6 Sol/Terra/Luna (#773); four more OpenAI-compatible providers — groq, cerebras, baseten, xai — taking the registry to 30 (#784); `/mode` becomes `/permissions` with a three-level picker and Full Access by default (#768); `AskUserQuestion` finally renders a real picker instead of returning JSON to the model (#774); the OpenAI provider now picks its wire protocol from the model rather than the auth mode, which is what makes `gpt-5.6-luna` usable on an API key (#783); cached prompt tokens are billed at the cache rate instead of the full input rate, and OpenRouter's streamed reasoning is no longer discarded (#785, #786); and headless runs stop reporting a cut-short run as a success (#777–#782). - **2026-07-29 (v1.3.0):** **ClawCodex scores 80.9% on Terminal-Bench 2.1 — a top-tier open-source result on Opus 5 (#720–#725, #747–#754)** — running headless on `claude-opus-5` at `effort=xhigh`, ClawCodex solved **72 of 89** Terminal-Bench 2.1 tasks: **80.9% pass@1** on a single run. On the [public 2.1 leaderboard](https://www.tbench.ai/leaderboard/terminal-bench/2.1) (k=5 averages) that would slot **around third** — behind Claude Code / Fable 5 (83.8%) and Codex / GPT-5.5 (83.1%), statistically level with the 79–80% cluster, and **ahead of Claude Code on Opus 4.8 (78.9%) and Sonnet 5 (74.6%)**. Getting there was open, unglamorous parity work: a Harbor eval adapter (`eval/harbor/`) for three-way ClawCodex-vs-openclaude-vs-Claude-Code runs (#720, #724, #725), then a run of prompt- and reliability-parity fixes — restored task-tool skip conditions and parallel-tool guidance, deferred nonessential initial tools, and recovery of trials lost to empty turns and transport drops (#747–#754). **Also in v1.3.0:** `claude-opus-5` support with an interactive `/effort` fix (#746), bounded persistent memory with a background self-improvement review (#731), a VS Code extension driving the agent-server over stdio (#727), image-paste input with an `[Image #N]` un-attach chip (#761, #762), the `CLAUDE.md → CLAWCODEX.md` context-file rebrand (#732), and transport-retry hardening (#757, #760). Stated plainly: this is a single k=1 pass (binomial 1σ ±4.2pp) against the board's k=5 ± ~1.2pp averages, benchmarked on `main` at #756 (before the v1.3.0 tag), so read it as directional rather than a ranked submission. - **2026-07-13:** **`/eco` token compression — -80% Bash-output tokens, measured, now a headline (#708, #712)** — a new session toggle compresses the model-bound rendering of every Bash result with deterministic filters ported from [RTK](https://github.com/rtk-ai/rtk)'s method set: failure-focused test summaries (kept error lines are never rewritten), `git`/`pip`/`npm` ceremony stripping, log dedup with `[×N]` counts, and a recoverable head-cap — all behind a **never-worse** guard, with every lossy compression teeing the full output to disk behind a runnable recovery hint (#708). A reproducible benchmark (`eval/eco/`) replays 27 real command outputs through the exact production pipeline and counts real tokenizer tokens: **92,989 → 17,767 (-80%)** corpus-wide, -88% on filter hits, plus an honestly conservative recompute of RTK's own 30-minute-session model (-19% under their averaged assumptions — real sessions are fat-tailed) (#712). Full tables: the [`/eco` section](../README.md#eco-benchmark) and [`eval/eco/results/`](../eval/eco/results/results.md). - **2026-07-12 (v1.1.0):** **ClawCodex v1.1.0 — run OpenAI *and* Claude models on your subscription, not metered API billing** — the headline of 1.1.0 is **subscription auth for the two biggest model families**, so you can point ClawCodex at a plan you already pay for. **Sign in with ChatGPT (#698):** `clawcodex login → openai → subscription` (browser, device-code, or import from an existing Codex CLI login) routes requests through the ChatGPT Codex backend's Responses API — `gpt-5.5`, `gpt-5.4`, `gpt-5.4-mini`, and `gpt-5.3-codex-spark` on your Plus/Pro allowance, with encrypted-reasoning replay across turns and **$0** metered cost. **Claude Pro/Max (#697):** `clawcodex login → anthropic → subscription` connects a Claude subscription via OAuth (PKCE) with automatic token refresh and the same $0 accounting; follow-ups repaired the login after Anthropic moved its OAuth endpoints to `platform.claude.com` (#702) and stopped sending adaptive thinking to models that don't support it (#699). A configured API key always wins, and subscription usage reports `billing_mode: subscription`. **More models:** a Meta (`api.meta.ai`) provider with the 1M-context `muse-spark-1.1` reasoning model (#692) and refreshed MiniMax parameters (#696). **Workflow & TUI:** `/plan` mode with implicit plan-mode entry/exit (#676), `--worktree/-w` session isolation for parallel runs in separate git worktrees (#672), the `/memory` picker + `$EDITOR` spawn (#693), config/state directories rebranded `.claude → .clawcodex` with a one-time migration (#678), `/logo` startup color schemes (#677), plus TUI polish — Tab accepts the suggested placeholder (#690), past inputs get the Claude-Code highlight band (#691), clickable agent URLs (#694), and a per-terminal link-open affordance (#701). **Quality:** semantic tool-input coercion with parity validation errors (#700) and looser, Claude-Code-faithful permission granting (#673). diff --git a/docs/i18n/README_ZH.md b/docs/i18n/README_ZH.md index 5b649ac4..9c9b52ff 100644 --- a/docs/i18n/README_ZH.md +++ b/docs/i18n/README_ZH.md @@ -64,6 +64,7 @@ clawcodex --dangerously-skip-permissions # 启动 REPL ## 📰 新闻 +- **2026-08-02(v1.4.0):** **融合模型 —— 让纯文本模型拥有视觉能力(#771、#787)** —— 一些强推理模型完全无法读图:`deepseek-v4-pro` 会直接拒绝图像内容块(`400 unknown variant \`image_url\``),因此粘贴截图、用 `@` 引用图片或让 `Read` 返回图片都会中断当前回合。**融合模型**把这样的基础模型与另一个具备视觉能力的模型配对 —— 每张图片先由视觉模型描述,基础模型读到的是描述文本。用 `/fusion create <名称> <基础模型> <视觉模型>` 保存后,它在 `/model` 选择器、`--model <名称>`、`-p` 以及重启后都表现得与普通模型一致。移植自 [claude-code-router](https://ccrdesk.top/en/configuration/fusion-models/) 的 Fusion Model 概念,但有一处刻意的差异:CCR 是代理,只能把视觉暴露成模型「可以选择调用」的工具 —— 这救不了已经在请求里的粘贴图片。ClawCodex 拥有整个 agent 循环,因此直接就地替换图像块,一次性覆盖粘贴、`@file.png`、`Read` 与 Bash 图像输出。已在 Terminal-Bench 2.1 的 `code-from-image` 任务上端到端验证 —— 从 PNG 中转写手写伪代码并复现其输出 —— 使用 `deepseek-v4-flash` + `openai:gpt-5.6-luna`(#787);同一张图片下基础模型单独运行会返回 400。**v1.4.0 其他更新:** GPT-5.6 Sol/Terra/Luna(#773);新增 groq、cerebras、baseten、xai 四个 OpenAI 兼容供应商,注册表增至 30 个(#784);`/mode` 更名为 `/permissions`,提供三档选择器并默认 Full Access(#768);`AskUserQuestion` 终于会渲染真正的选择框,而不是把 JSON 返回给模型(#774);OpenAI 供应商改为按模型而非认证方式选择传输协议,这正是 `gpt-5.6-luna` 能在 API key 下可用的原因(#783);缓存的 prompt token 按缓存价计费而非全额输入价,OpenRouter 的流式推理内容不再被丢弃(#785、#786);headless 运行不再把中途终止的回合报告为成功(#777–#782)。 - **2026-07-29(v1.3.0):** **ClawCodex 在 Terminal-Bench 2.1 上取得 80.9% —— Opus 5 上的顶尖开源成绩(#720–#725、#747–#754)** —— 在 `claude-opus-5`(`effort=xhigh`)上无头运行,ClawCodex 解决了 **89 个 Terminal-Bench 2.1 任务中的 72 个**:单次运行 **80.9% pass@1**。在[公开的 2.1 排行榜](https://www.tbench.ai/leaderboard/terminal-bench/2.1)(按 k=5 平均)上这大约排在**第 3 左右** —— 落后于 Claude Code / Fable 5(83.8%)与 Codex / GPT-5.5(83.1%),与 79–80% 的一档在统计上难分伯仲,并**领先 Claude Code 搭配 Opus 4.8(78.9%)与 Sonnet 5(74.6%)**。取得这一成绩靠的是公开而不起眼的对齐工作:一个用于 ClawCodex-vs-openclaude-vs-Claude-Code 三方对比的 Harbor 评测适配器(`eval/harbor/`,#720、#724、#725),以及一批提示词与可靠性对齐修复 —— 恢复 task 工具的跳过条件与并行工具指引、延迟加载非必要初始工具、回收因空轮次与瞬时传输中断而丢失的试次(#747–#754)。**v1.3.0 还包含:** `claude-opus-5` 支持及交互式 `/effort` 修复(#746)、带后台自我改进评审的有界持久记忆(#731)、通过 stdio 驱动 agent-server 的 VS Code 扩展(#727)、带 `[Image #N]` 取消附加芯片的图像粘贴输入(#761、#762)、`CLAUDE.md → CLAWCODEX.md` 上下文文件更名(#732),以及传输重试加固(#757、#760)。诚实说明:这是单次 k=1(二项 1σ ±4.2pp),对照的是榜单的 k=5 ± 约 1.2pp 平均值,基准运行在 v1.3.0 打标签之前的 `main`(#756)上 —— 属方向性参考,而非正式排名提交。 - **2026-07-13:** **`/eco` token 压缩 —— Bash 输出 token 实测 -80%,现为(英文版)头条之一(#708、#712)** —— 新的会话开关用一组从 [RTK](https://github.com/rtk-ai/rtk) 方法集移植的确定性过滤器压缩每个 Bash 结果的模型侧渲染:聚焦失败的测试摘要(保留的错误行从不改写)、`git`/`pip`/`npm` 仪式性输出裁剪、带 `[×N]` 计数的日志去重、可恢复的头部截断 —— 全部处于**绝不更差**守卫之下,所有有损压缩都会把完整输出 tee 到磁盘并附一条可直接运行的恢复提示(#708)。可复现的基准测试(`eval/eco/`)将 27 个真实命令输出经由生产管线逐字节重放并统计真实分词器 token:语料整体 **92,989 → 17,767(-80%)**,过滤器命中子集 -88%,另附对 RTK 自身 30 分钟会话模型的保守重算(在其平均化假设下为 -19% —— 真实会话是重尾分布)(#712)。完整表格见下文 `/eco` 章节与 [`eval/eco/results/`](../../eval/eco/results/results.md)。 - **2026-07-12(v1.1.0):** **ClawCodex v1.1.0 —— 用订阅方案运行 OpenAI 和 Claude 模型,而非按 API 计费** —— 1.1.0 的重头戏是**为两大模型家族提供订阅认证**,让你可以把 ClawCodex 接到你已经付费的方案上。**用 ChatGPT 登录(#698):** `clawcodex login → openai → subscription`(浏览器、设备码,或从已有的 Codex CLI 登录导入)通过 ChatGPT Codex 后端的 Responses API 路由请求 —— 在你的 Plus/Pro 额度内使用 `gpt-5.5`、`gpt-5.4`、`gpt-5.4-mini` 与 `gpt-5.3-codex-spark`,跨轮次重放加密推理,计费为 **$0**。**Claude Pro/Max(#697):** `clawcodex login → anthropic → subscription` 通过 OAuth(PKCE)连接 Claude 订阅,自动刷新 token,同样按 $0 计账;后续修复了 Anthropic 将 OAuth 端点迁移到 `platform.claude.com` 后的登录(#702),并停止向不支持自适应思考(adaptive thinking)的模型发送该参数(#699)。已配置的 API key 始终优先,订阅用量报告为 `billing_mode: subscription`。**更多模型:** 新增 Meta(`api.meta.ai`)provider 及 1M 上下文的 `muse-spark-1.1` 推理模型(#692),并刷新 MiniMax 参数(#696)。**工作流与 TUI:** `/plan` 模式及隐式 plan 模式进入/退出(#676)、`--worktree/-w` 会话隔离(在独立 git worktree 中并行运行,#672)、`/memory` 选择器 + `$EDITOR` 打开(#693)、配置/状态目录从 `.claude` 更名为 `.clawcodex` 并一次性迁移(#678)、`/logo` 启动配色(#677),以及 TUI 打磨 —— Tab 接受建议占位符(#690)、历史输入显示 Claude Code 高亮条(#691)、可点击的 agent URL(#694)、按终端适配的链接打开提示(#701)。**质量:** 语义化工具输入强制转换与对齐的校验错误信息(#700),以及更宽松、忠于 Claude Code 的权限授予(#673)。 @@ -73,7 +74,6 @@ clawcodex --dangerously-skip-permissions # 启动 REPL - **2026-06-30(v0.7.0):** **ClawCodex v0.7.0 —— TUI 自动主题、忠实的内联渲染与 Claude Code 风格的工具轨迹** —— Ink TUI 启动时会探测终端背景色(OSC 11)并自动匹配明/暗主题,任何终端上文字都清晰可读、无需环境变量(#577)。内联模式像 Claude Code 一样*真正*内联渲染:启动不清屏,启动时不与之前的终端输出重叠、退出时不与返回的 shell 提示符重叠(#573、#575)。工具轨迹采用 Claude 风格 —— 工作区相对路径(`Read(src/foo.ts)`)、`Grep(pattern)` 标签与 `Read N lines` 结果折叠(#574)——横幅新增 🦞 吉祥物,暗色主题下的次要文字更亮(#576)。 - **2026-06-24(v0.6.0):** **ClawCodex v0.6.0 —— 交互式 TUI REPL 对齐** —— 一批输入侧移植让 Python REPL 与 ink 参考实现对齐:可用的斜杠命令菜单(像 ink REPL 一样执行 / 补全 / 过滤)、带实时 token 数 + 已用时长忙碌行的星光 spinner、上下文感知的提示符底部提示(中断 / bash / 语法)、`?` 快捷键帮助面板、`@` 文件提及下拉框(原位拼接)、双击 Ctrl+C / Ctrl+D 退出、Ctrl+R 历史搜索 + 双击 Esc 清空草稿、`[Pasted text #N +K lines]` 大段粘贴占位符,以及完成的命令队列(排空排队的提示 + 暗色预览)。登录文档现在列出全部 25 个 provider(#383)。 - **2026-06-23:** **一键安装器** —— `curl -fsSL https://clawcodex.app/install.sh | bash` 自动安装 uv(无需 sudo)、准备 Python 3.10+、克隆到 `~/.clawcodex`、创建锁定版本的 venv,并把 `clawcodex` 注册到 PATH;附带 status / doctor / verify / update / uninstall 子命令,可安全重复运行,支持 macOS / Linux / WSL。 -- **2026-06-21:** **新增 18 个 LLM provider —— 注册表从 7 增至 25(#377)** —— 数据驱动的 `ProviderSpec` 注册表在手写 provider 之外新增 18 个 OpenAI 兼容后端(nvidia-nim、fireworks、together、moonshot/Kimi、novita、siliconflow、deepinfra、stepfun、arcee、huggingface、volcengine、xiaomi-mimo、atlascloud、wanjie-ark,以及本地 ollama / vllm / sglang);支持别名感知的配置解析、标准环境变量密钥回退(如 `TOGETHER_API_KEY`)与免密钥的本地服务器。 📚 更早的条目已移至完整的 **[News 归档](../NEWS.md)**。 diff --git a/install.sh b/install.sh index e4e322aa..15d6122b 100755 --- a/install.sh +++ b/install.sh @@ -48,7 +48,7 @@ trap 'log_err "Installer crash at line $LINENO: $BASH_COMMAND"' ERR # ============================================================================ # Config (read-only defaults) # ============================================================================ -readonly INSTALLER_VERSION="1.3.0" +readonly INSTALLER_VERSION="1.4.0" # REPO_REF is intentionally NOT readonly — it gets reassigned when the user # passes --ref. We have no version tags, so the default is the main branch; # --ref is the escape hatch for installing a specific commit/tag/branch. diff --git a/pyproject.toml b/pyproject.toml index f22e1aa0..4aea36ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "clawcodex-cli" -version = "1.3.0" +version = "1.4.0" description = "A production-oriented Python rebuild of Claude Code — real architecture, reliable CLI agent" readme = "README.md" license = "MIT" diff --git a/src/__init__.py b/src/__init__.py index 5894ffdb..dc03576e 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -5,7 +5,7 @@ try: __version__ = version("clawcodex-cli") except PackageNotFoundError: # Running directly from an unpackaged checkout. - __version__ = "1.3.0" + __version__ = "1.4.0" __author__ = "Claw Codex Team" from .config import load_config, get_provider_config diff --git a/ui-tui/src/gatewayClient.ts b/ui-tui/src/gatewayClient.ts index 7b11796d..153ef6ef 100644 --- a/ui-tui/src/gatewayClient.ts +++ b/ui-tui/src/gatewayClient.ts @@ -52,7 +52,7 @@ const WORKTREE_RPC_TIMEOUT_MS = 600_000 const IMAGE_RPC_TIMEOUT_MS = 30_000 // clawcodex app version shown in the banner ("clawcodex v{version}"). Keep in // sync with the installer (install.sh INSTALLER_VERSION). -const CLAWCODEX_VERSION = '1.3.0' +const CLAWCODEX_VERSION = '1.4.0' /** Command that launches the clawcodex agent-server (set by the Python launcher). */ function resolveAgentCmd(): string[] { diff --git a/uv.lock b/uv.lock index 57253fce..ff672fc0 100644 --- a/uv.lock +++ b/uv.lock @@ -298,7 +298,7 @@ wheels = [ [[package]] name = "clawcodex-cli" -version = "1.3.0" +version = "1.4.0" source = { editable = "." } dependencies = [ { name = "anthropic" },