Skip to content

Releases: lansespirit/Clipal

v0.16.1

23 Apr 17:20

Choose a tag to compare

v0.16.1

English

Highlights

  • Added support for importing sub2api OAuth credential bundles so more existing account exports can be brought into Clipal directly.
  • Improved the Web UI providers list so large token usage totals stay readable with compact units and exact hover values.

What Changed

  • Added: OAuth credential import normalization for sub2api bundles, including provider detection, metadata preservation, and Web UI/API coverage.
  • Improved: provider usage counters in the Web UI now use compact 3-digit units across K / M / B / T / P / E / Z / Y.
  • Improved: provider usage totals and input/output counters now keep exact token counts available on hover.

Thanks

  • Thanks to user feedback for pushing both broader OAuth import compatibility and cleaner high-volume usage display in the Web UI.

中文

亮点

  • 新增 sub2api OAuth 凭证 bundle 导入支持,已有账号导出可以更直接地导入 Clipal。
  • 改进 Web UI providers 列表中的 token usage 展示,大数字会使用紧凑单位显示,并保留 hover 精确值。

变更内容

  • 新增:sub2api bundle 的 OAuth 凭证导入规范化处理,覆盖 provider 识别、metadata 保留,以及 Web UI / API 测试。
  • 改进:Web UI provider usage 计数统一采用 3 位有效数字紧凑单位,覆盖 K / M / B / T / P / E / Z / Y
  • 改进:provider usage 总量和输入 / 输出计数支持 hover 查看精确 token 数字。

致谢

  • 感谢用户反馈推动 OAuth 导入兼容性扩展,以及 Web UI 高频 usage 数字展示的可读性优化。

v0.16.0

23 Apr 08:45

Choose a tag to compare

v0.16.0

English

Highlights

  • Added first-class Gemini CLI OAuth provider support, including authorization, credential refresh, request translation, response normalization, and live smoke coverage.
  • Added first-class Claude Code OAuth provider support, including authorization, credential refresh, Claude-compatible request normalization, and live smoke coverage.
  • Expanded OAuth account management so repeat authorization updates or relinks existing providers instead of creating duplicate providers.
  • Improved OAuth import compatibility for CLI Proxy API credential files across Codex, Gemini, and Claude accounts.

What Changed

  • Added: Gemini OAuth authorization flow with project-aware credential identity, refresh handling, and provider linking.
  • Added: Gemini OAuth proxying for generateContent, streamGenerateContent, and countTokens requests.
  • Added: Gemini OAuth response normalization for generated content and streaming responses.
  • Added: Claude Code OAuth authorization flow with state-preserving manual callback handling.
  • Added: Claude OAuth proxying for /v1/messages and /v1/messages/count_tokens.
  • Added: Claude Code compatibility normalization, including OAuth beta headers, CLI-style request headers, and billing-header content hash resigning.
  • Added: provider-specific live OAuth smoke scripts for Codex, Gemini, and Claude.
  • Added: make test-live-oauth PROVIDER=codex|gemini|claude to select one live OAuth smoke suite at a time.
  • Improved: OAuth session completion now separates credential authorization from provider linking to avoid duplicate success prompts.
  • Improved: duplicate OAuth authorization now updates existing credentials or relinks matching providers using persisted account identity.
  • Improved: OAuth account deletion now removes linked providers and credentials together with rollback protection.
  • Improved: CLI Proxy API import now skips duplicate accounts in the same import batch and tolerates abnormal files during rollback snapshots.
  • Improved: Web UI copy and controls for provider-specific OAuth authorization, manual callback submission, import summaries, and Claude/Gemini integrations.

Thanks

  • Thanks to live testing feedback for hardening Gemini and Claude OAuth compatibility before release.

中文

亮点

  • 新增 Gemini CLI OAuth 一级 provider 支持,覆盖授权、凭证刷新、请求转换、响应规范化与 live smoke 测试。
  • 新增 Claude Code OAuth 一级 provider 支持,覆盖授权、凭证刷新、Claude 兼容请求规范化与 live smoke 测试。
  • 扩展 OAuth 账号管理,重复授权会更新或重绑已有 provider,不再创建重复 provider。
  • 改进 CLI Proxy API 凭证导入兼容性,支持 Codex、Gemini、Claude 账号。

