Repository navigation
chore: sync main with upstream Wei-Shaw/sub2api - #2
Merged
Merged
Conversation
平台清单之外,后端还有几处用"国产厂商"或"国产厂商 ∪ OpenCode"表示 多协议供应商,新登记的供应商会被漏掉(例如上游模型同步直接报不支持)。 - 适用于全部多协议供应商的判断改用 IsMultiProtocolAPIKey:上游模型同步与 模型目录基址、Anthropic count_tokens 本地估算、HTML 403 豁免与累计计数、Claude 型号 计费候选过滤; - 新增 RoutesProtocolByInbound(profile 分流方式为按入站协议),替换原来 只针对国产厂商、实际描述"按入站协议分流"的判断:Responses 直转回退、 Responses 能力标记(含创建 / 更新后的异步探测调度)、上游计费探测的 adaptive 基址、Anthropic API Key 鉴权方式、OpenAI 输入 token 本地估算。 按模型分流的供应商(OpenCode)仍走 routesByModel 分支。 依赖各家额度 / 余额接口的逻辑(Coding Plan 窗口、余额不足冷却等)仍按平台 显式判断。现有平台上两组判断与改动前逐一相同(测试覆盖全部平台与非法值); 另测试临时登记的新供应商按分流方式分别获得国产厂商与 OpenCode 的行为。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
后端新增 BuildPlatformCatalog:平台清单加上多协议供应商 profile(接入模式、 各协议默认基址、内置分流规则),由测试 TestFrontendBuiltinPlatformCatalogInSync 写成前端内置清单 constants/platformCatalog.builtin.json 并校验一致。前端随后端 一同构建发布,直接使用该清单,取代 credentialsBuilder.ts 中需要手工同步的默认 端点与 OpenCode 分流规则。 改为读取平台清单: - 平台选项 CONCRETE_PLATFORM_OPTIONS / GROUP_PLATFORM_OPTIONS、平台展示名 platformLabel 以及各处 i18n 平台名的默认值; - 渠道定价平台与组合分组平台、用户平台额度、上游模型同步可用平台; - 多协议供应商判断、原生协议能力、各接入模式的默认端点与内置分流规则、 请求头覆写资格; - 系统默认额度与各登录方式默认额度:此前前端只列出 5 个平台(新增国产厂商 与 OpenCode 时漏改),后端一直支持全部平台,现在按清单列出全部平台。 没有专属界面的多协议供应商走通用表单:创建弹窗列出其按钮,接入模式、可选 协议、默认端点与分流规则都来自 profile(按模型分流的供应商显示分流规则编辑 器);编辑弹窗同样适用。未登记专属图标 / 配色的平台使用通用图标与中性配色。 平台按钮分三行:国际平台、国产厂商、多模型聚合平台(OpenCode 与平台清单中 登记的其他多协议供应商)。没有内置模型列表的供应商不预填模型白名单(此前 回落 Claude 模型列表,新账号只接受这些模型),API Key 输入框也不再显示 Claude 的占位符与说明。 AccountPlatform / GroupPlatform 类型放宽为"内置平台 | 任意字符串"。新登记 平台只需重新生成内置清单,无需修改前端代码。 另修正编辑弹窗两处遗漏 MiniMax 的默认端点回退(清空 Base URL 时曾回落到 Anthropic 默认地址)。 测试:credentialsBuilder 以改动前实现为基准,逐一比较全部平台 × 接入模式 × 协议的默认端点与各判断;替换清单后平台选项、展示名、额度列表随之更新;创建 / 编辑弹窗对走通用表单的供应商(按模型 / 按入站两种分流)提交的凭证。更新了 两个固定旧列表写法的测试。平台清单与账号表单的测试加入 CI 前端关键测试列表 (FRONTEND_CRITICAL_VITEST)。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
转发: - 平台清单与 provider profile 新增 command_code:按模型分流,Chat Completions / Responses 基址 https://api.commandcode.ai/provider/v1, Anthropic 基址 https://api.commandcode.ai/provider;内置规则 claude-* → Anthropic、gpt-* → Responses(也支持 Chat Completions)。 - 原生 Anthropic 端点的版本感知拼接改按分流方式判断,转发与连接测试共用 (Anthropic 基址带 /v1 时连接测试不再误报为配置错误)。 按模型的协议集合(模型支持入站协议时直通,免去协议转换): - 分流规则可带协议集合 protocols(首项为首选协议):入站协议在集合中时同 协议直通,否则走首选协议;只有一个协议时与原规则相同,OpenCode 行为不变。 - profile 新增 model_catalog:Command Code 的 /models 为每个模型给出 supported_endpoints。官方默认地址的目录按地址全进程共享,自定义上游按账号 隔离;目录请求的 UA 收敛与账号请求头覆写与转发一致。目录缓存 30 分钟、后台 刷新,失败退避 5 分钟;从未加载成功时首批请求最多等 2 秒,冷启动也按目录 分流。账号规则未命中的模型按目录取协议集合;目录不可用时回落内置规则(账号 未配置规则时)或 Chat Completions。 - 三个入站入口共用的 resolveUpstreamProtocol 增加目录参数。 - 前端分流规则编辑器可为每条规则勾选"也支持"的协议;提供模型目录的平台, 兜底行改为说明按上游模型列表选协议。 连接测试: - 按模型分流的平台共用一条测试路径(协议与网关同一判定,含模型目录;默认 测试模型取自 profile),不再落入 Claude 测试路径。 - 首个分支由"国产厂商"改为"按入站协议分流";adaptive 测试跳过 profile 未 提供的 Anthropic 端点。现有国产厂商行为不变。 - 连接测试是 OpenCode 专属分流入口的最后一个调用方,改走统一判定后删除 ResolveOpenCodeGoUpstreamProtocol、openCodeGoNativeProtocol,以及此前就只剩 测试使用的 OpenCodeGoModelProtocol;路由矩阵的旧行为基准改为测试内独立复述。 额度与余额(/alpha/whoami、billing/credits、billing/subscriptions、 usage/summary): - 额度探测写入 5 小时 / 每周窗口(限额套餐)与还原出的月度窗口,同时写入 积分余额;余额探测只取积分。仅对官方主机上的 API Key 账号生效。 - 订阅周期或本周期用量取数失败时保留上一次的月度快照,不当作没有月度窗口 清掉;窗口尚未开始(没有重置时间)时清掉上一个窗口的重置时间。 - whoami 取不到时探测整体失败,不按个人账户继续(组织账号会查到成员的个人 钱包,并据此按余额停调)。 - 阈值停调与定时检测纳入 Command Code;有充值积分时上游跳过窗口检查,窗口 快照不参与停调与冷却;积分低于余额阈值时临时停调。 - 上游计费探测的官方域名加入 commandcode.ai,不把 Key 发往官方主机上并不 存在的中转计费接口。 上游错误(依据 commandcode.ai/docs/troubleshooting/errors,按文案分类, 402 / 403 / 429 同样处理): - 5 小时 / 每周窗口用满:带原因的临时停调,到文案中的 "Resets in …",解析 不出时回落额度快照;充值积分不受窗口限制,额度 / 余额探测发现充值积分后 只解除这一类停调。 - 积分耗尽(含 usage_exceeded):可恢复的临时停调,积分恢复后由周期检测 解除,不再永久置为 error。 - 组织花费上限:文案指明模型("set for <模型>")且请求模型已知时只写模型级 限流;成员总额度或作用域不明时整个账号冷却,最长一小时。 - 普通频率限制走默认 429 逻辑,不再冷却到窗口重置点。 前端: - 账号列表显示额度窗口与积分余额,阈值设置增加 command_code。单元格可见性 改为按账号判定,与后端一致:只对官方主机上的 API Key 账号显示,自定义中转 显示占位符,不再每次打开列表都探测出一行报错。 - 使用官网的官方标志(圆角方块内镂空 ⌘);配色为中性灰(品牌黑色已由 Grok 使用)。 测试基准中原先用作"仅服务端登记"示例的 command_code 改为虚构的 acme_router; 新增的前端测试加入 CI 前端关键测试列表。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Cline API(https://api.cline.bot/api/v1)是 OpenAI 兼容的多模型聚合端点, 只提供 Chat Completions(Cline 自己的客户端同样只走该端点),模型名带厂商 前缀。同一个 API Key 下有两个互不影响的额度来源,由模型名决定扣哪一边: cline-pass/* 走 ClinePass 订阅(5 小时 / 7 天 / 30 天滚动上限),其余付费 模型扣账户积分;cline-free/* 免费模型只有逐模型的每日额度。 转发: - 平台清单与 provider profile 新增 cline:按入站协议分流,只登记 Chat Completions 端点,Responses / Anthropic 入站由现有转换链转为 Chat Completions,无需新增转发代码。 - 只有一个接入模式,不需要选择账号类型。 - 连接测试未指定模型时使用 profile 默认模型(固定 Chat Completions 的账号 此前落到不带厂商前缀的通用默认模型);订阅了 ClinePass 的账号改用订阅 模型,不消耗积分,ClinePass 冷却中时仍用按量模型。 用量与余额:API Key 调 /api/v1/users/me/plan/usage-limits(三档窗口的已用 百分比与重置时间,未订阅时 404)与 /api/v1/users/me、/users/{id}/balance (余额单位为百万分之一积分,1 积分 = 1 美元),兼容 {success, data} 信封, 只查官方主机。复用额度探测与周期检测:账号列表显示 ClinePass 窗口与积分 余额;窗口用满时 ClinePass 模型冷却到重置时间,未订阅时不调度 ClinePass 模型,积分低于阈值时冷却付费模型;数据显示恢复后自动解除,但只解除探测能 证明已恢复的原因(窗口用满、未订阅、积分不足),组织账户、所需订阅档位、推理 额度与花费上限的冷却到期后由请求重新确认。周期检测中走账号接口探测的平台 改为登记表(平台、支持判定、检测函数一一对应),按账号所属平台分派。 上游错误(依据 docs.cline.bot/api/errors 与 Cline 客户端的错误分类,按文案 识别):积分不足(含其他 402)、组织花费上限、推理额度上限、ClinePass 超限、 未订阅 ClinePass / 组织账户、免费模型每日额度。两边的超限只冷却请求模型所属 的一边(模型级冷却键 cline:pass / cline:credits,调度按请求模型检查),不停 整个账号;免费模型只限该模型,冷却到文案中的 "try again in …"。ClinePass 超限冷却到快照中对应窗口的重置时间,没有快照时 5 小时窗口 1 小时、7 天 6 小时、30 天 24 小时。普通频率限制走默认 429 逻辑。402 的冷却写入失败时 也不落入默认分支永久置 error(探测只覆盖激活账号,置 error 后无法自动恢复)。 余额类冷却时长抽为 cnBalanceCheckCooldown 共用。 上游计费探测的官方域名加入 cline.bot。 前端:官方标志(机器人头像)、violet 配色(品牌紫)、复用额度与余额单元格 (同样只对官方主机上的 API Key 账号显示);接入模式展示名抽为共用函数,编辑 弹窗不再显示原始模式值。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
feat(platform): 平台与多协议供应商改为数据驱动,并接入 Command Code 与 Cline
…_call ChatGPT's Codex endpoint now rejects requests whose input replays a hosted web_search_call item unless tools declares web_search, failing the stream with "response protection is unavailable". Codex local context compaction sends the full history with tools:[], so every compaction after a web search fails and the session gets stuck in a reconnect loop. For OAuth transform, passthrough and WebSocket paths, append a cached-only web_search tool when the history contains web_search_call and no web_search tool is declared. When the caller offered no tools, pin tool_choice to "none" so the injected tool cannot be invoked. The /responses/compact wire shape is left untouched. Fixes Wei-Shaw#7927
Responses Lite rejects hosted tools at the top level ("responses Lite does
not support top-level tool type web_search"), so Lite requests now carry the
injected web_search tool in an input additional_tools item: extend the
caller's first additional_tools item, or insert one before a trailing
compaction_trigger so the v2 compaction wire keeps the trigger last.
The HTTP passthrough path also runs the shared compatibility normalizer on
/responses/compact; thread the compact flag through so that endpoint is
left untouched, and drop the now-redundant call from the passthrough OAuth
body normalizer.
…web-search-history-tool fix(openai): declare web_search when OAuth history replays web_search_call
- groups 新增 i18n JSONB 列(迁移 242):语言代码 -> {name, description},只存译文;
name/description 原列语义不变,仍用于唯一性校验、搜索与各类日志
- 用户侧接口由后端按请求语言输出:取 Accept-Language 中权重最高的一项,先按完整
语言代码、再按主语言匹配;该语言有译文的字段换成译文,否则保持原字段,且不再带出
译文表。覆盖密钥、可用分组、订阅(含进度与汇总)、兑换、使用记录、可用渠道、
模型广场、套餐列表
- 管理端接口一律返回原字段;分组管理接口额外带 i18n 供编辑
- 创建/编辑分组:名称、描述的标题行右侧新增语言下拉,同一个输入框在默认内容与各语言
版本之间切换;语种跟随前端 availableLocales
- 管理端写入:创建/更新接受 i18n(更新时缺省不修改,传入则整体替换),校验语言代码
形态与名称长度并丢弃空译文;简易模式同样放行;复制分组只带走描述译文
- 切换界面语言后整页刷新,让已加载的数据换成新语言;模型广场响应加
Vary: Accept-Language
- 网关路径,以及只带 group_name 字符串的统计、错误记录出口不做本地化
OAuth passthrough forces stream=true for the ChatGPT internal API and then overwrote reqStream from the rewritten body, so clients sending stream=false received the raw upstream SSE stream. Keep the client's original stream flag (compact requests stay non-streaming) so the non-streaming branch aggregates SSE into a single Responses object. Also set Content-Type explicitly when the SSE-to-JSON handlers write the aggregated body: the upstream text/event-stream header was already copied into the response and gin's c.Data does not override an existing Content-Type. Applies to both passthrough and non-passthrough paths. Fixes Wei-Shaw#7978
When a non-streaming /v1/responses request is aggregated from upstream SSE and the stream ends with response.incomplete (e.g. max_output_tokens) or response.cancelled instead of response.completed, the SSE-to-JSON handlers fell back to relaying the raw SSE body. Use the terminal event's response object as the final JSON (keeping status/incomplete_details) in both handlePassthroughSSEToJSON and handleSSEToJSON. Usage is still recorded. extractCodexFinalResponse is unchanged. Refs Wei-Shaw#7978
…udit fix(grok): 完善模型目录来源诊断与原始响应模型审计
…short-cooldown fix(ratelimit): 国产 Coding Plan 的频率型 429 改用秒级冷却,不再冷却到 5h 窗口结束
…-utf16 fix(claude): align cc_version suffix with JavaScript UTF-16 indexing
fix(gemini): count fileData image outputs for billing
…epseek-pro-pricing fix(billing): retain DeepSeek V4 Pro pricing after September 14
…cing fix(model-plaza): 修复模型广场定价被覆盖的问题
…-tokens fix(usage): DeepSeek prompt_cache_hit_tokens 计为缓存读取
…loper-role fix(gateway): 修复 OpenCode 转发 DeepSeek 时的 developer 角色 422
…fset-overflow fix(pagination): keep page offsets from overflowing int
…-part-limit fix(images): reject oversized multipart uploads instead of truncating them
…d-function-call fix(antigravity): 非流式畸形工具调用返回错误而非空成功响应
…pdate The admin channel editor rendered and submitted only the anthropic dimension of features_config.web_search_emulation, while UpdateChannel replaces features_config as a whole block. Saving a channel from the UI therefore erased the openai / command_code / ... dimensions written via the API, silently disabling web search emulation for those platforms until they were written again. Backend: merge the key per platform dimension on update (request dimensions win, missing dimensions are inherited; a missing key inherits the whole value so clients unaware of the feature cannot wipe it; an explicit empty object still clears). Other features_config keys keep the historical whole-block replacement. Frontend: render and submit every platform in a whitelist that mirrors the backend account-level whitelist, including explicit false for disabled sections, so the stored value cannot go stale. Tests: merge unit tests + applyUpdateInput wiring tests (backend), and a source-contract spec for the channel editor (frontend). Reverting either side makes the new tests fail.
fix(admin): 管理员保护校验返回 400 而不是 500
golangci-lint (errcheck, check-type-assertions) flags single-value type assertions; switch to the two-value form so the assertions stay explicit.
govulncheck flags html.Parse quadratic text-node coalescing reached via parseOllamaCloudUsageHTML. Bump x/net (and its x/* siblings pulled by go get).
- 原先 /v1beta/models 与 /v1beta/models/{model} 从分组中按优先级挑一个账号透传其上游列表;
分组由多个第三方中转 Key 组成且各配 model_mapping 时,结果只反映选中账号的上游,
与 /v1/models(合并各账号映射)不一致,下游"同步上游支持的模型"会拿到残缺或不可路由的模型
- 分组内每个可调度 Gemini 账号都有生效映射时,列表返回映射键并集(并上混合调度
antigravity 账号的 Gemini 模型),分组白名单按 FilterForListing 与 /v1/models 同口径过滤,不再请求上游
- 详情按同一来源判断:键末尾 * 按前缀匹配,customtools 别名按请求路径的规则归一,未覆盖返回 404
- 有账号未配置映射(接受任意模型)或查询出错时,保持原选号透传逻辑
- 账号白名单"同步最新支持模型"、/v1/models 与 /v1beta/models 的兜底列表共用的三处 Gemini 默认列表 (前端 geminiModels、geminicli.DefaultModels、gemini.DefaultModels)统一为同一份 17 个现役模型: 3.x 生图、3-flash、3.1-pro-preview(-customtools)、3.1/3.5 flash(-lite)、3.6/3.7/3.8-flash、4-argon; 移除 2.0/2.5 系列与 3-pro-preview - 连接测试默认模型由 gemini-2.0-flash 改为 gemini-3.5-flash;Google One 账号仍用其保守模型集 - 前端下拉候选总表补入 antigravity 模型并去重,antigravity 账号白名单下拉不再只显示与其他平台重叠的条目 - 生图模型识别补上 gemini-3.1-flash-lite-image
…ation-dimensions fix(channels): 渠道保存不再覆盖 web_search_emulation 的平台维度
fix(gemini): /v1beta/models 按分组声明的模型应答,并刷新 Gemini 默认模型列表
…-retries-config feat(gemini): 同账号重试次数改为可配置 gateway.max_same_account_retries_gemini
…ool-retry fix(gemini): 绑定显式缓存的请求在池模式上游网关账号上按配置同账号重试
…singleflight-recheck fix(models): 模型列表刷新进入 singleflight 后复查缓存,避免并发冷启动重复请求上游
…h non-stream The ChatGPT OAuth upstream may answer with SSE but omit the Content-Type header. Fall back to bodyHasSSEFraming for OAuth accounts in handleNonStreamingResponsePassthrough, matching handleNonStreamingResponse, and add a regression test covering both passthrough and non-passthrough. Co-authored-by: SipengXie2024 <184713193+SipengXie2024@users.noreply.github.com>
…non-stream-7978 fix(openai): return JSON for non-stream OAuth passthrough /v1/responses
Merge upstream/main (7,786 commits, Go 1.27.3, golang.org/x/net v0.62.0) into the fork. This clears the govulncheck and pnpm-audit failures on pull requests, which came from the fork's outdated toolchain and deps. Both fork-only changes are kept and ported to the new upstream APIs: - Self-signed Redis TLS (#2): keep TLSSkipVerify next to upstream's new Redis Username in setup, config and the setup wizard; drop the Redis TLS toggle that upstream still renders inside the database step; move the tlsSkipVerify strings into the split i18n files (locales/{en,zh}/landing.ts). - Bedrock compat routing (#3): pass upstream's new ccCompat=false to PrepareBedrockRequestBodyWithTokens (compat bodies are generated, not Claude Code), drop the removed includeUsage argument, pass clientToolMapping to the Responses handlers, and bill reasoning effort the same way as upstream's main path (output_config.effort of the converted body). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Thank you for your contribution! Before we can merge this PR, we need you all to sign our Contributor License Agreement (CLA). To sign, please reply with the following comment:
You only need to sign once — it will be valid for all your future contributions to this project. I have read the CLA Document and I hereby sign the CLA 0 out of 15 committers have signed the CLA. |
vue-i18n 9.x has no patched release for GHSA-83rm-6c8r-g728, which fails the frontend-security pnpm-audit gate on every PR. Upgrade vue-i18n and @intlify/message-compiler to 11.4.14 (same fix as vikadata/moonrouter#52): - require Node >= 22 and run CI/release on Node 24 - update SubscriptionPlanCard.spec.ts, whose key-echo assertions relied on vue-i18n 9's runtime-only test behaviour Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Every PR on this fork fails
backend-securityandfrontend-security. The fork is 7,786 commits behind upstream Wei-Shaw/sub2api and still on Go 1.26.3 withgolang.org/x/netv0.53.0. govulncheck reports 22 reachable vulnerabilities, and pnpm audit reports 20+ high-severity advisories with no exceptions (plus twoxlsxexceptions that expired on 2026-07-06). Upstream has already fixed these (Go 1.27.3,x/netv0.62.0).Fix
Merge
upstream/mainintomainand keep the fork's two own commits. Neither of them exists upstream:TLSSkipVerifynext to upstream's new RedisUsernameinsetup/handler.go,setup/setup.go, the config anddocker-compose.dev.yml. Upstream still renders a Redis TLS toggle inside the database step of the setup wizard; chore: sync main with upstream Wei-Shaw/sub2api #2 removed it, and it stays removed. ThetlsSkipVerifystrings moved into the new split i18n files (locales/{en,zh}/landing.ts), because upstream deleteden.ts/zh.ts.PrepareBedrockRequestBodyWithTokensgained accCompatflag. It is passed asfalse, the same as upstream's own Bedrock path, because compat-endpoint bodies are generated by the converter, not sent by Claude Code.handleCCStreamingFromAnthropiclost itsincludeUsageargument.clientToolMapping.:=redeclared). The Bedrock branch now bills it the same way as upstream's main path, fromoutput_config.effortof the converted body.Update: vue-i18n security fix (2nd commit)
After this PR was opened, GHSA-83rm-6c8r-g728 (vue-i18n) was published and failed
frontend-security. vue-i18n 9.x has no patched release, so vue-i18n and@intlify/message-compilerare upgraded to 11.4.14, the same fix as vikadata/moonrouter#52. Node is now >= 22 and CI runs on Node 24.SubscriptionPlanCard.spec.tsis updated for vue-i18n 11's test behaviour.vue-tscpass.<i18n-t>usage guide), purchase and admin settings all render translated text, with no raw keys and no page errors.backend-securityandfrontend-securityare now ✅.cla-checkstill fails because this fork has nocla-signaturesbranch; that is a repository-config issue, not code.Validation
Method: every CI job reproduced locally on this branch with the CI tool versions, plus real-service checks.
govulncheck ./...(security-scan)tools/check_pnpm_audit_exceptions.py(security-scan)pnpm install --frozen-lockfile(pnpm 9, as in CI)go test -tags=integration ./...go test -tags=unit ./...TestValidateCreateParams_CheckModeMatrix/probe_requires_api_keyhit a 5s local DNS timeout. It passes 3/3 when run alone, the files are identical to upstream, and it also passes alone on pureupstream/main.lint:check,vue-tsc, critical vitest (make test-frontend)apple-container-test.shfails locally withstat: cannot read file system information for '%Lp'. It fails identically on pureupstream/main, so it is local-environment only (GNU vs BSDstat).TestGatewayService_ForwardAs{ChatCompletions,Responses}_BedrockAPIKeyUsesBedrockRuntimeReal Redis with a self-signed TLS certificate (
openssl s_client: "Verify return code: 18 (self-signed certificate)"):POST /setup/test-redis,tls_skip_verify=truetls_skip_verify=falsex509: cannot validate certificateAUTO_SETUPwithREDIS_ENABLE_TLS=true REDIS_TLS_SKIP_VERIFY=true/health200,config.yamlhasenable_tls: trueandtls_skip_verify: true, and the app wrote 229 keys to the TLS RedisKnown risks / not covered
cla-checkwill still fail until the fork's CLA workflow has acla-signaturesbranch, or until the workflow is removed for this internal fork. This commit's author email is the GitHub noreply address ofmr-kelly, so the bot can at least identify the signer.Screenshots
Story: an operator installs Sub2API against a Redis with a self-signed TLS certificate
After merging
The Creem PR #1 will be rebased onto the new
mainand re-verified, because upstream reworked the payment UI.🤖 Generated with Claude Code