pi-gpt-enhance
OpenAI Responses compaction, Fast mode, prompt promotion, and optional apply_patch for Pi
Package details
Install pi-gpt-enhance from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-gpt-enhance- Package
pi-gpt-enhance- Version
0.2.2- Published
- Aug 18, 2026
- Downloads
- 1,723/mo · 915/wk
- Author
- peach0x33a
- License
- (MIT AND Apache-2.0)
- Types
- extension
- Size
- 147.8 KB
- Dependencies
- 1 dependency · 3 peers
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
English | 简体中文
pi-gpt-enhance
Provides a focused set of Codex-compatible request enhancements for GPT models using the OpenAI Responses protocol in Pi: server-side context compaction, Responses instructions promotion, Fast mode, and an optional apply_patch custom tool. Model metadata is intentionally handled by pi-autofill-model-metadata and the standalone pi-codex-gpt-metadata catalog, not by this extension.
The extension only processes models that meet both of these conditions:
apiisopenai-responses- The model ID starts with
gpt-oropenai/gpt-
Other APIs, providers, and models are not modified.
Installation
Install from npm into Pi's user configuration:
pi install npm:pi-gpt-enhance
Run temporarily from this repository:
pi -e ./packages/gpt-enhance
After startup, run:
/gpt-enhance
This displays the current model and the status of all enhancements.
Features and defaults
| Feature | Configuration | Default |
|---|---|---|
| Global extension switch | enabled |
Enabled |
| Automatic server-side compaction and Responses continuation | compression |
Enabled |
Promote the first system/developer prompt to instructions |
promoteSystemPromptToInstructions |
Enabled |
| Footer status bar | statusBar |
Enabled |
| Server-side compaction notifications | notify |
Enabled |
Codex-compatible apply_patch |
applyPatch |
Disabled |
| Fast mode | /gpt-enhance fast |
Disabled per model |
applyPatch, promoteSystemPromptToInstructions, compression, and Fast mode are independent of one another, but all are controlled by the global enabled switch.
Configuration
Global configuration file:
~/.pi/agent/gpt-enhance.json
Project configuration file:
.pi/gpt-enhance.json
Precedence, from highest to lowest, is: environment variables, project configuration, global configuration, and built-in defaults. Project configuration only overrides fields that it defines.
Complete example:
{
"enabled": true,
"compression": true,
"applyPatch": false,
"promoteSystemPromptToInstructions": true,
"thresholdRatio": 0.9,
"notify": true,
"statusBar": true
}
Configuration fields
| Field | Type | Description |
|---|---|---|
enabled |
boolean | Fully enable or disable the extension |
compression |
boolean | Enable automatic server-side context compaction and Responses continuation; when disabled, /gpt-enhance compact can still be run explicitly and other enhancements remain available |
applyPatch |
boolean | Register the Codex-compatible apply_patch; only takes effect for eligible GPT models |
promoteSystemPromptToInstructions |
boolean | Move the first promotable system/developer string prompt to top-level instructions |
compactThreshold |
number | Directly specify the server-side compaction token threshold; takes precedence over thresholdRatio |
thresholdRatio |
number | Calculate the compaction threshold from the model context window; defaults to 0.9, capped at 0.95 |
notify |
boolean | Show TUI notifications related to server-side compaction |
statusBar |
boolean | Show server-side compaction and Fast status in the Pi footer; clears both statuses when disabled |
promoteSystemPromptToInstructions and statusBar can both be written directly in the JSON configuration file. Environment variables are only used as overrides:
| Configuration field | Environment variable |
|---|---|
enabled |
PI_GPT_ENHANCE_ENABLED |
compression |
PI_GPT_ENHANCE_COMPRESSION |
applyPatch |
PI_GPT_ENHANCE_APPLY_PATCH |
promoteSystemPromptToInstructions |
PI_GPT_ENHANCE_PROMOTE_SYSTEM_PROMPT_TO_INSTRUCTIONS |
compactThreshold |
PI_GPT_ENHANCE_COMPACT_THRESHOLD |
thresholdRatio |
PI_GPT_ENHANCE_THRESHOLD_RATIO |
notify |
PI_GPT_ENHANCE_NOTIFY |
statusBar |
PI_GPT_ENHANCE_STATUS_BAR |
Boolean environment variables accept true/false, 1/0, yes/no, and on/off.
Commands
| Command | Action |
|---|---|
/gpt-enhance |
Alias for /gpt-enhance status |
/gpt-enhance status |
Show the current model and the status of all enhancements |
/gpt-enhance fast |
Toggle Fast mode for the current provider/API/model/base URL |
/gpt-enhance update |
Clear the current model's capability cache so the next request probes again |
/gpt-enhance compact |
Manually call the provider's POST /responses/compact while the session is idle |
Enter a space after /gpt-enhance to get subcommand completion with descriptions; continuing to type a prefix filters the candidates.
The status command displays an aligned panel using the current Pi theme, for example:
gpt-enhance
model misaka-responses/gpt-5.6-sol
server compact not probed
fast mode off
instructions on
apply_patch active
status bar on
Footer status bar
statusBar is enabled by default. The extension uses Pi's ctx.ui.setStatus() and does not replace the default footer:
| Display | Meaning |
|---|---|
COMPACT:? |
Server-side compaction capability not probed |
COMPACT:ON |
The provider has confirmed server-side compaction support |
COMPACT:OFF |
Server-side compaction is disabled in configuration, or the provider explicitly does not support it |
FAST |
Fast mode is enabled for the current model |
Pi sorts statuses by status key, so when Fast is enabled the display is usually:
COMPACT:ON FAST
When the current model does not pass gating, or when statusBar is false, the extension clears the gpt-enhance.compression and gpt-enhance.fast footer statuses. The /gpt-enhance status command remains available and displays status bar off.
Custom footers can preserve these statuses by continuing to read footerData.getExtensionStatuses().
[!TIP] We are looking for a polished Pi status bar and a one-click compatibility path for displaying
gpt-enhancestatuses in third-party footers. If you maintain or recommend a suitable status bar, please open an issue.
Request processing order
For eligible models, every request actually sent to the provider is processed in this order:
- Move the first promotable system/developer string prompt to
instructions - Apply Fast mode's
service_tier: "priority" - Apply server-side compaction or Responses continuation
- Call the final provider
onPayloadhook
The final hook has the last word for the initial request, fallback, and continuation retries. Only returning undefined means that the current payload is retained; all other return values, including null, are treated as valid replacements.
Server-side compaction
Normal Responses requests are still sent by Pi's built-in implementation. The extension only adds the behavior required by OpenAI Compaction at the request boundary:
- The first eligible request adds
store: trueandcontext_management; the compaction threshold defaults to 90% of the context window. - After the provider accepts the enhanced request, the extension caches server-side compaction support; subsequent requests use
previous_response_idand incremental input when available. - When the provider explicitly rejects
previous_response_id, the current request retries with the complete local input and caches the lack of support, preventing repeated transmission of a known-to-fail parameter. - The extension only takes over Pi's local compaction when the server-side compaction chain can be continued safely; otherwise it restores Pi's native request and local compaction.
- When the provider rejects enhancement parameters or a recoverable network error occurs, the extension preserves its internal response-chain invariants and retries with an unenhanced payload.
- Response-chain state is cleared when the model, session, or branch changes to prevent cross-provider contamination; when restoring a session,
errorandabortedresponses are skipped.
When the server actually returns compaction or compaction_summary, the extension shows one notification for that item and writes the server-side compaction marker during the next Pi compaction lifecycle, preventing old token estimates from repeatedly triggering local compaction.
[!WARNING] Server-side compaction is still experimental and currently has known issues. Do not rely on it as the only protection against context overflow. Keep Pi's native local-compaction fallback available, and please report reproducible failures in Issues.
Server-side compaction sets store: true. Request content therefore follows the OpenAI Responses storage policy; whether a proxy provider follows the same policy depends on that provider.
Manual compaction
/gpt-enhance compact only runs while the session is idle and the model is eligible. It:
- Prefers the existing Responses
responseIdandprevious_response_id - Retries with Pi's current valid session input when the provider explicitly rejects continuation
- Respects the most recent Pi compaction boundary and does not resend already-compacted history
- Uses the same
instructionspromotion logic as normal requests
A successful command does not create a local [compaction] session entry in Pi. On failure, it only displays the error; it does not implicitly perform Pi local compaction or corrupt the current server-side response chain.
/gpt-enhance update only clears the capability cache. It does not send a model request or trigger compaction.
Fast mode
/gpt-enhance fast stores preferences by this model identity:
provider + api + model id + baseUrl
When enabled, the final OpenAI Responses request carries:
{
"service_tier": "priority"
}
Fast mode is independent of compression. When Fast is disabled, the extension does not remove a service_tier already set by the caller.
Preferences are stored in:
~/.pi/agent/gpt-enhance-preferences.json
Writes use an inter-process lock and an atomic rename. A missing or invalid file is treated as Fast being disabled. Tests can use PI_GPT_ENHANCE_PREFERENCES_FILE to specify an isolated path.
If a third-party provider omits service_tier from its response, Pi may be unable to calculate the priority multiplier; the request will still carry priority.
instructions promotion
By default, the extension examines the first input item in the Responses payload:
- Its role must be
developerorsystem - Its content must be a non-empty string
- The top level must not already contain non-empty
instructions
When these conditions are met, the item is removed from input and the original string is moved to top-level instructions. The extension does not duplicate the prompt or scan subsequent items.
The payload is left unchanged when:
- Top-level
instructionsis already non-empty - The first item is not system/developer
- Content is a structured array or another non-string value
promoteSystemPromptToInstructionsisfalse
This rule applies to normal requests, manual compaction, continuation fallback, and the public compactResponseChain() API.
Optional apply_patch
Write the following configuration to the global or project gpt-enhance.json:
{
"applyPatch": true
}
When enabled, the extension registers the Codex-compatible apply_patch custom tool only for eligible models. It supports:
- Add, Delete, Update, and Move
- Multi-file and multi-chunk patches
@@context anchors and*** End of File- Codex-style exact, trailing-whitespace, trim, and Unicode matching fallbacks
- A complete deterministic preflight before writing
- Stable multi-path locking under Pi's file mutation queue
Relative paths are resolved from the current request's ctx.cwd. When another extension provides a tool with the same name, the external tool always takes precedence; this extension does not override, disable, or manage it. When the model changes or another extension rewrites the active tools, this extension manages only the tool instance it registered.
This feature implements file patches only. It does not include the Codex runtime's shell, exec_command, PTY, sandbox, approval, MCP, remote execution, or progress protocols. The tool uses the current Pi process's file permissions.
Model metadata is provided separately
pi-gpt-enhance does not register, fill, or own model metadata. Metadata support is deliberately split into:
pi-autofill-model-metadata, the Pi extension that registers and fills model metadata for custom providerspi-codex-gpt-metadata, the standalone Codex catalog consumed by autofill; it has no Pi extension entry point and does not depend onpi-gpt-enhance
Configure Codex-backed metadata through autofill's codex/<model-id> source:
{
"mapping": {
"my-responses-provider": {
"gpt-5.6-sol[1m]": "codex/gpt-5.6-sol[1m]",
},
},
}
The two Pi extensions have no load-order dependency: autofill registers model metadata, while gpt-enhance registers only the enhanced Responses request flow. Pi merges both provider registrations. Model fields explicitly set in ~/.pi/agent/models.json still have the highest priority.
This extension gates request enhancements by API and model-ID prefix rather than by catalog membership, so metadata catalog updates remain independent from pi-gpt-enhance releases.
Local state files
| File | Contents |
|---|---|
~/.pi/agent/gpt-enhance.json |
User-level configuration |
.pi/gpt-enhance.json |
Project-level configuration |
~/.pi/agent/gpt-enhance-capabilities.json |
Capability cache isolated by provider/API/model/base URL |
~/.pi/agent/gpt-enhance-preferences.json |
Fast preferences isolated by model |
The capability cache contains no API keys, request content, or response content.
Development verification
bun run --filter pi-gpt-enhance typecheck
bun run --filter pi-gpt-enhance test
pi -e ./packages/gpt-enhance
Repository-level verification:
bun run check
npm pack --dry-run --json --workspace pi-gpt-enhance
Sources and license
Server-side capability probing uses the OpenAI Responses context_management parameter. Codex model catalog data is maintained separately in pi-codex-gpt-metadata and registered by pi-autofill-model-metadata.
src/apply-patch.ts and src/apply-patch-tool.ts contain modified Codex-derived implementations provided under Apache-2.0 with the Copyright 2025 OpenAI attribution retained. The remaining original code in this package is provided under MIT. The package-level license declaration is (MIT AND Apache-2.0).
The published package includes:
LICENSELICENSES/Apache-2.0.txtNOTICE
This extension is not an official OpenAI Codex product and is not endorsed by OpenAI.