Releases: lansespirit/Clipal
Releases · lansespirit/Clipal
v0.16.1
v0.16.1
English
Highlights
- Added support for importing
sub2apiOAuth 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
sub2apibundles, 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.
中文
亮点
- 新增
sub2apiOAuth 凭证 bundle 导入支持,已有账号导出可以更直接地导入 Clipal。 - 改进 Web UI providers 列表中的 token usage 展示,大数字会使用紧凑单位显示,并保留 hover 精确值。
变更内容
- 新增:
sub2apibundle 的 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
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, andcountTokensrequests. - 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/messagesand/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|claudeto 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 代理
generateContent、streamGenerateContent、countTokens请求。 - 新增: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
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
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
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 | custompolicy modes - Added: provider-level proxy overrides with explicit
default | direct | customsemantics instead of overloading a sharedinheritvalue - 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.Clientinstances 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-lintstaticcheck findings in telemetry code - Fixed: upgraded the repository Go toolchain baseline from
1.25.8to1.25.9, clearing the standard-librarygovulncheckfindings 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
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
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
overridesobject across config loading, Web API responses, YAML export, and runtime request rewriting.
What Changed
- Added: provider-level
overrides.modelsupport for OpenAI-compatible and Claude providers - Added: provider-specific nested overrides for OpenAI
reasoning_effortand Claudethinking_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/latestinstead 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和 Claudethinking_budget_tokens - 改进:加载配置时仍兼容旧的平铺 YAML 字段,并会归一化为新的嵌套 override 结构
- 改进:Web UI 的 provider 编辑表单和 provider 卡片展示已统一使用新的嵌套 override 格式
- 改进:快速开始文档改为链接到
releases/latest,不再手工写死稳定版号
致谢
- 感谢 @ThomasX-git 在本次发布周期内通过 PR #10 贡献了改动。
v0.11.7
v0.11.7
English
Highlights
- Fixed unified-ingress path handling so duplicated version segments such as
/clipal/v1/v1/responsesare normalized instead of failing with404 Invalid URL. - Aligned OpenCode takeover with the unified
/clipalingress to avoid generating configs that can trigger duplicate/v1path joins.
What Changed
- Fixed:
/clipalnow 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 providerbase_urlalready includes them - Improved: OpenCode takeover now writes
http://127.0.0.1:3333/clipalas the base URL instead of appending/v1 - Improved: client setup docs now explicitly document that OpenCode users should keep the base URL at
/clipalwithout 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
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
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_switchandlast_requestunder a dedicatedRecent activitysection - Improved: split provider status display into
Disabled,Cooling down,Unavailable, andRecovery 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_switch和last_request归到独立的最近活动区块 - 改进:Provider 状态展示细分为
已禁用、冷却中、不可用、恢复探测 - 改进:为 warning / recovery 类 provider 状态补充了更明确的 chip 视觉样式
- 修复:manual 模式卡片在 pinned provider 信息前不再出现多余分隔线
- 调整:删除已废弃的 scoped routing 前端辅助函数、文案和样式