6.7 KiB
issue, issue_title
| issue | issue_title |
|---|---|
| 17 | Remove src/model-option-compatibility.ts (out-of-scope provider monkey-patch) |
Remove model-option-compatibility provider monkey-patch
Problem Statement
src/model-option-compatibility.ts (~180 lines) monkey-patches getApiProvider from @mariozechner/pi-ai to strip unsupported temperature options for OpenAI Responses-style APIs (openai-codex-responses, openai-responses, azure-openai-responses).
It stashes state on globalThis and registers itself via registerModelOptionCompatibilityGuard(pi) from src/index.ts.
This module is out of scope for a permission-enforcement extension:
- It has nothing to do with policy gates over tools, bash, MCP, skills, or special operations.
- It mutates every extension's view of the provider stack at the process level via
pi.registerProvider(). - It violates AGENTS.md's "Keep modules focused" and "Permission decisions should be pure functions of (policy, request)" principles by introducing global, infectious side effects.
Goals
- Delete
src/model-option-compatibility.ts. - Remove the
registerModelOptionCompatibilityGuard(pi)call and its import fromsrc/index.ts. - Remove any associated tests or fixtures (none exist today — confirmed by grep).
- Remove any documentation references (none exist today).
- This is a breaking change for users who relied on the temperature-stripping shim being bundled in this extension.
Non-Goals
- Building a replacement extension (e.g.
pi-openai-responses-temperature-shim). If users still need the shim, that can ship separately; this issue is purely about removing it from the permission-system surface. - Changing any permission logic, policy semantics, or on-disk identity.
Background
Relevant modules
| File | Role |
|---|---|
src/model-option-compatibility.ts |
The module to delete. Exports registerModelOptionCompatibilityGuard() and helpers for temperature sanitization. |
src/index.ts |
Extension entry point. Imports and calls registerModelOptionCompatibilityGuard(pi) at line 1341 during extension initialization. |
Permission surface
None — this change removes code that has nothing to do with permission enforcement. No policy semantics, permission surfaces, merge precedence, or on-disk identity are affected.
Current call chain
src/index.ts piPermissionSystemExtension(pi)
└─ registerModelOptionCompatibilityGuard(pi) ← line 1341
└─ ensureModelOptionGuardForApi(pi, api) ← for each of 3 APIs
└─ pi.registerProvider(providerName, ...) ← monkey-patches provider stack
After removal, nothing in the extension references provider APIs or temperature options.
Design Overview
This is a pure deletion — no new code, no refactoring, no migration path.
Steps
- Delete
src/model-option-compatibility.ts. - In
src/index.ts:- Remove the import line:
import { registerModelOptionCompatibilityGuard } from "./model-option-compatibility.js"; - Remove the call:
registerModelOptionCompatibilityGuard(pi);
- Remove the import line:
What stays the same
Everything else.
The extension entry point, all permission logic, all event handlers, config loading, slash command, logging, permission forwarding — none of these reference model-option-compatibility.
Module-Level Changes
src/model-option-compatibility.ts — deleted
Entire file removed (~180 lines).
src/index.ts — two lines removed
- Remove import of
registerModelOptionCompatibilityGuardfrom"./model-option-compatibility.js". - Remove the
registerModelOptionCompatibilityGuard(pi);call.
Tests — no changes needed
No tests reference model-option-compatibility.
Confirmed by grepping tests/ for model.option, modelOption, temperatur, registerModelOption, and compatibility.
Docs — no changes needed
No references to model-option-compatibility exist in README.md, AGENTS.md, or docs/.
TDD Order
-
Baseline verification. Run
npm testandnpm run buildto confirm green. No commit. -
Delete module and remove references.
- Delete
src/model-option-compatibility.ts. - Remove the import and call from
src/index.ts. - Run
npm testandnpm run buildto confirm green. - Commit:
feat!: remove out-of-scope model-option-compatibility provider shim (#17)
- Delete
-
Verify no stale references. Grep the entire repo for
model-option-compatibility,registerModelOptionCompatibilityGuard,ModelOption,temperatur(catching bothtemperatureandTemperature), andGUARDED_TEMPERATURE_APIS. If any references remain in docs or config, remove them and amend or add a commit:docs: remove model-option-compatibility references (#17)
Risks and Mitigations
| Risk | Mitigation |
|---|---|
| Could this silently weaken a permission? | No. The deleted code has nothing to do with permission enforcement. It is a provider-level temperature shim with no connection to any permission surface. |
| Breaking change for users relying on the temperature shim. | Acknowledged. The feat!: commit prefix signals the breaking change. Users who need the shim can extract it into a standalone extension. The shim was never documented as a feature of this extension. |
globalThis state left behind. |
The globalThis.__piPermissionSystem* keys are set lazily by the deleted module. After removal, no code writes or reads them. If a previous version populated them, they are inert — no cleanup needed. |
| On-disk identity change. | None. Config directory, log filenames, /permission-system slash command, and event channel names are untouched. |
Open Questions
None — the scope is unambiguous.