Releases: ZyphrZero/kiro.rs
Kiro.rs 0.6.5
主题:Claude Code 字面工具调用容错 + 退化复读熔断。这一版聚焦 Anthropic 兼容层在上游退化输出下的稳定性:当 Claude Code 场景中本应结构化返回的工具调用泄漏成字面 <invoke> 文本时,中转层会在严格边界内恢复为真实 tool_use;同时新增异常引导词复读熔断,避免 call / count / card 等垃圾文本刷屏、耗尽输出预算或污染会话历史。
✨ 新功能 — 来自社区贡献
感谢以下 PR 贡献者 🙏
- 字面
<invoke>工具调用泄漏容错(PR #15 @xiaojiou176):当上游把<invoke name="...">...</invoke>作为普通文本输出时,流式路径会在行首、非代码围栏、工具名已声明的前提下恢复为结构化tool_use,避免客户端看到原始 XML 或漏执行真实工具调用。web_search agentic loop 复用同一嗅探逻辑,但web_search本身仍作为内部搜索处理,不会作为 raw clienttool_use暴露给宿主。 - 退化 stray token 复读熔断(PR #16 @xiaojiou176):流式文本出口会检测
call/count/card等引导词的连续独占行复读,超过阈值后丢弃本轮后续文本,避免上游退化输出刷屏和耗尽max_tokens。非流式与 web_search 路径也会在<invoke>嗅探前折叠同类复读洪水,避免垃圾文本进入最终响应或后续会话历史。
🛠 修复
- 避免重复执行同一工具调用(PR #15 @xiaojiou176):若退化模型同时返回文本泄漏和结构化
tool_use,会按工具名与规范化 input 去重,防止客户端收到两个相同调用并重复执行。超长工具名被缩短发送给上游后,泄漏恢复路径会识别短名并还原为客户端原始工具名。 - 保留 stray token 剥离前的换行(PR #16 @xiaojiou176):剥离
call/count/card独占行时保留前一行换行,避免把叙述文本和后续<invoke>压到同一行而漏判真实工具调用。
⚡ 优化
- 减少 invoke 嗅探缓冲复制(PR #16 @xiaojiou176):
drain_invoke_sniff_buffer改为一次性取出本地 buffer 处理,避免退化大缓冲下每轮 clone 带来的额外开销。
Docker image:
zyphrzero/kiro-rs:0.6.5
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.6.4
主题:入口 Key 级用量分析 + 请求链路入口来源追踪 + Admin UI 移动端体验优化。这一版把概览页从固定时间窗扩展为可按日期、粒度与入口 Key 过滤的分析面板;请求日志和凭据失败详情会区分“管理员API密钥”与已分发的客户端 Key;同时重排后台顶栏工具、统计图表、凭据卡片和表格在移动端的显示,减少窄屏溢出与操作拥挤。
✨ 新功能 — 入口 Key 级用量分析
- 概览页支持入口 Key 筛选:统计页新增“全部入口 Key / 管理员API密钥 / 指定客户端 Key”筛选,调用量、Token、Credit、模型分布和上游凭据分布可按入口来源查看,方便定位某个客户端 Key 的成本与错误情况。
- 支持自定义日期范围与统计粒度:统计接口新增
startDate/endDate/granularity参数,前端可在预设 24h / 7d / 30d 之外选择自定义日期,并在按小时 / 按天聚合之间切换。 - 后端聚合按 Key 维度保留明细:
UsageAggregator新增按key_id、key_id + model、key_id + credential的桶内聚合,/stats/timeseries、/stats/by-model、/stats/by-credential均可用keyId过滤;非法 range、granularity、日期和 keyId 会返回明确的 400 错误。
✨ 改进 — 请求日志与失败详情可追踪入口 Key
- Trace 记录入口 Key 类型:请求链路新增
keySource,区分管理员API密钥与客户端 Key;鉴权中间件会在请求上下文中标记来源,trace 入库时持久化该字段。 - 请求日志显示入口 Key:请求日志表格新增“入口 Key”列,客户端 Key 会显示名称(缺失时回退 id),管理员业务 Key 显示为“管理员API密钥”;展开链路仍保留最终凭据与每跳尝试详情。
- 凭据失败详情补充入口来源:单个凭据的失败日志行现在同步显示触发该失败的入口 Key,便于区分是哪个客户端或管理员密钥导致某个凭据累计失败。
🎨 改进 — Admin UI 全局工具与移动端布局
- 顶栏工具全局化:负载均衡切换、账号级风控故障转移、刷新、镜像在线更新和密钥管理从凭据页抽到全局顶栏,概览、凭据、客户端 Key、请求日志页面都可直接访问;移动端顶栏收敛为“更多操作”菜单。
- 凭据管理移动端重排:凭据页统计卡压缩为窄屏可读布局,工具栏改为两列按钮网格;凭据卡片增加长文本截断、单列信息行、余额面板稳定三列和底部操作区两行布局,避免小屏横向滚动和按钮挤压。
- 概览图表移动端适配:趋势图、模型饼图、凭据柱状图改用响应式高度与更紧凑边距,图例和坐标轴在窄屏下减少占用;趋势图系列名改为中文,图表空态高度同步收窄。
- 表格窄屏可横向浏览:客户端 Key 表格和请求日志表格设置稳定最小宽度、单行表头和单元格截断,避免列内容在移动端被压到不可读。
🛠 修复 — 登录与文案细节
- Social 无痕登录链接复制更可靠:复制登录链接前检查 Clipboard 权限与安全上下文;浏览器拒绝写入剪贴板时会选中链接并提示用户手动
Ctrl+C,避免无痕登录流程卡在“复制失败”。 - 统一密钥命名:后台文案将管理面板登录用 Key 统一为“登录API密钥”,将
/v1/*客户端调用用 Key 统一为“管理员API密钥”,减少 Admin API Key / 业务 API Key 命名混用。
Docker image:
zyphrzero/kiro-rs:0.6.4
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.6.3
主题:Claude Code Thinking 兼容 + Kiro 原生 reasoning 事件 + 后台弹窗表单体验修复。这一版聚焦暂存区中的协议兼容与 Admin UI 表单体验:转换层按上游模型能力处理 Opus / Sonnet Thinking 请求,流式 / 非流式路径支持 Kiro 原生 reasoningContentEvent,后台管理页修复导入 / 登录类弹窗的焦点裁切、标签间距和 textarea 拖拽卡顿问题。
🛠 修复 — Claude Code / Opus 与 Sonnet Thinking 兼容
- Opus / Sonnet Thinking 兼容:Claude Code 可能在普通模型名或
-thinking模型下发送thinking/output_config;转换层现在按上游模型能力决定是否发送additionalModelRequestFields,不再因为开启 thinking 或客户端携带output_config就直接透传不受支持的字段,避免additionalModelRequestFields is not supported for this model。 - 收窄
output_config.effort透传范围:additionalModelRequestFields.output_config只在已知可接受的 Opus 4.6 adaptive thinking 路径上传递;Opus 4.6 非 adaptive thinking、Opus 4.7 / 4.8、Sonnet 系列与其它模型会显式跳过该字段。
✨ 新功能 — Kiro 原生 reasoning 事件
- 支持
reasoningContentEvent:新增 Kiro 原生 reasoning 事件解析,流式响应会把text转为 Anthropicthinking_delta、把signature转为signature_delta、把redactedContent转为redacted_thinking。 - 非流式响应保留原生 thinking:非流式路径会优先使用上游原生 thinking / signature / redacted content 组装 Anthropic content block;没有原生 reasoning 时仍保留旧的
<thinking>...</thinking>文本提取兼容路径。 - thinking disabled 明确降级:请求未启用 thinking 时,原生 reasoning 明文会作为普通 text 输出,不输出签名或 redacted thinking,避免客户端收到未请求的 thinking block。
- token 估算覆盖 thinking 内容:输出 token 估算现在计入
thinkingblock,并为redacted_thinking计入固定开销,减少用量统计漏算。 - 补充边界测试与真实 Claude Code 验证:新增请求转换、流式顺序、非流式内容组装、redacted thinking、signature-only、thinking disabled 降级和 token 估算测试;真实 Claude Code 请求验证普通 Sonnet 4.5 与
-thinking模型均可返回 thinking/signature/text 合法事件序列。
🎨 改进 — 后台弹窗表单体验
- 修复表单控件焦点态裁切 / 贴边:
Input/Select/Textarea与按钮焦点环改为内嵌显示,避免在 Dialog 滚动区域、KAM 导入、批量导入、重新登录、重新导入、远程登录回调和代理池批量导入等窗口中被容器边缘裁掉。 - 恢复标签与控件垂直间距:普通
label改为块级显示,修复space-y-*不能作用于 inline label 导致标签和输入框 / 下拉框过近的问题,同时保留 checkbox / switch 这类 flex label 布局。 - 改善 textarea 拖拽调整高度体验:textarea 不再使用
transition-all过渡高度,只保留边框、背景和阴影过渡;拖动改变高度会立即跟手,KAM 导入、批量导入、Token 重新导入、远程登录回调和代理池批量导入中的原生 textarea 样式同步统一。
Docker image:
zyphrzero/kiro-rs:0.6.3
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.6.2
主题:Builder ID/free 流式对话 profileArn 400 修复 + 后台前端依赖清理。上一版为规避占位符 ARN 的 403 风险,在流式请求中剥离了 BuilderID 占位 profileArn;但 q.* /generateAssistantResponse 对 Builder ID/free 账号仍强制要求该字段,调用 claude-sonnet-4.5 等模型会报 400 "profileArn is required for this request."。这一版恢复纯 Builder ID/free 流式请求体的占位 ARN,同时保留 Enterprise / IdC 账号解析真实 ARN 的路径。
🛠 修复 — Builder ID/free 流式对话 profileArn 400
- 恢复 Builder ID 占位 profileArn 注入:
KiroCredentials::streaming_profile_arn()对 OAuth Builder ID/free 凭据会原样返回显式占位 ARN;未填充时按官方 IDE 行为回退到 Builder ID 默认占位 ARN,避免流式端点因缺少profileArn直接返回 400。 - 保留 Enterprise / IdC 真实 ARN 优先级:发起流式请求前仍会通过
resolve_profile_arn_for尝试解析并回填 Enterprise / IdC 真实profileArn;解析成功后使用真实 ARN,纯 Builder ID 无 Enterprise profile 时才回退占位 ARN。 - 补充回归测试:新增断言覆盖显式 Builder ID 占位 ARN、未填充 Builder ID/free 凭据、Social 固定 ARN、真实 ARN 与 API Key 凭据的流式
profileArn行为。
🧹 清理 — 后台前端依赖
- 移除未使用的
@radix-ui/react-select依赖:后台下拉框已在 0.6.1 改为基于DropdownMenu的实现,本版清理残留依赖,避免前端依赖树继续携带未使用包。
Docker image:
zyphrzero/kiro-rs:0.6.2
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.6.1
主题:缓存命中/创建 token 精确计量 + 流式对话 profileArn 占位符 403 修复 + 后台前端组件统一。上一版把流式端点改成始终发送 profileArn(含 BuilderID 占位符),但占位符指向调用者无权访问的 profile,仍会被上游以 403 "User is not authorized to make this call" 拒绝;这一版改为只发送真实 / Social 共享 ARN。同时把中转层缓存计量从粗略估算重写为按前缀链匹配 + 互斥口径分摊的精确计量,请求日志新增 token 列;后台前端把原生确认框 / 下拉框统一为风格一致的组件。
🛠 修复 — 流式对话 profileArn 占位符 403
- 占位符 ARN 不再发送:
KiroCredentials::streaming_profile_arn()对 BuilderID 占位符(及未填充 profileArn 的 BuilderID 账号)返回None。占位符指向调用者无权访问的 profile,发送会触发403 "User is not authorized to make this call";该端点本就不强制此字段。Enterprise / IdC 的真实 ARN 已由resolve_profile_arn_for回填,与 Social 共享 ARN 一并原样发送。
✨ 改进 — 缓存命中 / 创建 token 精确计量
- 前缀链匹配替代锚点:缓存命中模拟改用「最长公共前缀」链式匹配,消除
tool_result(role=user)导致的「倒数第二个 user」锚点漂移,跨轮对话命中稳定。 - 会话隔离:按
metadata的 user / session(缺失时回退 client key id)派生隔离种子,不同会话不会互相串缓存。 - 互斥口径分摊:
input/cache_creation/cache_read按比例分摊,保证三者互斥且总和等于 total,不再重复计入被缓存覆盖的前缀。 - token 估算与签名解耦:哈希用签名、计量用原文,去除签名噪声对 token 数的污染。
- 图片 token 估算:按
(宽 × 高) / 750估算(长边封顶 1568px),图片块的媒体类型 + 数据纳入缓存哈希。 - 请求日志记录 token:
traces.db新增 input / output / cache_creation / cache_read 列(幂等迁移),日志接口返回并合计 totalTokens。 - 模块
prompt_cache更名为cache_metering,持久化文件相应更名。
✨ 改进 — 后台前端组件统一
- 统一二次确认弹窗:新增
useConfirm/ConfirmProvider,全站确认操作改用风格一致的弹窗替代原生confirm()。 - 重写下拉框:以
DropdownMenu(modal={false})重写Select,替换原生select与 radixSelect。后者 Content 硬编码disableOutsidePointerEvents,经DismissableLayer给body上pointer-events锁,嵌套在 Dialog 内同时关闭时卸载顺序竞态会把 body 误留为none导致整页不可点;non-modal 分支不触碰 body 锁,从源头规避。下拉默认值改为从 children 静态推导,修复菜单未打开时默认值显示为空。
Docker image:
zyphrzero/kiro-rs:0.6.1
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.6.0
主题:Enterprise / IAM Identity Center 凭据全链路打通 + 流式对话 profileArn 修复 + 登录体验对齐官方 IDE。此前导入或登录企业(Enterprise)IdC 账号后,获取订阅/用量会报 403 {"message":"Invalid token"},且发起对话会报 400 profileArn is required / 403 bearer token invalid——根因是这类账号在请求里带了 BuilderID 占位 profileArn 或缺失真实 profileArn。这一版定位并修复了用量查询与流式对话两条链路,同时把添加凭据 / 登录 / 导出的整体行为与官方 IDE / 账号管理器对齐,并新增 Enterprise 登录入口与一批凭据管理体验改进。
🛠 修复 — 流式对话 400「profileArn is required」/ 403「bearer token invalid」
新版上游对流式端点(generateAssistantResponse)强制要求请求体携带 profileArn,且校验其与 token 身份匹配。表现为对话直接失败(新模型如 claude-opus-4-8-thinking 同样命中):
- 不带 profileArn →
400 {"message":"profileArn is required for this request."}; - 带 BuilderID 占位符 ARN →
403 {"message":"The bearer token included in the request is invalid."}。
按官方 Kiro IDE 的行为分两类账号修复:
- 流式端点始终发送 profileArn(含 BuilderID 占位符):新增
KiroCredentials::streaming_profile_arn(),流式端点不再像用量类接口那样剥离占位符。纯 BuilderID 账号的占位符与其 token 身份匹配,可正常使用。 - Enterprise / IdC 账号解析并回填真实 profileArn:这类账号的占位符与 token 不匹配(403),必须使用真实 profileArn——而真实 ARN 既不是占位符也不在 OIDC 刷新响应里返回。新增
ListAvailableProfiles上游调用(AWS JSON 1.0,targetAmazonCodeWhispererService.ListAvailableProfiles,端点q.us-east-1/q.eu-central-1)与MultiTokenManager::resolve_profile_arn_for():首次请求时按需解析真实 profileArn、写回凭据并持久化,之后直接命中。无 Enterprise profile 的账号(纯 BuilderID)进程内只查询一次,回退到占位符逻辑。 - 用量类接口(getUsageLimits / ListAvailableModels / setUserPreference)继续使用
effective_profile_arn()(跳过占位符);回填真实 ARN 后它们也会带上真实 profileArn,行为更贴近官方 IDE。
🛠 修复 — Enterprise/IdC 用量查询 403
- 跳过占位 profileArn:新增
KiroCredentials::effective_profile_arn()与is_placeholder_profile_arn()——只向上游发送真实 ARN(含 Social 共享 ARN),跳过BUILDER_ID_PROFILE_ARN占位符。BuilderID / Enterprise / IdC 账号本就没有可用 profileArn,发送占位符会被上游以 403 "Invalid token" 拒绝。getUsageLimits/ListAvailableModels/setUserPreference以及流式端点(ide/cli)的请求体与x-amzn-kiro-profile-arn头全部改用它。 - 用量类接口固定使用兼容版本:
getUsageLimits/ListAvailableModels/setUserPreference固定以0.9.2作为KiroIDE-<version>标识——新版上游对这些接口强制要求 profileArn,对无 profileArn 的 Enterprise/IdC 账号会失败;该版本下无需 profileArn 即可返回订阅与用量。 - 区域映射 + 403 回退:上述接口仅在
us-east-1/eu-central-1两个端点提供服务,依据凭据 SSO 区域选择主端点(eu-*→ eu-central-1,其余 → us-east-1),主端点 403 时自动回退到另一个端点。 - 解析并回填邮箱:
getUsageLimits响应的userInfo.email现在会被解析,凭据无邮箱时自动回填。
✨ 新功能 — Kiro IDE 版本自动获取
- 新增
src/kiro/kiro_version.rs:启动时从官方稳定版元数据端点(prod.download.desktop.kiro.dev/stable/metadata-linux-x64-stable.json的currentRelease)拉取当前 Kiro IDE 版本,进程内缓存 + 每 12h 后台刷新,失败回退到config.kiroVersion。流式端点 User-Agent 与 Social 刷新随真实版本走,替代写死的版本号。
✨ 新功能 — Enterprise 登录入口与登录体验
- 新增 Enterprise (IAM Identity Center) 登录入口:仅显示 SSO Start URL(必填)+ SSO 区域,与官方交互一致;登录成功的凭据带
provider=Enterprise、startUrl、region。 - SSO 区域可选 / 自定义:登录对话框区域字段改为「分组下拉(US / Europe / Asia Pacific / Other 常用区域)+ 始终可输入的自定义文本框」。
- AWS SSO 与 Enterprise 均支持无痕登录:勾选后复制验证链接,由用户在无痕 / 隐身窗口打开,避免与已登录的 AWS 账号串号。
- IdC 登录对齐官方:注册客户端使用 5 个 codewhisperer 作用域并带上
issuerUrl(Builder ID 为默认 Start URL,Enterprise 为组织 Start URL)。 - 新增
startUrl字段:凭据模型新增 SSO Start URL 字段,登录 / 导入 / 导出全链路保留。
✨ 改进 — 凭据管理体验
- 添加 / 登录成功后自动刷新余额:添加凭据、Social 登录、IdC/Enterprise 登录成功后主动拉取一次余额(含订阅等级、邮箱)并写入缓存,新凭据卡片立即显示余额。
- 凭据标签按登录方式显示:卡片身份标签根据
provider细分为 GitHub / Google / Builder ID / Enterprise / IAM SSO / API Key,不再统一显示 Social / IdC。 - 删除登录与添加凭据中的优先级输入项:保留卡片上对已有凭据的优先级编辑与拖拽排序。
- 无需先停用即可直接删除凭据:单个与批量删除都不再要求凭据处于禁用状态(仍有二次确认)。
- 一键超额遇 403 友好提示:开启超额(一键 / 单条)命中 403 / 权限不足时统一提示「请联系您的组织管理员以获取支持」。
- 导出格式调整:凭据导出改为嵌套
Account结构(凭据收进credentials子对象、expiresAt毫秒时间戳、含顶层groups/tags数组),便于第三方账号管理工具直接重新导入。
Docker image:
zyphrzero/kiro-rs:0.6.0
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.5.9
主题:客户端行为纠偏 + 按凭据拉取上游真实可用模型。此前客户端传入的畸形请求体(tool_use/tool_result 不配对等)会导致上游 Bedrock 返回 503,触发重试风暴;批量工具混入 native web_search 也缺少端到端 handler。模型列表方面,免费凭据无法用 Opus 但此前无可见性——现在可按凭据实时查看上游订阅的真实可用模型。
✨ 新功能
- 凭据级上游模型查询(PR #12 @ZyphrZero):新增
GET /api/admin/credentials/{id}/models接口,实时查询上游ListAvailableModelsAPI 获取该凭据当前可用模型(随订阅等级变化,FREE 不含 Opus)。在凭据卡片「更多操作」弹出独立弹窗,展示模型名、ID、最大输入 token 数。后端整条链路对标现有"余额"功能,新增src/kiro/model/available_models.rs响应 DTO、token_manager抽出prepare_request_tokenhelper 消除重复的 token 刷新逻辑。仅限 admin 面板按需拉取,不影响客户端
GET /v1/models静态聚合列表。
🛠 修复
- 从源头阻断 503 风暴(@ZyphrZero):
provider.rs与 endpoint 层新增is_bad_request判别,把上游 Bedrock 因客户端格式错误(tool_use/tool_result 不配对等)返回的 503 在结束即刻识别为不可重试错误——不走重试、不切换凭据,直接返回 400 给客户端。此前这类错误被当成瞬态故障反复重试,会放大成一次坏请求 → 全部凭据接连被打 → 瞬时数百次 503。 - Bedrock 客户端校验错误映射为 400(PR #10 @xiaojiou176):
src/anthropic/handlers.rs对 Bedrock 返回的ValidationException(消息序列非法、缺少 content 等)统一返回400 Bad Request而非502 Bad Gateway,避免下游客户端误判为上游故障并无效重试。
✨ 新功能 — 来自社区贡献
感谢以下 PR 贡献者 🙏
- Native WebSearch 端到端循环(PR #9 @xiaojiou176):批量工具中混入
web_search时,进入 agentic 内部循环——先调上游获取搜索结果,把结果注入回消息作为 tool_result,再继续对话。完全在 MCP 端点q.{region}.amazonaws.com/mcp上完成,不依赖外部搜索 API。 output_config.effort直通上游(PR #8 @xiaojiou176):Anthropic 协议reasoning.effort字段(low/medium/high)映射到 Kiro/Q 协议outputConfiguration.agentMode字段,让不同推理强度的请求在 Kiro 上游获得对应的资源分配。- 图片 MIME 修正与智能降采样(PR #7 @xiaojiou176):用
magic-bytes从二进制头识别真实图片格式,修正错误声明的 MIME;超尺寸图片自动降采样到 1M 像素并重编码为 JPEG;tool_result中的 base64 图片上浮到 user message 级images: [...],避免被上游忽略。
📦 升级指南
docker compose pull && docker compose up -d即可。无破坏性变更,无需清理状态文件。- 查看凭据可用模型:登录管理面板 → 凭据管理 → 任一凭据卡片「更多操作」→「查看可用模型」,实时查询上游。
Docker image:
zyphrzero/kiro-rs:0.5.9
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.5.8
主题:IP 代理池从「仅能增删改查 + 手动分配」升级为具备主动健康检查、失败累计自动剔除、轮询批量分配的完整代理管理能力。此前加完代理只能等真实请求才知道是否可用,代理失效也不会被记录或自动禁用,且只能逐个手动分配给凭据。
✨ 新功能 — 主动健康检查与连通性测试
- 探测连通性与延迟:
ProxyEntry新增health / latencyMs / lastCheckedAt / consecutiveFailures / autoDisabled字段(serde(default)向后兼容旧proxy_pool.json)。通过该代理请求轻量公网端点https://www.gstatic.com/generate_204(8s 超时)验证「能否走通 + 往返延迟」,不依赖上游 Kiro。 - 后台健康检查调度器:照搬
start_balance_refresher模式新增start_proxy_health_checker,每 5 分钟对所有已启用代理用join_all并发探测一次。 - 新接口
POST /proxy-pool/{id}/check与/proxy-pool/check-all:分别供 UI「测试」按钮即时探测单个代理、以及手动触发全量健康检查。
✨ 新功能 — 失败累计与自动剔除
- 连续探测失败自动禁用:探测失败累计
consecutive_failures,达阈值(3 次,与凭据MAX_FAILURES_PER_CREDENTIAL对齐)即自动enabled=false, auto_disabled=true;探测成功立即清零。用户手动重新启用时清除自动禁用标记与失败计数。仅由健康检查触发,不侵入provider.rs请求热路径。
✨ 新功能 — 轮询批量分配
- 新接口
POST /proxy-pool/assign-round-robin:取「已启用且非 Unhealthy」的可用代理,对目标凭据(默认全部)按取模轮询写入proxy_url,复用token_manager.update_credential,免去逐个手动分配。
⚡ 优化 — HTTP Client 缓存
- 缓存容量上限淘汰:
provider.rs的client_cache原为无界HashMap,代理数增长会令每个代理常驻一个reqwest::Client导致内存无界增长。改为带容量上限(64)的ClientCache,按插入顺序淘汰最旧的非全局代理 client,全局代理 client 常驻不被淘汰。
🎨 前端
- 代理池弹窗每行新增健康状态徽章(绿:可用 + 延迟 ms / 红:异常 + 连续失败次数 / 灰:未检测)与最近检测时间,并区分「自动禁用」与用户「手动禁用」。
- 每行新增「测试」按钮,顶部新增「全部检测」「轮询分配」按钮。
Docker image:
zyphrzero/kiro-rs:0.5.8
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.5.7
主题:凭据失败次数从单一"连续失败计数器"升级为累计统计 + 按类型三色分类展示。此前卡片"失败次数"绑定 failure_count(连续失败计数器,成功即清零、账号风控与瞬态不计入),导致鉴权失败被其他凭据救回后立即清零、账号风控压根不显示,与用户对"这个凭据到底失败了多少次、什么原因"的直觉不符。
✨ 新功能 — 累计失败统计
- 拆分计数,避免误禁用:
token_manager新增total_failure_count——所有失败类型(鉴权 / 额度 / 风控 / 瞬态 / 网络)都 +1、只增不减、仅手动「重置失败计数 / 恢复异常」(reset_and_enable) 时归零。原failure_count保持"连续失败、成功清零"语义,继续驱动"连续失败 N 次自动禁用",因此健康凭据不会被终身累计的失败数误禁用。持久化到kiro_stats.json(serde(default)向后兼容旧文件),贯通快照 → admin API → 前端。
✨ 新功能 — 失败次数按类型三色分类
- 三色展示(鉴权 / 风控 / 其他):卡片"失败次数"改为
auth / throttle / other三个分色数字(如3/1/2,鉴权红、账号风控橙、其他灰)。数据来自 trace 库聚合——新增trace_db::failure_stats()对trace_attempts按credential_id + outcome分组 COUNT 并归并三类(鉴权=auth_failed、风控=account_throttled、其他=额度/瞬态/网络/请求错误/未知)。 - 新接口
GET /api/admin/traces/failure-stats:返回{credentialId: {auth, throttle, other}}。前端 dashboard 每 30s 拉一次并按凭据分发给各卡片;无 trace 数据(trace 关闭 / 已过期清理)时回退显示totalFailureCount。鼠标悬停 title 说明各类含义,点击仍打开失败日志详情弹框。
Docker image:
zyphrzero/kiro-rs:0.5.7
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.
Kiro.rs 0.5.6
维护版本:仅版本号递增,无功能或代码变更(内容同 0.5.5)。用于刷新发布产物 / 镜像。
Docker image:
zyphrzero/kiro-rs:0.5.6
zyphrzero/kiro-rs:latest
Release assets include SHA256SUMS.txt for checksum verification.