变更内容

  • 新增:Gemini OAuth 授权流程,支持按 project 识别凭证身份、自动刷新和 provider 关联。
  • 新增:Gemini OAuth 代理 generateContentstreamGenerateContentcountTokens 请求。
  • 新增:Gemini OAuth 生成内容与流式响应的响应规范化。
  • 新增:Claude Code OAuth 授权流程,手工回调提交会保留并校验原始 state。
  • 新增:Claude OAuth 代理 /v1/messages/v1/messages/count_tokens
  • 新增:Claude Code 兼容请求规范化,包括 OAuth beta headers、CLI 风格请求头和 billing-header 内容哈希重签名。
  • 新增:Codex、Gemini、Claude 三套 provider 专用 live OAuth smoke 脚本。
  • 新增:make test-live-oauth PROVIDER=codex|gemini|claude,可按 provider 单独执行 live OAuth smoke。
  • 改进:OAuth session 完成后将“账号授权”和“provider 关联”拆分,避免重复成功提示。
  • 改进:重复 OAuth 授权会基于持久化账号身份更新已有凭证或重绑匹配 provider。
  • 改进:删除 OAuth 账号时会同步删除关联 provider 和凭证,并带回滚保护。
  • 改进:CLI Proxy API 导入会跳过同批次重复账号,且回滚快照会容忍目录中的异常文件。
  • 改进:Web UI 补充 provider 专用 OAuth 授权、手工回调提交、导入摘要以及 Claude/Gemini 集成文案。

致谢

  • 感谢 live 测试反馈帮助在发布前完善 Gemini 与 Claude OAuth 兼容性。

v0.15.1

21 Apr 17:05

Choose a tag to compare

v0.15.1

English

Highlights

  • Fixed the Codex OAuth authorization modal so successful authorization no longer falls back to an erroneous failure state.
  • Improved the OAuth popup flow to avoid cross-origin window handling errors after OpenAI authorization redirects.
  • Fixed modal cleanup so the Add Provider dialog no longer gets stuck behind the authorization state after closing or completing the flow.

What Changed

  • Fixed: kept the OAuth popup handle out of reactive UI state to avoid cross-origin property access errors.
  • Fixed: treated completed OAuth sessions as successful even if later UI refresh or cleanup work fails.
  • Fixed: ensured authorization modal cleanup always resets the Add Provider modal state correctly.
  • Fixed: improved retry and error handling around the Codex OAuth authorization dialog.

Thanks

  • Thanks to user feedback for catching the authorization success/error mismatch and modal lockup.

中文

亮点

  • 修复 Codex OAuth 授权弹窗,在授权实际成功后不再错误回退成失败状态。
  • 改进 OAuth 弹窗流程,避免 OpenAI 授权跳转后因跨域窗口访问导致前端报错。
  • 修复弹窗清理逻辑,关闭或完成授权后,Add Provider 对话框不再残留卡死。

变更内容

  • 修复:不再将 OAuth popup 句柄放入响应式 UI 状态,避免跨域属性访问异常。
  • 修复:OAuth 会话已完成后,即使后续 UI 刷新或清理失败,也不会把结果误判为授权失败。
  • 修复:确保授权弹窗清理时总能正确重置 Add Provider modal 状态。
  • 修复:改进 Codex OAuth 授权对话框的重试与错误处理。

致谢

  • 感谢用户反馈帮助定位“授权成功却提示失败”和弹窗卡死问题。

v0.15.0

21 Apr 14:56

Choose a tag to compare

v0.15.0

English

Highlights

  • Added Codex OAuth integration for OpenAI Responses API, enabling OAuth-authenticated access to OpenAI models through Clipal.
  • Implemented account import functionality for automatic CLI configuration setup.
  • Expanded OAuth provider support with complete Web UI and Web API integration.

What Changed

  • Added: Codex OAuth provider support for OpenAI Responses upstreams
  • Added: OAuth account import API and Web UI for automatic configuration
  • Added: OAuth session management and credential storage for Codex provider
  • Added: OAuth flow with PKCE authorization for enhanced security
  • Added: Test coverage for OAuth integration with live smoke tests
  • Improved: Web UI now includes OAuth provider selection and account import workflows
  • Improved: OAuth credential management with automatic refresh handling
  • Fixed: Ensured Codex OAuth requests properly format request bodies for compatibility

