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

249 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 URL``API 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 = completed``webAuth.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 运行态模型
```js
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 注册 source`app.kiro.dev``kiro.dev`、Builder ID 注册相关页面。
- Kiro 桌面授权 sourceBuilder ID authorize 页面。
- 邮箱 source:继续由共享邮箱 provider 注册表管理。
- 代理 source:继续由共享 IP 代理模块管理,不进入 Kiro 页面状态机。
### 3.4 `kiro.rs` 上传合同
上传字段固定为:
```js
{
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。