# pi-codex-compaction

## 未发布

## 0.5.2

- 修复 Pi 1.3 以 `configuration_update` 输入项传递思考等级后，远程压缩返回 400 `Consecutive 'configuration_update' items are not allowed` 并回退到 Pi 压缩的问题。复用普通请求前缀时，不再保留该请求在对话之后追加的请求级输入项，改用本次压缩请求由 Pi 生成的对应内容，拼接结果与 Pi 自己的完整序列化一致；内容相同时缓存前缀不变。Pi 以后新增同类请求级输入项时同样适用；两次请求的末尾结构不一致时改用 Pi 自己的完整序列化，不发送可能无效的拼接请求。

## 0.5.1

- 请求快照改为独立绑定持久化源历史，修复前置 `context` 钩子重排、过滤、改写或插入消息时丢弃普通请求前缀的问题；不依赖特定插件或用户调整加载顺序，已有检查点的保留消息校验继续生效。
- 在请求准备与 provider 重试前重新校验源历史和会话、模型、后端，拒绝使用构造期间已变化的快照。临时投影消息随后持久化时重新构建请求，避免重复发送；合法的重复历史消息不会被自动去重。
- 检查点重放不再受扩展加载顺序影响：本扩展改在所有 `context` 处理器之后替换检查点，其他扩展始终看到 Pi 原生消息。其他扩展改写、删减保留消息或在其间插入临时内容时，仍按消息来源替换为一次加密历史，不再跳过重放，也不再把恢复提示发给模型；只有压缩摘要被删除或消息来源有歧义时才跳过。之后执行的请求钩子在私有标记前后添加或合并的内容会保留。原先加载在本扩展之后、会改写保留消息的扩展，升级后可能出现一次缓存未命中。

## 0.5.0

- 检查点的普通重放和再次压缩遵守当前图片读取设置，关闭时过滤保留的原始图片。
- 保持 V2 的工具声明与历史加载记录；符合快照条件时复用普通请求的完整序列化前缀，包括中途隐藏工具的投影和 provider 钩子改写的历史，再追加新增内容，避免重新生成旧前缀破坏缓存。
- 修复本轮临时提示词在对话结束后使请求快照失效的问题；真正的提示词、工具、思考等级或界面以外的配置变化仍会阻止复用。
- 切换界面主题后直接压缩仍复用普通请求的工具声明和历史前缀，避免主题变化导致隐藏工具声明重新出现。
- 手动压缩或下一轮开始前的自动压缩不再因 Pi 在本轮结束后回到基础系统提示词而丢弃请求快照；扩展按轮调整系统提示词时，压缩仍复用普通请求的完整前缀和缓存参数。其他输入变化仍会使快照失效。
- 切换思考块显示、终端图片、编辑器边距、全屏和 Markdown 渲染等只影响 Pi 界面的设置后，压缩继续复用请求快照。
- 补齐 `parallel_tool_calls`、完整 `text` 输出设置和 `prompt_cache_options` 缓存模式/TTL 的复用，不复制预热操作或诊断响应 ID。服务端会话引用不被照搬，相关请求保留本地重建的完整历史。补充重复检查点、隐藏上下文保留和重试请求一致性的回归测试。
- 兼容 Codex provider 的成功 `response.done` 事件，继续拒绝失败和未完成的响应。
- 使用跨进程文件锁保护配置版本检查和原子替换，防止多个 Pi 进程保存同一旧版本时静默覆盖。
- 补充上述路径的真实 Pi 会话、provider 和跨进程回归测试，以及与 Codex V2 源码的对照记录。
- V2 重试覆盖整次 SSE 请求与响应收集，额外次数取 Pi provider 设置与 2 的较小值，关闭 provider 内层重试，避免次数相乘。只凭暂时 HTTP、网络或流错误的明确证据重试；永久错误、协议校验失败和取消不会重试。每次尝试保持请求内容和后端不变，重新认证并校验会话归属。
- V2 压缩前按 Pi 实际准备请求的模型窗口裁剪末尾工具输出；保留原生文字回退、普通请求和模型切换行为，HTTP 重定向沿用 provider 与 fetch。
- 压缩期间切换模型后仍保存原模型生成的结果；新检查点无法在当前后端重放时，在安装后按检查点提示一次。配置文字回退同样不因切换对话模型而取消，会话变化或主动取消仍丢弃结果。
- 补充整次重试及兼容性回归测试，覆盖已有检查点的文字回退、跨后端继续请求、普通模型路由和被动模型切换。
- 开发与测试依赖更新至 Pi 1.0.4 并通过完整测试；Pi 最低支持版本仍为 0.99.1。