Thanks

  • Community feedback on OAuth integration needs and requirements.

中文

亮点

  • 新增 Codex OAuth 集成,支持通过 OAuth 认证的方式接入 OpenAI 的 Responses API 模型。
  • 实现了账号导入功能,支持自动配置 CLI 工具。
  • 完善 OAuth provider 支持,涵盖 Web UI 与 Web API 全链路。

变更内容

  • 新增:Codex OAuth provider 支持,可作为 OpenAI Responses upstream
  • 新增:OAuth 账号导入 API 与 Web UI
  • 新增:Codex provider 的 OAuth 会话管理与凭证存储
  • 新增:基于 PKCE 的安全 OAuth 授权流程
  • 新增:OAuth 集成的单元测试与端到端烟雾测试
  • 改进:Web UI 现已支持 OAuth provider 选择与账号导入工作流
  • 改进:OAuth 凭证管理,支持自动刷新
  • 修复:确保 Codex OAuth 请求正确格式化请求体以兼容 API 要求

致谢

  • 社区对 OAuth 集成需求的反馈与支持。

v0.14.0

13 Apr 14:29

Choose a tag to compare

v0.14.0

English

Highlights

  • Added global and per-provider upstream proxy settings, so Clipal can now route provider traffic through environment, direct, or custom proxy policies with Web UI and YAML support.
  • Tightened proxy runtime behavior so equivalent proxy forms reuse the same effective policy, preserve connection pools, and keep compatible runtime state across reloads.
  • Cleared the remaining CI blockers for this line by fixing the lingering telemetry lint warnings and bumping the Go patch version used by the repository.

What Changed

  • Added: global upstream proxy settings with explicit environment | direct | custom policy modes
  • Added: provider-level proxy overrides with explicit default | direct | custom semantics instead of overloading a shared inherit value
  • Added: Web UI, Web API, YAML load/save, and config validation support for upstream proxy configuration
  • Improved: proxy apply / normalize / validate logic is now centralized in the config layer instead of being duplicated in the Web API handler
  • Improved: runtime now shares http.Client instances by effective proxy policy instead of eagerly creating a separate transport per provider
  • Improved: proxy runtime identity is now separated from display/storage URL canonicalization, so harmless authority-equivalent edits like host case, default port, trailing slash, or query noise no longer split policy keys
  • Improved: reload logic now preserves provider cooldown, key suppression, circuit-breaker, and sticky runtime state across equivalent proxy forms for both global and provider custom proxy settings
  • Fixed: addressed the remaining golangci-lint staticcheck findings in telemetry code
  • Fixed: upgraded the repository Go toolchain baseline from 1.25.8 to 1.25.9, clearing the standard-library govulncheck findings that were blocking CI

Thanks

  • Thanks to @ThomasX-git for the original upstream proxy contribution merged as PR #11 and for working through multiple rounds of review feedback during this release cycle.

中文

亮点

  • 新增全局与 provider 级别的 upstream proxy 配置,Clipal 现在可以按环境变量、直连或自定义代理策略转发上游请求,并且已贯通 Web UI 与 YAML 配置链路。
  • 强化了 proxy 运行时语义:等价的代理配置形式现在会复用同一份 effective policy,保住连接池复用,并在 reload 时尽量继承兼容的运行态。
  • 顺手清掉了这条发布线最后的 CI 阻塞项,包括 telemetry 相关 lint 告警以及仓库使用的 Go patch 版本问题。

