pi-openai-codex-compat 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.0.18 - 2026-09-30
6
+
7
+ ### Fixed
8
+
9
+ - Keep Pi 0.99 running in the terminal UI. Pi 0.99's footer reads session
10
+ methods the Codex footer did not provide, so Pi exited on its first render.
11
+
12
+ ### Added
13
+
14
+ - Opt-in Responses Lite for GPT-6.1 Sol. GPT-6.1 Sol uses standard reasoning
15
+ mode even when `pro` is configured.
16
+
17
+ ### Changed
18
+
19
+ - Require Pi `>=0.99.1 <0.100.0`. Restart Pi after upgrading it.
20
+
5
21
  ## 0.0.17 - 2026-09-25
6
22
 
7
23
  ### Fixed
package/README.md CHANGED
@@ -22,7 +22,7 @@ Pi provides the Codex OAuth flow and model catalog. At session start, this packa
22
22
  ## Requirements
23
23
 
24
24
  - Node.js 22.19 or newer
25
- - Pi `>=0.87.0 <0.88.0`
25
+ - Pi `>=0.99.1 <0.100.0`
26
26
  - An OpenAI Codex login in Pi
27
27
 
28
28
  Restart Pi after upgrading its runtime. `/reload` reloads extensions but cannot
@@ -269,10 +269,15 @@ Defaults:
269
269
  | `reasoningMode` | `standard`, `pro` | `standard` | Controls supported models' execution mode independently of Pi's reasoning-effort control. The default omits `reasoning.mode`; `pro` sends `reasoning.mode: "pro"`. |
270
270
 
271
271
  Responses Lite supports exactly `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`,
272
- `gpt-6-astra`, `gpt-6-sol`, and `gpt-6-luna`. Pro reasoning mode supports
273
- `gpt-5.6`, `gpt-5.6-*`, and exactly `gpt-6-astra`. GPT-6 Sol and Luna use
274
- standard reasoning mode even when `pro` is configured. Both controls remain
275
- opt-in. GPT-6 Sol and Luna require Pi 0.87.1's model catalog.
272
+ `gpt-6-astra`, `gpt-6-sol`, `gpt-6-luna`, and `gpt-6.1-sol`. Pro reasoning mode
273
+ supports `gpt-5.6`, `gpt-5.6-*`, and exactly `gpt-6-astra`. GPT-6 Sol, GPT-6
274
+ Luna, and GPT-6.1 Sol use standard reasoning mode even when `pro` is configured.
275
+ Both controls remain opt-in. GPT-6.1 Sol requires Pi 0.99.1's model catalog.
276
+
277
+ As of September 30, 2026, the Codex endpoint rejects `reasoning.mode` for every
278
+ tested model, including those listed above, so `pro` requests fail there. The
279
+ setting remains for providers that accept it. Releases do not test pro mode
280
+ against `openai-codex`.
276
281
 
277
282
  Invalid JSON setting values are ignored and invalid JSON does not prevent Pi from
278
283
  starting. The settings pane reports malformed JSON instead of overwriting it.
@@ -645,7 +650,7 @@ npm run pack:dry
645
650
  `mise run check` runs the linters, formatters, type checks, and the offline
646
651
  test suite; `mise run test` runs only the offline suite. Both tasks bind
647
652
  `PI_PACKAGE_DIR` to `node_modules/@earendil-works/pi-coding-agent`, so tests
648
- that load Pi in-process read this repository's Pi 0.87.1 resources even when a
653
+ that load Pi in-process read this repository's Pi 0.99.1 resources even when a
649
654
  global `PI_PACKAGE_DIR` points at another installation. Ordinary `pi` launches
650
655
  outside these tasks are unaffected. Offline tests also exercise
651
656
  `scripts/release.ts` with every child process mocked: they never run Git, npm,
