# Upstream

## 来源

- Repository: `https://github.com/earendil-works/pi.git`
- Commit: `24bace27cf308c89707cf8005b4795d873e23f17`
- Package: `packages/ai`
- Version: `@earendil-works/pi-ai 0.81.1`
- Derived entry: `packages/ai/src/api/openai-codex-responses.ts`

上游源码固定在仓库 submodule `vendor/pi`。发布包不包含 submodule 或临时源码树，只包含
构建后的 `dist/transport.js`。

## 本地维护边界

`patches/openai-codex-pat.patch` 只维护以下差异：

1. 使用 PAT 时从认证 headers 获取 ChatGPT Account ID；
2. 将 `openai-codex-pat` 加入 Codex 工具调用 Provider 集合；
3. 暴露自包含的 transport dispose，由扩展在 session shutdown 时清理连接；
4. 避免动态加载的 transport 依赖宿主包解析。

PAT 来源解析、AuthAPI `whoami`、缓存和 Provider 注册是本仓库自主维护代码，不从 Pi
上游派生。

扩展入口还会从精确版本的 `@earendil-works/pi-ai` 编入 OpenAI Codex 模型目录和
lazy-stream helper。这样运行时不需要导入宿主的大型兼容入口，Provider 注册保持轻量；
transport 也不需要从安装目录解析 `@earendil-works/pi-ai`。宿主版本门禁确保这些构建期
组件与 Pi 版本一致。

## 更新流程

1. 将 `vendor/pi` 更新到目标 Pi 提交。
2. 通过 pnpm 更新开发依赖和 lockfile。
3. 更新 `package-catalog.json` 中的固定 commit。
4. 执行 `pnpm prepare:transport`，确认补丁可以应用。
5. 审阅目标版本 Codex transport 的协议变化和 Provider ID 判断。
6. 执行 `pnpm check`、导入基准和打包审计。
7. 使用本地 PAT 完成 SSE、WebSocket 和工具调用冒烟测试。

如果补丁不能应用，应根据新的上游实现重新生成最小差异，不应修改 submodule。
