把 12 份 UPSTREAM.md 来源记录全部翻译为中文,并把中文定为这份仓库自有 维护文档的强制语言。 - 翻译 hippo-memory-pi、pi-ask-user、pi-chrome、pi-compaction、 pi-extension-codex-fast-mode、pi-minimal-footer、pi-notify、 pi-permission-system/docs/auto-review、pi-ssh、pi-subagents 与 pi-tool-search 的来源记录。 - 在 AGENTS.md 增加纪律:每个自维护扩展目录必须保留中文 UPSTREAM.md, 内容涵盖官方仓库、tag/commit、导入版本、导入日期、许可证归属、本地 改动清单与同步上游时的约束。 - 明确边界:UPSTREAM.md 属于仓库自有的维护文档,因此使用中文;上游自带 的源码、测试、文档、README、CHANGELOG 与 LICENSE 一律保持原文,不翻 译、不改写,避免同步上游时产生无意义 diff 并破坏许可证原文完整性。 - 所有 40 位 commit、tag/版本号、仓库 URL 与许可证路径原样保留,仅翻译 叙述性文字。 验证:12 份文件均无残留英文正文;逐份复核了 commit、版本、URL 与 LICENSES/ 路径未发生改变。
pi-compaction
High-performance unified context projection and compaction for Pi.
Responsibilities
- incrementally index completed tool calls;
- replace large tool results with deterministic bounded evidence stubs;
- refine large stubs with non-blocking semantic summaries;
- expose one effective context projection to normal provider requests and Codex/SubAPI native compaction;
- cancel Pi's raw threshold compaction until the effective lower-bound reaches the configured threshold;
- retain original tool evidence through
context_tree_query; - publish read-only effective metrics for the footer and context observer.
Context Mode remains responsible for preventing large external data from entering the session. RTK remains responsible for ordinary tool-output cleanup.
Configuration
Set piCompaction in the Pi agent settings.json:
{
"piCompaction": {
"enabled": true,
"softRatio": 0.72,
"hardRatio": 0.9,
"targetRatio": 0.55,
"deterministic": {
"enabled": true,
"maxStubTokens": 256
},
"semantic": {
"enabled": true,
"model": "default",
"thinking": "low",
"concurrency": 1,
"minInputChars": 4000,
"maxInputChars": 24000,
"maxRetries": 2
},
"native": {
"enabled": true
}
}
}
The extension never writes settings. Invalid or missing fields are normalized in memory.
Native providers
Native compaction is enabled by piCompaction.native.enabled and uses the model selected in the session when compaction starts. It does not select a separate summarization model.
| Provider | API | Native transport |
|---|---|---|
openai-codex |
openai-codex-responses |
Existing Codex Responses endpoint and JWT/account-ID authentication |
sub-api |
openai-responses |
Public Responses endpoint and resolved gateway headers or API key |
For SubAPI, keep the existing models.json API as openai-responses. The adapter requires an explicit HTTP(S) baseUrl: for example, https://gateway.example/v1 becomes https://gateway.example/v1/responses; an existing /responses suffix is not duplicated. It preserves configured headers and merges the native compaction beta feature, without decoding the API key or adding a ChatGPT account ID. No gateway hostname or credentials are bundled.
SubAPI preserves a non-empty explicit Authorization header (case-insensitively) ahead of the API key. Without it, a non-blank API key supplies Bearer authentication; if no key is available, a non-empty cf-aig-authorization header also supports proxy-managed authentication. Header-only credentials do not create a dummy Bearer token. Missing or blank credentials fail before any network request and return control to Pi. Official Codex still requires its API key/JWT even when explicit authentication headers are present.
Both transports send the current projection as ResponseItems, append compaction_trigger, and parse the SSE compaction item. SubAPI must support Sub2API native remote compaction v2 on its public Responses endpoint. This is not a client for the separate /v1/responses/compact endpoint; supporting only that endpoint or ordinary Responses chat is insufficient.
Request interception also restores SubAPI native checkpoints into subsequent Responses input. Checkpoints retain a bounded portable summary for switching models/providers, and their version 1 format is unchanged. Native authentication, transport or response failures return control to Pi's normal compaction fallback. Other provider/API pairs and native.enabled: false retain the existing portable-summary path. Setting native.enabled to false does not discard an already-created native checkpoint.
The gateway must have a compatible deployed version, model and available upstream account. Offline tests cover the protocol and lifecycle; they do not establish live gateway availability. No settings migration, provider rename or Pi core modification is required.
Session format
The only custom entry type is pi-compaction, version 1. Segment summary entries contain hashes, summaries, and source references; they never duplicate complete raw tool output. Native checkpoints use Pi compaction-entry details with the same kind/version.
This implementation intentionally does not read legacy context-prune-* or openai-codex-native-compaction entries. Start a new session after switching to this extension.
Interfaces
context_tree_query: recover original bounded tool evidence by source key or tool call ID./compaction-status: show raw/effective tokens, reclaimed tokens, confidence, segments, and pending semantic jobs.
Performance model
The first session hydration scans the branch once. Appended turns use delta projection and immutable cached snapshots. The context hook performs no model call and no session write. Semantic summaries run in a bounded background worker and become visible only at later safe event boundaries.