Skip to content

Releases: ZyphrZero/kiro.rs

Kiro.rs 0.6.5

10 Jun 17:51

Choose a tag to compare

主题: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 client tool_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

09 Jun 07:46

Choose a tag to compare

主题:入口 Key 级用量分析 + 请求链路入口来源追踪 + Admin UI 移动端体验优化。这一版把概览页从固定时间窗扩展为可按日期、粒度与入口 Key 过滤的分析面板;请求日志和凭据失败详情会区分“管理员API密钥”与已分发的客户端 Key;同时重排后台顶栏工具、统计图表、凭据卡片和表格在移动端的显示,减少窄屏溢出与操作拥挤。

✨ 新功能 — 入口 Key 级用量分析

  • 概览页支持入口 Key 筛选:统计页新增“全部入口 Key / 管理员API密钥 / 指定客户端 Key”筛选,调用量、Token、Credit、模型分布和上游凭据分布可按入口来源查看,方便定位某个客户端 Key 的成本与错误情况。
  • 支持自定义日期范围与统计粒度:统计接口新增 startDate / endDate / granularity 参数,前端可在预设 24h / 7d / 30d 之外选择自定义日期,并在按小时 / 按天聚合之间切换。
  • 后端聚合按 Key 维度保留明细UsageAggregator 新增按 key_idkey_id + modelkey_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

07 Jun 17:52

Choose a tag to compare

主题: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 转为 Anthropic thinking_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 估算现在计入 thinking block,并为 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

07 Jun 15:27

Choose a tag to compare

主题: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

07 Jun 12:01

Choose a tag to compare

主题:缓存命中/创建 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),图片块的媒体类型 + 数据纳入缓存哈希。
  • 请求日志记录 tokentraces.db 新增 input / output / cache_creation / cache_read 列(幂等迁移),日志接口返回并合计 totalTokens。
  • 模块 prompt_cache 更名为 cache_metering,持久化文件相应更名。

✨ 改进 — 后台前端组件统一

  • 统一二次确认弹窗:新增 useConfirm / ConfirmProvider,全站确认操作改用风格一致的弹窗替代原生 confirm()
  • 重写下拉框:以 DropdownMenumodal={false})重写 Select,替换原生 select 与 radix Select。后者 Content 硬编码 disableOutsidePointerEvents,经 DismissableLayerbodypointer-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

06 Jun 22:20

Choose a tag to compare

主题: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,target AmazonCodeWhispererService.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.jsoncurrentRelease)拉取当前 Kiro IDE 版本,进程内缓存 + 每 12h 后台刷新,失败回退到 config.kiroVersion。流式端点 User-Agent 与 Social 刷新随真实版本走,替代写死的版本号。

✨ 新功能 — Enterprise 登录入口与登录体验

  • 新增 Enterprise (IAM Identity Center) 登录入口:仅显示 SSO Start URL(必填)+ SSO 区域,与官方交互一致;登录成功的凭据带 provider=EnterprisestartUrlregion
  • 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

03 Jun 16:29

Choose a tag to compare

主题:客户端行为纠偏 + 按凭据拉取上游真实可用模型。此前客户端传入的畸形请求体(tool_use/tool_result 不配对等)会导致上游 Bedrock 返回 503,触发重试风暴;批量工具混入 native web_search 也缺少端到端 handler。模型列表方面,免费凭据无法用 Opus 但此前无可见性——现在可按凭据实时查看上游订阅的真实可用模型。

✨ 新功能

  • 凭据级上游模型查询(PR #12 @ZyphrZero):新增 GET /api/admin/credentials/{id}/models 接口,实时查询上游 ListAvailableModels API 获取该凭据当前可用模型(随订阅等级变化,FREE 不含 Opus)。在凭据卡片「更多操作」弹出独立弹窗,展示模型名、ID、最大输入 token 数。后端整条链路对标现有"余额"功能,新增 src/kiro/model/available_models.rs 响应 DTO、token_manager 抽出 prepare_request_token helper 消除重复的 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: [...],避免被上游忽略。

📦 升级指南

  1. docker compose pull && docker compose up -d 即可。无破坏性变更,无需清理状态文件。
  2. 查看凭据可用模型:登录管理面板 → 凭据管理 → 任一凭据卡片「更多操作」→「查看可用模型」,实时查询上游。

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

01 Jun 13:37

Choose a tag to compare

主题: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.rsclient_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

30 May 08:10

Choose a tag to compare

主题:凭据失败次数从单一"连续失败计数器"升级为累计统计 + 按类型三色分类展示。此前卡片"失败次数"绑定 failure_count(连续失败计数器,成功即清零、账号风控与瞬态不计入),导致鉴权失败被其他凭据救回后立即清零、账号风控压根不显示,与用户对"这个凭据到底失败了多少次、什么原因"的直觉不符。

✨ 新功能 — 累计失败统计

  • 拆分计数,避免误禁用token_manager 新增 total_failure_count——所有失败类型(鉴权 / 额度 / 风控 / 瞬态 / 网络)都 +1、只增不减、仅手动「重置失败计数 / 恢复异常」(reset_and_enable) 时归零。原 failure_count 保持"连续失败、成功清零"语义,继续驱动"连续失败 N 次自动禁用",因此健康凭据不会被终身累计的失败数误禁用。持久化到 kiro_stats.jsonserde(default) 向后兼容旧文件),贯通快照 → admin API → 前端。

✨ 新功能 — 失败次数按类型三色分类

  • 三色展示(鉴权 / 风控 / 其他):卡片"失败次数"改为 auth / throttle / other 三个分色数字(如 3/1/2,鉴权红、账号风控橙、其他灰)。数据来自 trace 库聚合——新增 trace_db::failure_stats()trace_attemptscredential_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

30 May 07:05

Choose a tag to compare

维护版本:仅版本号递增,无功能或代码变更(内容同 0.5.5)。用于刷新发布产物 / 镜像。


Docker image:

zyphrzero/kiro-rs:0.5.6
zyphrzero/kiro-rs:latest

Release assets include SHA256SUMS.txt for checksum verification.