mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-13 18:32:12 +03:00
chore(providers): bump Claude Code wire identity + Devin bridge pin to 2.1.258 (#12604)
17 de 18 checks verdes, **zero falhas** — incluindo os quatro shards de unit, Vitest, CodeQL, semgrep, Docs Gates, Merge integrity e o **Fast Quality Gates**, que era exatamente o que o rebaseline do `RoutingTab.tsx` (1606→1607, a linha do seletor que acompanha a nova versão de identidade) veio consertar. O único check restante, `No new ESLint warnings`, ficou enfileirado sem iniciar (duração 0) atrás da saturação de runners de hoje. Cobri os dois comandos que ele executa, localmente e sobre este HEAD: - `npm run check:codeql-ratchet` → **0 alertas abertos** contra baseline 6 (sem regressão). - `npx eslint --max-warnings 0` nos 9 arquivos de código que esta branch altera → **exit 0**, nenhum warning. Conteúdo: os dois commits do #12402 que não estavam subsumidos, com autoria do @ggiak preservada pelo cherry-pick `-x`, mais o rebaseline e o fragmento de changelog que faltava. `typecheck:core` limpo e **138/138** nos testes focados. As três versões (`claudeCodeClient.ts`, `Dockerfile`, `compose.yml`) conferem em 2.1.258, e `npm view @anthropic-ai/claude-code@2.1.258` resolve — o Dockerfile instala esse pin exato.
This commit is contained in:
committed by
GitHub
parent
ad500de9e3
commit
f51cd295c8
@@ -1290,7 +1290,7 @@ GITHUB_OAUTH_CLIENT_ID=Iv1.b507a08c87ecfe98
|
||||
# Used by: open-sse/executors/base.ts — buildHeaders() dynamic lookup.
|
||||
# Update these when providers release new CLI versions to avoid blocks.
|
||||
|
||||
CLAUDE_USER_AGENT="claude-cli/2.1.219 (external, cli)"
|
||||
CLAUDE_USER_AGENT="claude-cli/2.1.258 (external, cli)"
|
||||
|
||||
# Disable the deterministic tool-name cloak applied on both Anthropic-bound paths
|
||||
# (executors/base.ts native OAuth + executors/cliproxyapi.ts CLIProxyAPI) —
|
||||
|
||||
1
changelog.d/maintenance/12402-claude-code-2-1-258.md
Normal file
1
changelog.d/maintenance/12402-claude-code-2-1-258.md
Normal file
@@ -0,0 +1 @@
|
||||
- **chore(providers):** bump the Claude Code wire identity and the Devin bridge image pin from `2.1.220` to `2.1.258` ([#12402](https://github.com/diegosouzapw/OmniRoute/pull/12402)) — thanks @ggiak
|
||||
@@ -439,7 +439,7 @@
|
||||
"src/app/(dashboard)/dashboard/runtime/RuntimePageClient.tsx": 1201,
|
||||
"src/app/(dashboard)/dashboard/settings/components/ProxyRegistryManager.tsx": 1475,
|
||||
"src/app/(dashboard)/dashboard/settings/components/ResilienceTab.tsx": 1271,
|
||||
"src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx": 1606,
|
||||
"src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx": 1607,
|
||||
"src/app/(dashboard)/dashboard/settings/components/SystemStorageTab.tsx": 1597,
|
||||
"src/app/(dashboard)/dashboard/usage/components/EvalsTab.tsx": 2152,
|
||||
"src/app/api/providers/[id]/models/route.ts": 2432,
|
||||
@@ -635,5 +635,6 @@
|
||||
"_relax_velocity_2026_08_30": "127 frozen line caps and cap/testCap raised by 20% (velocity phase; see quality-baseline.json _policy).",
|
||||
"_rebaseline_2026_09_02_12325_merge_v3851": "Merge of release/v3.8.51 into #12325. Both sides grew chatCore.ts at the same chokepoint: #12239 took it 5946->5976 upstream, and this PR adds its +9 non-Codex 429 branch on top. check-file-size.mjs counts split(\"\\\\n\").length (trailing-newline empty element), so the merged file is 5981. The cap is the merged LOC, not either side alone; no other entry moves.",
|
||||
"_rebaseline_2026_09_03_houminxi_batch_stacked": "Crescimento medido DEPOIS que os 9 PRs da leva HouMinXi entraram, quando cada um empilhou sobre o rebaseline do anterior: providers/page.tsx 2007->2025 (+18 = feedback de erro por linha do import CSV do #12504 somado a busca por nome/baseUrl do #12495, ambos no mesmo painel de conexoes); chatCore.ts 5981->5984 (+3 = o #12325 invalida o cache generico de quota no 429 upstream, ao lado do ramo Codex ja existente); accountFallback.ts 2461->2467 (+6 = o #12566 empilha a carve-out de familia Antigravity sobre o rebaseline 2422->2461 que o #12590 registrou para o carve-out credits_exhausted da Moonshot; os dois tocam checkFallbackError). Cada PR mediu certo isoladamente, mas nenhum enxergava o empilhamento. Fiacao em chokepoints existentes. NAO cobre codex.ts nem stream.ts, que ja violavam no tip antes desta leva (drift da base).",
|
||||
"_rebaseline_2026_09_03_12604_claude_code_2_1_258": "PR #12604 (bump da wire identity do Claude Code 2.1.220->2.1.258, commits do @ggiak vindos do #12402) crescimento proprio: src/app/(dashboard)/dashboard/settings/components/RoutingTab.tsx 1606->1607 (+1, a linha do seletor que acompanha a nova versao de identidade). Uma linha num painel de settings ja existente; nao ha o que extrair. Coberto por client-identity-profiles e claude-codex-identity-version-sync (138/138 focados).",
|
||||
"_rebaseline_2026_09_03_hartmark_batch": "Leva hartmark (#12293 #12355 #12447 #12445 #12446 #12460 #12461 #12338 #12448) crescimento proprio, medido no tip com os nove mergeados: src/app/(dashboard)/dashboard/combos/page.tsx 5012->5018 (+6, #12355 impede que a falha de bundling do tiktoken de um provider sem relacao derrube /api/providers, e o painel passa a lidar com o estado degradado); open-sse/services/combo.ts 4023->4036 (+13, #12338 nos fixes do universal-handoff: nota de bare-fallback, escopo por mesma requisicao e log da falha silenciosa). Fiacao em chokepoints existentes do roteamento de combo. NAO cobre codex.ts nem stream.ts, ja violando no tip antes desta leva (drift da base)."
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
FROM node:26.0.0-bookworm-slim
|
||||
|
||||
ARG CLAUDE_CODE_VERSION=2.1.220
|
||||
ARG CLAUDE_CODE_VERSION=2.1.258
|
||||
ARG DEVIN_CLI_VERSION=3000.2.17
|
||||
ARG TARGETARCH
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ x-runtime: &runtime
|
||||
context: ../..
|
||||
dockerfile: docker/devin-bridge/Dockerfile
|
||||
args:
|
||||
CLAUDE_CODE_VERSION: 2.1.220
|
||||
CLAUDE_CODE_VERSION: 2.1.258
|
||||
DEVIN_CLI_VERSION: 3000.2.17
|
||||
user: "10001:10001"
|
||||
read_only: true
|
||||
|
||||
@@ -4,16 +4,22 @@
|
||||
Messages endpoint while the official Devin CLI supplies model responses over ACP stdio. It
|
||||
does not modify the existing Anthropic, Claude OAuth, Claude Web, or `devin-cli` providers.
|
||||
|
||||
> **Current status: offline and live validated.** The pinned Claude Code `2.1.220` completed
|
||||
> three isolated scenarios through Devin CLI `3000.2.17` and model
|
||||
> `swe-1-7-lightning`. The final live run proved client-owned `Read`, `Edit`, and `Bash`
|
||||
> turns, successful `npm test` results, project command and skill discovery, Devin-only
|
||||
> routing, and zero Claude egress.
|
||||
> **Current status: pinned Claude Code `2.1.258`; offline and live validation last recorded
|
||||
> on `2.1.220`.** The `2.1.220` pin completed three isolated scenarios through Devin CLI
|
||||
> `3000.2.17` and model `swe-1-7-lightning`; that final live run proved client-owned `Read`,
|
||||
> `Edit`, and `Bash` turns, successful `npm test` results, project command and skill
|
||||
> discovery, Devin-only routing, and zero Claude egress. The pin was then raised to `2.1.258`
|
||||
> (the CLI generation OmniRoute's Claude identity impersonates, and the first line that ships
|
||||
> the Fable 5.1 tier natively). On the new pin the install layer and `claude --version` were
|
||||
> verified on the pinned base image, and the bridge unit suite, `compose config` and the
|
||||
> static isolation proof pass — but the offline mock scenario and the live three-scenario
|
||||
> suite have not been re-run yet. Re-run them (see "Updating pinned tools") before relying on
|
||||
> the bridge with this pin.
|
||||
|
||||
## Architecture
|
||||
|
||||
```text
|
||||
Claude Code 2.1.220 (isolated non-root Linux container)
|
||||
Claude Code 2.1.258 (isolated non-root Linux container)
|
||||
-> http://omniroute:20128/v1/messages
|
||||
-> devin-cli-agentic (Claude-format, no-auth provider)
|
||||
-> devin acp --agent-type summarizer (official ACP stdio, no Devin tools)
|
||||
|
||||
@@ -130,7 +130,7 @@ request (see `open-sse/services/claudeCodeCompatible.ts`):
|
||||
| Header | Value |
|
||||
| ------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
||||
| `Authorization` | `Bearer <api-key>` |
|
||||
| `User-Agent` | `claude-cli/2.1.219 (external, sdk-cli)` |
|
||||
| `User-Agent` | `claude-cli/2.1.258 (external, sdk-cli)` |
|
||||
| `anthropic-version` | `2023-06-01` |
|
||||
| `anthropic-beta` | `claude-code-20250219,interleaved-thinking-2025-05-14,effort-2025-11-24` |
|
||||
| Per-connection redact-thinking beta toggle | Adds `redact-thinking-2026-02-12` for upstreams that specifically require redacted thinking streams |
|
||||
|
||||
@@ -622,7 +622,7 @@ process.env[`${PROVIDER_ID}_USER_AGENT`]
|
||||
|
||||
| Variable | Default Value | When to Update |
|
||||
| -------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.219 (external, cli)` | When Anthropic releases a new CLI version |
|
||||
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.258 (external, cli)` | When Anthropic releases a new CLI version |
|
||||
| `CLAUDE_DISABLE_TOOL_NAME_CLOAK` | `false` | `executors/base.ts` + `executors/cliproxyapi.ts` | Set to `1`/`true` to forward third-party harness tool names verbatim to Anthropic on both Anthropic-bound paths (native OAuth and CLIProxyAPI). By default the executor deterministically aliases non-Claude-Code tool names (Claude Code canonical mapping where one exists, otherwise PascalCase) and reverses them on the response via `_toolNameMap`, so harnesses with snake_case tools are not refused as fingerprinted third-party clients. Debugging only. |
|
||||
| `CODEX_USER_AGENT` | `codex-cli/0.142.0 (Windows 10.0.26200; x64)` | When OpenAI updates the Codex CLI |
|
||||
| `CODEX_CLIENT_VERSION` | `0.131.0` | Override Codex client version independently of full UA string |
|
||||
|
||||
@@ -117,8 +117,8 @@ Applied to: `system` blocks, all `messages[].content`, and `tools[].description`
|
||||
|
||||
For third-party Anthropic relays that only accept "real Claude Code" traffic:
|
||||
|
||||
- `CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.220 (external, sdk-cli)"`
|
||||
- `CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION = "0.94.0"`
|
||||
- `CLAUDE_CODE_COMPATIBLE_USER_AGENT = "claude-cli/2.1.258 (external, sdk-cli)"`
|
||||
- `CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION = "0.112.1"`
|
||||
- `CLAUDE_CODE_COMPATIBLE_STAINLESS_RUNTIME_VERSION = "v26.3.0"`
|
||||
- `anthropic-beta = "claude-code-20250219,interleaved-thinking-2025-05-14,effort-2025-11-24"` by default
|
||||
- The per-connection "Enable redact-thinking beta" toggle adds `redact-thinking-2026-02-12` when a CC Compatible upstream specifically requires redacted thinking streams
|
||||
@@ -241,7 +241,7 @@ All MITM endpoints require management auth (`requireCliToolsAuth`). The sudo pas
|
||||
|
||||
| Variable | Default |
|
||||
| ------------------------ | --------------------------------------------------------------- |
|
||||
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.220 (external, cli)` |
|
||||
| `CLAUDE_USER_AGENT` | `claude-cli/2.1.258 (external, cli)` |
|
||||
| `CODEX_USER_AGENT` | `codex-cli/0.149.0 (Windows 10.0.26200; x64)` |
|
||||
| `GITHUB_USER_AGENT` | `GitHubCopilotChat/0.54.0` |
|
||||
| `ANTIGRAVITY_USER_AGENT` | `antigravity/2.0.1 linux/arm64 google-api-nodejs-client/10.3.0` |
|
||||
|
||||
@@ -11,6 +11,7 @@ import {
|
||||
normalizeCliCompatProviderId,
|
||||
} from "@/shared/constants/cliCompatProviders";
|
||||
import { AI_PROVIDERS } from "@/shared/constants/providers";
|
||||
import { CLAUDE_CODE_CLIENT_BUILD_REVISION } from "@/shared/constants/claudeCodeClient";
|
||||
import { compareTr } from "@/shared/utils/turkishText";
|
||||
import { HERMES } from "./systemTransformsHermesDefaults";
|
||||
|
||||
@@ -169,7 +170,7 @@ const DEFAULT_SYSTEM_TRANSFORMS_CLIENT = {
|
||||
entrypoint: "sdk-cli",
|
||||
versionFormat: "ex-machina",
|
||||
cchAlgo: "sha256-first-user",
|
||||
buildRevision: "1f2",
|
||||
buildRevision: CLAUDE_CODE_CLIENT_BUILD_REVISION,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
* Keep this leaf dependency-free so server executors, compatibility bridges,
|
||||
* and client-facing identity presets can share one source of truth.
|
||||
*/
|
||||
export const CLAUDE_CODE_CLIENT_VERSION = "2.1.220";
|
||||
export const CLAUDE_CODE_CLIENT_BUILD_REVISION = "1f2";
|
||||
export const CLAUDE_CODE_CLIENT_VERSION = "2.1.258";
|
||||
export const CLAUDE_CODE_CLIENT_BUILD_REVISION = "1e2";
|
||||
export const CLAUDE_CODE_CLIENT_BILLING_VERSION = `${CLAUDE_CODE_CLIENT_VERSION}.${CLAUDE_CODE_CLIENT_BUILD_REVISION}`;
|
||||
export const CLAUDE_CODE_SDK_PACKAGE_VERSION = "0.94.0";
|
||||
export const CLAUDE_CODE_SDK_PACKAGE_VERSION = "0.112.1";
|
||||
export const CLAUDE_CODE_RUNTIME_VERSION = "v26.3.0";
|
||||
|
||||
export type ClaudeCodeEntrypoint = "cli" | "sdk-cli";
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
"apiKey": {
|
||||
"Accept": "text/event-stream",
|
||||
"Content-Type": "application/json",
|
||||
"User-Agent": "claude-cli/2.1.220 (external, sdk-cli)",
|
||||
"User-Agent": "claude-cli/2.1.258 (external, sdk-cli)",
|
||||
"X-Stainless-Arch": "<ARCH>",
|
||||
"X-Stainless-Lang": "js",
|
||||
"X-Stainless-OS": "MacOS",
|
||||
"X-Stainless-Package-Version": "0.94.0",
|
||||
"X-Stainless-Package-Version": "0.112.1",
|
||||
"X-Stainless-Retry-Count": "0",
|
||||
"X-Stainless-Runtime": "node",
|
||||
"X-Stainless-Runtime-Version": "v26.3.0",
|
||||
@@ -47,11 +47,11 @@
|
||||
"nonStream": {
|
||||
"Accept": "application/json",
|
||||
"Content-Type": "application/json",
|
||||
"User-Agent": "claude-cli/2.1.220 (external, sdk-cli)",
|
||||
"User-Agent": "claude-cli/2.1.258 (external, sdk-cli)",
|
||||
"X-Stainless-Arch": "<ARCH>",
|
||||
"X-Stainless-Lang": "js",
|
||||
"X-Stainless-OS": "MacOS",
|
||||
"X-Stainless-Package-Version": "0.94.0",
|
||||
"X-Stainless-Package-Version": "0.112.1",
|
||||
"X-Stainless-Retry-Count": "0",
|
||||
"X-Stainless-Runtime": "node",
|
||||
"X-Stainless-Runtime-Version": "v26.3.0",
|
||||
@@ -66,11 +66,11 @@
|
||||
"oauth": {
|
||||
"Accept": "text/event-stream",
|
||||
"Content-Type": "application/json",
|
||||
"User-Agent": "claude-cli/2.1.220 (external, sdk-cli)",
|
||||
"User-Agent": "claude-cli/2.1.258 (external, sdk-cli)",
|
||||
"X-Stainless-Arch": "<ARCH>",
|
||||
"X-Stainless-Lang": "js",
|
||||
"X-Stainless-OS": "MacOS",
|
||||
"X-Stainless-Package-Version": "0.94.0",
|
||||
"X-Stainless-Package-Version": "0.112.1",
|
||||
"X-Stainless-Retry-Count": "0",
|
||||
"X-Stainless-Runtime": "node",
|
||||
"X-Stainless-Runtime-Version": "v26.3.0",
|
||||
@@ -989,13 +989,13 @@
|
||||
"Anthropic-Dangerous-Direct-Browser-Access": "true",
|
||||
"Anthropic-Version": "2023-06-01",
|
||||
"Content-Type": "application/json",
|
||||
"User-Agent": "claude-cli/2.1.220 (external, cli)",
|
||||
"User-Agent": "claude-cli/2.1.258 (external, cli)",
|
||||
"X-App": "cli",
|
||||
"X-Stainless-Arch": "<ARCH>",
|
||||
"X-Stainless-Helper-Method": "stream",
|
||||
"X-Stainless-Lang": "js",
|
||||
"X-Stainless-Os": "<OS>",
|
||||
"X-Stainless-Package-Version": "0.94.0",
|
||||
"X-Stainless-Package-Version": "0.112.1",
|
||||
"X-Stainless-Retry-Count": "0",
|
||||
"X-Stainless-Runtime": "node",
|
||||
"X-Stainless-Runtime-Version": "v26.3.0",
|
||||
@@ -1007,13 +1007,13 @@
|
||||
"Anthropic-Dangerous-Direct-Browser-Access": "true",
|
||||
"Anthropic-Version": "2023-06-01",
|
||||
"Content-Type": "application/json",
|
||||
"User-Agent": "claude-cli/2.1.220 (external, cli)",
|
||||
"User-Agent": "claude-cli/2.1.258 (external, cli)",
|
||||
"X-App": "cli",
|
||||
"X-Stainless-Arch": "<ARCH>",
|
||||
"X-Stainless-Helper-Method": "stream",
|
||||
"X-Stainless-Lang": "js",
|
||||
"X-Stainless-Os": "<OS>",
|
||||
"X-Stainless-Package-Version": "0.94.0",
|
||||
"X-Stainless-Package-Version": "0.112.1",
|
||||
"X-Stainless-Retry-Count": "0",
|
||||
"X-Stainless-Runtime": "node",
|
||||
"X-Stainless-Runtime-Version": "v26.3.0",
|
||||
@@ -1026,13 +1026,13 @@
|
||||
"Anthropic-Dangerous-Direct-Browser-Access": "true",
|
||||
"Anthropic-Version": "2023-06-01",
|
||||
"Content-Type": "application/json",
|
||||
"User-Agent": "claude-cli/2.1.220 (external, cli)",
|
||||
"User-Agent": "claude-cli/2.1.258 (external, cli)",
|
||||
"X-App": "cli",
|
||||
"X-Stainless-Arch": "<ARCH>",
|
||||
"X-Stainless-Helper-Method": "stream",
|
||||
"X-Stainless-Lang": "js",
|
||||
"X-Stainless-Os": "<OS>",
|
||||
"X-Stainless-Package-Version": "0.94.0",
|
||||
"X-Stainless-Package-Version": "0.112.1",
|
||||
"X-Stainless-Retry-Count": "0",
|
||||
"X-Stainless-Runtime": "node",
|
||||
"X-Stainless-Runtime-Version": "v26.3.0",
|
||||
|
||||
@@ -5,6 +5,6 @@ import { CLAUDE_CODE_CLIENT_BILLING_VERSION } from "../../src/shared/constants/c
|
||||
|
||||
describe("Anthropic billing header fingerprint (#1638)", () => {
|
||||
it("uses the immutable build revision captured from the signed CLI", () => {
|
||||
assert.equal(CLAUDE_CODE_CLIENT_BILLING_VERSION, "2.1.220.1f2");
|
||||
assert.equal(CLAUDE_CODE_CLIENT_BILLING_VERSION, "2.1.258.1e2");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -52,7 +52,7 @@ test("DEFAULT_CC_BRIDGE_PIPELINE places billing header at [0] and identity at [1
|
||||
DEFAULT_CC_BRIDGE_PIPELINE
|
||||
);
|
||||
const blocks = result.body.system as any[];
|
||||
assert.ok(blocks[0].text.startsWith("x-anthropic-billing-header: cc_version=2.1.220.1f2;"));
|
||||
assert.ok(blocks[0].text.startsWith("x-anthropic-billing-header: cc_version=2.1.258.1e2;"));
|
||||
assert.equal(blocks[1].text, CLAUDE_AGENT_SDK_IDENTITY);
|
||||
});
|
||||
|
||||
|
||||
@@ -38,11 +38,11 @@ test("Claude CLI version constants are in lockstep across all 4 sources", () =>
|
||||
);
|
||||
});
|
||||
|
||||
test("Claude CLI wire versions match the captured 2.1.220 binary", () => {
|
||||
assert.equal(canonical.CLAUDE_CODE_CLIENT_VERSION, "2.1.220");
|
||||
assert.equal(canonical.CLAUDE_CODE_CLIENT_BUILD_REVISION, "1f2");
|
||||
assert.equal(canonical.CLAUDE_CODE_CLIENT_BILLING_VERSION, "2.1.220.1f2");
|
||||
assert.equal(canonical.CLAUDE_CODE_SDK_PACKAGE_VERSION, "0.94.0");
|
||||
test("Claude CLI wire versions match the captured 2.1.258 binary", () => {
|
||||
assert.equal(canonical.CLAUDE_CODE_CLIENT_VERSION, "2.1.258");
|
||||
assert.equal(canonical.CLAUDE_CODE_CLIENT_BUILD_REVISION, "1e2");
|
||||
assert.equal(canonical.CLAUDE_CODE_CLIENT_BILLING_VERSION, "2.1.258.1e2");
|
||||
assert.equal(canonical.CLAUDE_CODE_SDK_PACKAGE_VERSION, "0.112.1");
|
||||
assert.equal(canonical.CLAUDE_CODE_RUNTIME_VERSION, "v26.3.0");
|
||||
assert.equal(
|
||||
compat.CLAUDE_CODE_COMPATIBLE_STAINLESS_PACKAGE_VERSION,
|
||||
|
||||
@@ -39,7 +39,7 @@ test("getClientIdentityProfileHeaders: unknown profile id falls back to no heade
|
||||
|
||||
test("getClientIdentityProfileHeaders: known CLI profiles expose their preset headers", () => {
|
||||
const claudeCli = getClientIdentityProfileHeaders("claude-cli");
|
||||
assert.equal(claudeCli["User-Agent"], "claude-cli/2.1.220 (external, cli)");
|
||||
assert.equal(claudeCli["User-Agent"], "claude-cli/2.1.258 (external, cli)");
|
||||
assert.equal(claudeCli["X-App"], "cli");
|
||||
|
||||
const codexCli = getClientIdentityProfileHeaders("codex-cli");
|
||||
@@ -55,7 +55,7 @@ test("getClientIdentityProfileHeaders: returns a fresh mutable copy (catalog sta
|
||||
headers["User-Agent"] = "tampered";
|
||||
assert.equal(
|
||||
CLIENT_IDENTITY_PROFILES["claude-cli"].headers["User-Agent"],
|
||||
"claude-cli/2.1.220 (external, cli)"
|
||||
"claude-cli/2.1.258 (external, cli)"
|
||||
);
|
||||
});
|
||||
|
||||
@@ -100,7 +100,7 @@ test("profile headers merged into customHeaders survive applyCustomHeaders sanit
|
||||
true
|
||||
) as Record<string, string>;
|
||||
|
||||
assert.equal(headers["User-Agent"], "claude-cli/2.1.220 (external, cli)");
|
||||
assert.equal(headers["User-Agent"], "claude-cli/2.1.258 (external, cli)");
|
||||
assert.equal(headers["X-App"], "cli");
|
||||
assert.equal(headers["Authorization"], "Bearer test-key");
|
||||
});
|
||||
|
||||
@@ -1571,12 +1571,12 @@ test("DefaultExecutor.execute does not produce duplicate anthropic-version heade
|
||||
assert.equal(versionKeys.length, 1, "Duplicate anthropic-version header keys found");
|
||||
assert.equal(capturedHeaders[versionKeys[0]], "2023-06-01");
|
||||
assert.equal(capturedHeaders["X-Stainless-Runtime-Version"], "v26.3.0");
|
||||
assert.equal(capturedHeaders["X-Stainless-Package-Version"], "0.94.0");
|
||||
assert.equal(capturedHeaders["X-Stainless-Package-Version"], "0.112.1");
|
||||
|
||||
const sentBody = JSON.parse(capturedBody) as { system?: Array<{ text?: string }> };
|
||||
assert.match(
|
||||
sentBody.system?.[0]?.text ?? "",
|
||||
/^x-anthropic-billing-header: cc_version=2\.1\.220\.1f2; cc_entrypoint=cli; cch=[0-9a-f]{5};$/
|
||||
/^x-anthropic-billing-header: cc_version=2\.1\.258\.1e2; cc_entrypoint=cli; cch=[0-9a-f]{5};$/
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -130,9 +130,9 @@ test("GlmExecutor normalizes GLM coding and Anthropic URLs without duplicating e
|
||||
});
|
||||
|
||||
test("GlmExecutor separates OpenAI-compatible coding headers from Anthropic headers", async () => {
|
||||
assert.equal(await getExecutor("glm") instanceof GlmExecutor, true);
|
||||
assert.equal(await getExecutor("glm-cn") instanceof GlmExecutor, true);
|
||||
assert.equal(await getExecutor("glmt") instanceof GlmExecutor, true);
|
||||
assert.equal((await getExecutor("glm")) instanceof GlmExecutor, true);
|
||||
assert.equal((await getExecutor("glm-cn")) instanceof GlmExecutor, true);
|
||||
assert.equal((await getExecutor("glmt")) instanceof GlmExecutor, true);
|
||||
|
||||
const executor = new GlmExecutor("glm");
|
||||
const codingHeaders = executor.buildHeaders(
|
||||
@@ -183,7 +183,7 @@ test("GlmExecutor separates OpenAI-compatible coding headers from Anthropic head
|
||||
assert.equal(anthropicHeaders["anthropic-version"], "2023-06-01");
|
||||
assert.match(anthropicHeaders["anthropic-beta"], /claude-code-20250219/);
|
||||
assert.equal(anthropicHeaders["anthropic-dangerous-direct-browser-access"], "true");
|
||||
assert.match(anthropicHeaders["User-Agent"], /^claude-cli\/2\.1\.220 \(external, sdk-cli\)$/);
|
||||
assert.match(anthropicHeaders["User-Agent"], /^claude-cli\/2\.1\.258 \(external, sdk-cli\)$/);
|
||||
assert.equal(anthropicHeaders["X-Stainless-Lang"], "js");
|
||||
assert.equal(anthropicHeaders["X-Stainless-Runtime"], "node");
|
||||
});
|
||||
|
||||
@@ -559,7 +559,7 @@ const UI_DEFAULTS_SNAPSHOT = {
|
||||
entrypoint: "sdk-cli",
|
||||
versionFormat: "ex-machina",
|
||||
cchAlgo: "sha256-first-user",
|
||||
buildRevision: "1f2",
|
||||
buildRevision: "1e2",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user