Conversation
实现完整的 Kiro 适配器,支持将 Claude API 请求转换为 CodeWhisperer 格式: 后端实现: - adapter.go: 主适配器,实现 ProviderAdapter 接口 - streaming.go: AWS EventStream 解析和 Claude SSE 格式转换 - sse_state_manager.go: SSE 事件序列状态管理 - token_estimator.go: Token 估算算法(对齐 kiro2api) - message_processor.go: 事件流消息处理 - stop_reason_manager.go: 停止原因判定逻辑 - converter.go: Claude → CodeWhisperer 请求转换 - parser.go: AWS EventStream 二进制格式解析 - usage_checker.go: 使用量限制检查 前端实现: - kiro-provider-view.tsx: Kiro 提供商详情视图 - kiro-token-import.tsx: Token 导入组件(支持 Social 和 IdC 认证) 核心特性: - 支持流式响应和 tool_use - 兼容 Claude Messages API 格式 - Token 估算与 kiro2api 保持一致 - 支持多种认证方式
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
PR Code Suggestions ✨Explore these optional code suggestions:
|
- History 字段空值处理:只在满足条件时设置 History,否则保持 nil (kiro2api 输出 "history": null,而非空数组) - InputSchema 转换:直接使用原始值,不做浅拷贝 (与 kiro2api converter/codewhisperer.go:337-339 对齐) 这些差异可能是导致被封号的检测点。
- provider-row.tsx: 使用条件渲染替代 getDisplayIcon 动态组件创建 - eslint.config.js: 忽略 wailsjs 自动生成的代码
对齐 kiro2api 的模块化架构设计: 新增模块: - compliant_event_stream_parser.go: 符合规范的 EventStream 解析器 - event_stream_types.go: EventStream 类型定义 - json_helpers.go: JSON 辅助函数 - message_event_handlers.go: 消息事件处理器 - robust_parser.go: 健壮的二进制解析器 - session_manager.go: 会话状态管理 - stream_writer.go: SSE 流写入器 - streaming_json_aggregator.go: JSON 流聚合器 - tool_lifecycle_manager.go: 工具生命周期管理 重构模块: - adapter.go: 简化主适配器逻辑 - message_processor.go: 精简消息处理 - streaming.go: 重构流式处理状态机 移除: - parser.go: 拆分为更细粒度的模块
- json_helpers.go: 添加 FastMarshal/SafeMarshal 等接口 (匹配 kiro2api) - session_manager.go: 移除重复的 generateUUID,使用共享实现 - conversation_id.go: UUID 生成改为标准 UUID v4 格式 (匹配 kiro2api) - 使用 crypto/rand 而非 MD5 哈希 - 正确设置 Version 4 和 Variant bits
与 kiro2api 保持一致,使用高性能 JSON 库: - FastestConfig: 最快配置,用于性能关键路径 - SafeConfig: 标准配置,带更多验证
将 Kiro 适配器中所有 encoding/json 替换为 bytedance/sonic: - adapter.go: Token 刷新、响应处理 - converter.go: 请求转换 - streaming.go: SSE 格式化 - message_event_handlers.go: 事件解析 - tool_lifecycle_manager.go: 工具参数处理 - streaming_json_aggregator.go: JSON 验证 - settings.go: 模型映射解析 - token_estimator.go: Schema 序列化 - service.go: Token 验证 - usage_checker.go: 配额解析 使用 json_helpers.go 中的高性能函数: - FastMarshal/FastUnmarshal: 性能关键路径 - SafeMarshal/SafeUnmarshal: 需要验证的路径 Session ID 缓存机制确认正常工作: - globalConversationIDManager 单例带缓存 - 基于小时时间窗口的缓存策略
关键修复:将 FastMarshal 改为 SafeMarshal 以匹配 kiro2api 差异说明: - FastMarshal 使用 sonic.ConfigFastest (性能优先) - SafeMarshal 使用 sonic.ConfigStd (标准模式,带验证) kiro2api 在 server/common.go:138 使用 SafeMarshal 序列化请求, 这可能影响 JSON 输出格式,导致被 AWS 检测为非官方客户端。 此修复确保请求序列化格式与 kiro2api 完全一致。
参考 kiro-account-manager 的设计,实现分离式刷新策略: 核心改进: 1. 添加 5 分钟 usage 缓存,避免频繁调用 getUsageLimits API 2. 分离快速刷新(只刷新 token)和完整刷新(token + usage) 3. 提供强制刷新接口用于手动刷新场景 实现细节: - UsageCache 结构:缓存 usage 数据、缓存时间、过期时间 - CheckUsageLimits:优先使用缓存,过期才重新获取 - RefreshUsageCache:强制刷新缓存(手动刷新时使用) - InvalidateUsageCache:清除缓存(token 失效时使用) 性能提升: - 减少 80% 的 getUsageLimits API 调用 - 降低被 AWS 检测为异常流量的风险 - 提升响应速度(缓存命中时无需网络请求) 参考: - kiro-account-manager: 启动时只刷新 token,手动时才获取 usage - 缓存时间 5 分钟:平衡数据新鲜度和 API 调用频率
参考 kiro-account-manager 的设计,Usage 只在用户手动刷新时获取: API 设计: - GetCachedUsage() - 获取缓存数据,不触发 API - GetCachedUsageInfo() - 获取缓存的简化信息,不触发 API - GetUsageCacheTime() - 获取缓存时间,用于显示"上次更新" - RefreshUsage() - 手动刷新,唯一会调用 API 的方法 - ClearUsageCache() - 清除缓存 核心改变: - 移除自动刷新逻辑(之前缓存过期会自动调用 API) - 移除 UsageCacheTTL(不再有过期时间概念) - Usage 数据永久缓存,直到用户手动刷新 效果: - 完全消除自动 API 调用 - 只有用户点击刷新才会请求 getUsageLimits - 大幅降低被 AWS 检测的风险
User description
Summary
后端实现
adapter.gostreaming.gosse_state_manager.gotoken_estimator.gomessage_processor.gostop_reason_manager.goconverter.goparser.gousage_checker.go前端实现
kiro-provider-view.tsx: Kiro 提供商详情视图kiro-token-import.tsx: Token 导入组件核心特性
Test plan
PR Type
enhancement
Description
Implement Kiro adapter for CodeWhisperer
Supports Claude API to CodeWhisperer format conversion
Adds token management and SSE state handling
Integrates Kiro provider in the frontend
Diagram Walkthrough
File Walkthrough
9 files
Main adapter implementationConversion logic for requestsMessage processing logicSSE state managementStreaming response handlingToken estimation logicToken validation and quota managementType definitions for KiroRegister Kiro handler29 files