变更内容

  • 新增:全局 upstream proxy 配置,支持显式 environment | direct | custom 策略模式
  • 新增:provider 级 proxy override,使用显式 default | direct | custom 语义,不再复用含义模糊的共享 inherit
  • 新增:Web UI、Web API、YAML 读写与配置校验对 upstream proxy 的完整支持
  • 改进:proxy 的 apply / normalize / validate 逻辑已统一收敛到 config 层,不再在 Web API handler 中重复维护一套语义
  • 改进:运行时按 effective proxy policy 共享 http.Client,避免为每个 provider 额外创建一套独立 transport
  • 改进:proxy 的 runtime identity 已与展示/存储用 URL canonicalization 解耦,像 host 大小写、默认端口、trailing slash、无意义 query 这类 authority 等价写法不再把 policy key 拆开
  • 改进:当 global 或 provider custom proxy 只是发生等价形式变化时,reload 现在会继续保留 provider cooldown、key suppression、circuit breaker 和 sticky runtime state
  • 修复:清理 telemetry 代码里剩余的 golangci-lint / staticcheck 告警
  • 修复:将仓库 Go 工具链基线从 1.25.8 升级到 1.25.9,消除了阻塞 CI 的标准库 govulncheck 问题

致谢

  • 感谢 @ThomasX-git 在本次发布周期内通过 PR #11 带来了 upstream proxy 能力的原始实现,并持续配合多轮 review 和后续修正。

v0.13.0

09 Apr 09:21

Choose a tag to compare

v0.13.0

English

Highlights

  • Added provider usage telemetry so Clipal can track request counts and token consumption per provider across OpenAI, Claude, and Gemini traffic.
  • Exposed provider usage statistics in the Web API for management and observability workflows.

What Changed

  • Added: persistent usage telemetry storage under the Clipal config directory
  • Added: usage extraction for JSON and streaming responses across supported provider families
  • Added: provider usage data in the Web API provider listing responses
  • Fixed: Claude usage normalization now includes cache creation and cache read input tokens when computing totals

中文

亮点

  • 新增 provider 用量遥测,Clipal 现在可以按 provider 统计 OpenAI、Claude 和 Gemini 请求的请求次数与 token 用量。
  • Web API 已暴露 provider 用量统计,便于管理和观测。

变更内容

  • 新增:在 Clipal 配置目录下持久化保存 usage telemetry
  • 新增:支持从 JSON 响应和流式响应中提取多类 provider 的 usage 数据
  • 新增:Web API 的 provider 列表响应现在包含 usage 统计
  • 修复:Claude usage 归一化统计现在会把 cache creation 和 cache read input tokens 计入总量

v0.12.0

06 Apr 10:09

Choose a tag to compare

v0.12.0

English

Highlights

  • Added per-provider request overrides in the Web UI, so OpenAI and Claude providers can now keep model selection and provider-specific request tuning inside each provider entry.
  • Unified provider override data under a nested overrides object across config loading, Web API responses, YAML export, and runtime request rewriting.

What Changed

  • Added: provider-level overrides.model support for OpenAI-compatible and Claude providers
  • Added: provider-specific nested overrides for OpenAI reasoning_effort and Claude thinking_budget_tokens
  • Improved: legacy flat YAML fields are still accepted on load and normalized into the new nested override structure
  • Improved: Web UI provider forms and provider cards now read and write the nested override format consistently
  • Improved: getting-started docs now link to releases/latest instead of hardcoding a stable version number

Thanks

  • Thanks to @ThomasX-git for contributions merged in PR #10 during this release cycle.

中文

亮点

  • Web UI 现在支持按 provider 配置请求级覆盖项,OpenAI 和 Claude provider 可以把模型选择和协议相关调优直接放在各自的 provider 配置里。
  • provider 覆盖项的数据结构已经统一为嵌套 overrides 对象,配置加载、Web API、YAML 导出和运行时请求改写都使用同一套结构。

变更内容

  • 新增:OpenAI 兼容和 Claude provider 支持 overrides.model
  • 新增:按协议拆分的嵌套覆盖项,支持 OpenAI reasoning_effort 和 Claude thinking_budget_tokens
  • 改进:加载配置时仍兼容旧的平铺 YAML 字段,并会归一化为新的嵌套 override 结构
  • 改进:Web UI 的 provider 编辑表单和 provider 卡片展示已统一使用新的嵌套 override 格式
  • 改进:快速开始文档改为链接到 releases/latest,不再手工写死稳定版号

致谢

  • 感谢 @ThomasX-git 在本次发布周期内通过 PR #10 贡献了改动。

v0.11.7

02 Apr 14:53

Choose a tag to compare

v0.11.7

English

