10 KiB
10 KiB
Kiro Flow 官方入口升级开发方案
1. 目标
本方案把 Kiro flow 作为独立系统升级,不再把它塞进 OpenAI flow 的注册假设里,也不再保留旧入口的兼容分支。
最终链路固定为:
- 打开 Kiro 官方登录页
https://app.kiro.dev/signin - 在 Kiro 登录页选择 Builder ID
- 完成 AWS Builder ID 注册页的邮箱、姓名、验证码、密码与授权确认
- 等待回到 Kiro Web 登录完成页,建立 Kiro Web 登录态
- 基于已有 Kiro Web / Builder ID 浏览器会话打开桌面端授权页
- 监听 localhost callback,用授权码与 PKCE 换取桌面端 Builder ID 凭据
- 将
refreshToken / profileArn / clientId / clientSecret / machineId / email等字段上传到kiro.rs
这条链路的核心判断是:能被 kiro.rs 稳定使用的不是注册页里某个临时结果,而是 Kiro 桌面端授权链路产生的 Builder ID 凭据。
2. 需求符合性分析
2.1 与用户要求的对应关系
- 两套 flow 分开:Kiro flow 独立使用
background/kiro/*、content/kiro/*、kiroRuntime和自己的 9 个节点,不复用 OpenAI 的页面、接码、Plus、平台绑定逻辑。 - 只抽公共能力:Kiro 只复用邮箱服务、账户密码生成、IP 代理和
kiro.rs目标配置;这些能力本身是跨 flow 基础设施,不带 OpenAI 业务语义。 - 来源与目标清晰:Kiro 的目标固定为
kiro-rs;运行页面来源按 runtime source 识别,注册子链路覆盖 Kiro Web 与 Builder ID 注册页,桌面授权子链路只覆盖 Builder ID authorize 页。 - 上传到
kiro.rs:上传器只按kiro.rs新增凭据接口构建 payload,并固定上传 BuilderId 的 Kiro runtimeprofileArn;不引入本地账号管理项目里的私有字段。 - 不考虑旧兼容:设计中不保留旧字段别名、不保留旧入口回退、不保留“失败后换旧链路”的分支。
2.2 完整性分析
当前设计覆盖 Kiro 自动注册所需的完整闭环:
- UI 配置:Kiro flow、
kiro.rs URL、API Key、共享邮箱、共享密码、共享代理。 - 注册页面:官方 Kiro 登录页、Builder ID 注册页、授权确认页、Kiro Web 登录完成页。
- 桌面授权:OIDC client 注册、PKCE、authorize URL、localhost callback、token exchange。
- 上传:
kiro.rsbaseUrl 归一化、API Key 鉴权、payload 构建、BuilderId profileArn 固定映射、machineId 计算、上传状态回写。 - 自动运行:Kiro 9 节点 linear workflow,执行范围、状态、日志、失败停止与轮次汇总走通用 runner,但节点实现完全属于 Kiro。
- 测试:覆盖状态模型、source 归属、注册页状态机、桌面授权 gate、上传器 payload、sidepanel flow 选择。
2.3 正确性分析
正确性边界如下:
- 步骤 1 不能直接打开 AWS 注册页;必须先进入 Kiro 官方登录页,并由页面选择 Builder ID 入口。
- 步骤 6 不能只以 AWS 授权页按钮点击成功作为完成;必须等待 Kiro Web 登录完成页,写入
webAuth.status = signed_in。 - 步骤 7 不能在注册页刚授权后盲目开始;必须检查
register.status = completed且webAuth.status = signed_in。 - 步骤 8 的 token 必须来自桌面端授权码与 PKCE 交换结果。
- 步骤 9 的上传 payload 必须与
kiro.rsAdmin API 的新增凭据模型一致。
2.4 规范一致性分析
- Kiro 运行态统一放在
kiroRuntime下,避免新增节点时继续向全局 state 平铺字段。 - Kiro 页面脚本放在
content/kiro/*,后台执行器放在background/kiro/*。 - 注册子链路和桌面授权子链路用不同 runtime source,避免同域 AWS 页面被误注入到错误脚本。
- 文案与日志使用清晰中文;页面按钮文本仍保留真实网页上的中英文按钮名用于匹配。
- 持久配置走
flows.kiro.targets["kiro-rs"],不再出现隐藏的 Kiro 区域、优先级、endpoint 等配置面。
3. 最终架构
3.1 运行态模型
kiroRuntime: {
session: {
status,
startedAt,
completedAt,
email
},
register: {
status,
loginUrl,
tabId,
email,
currentPageState,
completedAt
},
webAuth: {
status,
completedAt,
hasAccessToken,
hasSessionToken
},
desktopAuth: {
status,
state,
redirectUri,
clientId,
clientSecret,
refreshToken,
accessToken,
completedAt
},
upload: {
status,
targetId,
baseUrl,
credentialId,
completedAt,
error
}
}
3.2 步骤定义
kiro-open-register-page:清理 Kiro / Builder ID cookies,打开 Kiro 官方登录页,选择 Builder ID,等待邮箱页。kiro-submit-email:通过共享邮箱服务获取邮箱,提交到 Builder ID 注册页,等待姓名页。kiro-submit-name:填写姓名并继续,等待验证码页。kiro-submit-verification-code:按注册邮箱轮询验证码,填入并继续,等待密码页。kiro-submit-password:填写共享账户密码或自动生成密码,等待授权确认页。kiro-complete-register-consent:点击确认与允许访问,等待 Kiro Web 登录完成页。kiro-start-desktop-authorize:在 Kiro Web 登录态已建立后创建桌面授权请求并打开授权页。kiro-complete-desktop-authorize:确认桌面授权,捕获 localhost callback,交换 token。kiro-upload-credential:上传桌面端 Builder ID 凭据到kiro.rs。
3.3 Source 归属
- Kiro 注册 source:
app.kiro.dev、kiro.dev、Builder ID 注册相关页面。 - Kiro 桌面授权 source:Builder ID authorize 页面。
- 邮箱 source:继续由共享邮箱 provider 注册表管理。
- 代理 source:继续由共享 IP 代理模块管理,不进入 Kiro 页面状态机。
3.4 kiro.rs 上传合同
上传字段固定为:
{
refreshToken,
profileArn,
clientId,
clientSecret,
region,
authRegion,
apiRegion,
machineId,
email,
proxyUrl,
proxyUsername,
proxyPassword,
authMethod: 'idc'
}
其中:
machineId = sha256("KotlinNativeAPI/" + refreshToken)region / authRegion / apiRegion使用 Kiro 默认固定值profileArn使用 BuilderId 固定值arn:aws:codewhisperer:us-east-1:638616132270:profile/AAAACCCCXXXXproxy*仅在当前共享代理存在且可解析时上传
4. 设计自检
4.1 是否满足“不要和 OpenAI flow 扯上关系”
满足。Kiro 节点、页面脚本、运行态、上传器都在 Kiro 自己的模块内。共享邮箱、密码、代理属于基础服务,不包含 OpenAI 业务分支。
4.2 是否存在上下设计冲突
当前无直接冲突。需要注意的边界是:
- 通用 auto-run runner 仍负责调度所有 flow,但它只按节点执行器表调用 Kiro 节点,不理解 Kiro 内部字段。
source-registry是全局基础设施,但 Kiro 注册 source 与桌面授权 source 已分开,避免同域页面误判。chrome.storage.local保存 Kiro 目标配置,chrome.storage.session保存 Kiro 运行态;二者职责不冲突。
4.3 方案自身缺陷与规避
- 页面跳转期间 content script 断连:统一使用页面恢复等待和较长加载预算,错误文案明确提示页面刚刷新或代理异常。
- Kiro Web 登录完成但 cookie 名称变化:运行态只保存登录态摘要,不把具体 cookie 当成后续协议输入;真正桌面授权仍以 authorize callback 与 token exchange 为准。
- 代理导致页面卡住:Kiro flow 必须 fail-close 停止,让用户切换代理,不应自动进入下一步。
kiro.rsAPI Key 配置为空或未持久化:侧栏字段必须走 settings schema 持久配置;上传前从当前配置读取并校验。- 后续新增 Kiro 节点:只扩展 Kiro step definitions、Kiro runner 和 Kiro runtime,不在 OpenAI flow 里加隐藏条件。
5. 开发清单
阶段 1:官方入口与 source 升级
开发内容:
- 步骤 1 打开
https://app.kiro.dev/signin - content script 识别 Kiro 官方登录页并点击 Builder ID
- source registry 支持 Kiro Web 域名
- 删除旧入口启动逻辑
阶段自检:
- 搜索核心代码,不应存在旧入口启动函数与旧注册授权字段。
- 步骤 1 必须能从 Kiro 官方登录页进入 Builder ID 邮箱页。
- source 不得把桌面授权页误归为注册页,反之亦然。
- touched 文件中文不能乱码。
阶段 2:Kiro Web 登录态闭环
开发内容:
- 注册页状态机识别 Kiro Web 登录完成页。
- 步骤 6 等待
kiro_web_signed_in,不再只看授权按钮点击结果。 kiroRuntime.webAuth保存登录态摘要。
阶段自检:
- 步骤 6 未回到 Kiro Web 时不能标记成功。
- 成功后必须写入
webAuth.status = signed_in。 - 只保存布尔摘要,不保存敏感 cookie 值。
- 日志必须是中文且能说明正在等待 Kiro Web 登录态。
阶段 3:桌面授权前置 gate
开发内容:
- 步骤 7 检查
register.completed + webAuth.signed_in。 - 未完成 Kiro Web 登录态时直接停止并给出明确中文错误。
- 桌面授权 token 继续写入
kiroRuntime.desktopAuth。
阶段自检:
- 手动跳过前 6 步不能直接执行桌面授权。
- gate 不读取 OpenAI 状态。
- 上传器仍只读取桌面授权凭据,不读取注册页临时字段。
阶段 4:文档、全量测试与提交
开发内容:
- 更新项目完整链路说明。
- 更新项目文件结构说明。
- 更新本开发方案,确保文档与代码合同一致。
- 跑全量测试、diff 检查、提交。
阶段自检:
- 文档不再把 Kiro 描述为旧入口链路。
npm test通过。git diff --check无空白错误。git status只包含本次计划内文件。- 最终提交信息清晰描述 Kiro 官方入口升级。
6. 最终审查清单
- Kiro flow 是否仍能上传到
kiro.rs。 - Kiro flow 是否没有复用 OpenAI 接码、Plus、贡献模式、平台绑定逻辑。
- Kiro 设置是否通过
flows.kiro.targets["kiro-rs"]持久化。 - Kiro 自动运行是否不会跳回 OpenAI flow。
- Kiro 页面等待是否统一走足够的加载预算。
- Kiro 失败日志是否清晰中文。
- Kiro touched 文件是否无乱码。
- 测试是否覆盖入口、状态、source、桌面授权、上传器和 sidepanel。