Files
FlowPilot/md/kiro-flow-独立重构开发方案.md
T
2026-05-19 13:18:37 +08:00

10 KiB
Raw Blame History

Kiro Flow 官方入口升级开发方案

1. 目标

本方案把 Kiro flow 作为独立系统升级,不再把它塞进 OpenAI flow 的注册假设里,也不再保留旧入口的兼容分支。

最终链路固定为:

  1. 打开 Kiro 官方登录页 https://app.kiro.dev/signin
  2. 在 Kiro 登录页选择 Builder ID
  3. 完成 AWS Builder ID 注册页的邮箱、姓名、验证码、密码与授权确认
  4. 等待回到 Kiro Web 登录完成页,建立 Kiro Web 登录态
  5. 基于已有 Kiro Web / Builder ID 浏览器会话打开桌面端授权页
  6. 监听 localhost callback,用授权码与 PKCE 换取桌面端 Builder ID 凭据
  7. 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 runtime profileArn;不引入本地账号管理项目里的私有字段。
  • 不考虑旧兼容:设计中不保留旧字段别名、不保留旧入口回退、不保留“失败后换旧链路”的分支。

2.2 完整性分析

当前设计覆盖 Kiro 自动注册所需的完整闭环:

  • UI 配置:Kiro flow、kiro.rs URLAPI Key、共享邮箱、共享密码、共享代理。
  • 注册页面:官方 Kiro 登录页、Builder ID 注册页、授权确认页、Kiro Web 登录完成页。
  • 桌面授权:OIDC client 注册、PKCE、authorize URL、localhost callback、token exchange。
  • 上传:kiro.rs baseUrl 归一化、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 = completedwebAuth.status = signed_in
  • 步骤 8 的 token 必须来自桌面端授权码与 PKCE 交换结果。
  • 步骤 9 的上传 payload 必须与 kiro.rs Admin 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 步骤定义

  1. kiro-open-register-page:清理 Kiro / Builder ID cookies,打开 Kiro 官方登录页,选择 Builder ID,等待邮箱页。
  2. kiro-submit-email:通过共享邮箱服务获取邮箱,提交到 Builder ID 注册页,等待姓名页。
  3. kiro-submit-name:填写姓名并继续,等待验证码页。
  4. kiro-submit-verification-code:按注册邮箱轮询验证码,填入并继续,等待密码页。
  5. kiro-submit-password:填写共享账户密码或自动生成密码,等待授权确认页。
  6. kiro-complete-register-consent:点击确认与允许访问,等待 Kiro Web 登录完成页。
  7. kiro-start-desktop-authorize:在 Kiro Web 登录态已建立后创建桌面授权请求并打开授权页。
  8. kiro-complete-desktop-authorize:确认桌面授权,捕获 localhost callback,交换 token。
  9. kiro-upload-credential:上传桌面端 Builder ID 凭据到 kiro.rs

3.3 Source 归属

  • Kiro 注册 sourceapp.kiro.devkiro.dev、Builder ID 注册相关页面。
  • Kiro 桌面授权 sourceBuilder 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/AAAACCCCXXXX
  • proxy* 仅在当前共享代理存在且可解析时上传

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.rs API 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 文件中文不能乱码。

阶段 2Kiro 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。