@@ -661,11 +666,11 @@ mise run test:live:codex
661
666
  ```
662
667
 
663
668
  The task obtains the local Codex bearer token and runs the tests with
664
- `gpt-5.6-luna`, `gpt-6-sol`, and `gpt-6-luna` at medium reasoning effort.
665
- It also packs the extension and loads that archive through the shipped Pi
666
- 0.87.1 CLI. Ordinary Responses and Responses Lite tests exercise tool calls,
669
+ `gpt-5.6-luna`, `gpt-6-sol`, `gpt-6-luna`, and `gpt-6.1-sol` at medium reasoning
670
+ effort. It also packs the extension and loads that archive through the shipped Pi
671
+ 0.99.1 CLI. Ordinary Responses and Responses Lite tests exercise tool calls,
667
672
  prompt reload, native compaction, and persisted-session resume against Codex.
668
- All three models use standard reasoning mode. SDK tests verify Responses Lite
673
+ All four models use standard reasoning mode. SDK tests verify Responses Lite
669
674
  WebSocket history, prewarming, continuation, and the built-in read tool.
670
675
  CLI tests also execute the built-in read tool after resume.
671
676
  Test credentials stay in memory and child-process environments. Test sessions
@@ -679,9 +684,9 @@ The packaged-CLI test selects its archive and executable as follows:
679
684
  existing regular file that `tar` can list, and an empty, missing, directory,
680
685
  or invalid value fails the test instead of falling back to a fresh pack.
681
686
  - `PI_CODEX_CLI_PATH` selects another Pi `cli.js`; the default is this
682
- repository's Pi 0.87.1 dependency. The test asserts that the selected
683
- executable reports version 0.87.1, the only Pi version the packaged CLI test
684
- is run against. The supported range is `>=0.87.0 <0.88.0`.
687
+ repository's Pi 0.99.1 dependency. The test asserts that the selected
688
+ executable reports version 0.99.1, the only Pi version the packaged CLI test
689
+ is run against. The supported range is `>=0.99.1 <0.100.0`.
685
690
  - Each Pi child process receives `PI_PACKAGE_DIR` bound to the selected
686
691
  executable's package directory, so the runtime under test reads its own
687
692
  metadata.
@@ -4,6 +4,7 @@ import {
4
4
  type ExtensionContext,
5
5
  type ReadonlyFooterDataProvider,
6
6
  type SessionEntry,
7
+ type SessionManager,
7
8
  } from "@earendil-works/pi-coding-agent";
8
9
  import type { Component } from "@earendil-works/pi-tui";
9
10
  import type { CodexCompatConfig } from "./config.ts";
@@ -69,14 +70,23 @@ export function footerModel(
69
70
  return { ...model, id, reasoning: false };
70
71
  }
71
72
 
73
+ /**
74
+ * The part of Pi's `AgentSession` that `FooterComponent` reads. Pi constructs the
75
+ * footer with its own session, so the compiler cannot check this adapter against
76
+ * the footer's actual reads; the packaged TUI test renders it through Pi.
77
+ */
72
78
  interface FooterSessionAdapter {
73
79
  readonly state: {
74
80
  model: Model<Api> | undefined;
75
81
  thinkingLevel: string;
76
82
  };
83
+ /** Pi keys its cached session statistics on this identity. */
84
+ readonly model: Model<Api> | undefined;
85
+ /** Extensions cannot observe virtual-model routing, so the footer omits it. */
86
+ readonly routedModel: undefined;
77
87
  sessionManager: Pick<
78
- ExtensionContext["sessionManager"],
79
- "getEntries" | "getCwd" | "getSessionName"
88
+ SessionManager,
89
+ "getEntries" | "getEntryCount" | "getCwd" | "getLeafId" | "getSessionId" | "getSessionName"
80
90
  >;
81
91
  getContextUsage: () => ReturnType<ExtensionContext["getContextUsage"]>;
82
92
  modelRuntime: {
@@ -190,13 +200,20 @@ class CachedFooterSession implements FooterSessionAdapter {
190
200
 
191
201
  readonly sessionManager: FooterSessionAdapter["sessionManager"];
192
202
  readonly modelRuntime: FooterSessionAdapter["modelRuntime"];
203
+ readonly routedModel = undefined;
193
204
 
194
205
  constructor(ctx: FooterContext, resolveConfig: ConfigResolver) {
195
206
  this.ctx = ctx;
196
207
  this.resolveConfig = resolveConfig;
208
+ // Pi's footer caches its statistics by session id, leaf id, entry count, and
209
+ // model. The aggregated snapshot is keyed by the same session and leaf, so
210
+ // both caches refresh together.
197
211
  this.sessionManager = {
198
212
  getEntries: () => this.getSnapshot().entries,
213
+ getEntryCount: () => this.getSnapshot().entries.length,
199
214
  getCwd: () => ctx.sessionManager.getCwd(),
215
+ getLeafId: () => ctx.sessionManager.getLeafId(),
216
+ getSessionId: () => ctx.sessionManager.getSessionId(),
200
217
  getSessionName: () => this.getSnapshot().displayName,
201
218
  };
202
219
  this.modelRuntime = {
@@ -220,6 +237,10 @@ class CachedFooterSession implements FooterSessionAdapter {
220
237
  };
221
238
  }
222
239
 
240
+ get model(): Model<Api> | undefined {
241
+ return selectedRegistryModel(this.ctx);
242
+ }
243
+
223
244
  get state(): FooterSessionAdapter["state"] {
224
245
  const model = selectedRegistryModel(this.ctx);
225
246
  return {
@@ -24,7 +24,7 @@ export const TRANSCRIPT_APIS = [
24
24
  */
25
25
  export const SESSION_APIS = ["buildSessionProjection"] as const;
26
26
 
27
- export const REQUIRED_PI = "Pi 0.87.x";
27
+ export const REQUIRED_PI = "Pi 0.99.x";
28
28
 
29
29
  /** Check the loaded host, not package metadata that PI_PACKAGE_DIR can override. */
30
30
  export function requirePiTranscriptRuntime(
@@ -12,6 +12,7 @@ const RESPONSES_LITE_MODELS: ReadonlySet<string> = new Set([
12
12
  "gpt-6-astra",
13
13
  "gpt-6-sol",
14
14
  "gpt-6-luna",
15
+ "gpt-6.1-sol",
15
16
  ]);
16
17
 
17
18
  function isHostedTool(tool: JsonRecord): boolean {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-openai-codex-compat",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "description": "OpenAI Codex compatibility for Pi with native compaction, fast mode, and Codex-optimized capabilities",
5
5
  "keywords": [
6
6
  "pi-package"
@@ -51,9 +51,9 @@
51
51
  "devDependencies": {
52
52
  "@2h2d/oxlint-config": "0.1.1",
53
53
  "@2h2d/ts-config": "0.0.1",
54
- "@earendil-works/pi-ai": "0.87.1",
55
- "@earendil-works/pi-coding-agent": "0.87.1",
56
- "@earendil-works/pi-tui": "0.87.1",
54
+ "@earendil-works/pi-ai": "0.99.1",
55
+ "@earendil-works/pi-coding-agent": "0.99.1",
56
+ "@earendil-works/pi-tui": "0.99.1",
57
57
  "@types/node": "22.20.1",
58
58
  "oxfmt": "0.64.0",
59
59
  "oxlint": "1.79.0",
@@ -62,9 +62,9 @@
62
62
  "typescript": "7.0.2"
63
63
  },
64
64
  "peerDependencies": {
65
- "@earendil-works/pi-ai": ">=0.87.0 <0.88.0",
66
- "@earendil-works/pi-coding-agent": ">=0.87.0 <0.88.0",
67
- "@earendil-works/pi-tui": ">=0.87.0 <0.88.0",
65
+ "@earendil-works/pi-ai": ">=0.99.1 <0.100.0",
66
+ "@earendil-works/pi-coding-agent": ">=0.99.1 <0.100.0",
67
+ "@earendil-works/pi-tui": ">=0.99.1 <0.100.0",
68
68
  "typebox": "*"
69
69
  },
70
70
  "engines": {