Releases: BlockRunAI/ClawRouter
Release list
v0.12.230 — fix #213: Kimi K3 nameless tool-call recovery
v0.12.229 — sync Kimi K3
Syncs Kimi K3, which blockrun added and live-probed on 2026-07-17 (blockrun src/lib/models.ts).
npm install -g @blockrun/clawrouter@0.12.229v0.12.228 — blockrun 07-17 free re-probe + $0.002/tx fee
Catches up with blockrun's 2026-07-17 live free-model re-probe (blockrun PR #257, landed hours before v0.12.227 was cut against the older 07-11 map) and the flat $0.002/tx settlement fee introduced upstream on 2026-07-14.
npm install -g @blockrun/clawrouter@0.12.228v0.12.227
v0.12.227 — July 17, 2026
The picker and every user-facing surface now match the advertised blockrun.ai catalog (verified against the live /v1/models on 2026-07-17, mirroring the same alignment shipped in hermes-plugin-clawrouter 0.3.10).
Changed — top-models picker aligned with the advertised catalog
src/top-models.jsongoes 47 → 44 entries. Removed the 7 ids no longer advertised by the gateway:xai/grok-4-0709,xai/grok-4-1-fast-reasoning,xai/grok-3,free/gpt-oss-120b,free/gpt-oss-20b,free/qwen3.5-122b-a10b,free/llama-4-maverick. Added the 4 newly advertised free models:free/mistral-nemotron,free/step-3.7-flash,free/nemotron-nano-9b-v2,free/nemotron-nano-12b-v2-vl— the free block now equals the live 8-model NVIDIA tier exactly.- Router internals are untouched on purpose: the removed ids stay hidden-but-routable at the gateway (verified against blockrun source — catalog
available:true, hidden:true, or MODEL_REDIRECTS to a successor), so existing fallback chains and pinned users keep working. This only changes what pickers advertise. The allowlist sync inindex.ts/update.shprunes the staleblockrun/*keys from users' configs on next start. top-models.test.tssentinels re-pinned (grok-4.5,claude-fable-5,free/step-3.7-flashin; retired ids asserted out).
Fixed — image aliases pointed at models the gateway can no longer serve
dalle/dall-e/dall-e-3aliases (models.ts +/cr-imagegen) targetedopenai/dall-e-3, which the gateway 400s ("Delisted 2026-05-25: OpenAI removed dall-e-3 from the API"). They now route to the successoropenai/gpt-image-2.flux/flux-protargetedblack-forest/flux-1.1-pro, which has no gateway entry at all — removed.- New aliases for the current image catalog:
gpt-image-2,seedream(→bytedance/seedream-5-pro), and/cr-imagegenparity aliases forgrok-imagine/grok-imagine-pro/cogview. IMAGE_PRICING drops the two dead entries and addsbytedance/seedream-5-pro($0.045 base / $0.09 at 2K-class, matching blockrun's IMAGE_MODELS). The images usage-log fallback model is nowgoogle/nano-banana(the real/cr-imagegendefault) instead of dead dall-e-3.
Changed — README + skills refreshed to the current catalog
- README: free-tier references switch from retired
nvidia/gpt-oss-120btofree/mistral-large-3-675b(the new default free model); the free pricing block lists the live 8; grok-4.5 gets a pricing row ($2.50/$9.00, 500K); rows for grok-4-0709/grok-4-1-fast-reasoning/grok-3/grok-3-mini removed; kimi-k2.6 → kimi-k2.7; routing-tier examples use advertised models only; image table now shows gpt-image-2 + seedream;~38→~44model-count mentions. skills/clawrouter/SKILL.md: the "7 free" vs "8 free" contradiction is fixed (it's 8), Available Models adds claude-fable-5 + grok-4.5 and drops retired ids, image tool row updated.skills/imagegen/SKILL.md: dalle/flux rows replaced with gpt-image-2 + seedream (with the legacy-alias note), triggers and size guidance updated.
v0.12.220 — direct Polymarket betting (blockrun_polymarket)
v0.12.220 — July 10, 2026
Direct Polymarket betting — ported from blockrun-mcp v0.30.0's blockrun_polymarket tool. ClawRouter could already read prediction-market odds (blockrun_predexon_*); now it can place, manage, and redeem real-money bets on Polymarket (CLOB V2, Polygon), signed locally by the same wallet that pays for LLM calls.
New blockrun_polymarket tool (REAL MONEY)
- Unlike every other ClawRouter tool it is not an HTTP-proxy wrapper — it runs a local trading engine (
src/polymarket/, ~2,650 lines ported from blockrun-mcp) that signs CLOB V2 orders (EIP-712) and posts them to Polymarket through BlockRun's Tokyo egress relay by default (so it works out of the box in geoblocked regions; every order is still signed locally, the relay can't move funds). - One multiplexed tool,
action:=setup / fund / buy / sell / cancel / orders / positions / redeem / withdraw. - Signer = ClawRouter's own EVM wallet (
~/.openclaw/blockrun/wallet.key, orBLOCKRUN_WALLET_KEY) — the same key that pays x402 LLM fees. A chain-agnostic private key pays API fees on Base and authorizes bets on Polygon. This is the one real adaptation from the blockrun-mcp source (which used~/.blockrun/.session); everything else is a faithful port. Polymarket state (L2/builder creds, deposit-wallet vault) is stored under~/.openclaw/blockrun/alongside the wallet. - Funds: bets spend pUSD in a gasless Polygon deposit-wallet vault;
action:"fund"moves the user's Base USDC → pUSD gaslessly (x402POST /v1/polymarket/fund, $0.01 fee, non-custodial via the Polymarket bridge); winningswithdrawback to native USDC on Base. - Safety (unchanged from source):
confirm:trueis hard-required to place/sign anything (omit → dry-run preview); per-order capPOLYMARKET_MAX_BET_USD(default $25, fail-closed on garbage), optionalPOLYMARKET_MAX_SESSION_USD. Betting is deliberately NOT gated on the x402 API budget ledger — bets are the user's own pUSD, a different asset in a different chain.
Wiring, deps, docs
- Registered in
src/index.tsalongside the partner tools viaapi.registerTool()(a local-execute tool, not a proxy entry). Newblockrun_predexon_*→blockrun_polymarketdiscover-then-trade loop. - New deps:
@polymarket/clob-client-v2@1.0.8,@polymarket/builder-relayer-client,@polymarket/builder-signing-sdk,axios,https-proxy-agent,@blockrun/llm(for the gasless funding path).@solana/kitstayed deduped at v5.5.1 (no version split). - New
polymarket-tradingskill (golden rules, mental model, end-to-end flow) + a "Prediction-Market Trading" section in the headlineclawrouterskill. - 12 new tests (tool shape, fail-closed cap parsing, underscore-header proxy bridge, no-network trade-gating). Full suite: 667 passing.
v0.12.219 — GPT-5.6 Sol/Terra/Luna; route generic aliases to stable Terra (#202)
v0.12.219 — July 10, 2026
Add OpenAI's GPT-5.6 family (GA 2026-07-09) — three fixed tiers Sol/Terra/Luna — and route generic aliases to the stable Terra tier rather than the flaky Sol tier (#202, thanks @0xCheetah1).
GPT-5.6 Sol / Terra / Luna registered
- Added
openai/gpt-5.6-sol($5/$30, deepest-reasoning flagship),openai/gpt-5.6-terra($2.50/$15, balanced everyday tier), andopenai/gpt-5.6-luna($1/$6, cost-efficient/latency tier) toBLOCKRUN_MODELS, mirroring BlockRun's source-of-truthmodels.ts. All three are 1M context / 128K output. Previously reachable only via raw passthrough of the full model ID. - All three added to
top-models.json(Terra first) so they appear in the/modelpicker and the default-model allowlist.
Generic aliases resolve to Terra, not Sol (#202)
- Issue:
openai/gpt-5.6-solrequests failed with upstreamserver_error/ HTTP 500 after very long (~250s) waits during the GA window — the deepest-reasoning tier is unstable under long-horizon load. Because callers pinned Sol explicitly, ClawRouter (correctly) retried Sol rather than substituting a different model, burning ~251s per attempt. - Fix: the generic shorthands
gpt5,gpt-5.6, andopenai/gpt-5.6now resolve to the stable Terra tier. Explicit tier pins (gpt-5.6-sol,gpt-5.6-terra,gpt-5.6-luna) stay exact, so Sol remains reachable for callers who want the deepest tier and accept the risk.gpt5was bumped offgpt-5.5to the newer 5.6 generation. - Router:
openai/gpt-5.6-terrainserted into the COMPLEX fallback chains of theauto,premium, andagenticprofiles (ahead ofgpt-5.5). Sol is deliberately kept out of all auto-routing — it is opt-in only. No tier primaries changed (promotion needs benchmarks we don't have). - Not a ClawRouter bug: GPT-5.6's tools-require-
reasoning_effort:"none"rule is already handled server-side in BlockRun'sopenai-passthrough.ts(requiresReasoningEffortNoneWithTools), so no client-side param rewriting was needed. The 500s are genuine upstream instability, which the alias/routing choices route around.
v0.12.218 — ERC-8021 builder-code attribution (#198, #200) + picker order fix (#201)
v0.12.218 — July 9, 2026
ERC-8021 builder-code attribution on x402 payments (with a preserve-existing-codes fix from the OpenClaw side), plus the /model picker now honors top-models.json order.
Builder-code service attribution on every x402 payment (#198, thanks @KillerQueen-Z)
- New
src/builder-code.ts: every x402 payment ClawRouter signs is stamped with BlockRun's CDP-registered ERC-8021 Schema 2 service code (builder-code.info.s: ["bc_5hucoh0l"]) via anonAfterPaymentCreationhook inproxy.ts, so BlockRun-originated traffic is attributed on-chain. The CDP facilitator readsbuilder-code.info.sfrom the payload and encodes it into settlement calldata — no CBOR/encoding client-side. Any app code (a) the server echoes back in its 402 is preserved. Safe to stamp post-creation: the EIP-712 signature covers the authorization, not the extensions. - Note: this feature merged to main on July 5 but was not in the npm
v0.12.217package (that release shipped from the sonnet-5 branch before #198 landed) — v0.12.218 is the first npm release that stamps builder codes.
Preserve pre-existing service codes when stamping (#199 → #200, thanks @steipete)
- Bug (caught pre-npm-release):
withBuilderCodeServiceCode()replaced any existingbuilder-code.info.sarray with[BLOCKRUN_SERVICE_CODE]. ERC-8021 definessas an array of related service codes — if another layer (e.g. OpenClaw itself) had already added its attribution, ClawRouter erased it before settlement. Found by Peter Steinberger while validating the ClawRouter bump inopenclaw/crabpot. - Fix: valid pre-existing string entries in
info.sare retained (non-string junk filtered out), BlockRun's code is appended only when absent, and the function still returns a fresh array without mutating the payment challenge. 3 regression tests added (existing attribution retained, partially malformed array, idempotent re-stamp).
/model picker now follows top-models.json order (#201, thanks @0xCheetah1)
VISIBLE_OPENCLAW_MODELSwas built by filteringOPENCLAW_MODELSthrough thetop-models.jsonset, so the picker showed registry declaration order, not the curated order. It is now built by mappingtop-models.json→ registry entries, sosrc/top-models.jsonalone controls both membership and order.- Curated list reordered: routing profiles first (
auto,premium,eco,free), then flagship paid models grouped by vendor (Anthropic → OpenAI → Google → xAI → Z.AI → MiniMax → Moonshot → DeepSeek), free NVIDIA models last. Merge resolution keeps v0.12.217'santhropic/claude-sonnet-5in the Anthropic block (after the Opus pair, before Sonnet 4.6). - New regression test asserts the visible picker IDs match
top-models.jsonexactly (length + element order), which also guards against dangling IDs in the JSON that have no registry entry.
Full suite 654 passed, typecheck + lint + Prettier + build clean.
v0.12.217 — add anthropic/claude-sonnet-5
v0.12.217 — June 30, 2026
Model registry alignment: add anthropic/claude-sonnet-5, BlockRun's newest Sonnet — near-Opus coding/agentic quality at Sonnet cost.
New model: Claude Sonnet 5
- BlockRun added
anthropic/claude-sonnet-5(source-of-truthblockrun/src/lib/models.ts): $3/$15 — identical to Sonnet 4.6 but with 1M context / 128K output / adaptive thinking / vision, described as "near-Opus coding/agentic quality at Sonnet cost." BlockRun routes it direct-Anthropic withfallbackModel: claude-sonnet-4.6. - ClawRouter (
src/models.ts): added toBLOCKRUN_MODELS(flows intoOPENCLAW_MODELSautomatically) and to the/modelpicker (src/top-models.json). - Aliases: explicit
sonnet-5/sonnet-5.0/sonnet-5-0shorthands added. Baresonnet/claudedeliberately stay on Sonnet 4.6 — Sonnet 5 is opt-in, mirroring BlockRun's own alias map (which does not repoint the shorthand) and the v0.12.167 "add-distinct, don't silently upgrade the bare alias" precedent. - Routing (
src/router/config.ts): inserted as an in-family fallback wherever Sonnet 4.6 appears (auto COMPLEX quality fallback, gpt-5.3-codex MEDIUM, opus COMPLEX, plus the three Sonnet-primary chains — auto REASONING, agentic COMPLEX, agentic REASONING). No primaries promoted — promotion awaits benchmarks (Sonnet 5 is brand-new, not yet in BlockRun's Bedrock map), matching the v0.12.168 gpt-5.5 fallback-only pattern. Cost-neutral in every chain ($3/$15 = Sonnet 4.6). - README pricing table +
skills/clawrouter/SKILL.mdmodel list refreshed. All 645 tests pass.
v0.12.216 — clear all 22 Dependabot alerts (0 vulnerabilities)
v0.12.216 — June 30, 2026
Security + dependency hygiene: clear all 22 Dependabot alerts (npm audit → 0 vulnerabilities) and fix a latent missing-dependency bug in the upstream-proxy feature.
undici is now a declared dependency (fixes the upstream-proxy feature for clean installs)
- Latent bug:
src/upstream-proxy.tslazy-importsundici(await import("undici")) to honorBLOCKRUN_UPSTREAM_PROXY/HTTPS_PROXY/ALL_PROXY, butundiciwas never declared independencies— it only resolved becauseopenclaw(a dev/peer dependency) hoistedundicito the install root.npm ls undici --omit=devconfirmed no shipped runtime dep provides it, so a cleannpm install -g @blockrun/clawroutercould leave the proxy feature unable to load undici (caught + warned, then connecting directly). Fix: declareundici@^8.5.0(the patched version) as a direct dependency — the proxy feature now works regardless of hoisting, and the undici advisories are resolved at the source.
Dependency updates
- openclaw dev/peer dependency bumped
2026.5.7 → 2026.6.10(in range), clearing allopenclawand transitive@mariozechner/pi-*,markdown-it,tar,undiciadvisories. - esbuild pinned to
^0.28.1viaoverrides(joining the existingbasic-ftp/ws/postcsspins), clearing GHSA-g7r4-m6w7-qqqr (dev-server arbitrary file read, Windows-only — not reachable here, but pinned for cleanliness). - All alerts were dev-time/lockfile-only — the published runtime footprint had no vulnerable deps; this commit makes the lockfile and dependency declarations honest.
Test fix
test/integration/security-scanner.test.tslocated openclaw's scanner chunk by theskill-scanner-*.jsname; openclaw 2026.6.10 renamed it toscanner-*.js. Broadened the filter to match both prefixes (the loader already disambiguates by thescanDirectoryWithSummaryexport). Full suite 645 passed, lint + typecheck + build clean.
v0.12.215 — recover GPT-5.4 plain-text tool calls (#193)
v0.12.215 — June 30, 2026
Recover tool calls that GPT 5.4 emits as plain JSON / function-call-looking text instead of structured tool_calls (#193, thanks @0xCheetah1).
GPT-5.4 plain-text tool calls now become real tool calls
- Symptom: through the OpenAI-compatible path, GPT 5.4 sometimes emits a tool call as assistant text instead of structured
tool_calls— e.g.{"type":"function","name":"terminal","parameters":{"cmd":"ls -alh /home/Blockrun"}},{"name":"session_search","parameters":{…}},read_file(parameters={"path":"…"}), or aterminal\nCOMMAND\n[/terminal]block. Downstream chat surfaces (seen in Chermes/Telegram) then displayed the raw text to the user instead of dispatching the tool — the same class of failure as the Gemini #189/#190 fix, but with GPT-specific shapes. - Fix: added a fourth recognizer to
src/textual-tool-calls.ts(which already synthesizes structured calls from OpenClaw<tool_call>, Anthropic<function_calls>, and Gemini[Called function …]text shapes). The GPT extractor recovers: whole-content{"name":…,"parameters":…}, whole-content{"type":"function",…}(incl. pretty-printed), whole-contentNAME(parameters={…}), a trailing JSON object after prose only when"type":"function"is explicit, and theterminal\n…\n[/terminal]block. Guardrails: prose JSON examples only fire when the whole content is a call; an incomplete terminal block or a non-functiontype(e.g. a JSON schema"type":"object") is rejected; the terminalcmdarg is mirrored tocommand(preservingcmd) for OpenClaw's terminal tool. It runs only when the tag-based extractors find nothing, so it can't interfere with tagged content. Both call sites — streaming and non-streaming inproxy.ts— share this function. - Tests: 14 new cases in
src/textual-tool-calls.test.ts(all five shapes plus no-mis-fire on prose examples, missingparameters, incomplete terminal block, non-functiontype, andcmd→commandnormalization). Full suite 645 passed, lint + typecheck + prettier + build clean.