1. 29 Mar, 2026 1 commit
  2. 26 Mar, 2026 5 commits
    • Wesley Liddick's avatar
      Merge pull request #1231 from LvyuanW/bulk-openai-passthrough-worktree · ef5c8e68
      Wesley Liddick authored
      Support bulk editing for OpenAI passthrough
      ef5c8e68
    • shaw's avatar
      feat(rectifier): 请求整流器增加 API Key 账号签名整流支持 · d571f300
      shaw authored
      新增独立开关控制 API Key 账号的签名整流功能,支持配置自定义
      匹配关键词以捕获不同格式的上游错误响应。
      
      - 新增 apikey_signature_enabled 开关(默认关闭)
      - 新增 apikey_signature_patterns 自定义关键词配置
      - 内置签名检测规则对 API Key 账号同样生效
      - 自定义关键词对完整响应体做不区分大小写匹配
      - 重试二阶段检测仅做模式匹配,不重复校验开关
      - Handler 层校验关键词数量(≤50)和长度(≤500)
      - API 响应 nil patterns 统一序列化为空数组
      - OAuth/SetupToken/Upstream/Bedrock 账号行为不变
      d571f300
    • Wesley Liddick's avatar
      Merge pull request #1302 from DaydreamCoding/fix/openai-error-handling · ce96527d
      Wesley Liddick authored
      fix(ratelimit): OpenAI 401 token_invalidated/token_revoked 及 402 deac…
      ce96527d
    • Wesley Liddick's avatar
      Merge pull request #1299 from DaydreamCoding/feat/antigravity-privacy-and-subscription · f8b8b539
      Wesley Liddick authored
      feat(antigravity): 自动隐私设置 + 订阅状态检测
      f8b8b539
    • shaw's avatar
      feat: 网关请求头 wire casing 保持、转发行为开关、调试日志增强及 accept-encoding 恢复 · b20e1422
      shaw authored
      - 新增 header_util.go,通过 setHeaderRaw/getHeaderRaw/addHeaderRaw 绕过
        Go 的 canonical-case 规范化,保持真实 Claude CLI 抓包的请求头大小写
        (如 "x-app" 而非 "X-App","X-Stainless-OS" 而非 "X-Stainless-Os")
      - 新增管理后台开关:指纹统一化(默认开启)和 metadata 透传(默认关闭),
        使用 atomic.Value + singleflight 缓存模式,60s TTL
      - 调试日志从控制台 body 打印升级为文件级完整快照
        (按真实 wire 顺序输出 headers + 格式化 JSON body + 上下文元数据)
      - 恢复 accept-encoding 到白名单,在 http_upstream.go 新增 decompressResponseBody
        处理 gzip/brotli/deflate 解压(Go 显式设置 Accept-Encoding 时不会自动解压)
      - OAuth 服务 axios UA 从 1.8.4 更新至 1.13.6
      - 测试断言改用 getHeaderRaw 适配 raw header 存储方式
      b20e1422
  3. 25 Mar, 2026 4 commits
  4. 24 Mar, 2026 19 commits
  5. 23 Mar, 2026 11 commits
    • qingyuzhang's avatar
      ce8520c9
    • qingyuzhang's avatar
      0b3928c3
    • Wang Lvyuan's avatar
      feat: support bulk OpenAI passthrough toggle · 73d72651
      Wang Lvyuan authored
      73d72651
    • Wang Lvyuan's avatar
      Add bulk OpenAI OAuth WS mode editing · adbedd48
      Wang Lvyuan authored
      adbedd48
    • Ethan0x0000's avatar
      Merge remote-tracking branch 'origin/feat/ops-error-observability-transfer'... · 13b72f6b
      Ethan0x0000 authored
      Merge remote-tracking branch 'origin/feat/ops-error-observability-transfer' into feat/anthropic-openai-endpoint-compat
      
      # Conflicts:
      #	frontend/src/api/admin/ops.ts
      #	frontend/src/views/admin/ops/components/OpsErrorDetailModal.vue
      #	frontend/src/views/admin/ops/components/OpsErrorLogTable.vue
      13b72f6b
    • Ethan0x0000's avatar
      feat(frontend): display error observability fields in ops admin panel · c5aa96a3
      Ethan0x0000 authored
      Show endpoint, model mapping, and request type in the ops error log
      table and detail modal:
      - Endpoint column with inbound/upstream tooltip
      - Model column showing requested→upstream mapping with arrow
      - Request type badge (sync/stream/ws) in status column
      - New detail cards for inbound endpoint, upstream endpoint, request type
      c5aa96a3
    • Ethan0x0000's avatar
      feat(routes): add platform-based routing split for /v1/responses and /v1/chat/completions · d927c0e4
      Ethan0x0000 authored
      Mirror the existing /v1/messages platform split pattern:
      - OpenAI groups → OpenAIGateway handlers (existing, unchanged)
      - Non-OpenAI groups → Gateway handlers (new Anthropic-upstream path)
      
      Updated both /v1 prefixed routes and non-prefixed alias routes
      (/responses, /chat/completions). WebSocket route (/v1/responses GET)
      remains OpenAI-only as Anthropic has no WebSocket equivalent.
      d927c0e4
    • Ethan0x0000's avatar
      feat(handler): add Responses/ChatCompletions handlers on GatewayHandler · 31660c4c
      Ethan0x0000 authored
      New HTTP handlers for Anthropic platform groups accepting OpenAI-format
      endpoints:
      
      - GatewayHandler.Responses: /v1/responses for non-OpenAI groups
      - GatewayHandler.ChatCompletions: /v1/chat/completions for non-OpenAI groups
      
      Both handlers include:
      - Claude Code only restriction (403 reject when claude_code_only enabled,
        since these endpoints are never Claude Code clients)
      - Full auth → billing → user/account concurrency → failover loop
      - Ops error/endpoint context propagation
      - Async usage recording via worker pool
      
      Error responses use each endpoint's native format (Responses API format
      for /v1/responses, CC format for /v1/chat/completions).
      31660c4c
    • Ethan0x0000's avatar
      feat(service): add ForwardAsResponses/ForwardAsChatCompletions on GatewayService · 4321adab
      Ethan0x0000 authored
      New forwarding methods on GatewayService for Anthropic platform groups:
      
      - ForwardAsResponses: accept Responses body → convert to Anthropic →
        forward to upstream → convert response back to Responses format.
        Supports both streaming (SSE event-by-event conversion) and buffered
        (accumulate then convert) response modes.
      - ForwardAsChatCompletions: chain CC→Responses→Anthropic for request,
        Anthropic→Responses→CC for response. Streaming uses dual state machine
        chain with [DONE] marker.
      
      Both methods reuse existing GatewayService infrastructure:
      buildUpstreamRequest, Claude Code mimicry, cache control enforcement,
      model mapping, and return UpstreamFailoverError for handler-level retry.
      4321adab
    • Ethan0x0000's avatar
      feat(apicompat): add ResponsesAnthropic bidirectional format conversion · 68f151f5
      Ethan0x0000 authored
      Add reverse-direction converters for Anthropic platform groups to accept
      OpenAI-format requests:
      
      - ResponsesToAnthropicRequest: Responses API input → Anthropic Messages
        request with system extraction, tool/toolChoice mapping, reasoning
        effort conversion, image data URIbase64, and consecutive role merging
      - AnthropicToResponsesResponse: Anthropic response → Responses response
        with content block→output item mapping, usage, stop_reason→status
      - AnthropicEventToResponsesEvents: stateful SSE stream converter
        (Anthropic streaming protocol → Responses streaming protocol)
      - FinalizeAnthropicResponsesStream: synthetic termination for
        incomplete streams
      68f151f5
    • Ethan0x0000's avatar
      ecad083f