## 0.4.1

- V2 模型识别改为显式 `compat.remoteCompaction` 配置优先；未配置时，`openai-responses` 或 `openai-codex-responses` 模型的 ID 包含 `gpt`（不区分大小写）即尝试 V2，不再限制服务商或官方地址；其他 API 的 GPT 模型未配置时直接使用 Pi 原生压缩，不显示失败警告。无效配置不会退回名称匹配。检查点支持保存和恢复自定义 API 标识，继续校验后端身份。

## 0.4.0

- 更新压缩历史的恢复提示，明确使用当前包 `@criogaid/pi-codex-compaction`。保留旧会话摘要的精确识别与消息编辑保护，无需迁移会话文件。

- 压缩请求在会话、模型、历史、工具及设置匹配时，复用普通请求中观察到的系统指令、工具声明、缓存标识、思考与服务等级等选项。请求仍由 Pi 生成和发送，不沿用旧响应 ID、输出上限或传输开关。

- 重写 README：按“V2 默认启用、失败退回 Pi 原生压缩、独立摘要模型只接管原生压缩”说明压缩流程，补充流程图、示例和徽章。

## 0.3.0

- npm 发布包名改为 `@criogaid/pi-codex-compaction`。新增标签触发的发布流程，通过版本核对、类型检查、测试和打包检查后发布，并提供源码来源证明；现有配置路径和会话格式保持不变。
- 要求 Pi 0.99.1 或更新版本。远程压缩沿用当前会话的思考等级、session ID、缓存与重试配置，并保留 Provider 认证环境及请求头覆盖。
- 复用普通请求的投影上下文和有效系统提示词；会话、模型、后端或历史前缀改变时停止复用。同一后端内切换模型仍可重放检查点。
- 按 Codex 默认规则筛选保留历史并估算 UTF-8 文本和图片预算，在发送前缩减超出可用上下文的末尾工具输出。
- 新增 `/codex-compaction` 菜单、V2 总开关及降级模型配置。开关明确保存布尔值，关闭时保留所选模型；V2 关闭或失败时按配置使用 Pi 原生摘要。配置在每次压缩开始时固定，已启用的降级模型失败则取消压缩。
- 将文本摘要设置命名为 `Use separate summary model` 和 `Summary model and thinking level`。使用 Pi 原生设置说明区域解释它们与 V2 的关系，RPC 显示相同的文本压缩条件。配置字段与压缩行为保持不变。
- 改写 README 和 V2 开关说明，用聊天记录、文字摘要和模型服务解释压缩行为与限制。
- 无效 fallback 配置仍允许打开菜单、切换 V2 或选择新模型。切换 V2 原样保留无效配置，合法配置写回规范格式；校验错误包含文件路径。
- V2 固定使用 SSE，确保压缩功能头不受已有 WebSocket 连接影响。普通对话和文本降级仍使用 Pi 的传输设置。
- 虚拟降级模型的展示限额不再提前缩减摘要预算，由 Pi 路由后的实际模型限制输出。
- 新检查点按 UTF-16 码元顺序排列对象键，避免指纹依赖系统语言。旧指纹只有在创建时分支上通过精确验证后才在内存中转换；checkpoint version 1 和消息编辑保护保持兼容。
- 当前模型不支持 V2 时，普通请求跳过消息指纹和上下文快照计算。
- 源码迁至 `src/`，测试迁至 `tests/`，通过 npm 锁文件安装依赖。删除独立迁移记录、设计归档和 Changesets 流程，打包及 Pi 入口加载检查归入测试。

## 0.2.2

### Patch Changes

- f8a5343: 精简并重写面向用户的安装、使用、配置和限制说明。

## 0.2.1

### Patch Changes

- 74df898: Update package repository metadata after renaming the monorepo to pi-extensions.

## 0.2.0

### Minor Changes

- 9b9fc40: 新增 Provider-aware 的 Codex Remote Compaction V2，支持严格的 endpoint、协议和 checkpoint 身份校验，并在失败时安全回退到 Pi 原生压缩。