Highlights

  • Fixed unified-ingress path handling so duplicated version segments such as /clipal/v1/v1/responses are normalized instead of failing with 404 Invalid URL.
  • Aligned OpenCode takeover with the unified /clipal ingress to avoid generating configs that can trigger duplicate /v1 path joins.

What Changed

  • Fixed: /clipal now collapses duplicated version prefixes before protocol detection, including OpenAI-compatible paths like /clipal/v1/v1/responses
  • Fixed: upstream target URL construction now deduplicates repeated /v1, /v1beta, and /upload/v1* prefixes when a provider base_url already includes them
  • Improved: OpenCode takeover now writes http://127.0.0.1:3333/clipal as the base URL instead of appending /v1
  • Improved: client setup docs now explicitly document that OpenCode users should keep the base URL at /clipal without manually adding /v1

中文

亮点

  • 修复了统一入口的路径处理问题,像 /clipal/v1/v1/responses 这样的重复版本路径现在会被自动归一化,不再报 404 Invalid URL
  • 统一了 OpenCode 一键接管的入口写法,避免生成容易触发重复 /v1 拼接的配置。

变更内容

  • 修复:/clipal 现在会在协议识别前折叠重复的版本前缀,包括 /clipal/v1/v1/responses 这类 OpenAI 兼容路径
  • 修复:转发到上游时,如果 provider 的 base_url 已经包含 /v1/v1beta/upload/v1*,URL 拼接会自动去重
  • 改进:OpenCode 的一键接管现在写入 http://127.0.0.1:3333/clipal,不再额外追加 /v1
  • 改进:客户端接入文档已明确说明 OpenCode 的 base URL 应保持在 /clipal,不要手动补 /v1

v0.11.6

31 Mar 04:01

Choose a tag to compare

v0.11.6

English

Highlights

  • Added drag-and-drop provider reordering in the Web UI, so provider priority can be adjusted directly from provider cards.
  • Fixed spacing around the system status recent activity block to keep the status cards aligned.

What Changed

  • Added: drag-and-drop provider reordering for the Web UI provider cards
  • Improved: provider priorities now update immediately in the UI after a reorder
  • Improved: local card order stays in sync during reorder so the provider list does not visually scramble
  • Fixed: adjusted recent activity spacing in the system status cards

中文

亮点

  • Web UI 现在支持通过拖拽 Provider 卡片直接调整优先级。
  • 修复了系统状态卡片中“最近活动”区块的间距,让卡片布局更整齐。

变更内容

  • 新增:Web UI 的 Provider 卡片支持拖拽调整顺序
  • 改进:拖拽后,Provider 优先级会立即在界面中刷新
  • 改进:拖拽过程中会保持本地卡片顺序同步,避免列表视觉错乱
  • 修复:调整系统状态卡片中“最近活动”区块的间距

v0.11.5

30 Mar 10:12

Choose a tag to compare

v0.11.5

English

Highlights

  • Refined the Web UI system status cards so recent activity is grouped more clearly.
  • Provider availability is now split into more specific runtime states instead of collapsing everything into a single disabled bucket.

What Changed

  • Changed: removed the scoped routing block from the system status cards
  • Improved: grouped last_switch and last_request under a dedicated Recent activity section
  • Improved: split provider status display into Disabled, Cooling down, Unavailable, and Recovery probe
  • Improved: added distinct chip styling for warning and recovery-style provider states
  • Fixed: manual mode cards no longer show a stray divider before the pinned provider metadata
  • Changed: removed obsolete scoped-routing frontend helpers, labels, and styles

中文

亮点

  • 调整了 Web UI 系统状态卡片,让最近活动信息分组更清楚。
  • Provider 可用性现在会按更细的运行时状态展示,不再都落到同一个 disabled 分组里。

变更内容

  • 调整:系统状态卡片中移除了 scoped routing 展示块
  • 改进:将 last_switchlast_request 归到独立的 最近活动 区块
  • 改进:Provider 状态展示细分为 已禁用冷却中不可用恢复探测
  • 改进:为 warning / recovery 类 provider 状态补充了更明确的 chip 视觉样式
  • 修复:manual 模式卡片在 pinned provider 信息前不再出现多余分隔线
  • 调整:删除已废弃的 scoped routing 前端辅助函数、文案和样式