@diegopetrucci/pi-extensions 0.1.55 → 0.1.57

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.
Files changed (76) hide show
  1. package/.pi-fleet-tested-version +1 -1
  2. package/README.md +2 -2
  3. package/extensions/agent-workflow-audit/.pi-fleet-tested-version +1 -1
  4. package/extensions/agent-workflow-audit/package.json +1 -1
  5. package/extensions/annotate-git-diff/.pi-fleet-tested-version +1 -1
  6. package/extensions/annotate-git-diff/package.json +2 -2
  7. package/extensions/annotate-last-message/.pi-fleet-tested-version +1 -1
  8. package/extensions/annotate-last-message/package.json +1 -1
  9. package/extensions/brrr/.pi-fleet-tested-version +1 -1
  10. package/extensions/brrr/README.md +3 -3
  11. package/extensions/brrr/index.ts +26 -6
  12. package/extensions/brrr/package.json +1 -1
  13. package/extensions/claude-fast/.pi-fleet-tested-version +1 -1
  14. package/extensions/claude-fast/README.md +3 -3
  15. package/extensions/claude-fast/index.ts +1 -2
  16. package/extensions/claude-fast/package.json +1 -1
  17. package/extensions/code-reviewer/.pi-fleet-tested-version +1 -1
  18. package/extensions/code-reviewer/index.ts +27 -19
  19. package/extensions/code-reviewer/package.json +1 -1
  20. package/extensions/confirm-destructive/.pi-fleet-tested-version +1 -1
  21. package/extensions/confirm-destructive/package.json +1 -1
  22. package/extensions/context-cap/.pi-fleet-tested-version +1 -1
  23. package/extensions/context-cap/package.json +1 -1
  24. package/extensions/context-inspector/.pi-fleet-tested-version +1 -1
  25. package/extensions/context-inspector/README.md +4 -2
  26. package/extensions/context-inspector/index.ts +10 -4
  27. package/extensions/context-inspector/package.json +1 -1
  28. package/extensions/contrarian/.pi-fleet-tested-version +1 -1
  29. package/extensions/contrarian/index.ts +96 -92
  30. package/extensions/contrarian/package.json +1 -1
  31. package/extensions/dirty-repo-guard/.pi-fleet-tested-version +1 -1
  32. package/extensions/dirty-repo-guard/package.json +1 -1
  33. package/extensions/dynamic-context-pruning/.pi-fleet-tested-version +1 -1
  34. package/extensions/dynamic-context-pruning/package.json +1 -1
  35. package/extensions/git-footer/.pi-fleet-tested-version +1 -1
  36. package/extensions/git-footer/package.json +1 -1
  37. package/extensions/gnosis/.pi-fleet-tested-version +1 -1
  38. package/extensions/gnosis/package.json +1 -1
  39. package/extensions/illustrations-to-explain-things/.pi-fleet-tested-version +1 -1
  40. package/extensions/illustrations-to-explain-things/package.json +1 -1
  41. package/extensions/inline-bash/.pi-fleet-tested-version +1 -1
  42. package/extensions/inline-bash/package.json +1 -1
  43. package/extensions/librarian/.pi-fleet-tested-version +1 -1
  44. package/extensions/librarian/README.md +1 -1
  45. package/extensions/librarian/index.ts +39 -8
  46. package/extensions/librarian/package.json +1 -1
  47. package/extensions/minimal-footer/.pi-fleet-tested-version +1 -1
  48. package/extensions/minimal-footer/README.md +3 -3
  49. package/extensions/minimal-footer/index.ts +1 -1
  50. package/extensions/minimal-footer/package.json +1 -1
  51. package/extensions/notify/.pi-fleet-tested-version +1 -1
  52. package/extensions/notify/README.md +3 -3
  53. package/extensions/notify/index.ts +4 -6
  54. package/extensions/notify/package.json +1 -1
  55. package/extensions/openai-fast/.pi-fleet-tested-version +1 -1
  56. package/extensions/openai-fast/README.md +5 -5
  57. package/extensions/openai-fast/index.ts +11 -5
  58. package/extensions/openai-fast/package.json +2 -2
  59. package/extensions/oracle/.pi-fleet-tested-version +1 -1
  60. package/extensions/oracle/index.ts +97 -90
  61. package/extensions/oracle/package.json +1 -1
  62. package/extensions/permission-gate/.pi-fleet-tested-version +1 -1
  63. package/extensions/permission-gate/README.md +11 -4
  64. package/extensions/permission-gate/index.ts +156 -17
  65. package/extensions/permission-gate/package.json +5 -3
  66. package/extensions/quiet-tools/.pi-fleet-tested-version +1 -1
  67. package/extensions/quiet-tools/package.json +1 -1
  68. package/extensions/review/.pi-fleet-tested-version +1 -1
  69. package/extensions/review/README.md +1 -1
  70. package/extensions/review/index.ts +4 -4
  71. package/extensions/review/package.json +1 -1
  72. package/extensions/todo/.pi-fleet-tested-version +1 -1
  73. package/extensions/todo/package.json +1 -1
  74. package/extensions/triage-comments/.pi-fleet-tested-version +1 -1
  75. package/extensions/triage-comments/package.json +1 -1
  76. package/package.json +9 -6
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-librarian",
3
- "version": "0.1.9",
3
+ "version": "0.1.10",
4
4
  "description": "A pi GitHub research scout with a toggleable local repo checkout cache under the user's OS cache directory.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -1 +1 @@
1
- 0.80.3
1
+ 0.80.6
@@ -89,10 +89,10 @@ Then reload pi:
89
89
 
90
90
  Config files are merged, with project config overriding global config:
91
91
 
92
- - `~/.pi/agent/extensions/minimal-footer.json`
93
- - `<project>/.pi/minimal-footer.json`
92
+ - `~/<pi-config-dir>/agent/extensions/minimal-footer.json`
93
+ - `<project>/<pi-config-dir>/minimal-footer.json`
94
94
 
95
- Project config is only read after Pi reports that the project is trusted.
95
+ Here `<pi-config-dir>` is Pi's runtime config directory name (`CONFIG_DIR_NAME`; `.pi` by default). Project config is only read after Pi reports that the project is trusted.
96
96
 
97
97
  A ready-to-copy sample file is included at [`minimal-footer.example.json`](./minimal-footer.example.json).
98
98
 
@@ -3,6 +3,7 @@ import { spawn } from "node:child_process";
3
3
  import { basename, dirname, join } from "node:path";
4
4
  import {
5
5
  AuthStorage,
6
+ CONFIG_DIR_NAME,
6
7
  getAgentDir,
7
8
  type ExtensionAPI,
8
9
  type ExtensionContext,
@@ -15,7 +16,6 @@ import {
15
16
  type UsageSnapshot,
16
17
  } from "./openai-usage";
17
18
 
18
- const CONFIG_DIR_NAME = ".pi";
19
19
 
20
20
  const DEFAULT_CONFIG: MinimalFooterConfig = {
21
21
  context: {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-minimal-footer",
3
- "version": "0.1.12",
3
+ "version": "0.1.14",
4
4
  "description": "A minimal custom footer for pi.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -1 +1 @@
1
- 0.80.3
1
+ 0.80.6
@@ -64,10 +64,10 @@ Then reload pi:
64
64
 
65
65
  Config files are merged, with project config overriding global config:
66
66
 
67
- - `~/.pi/agent/extensions/notify.json`
68
- - `<project>/.pi/notify.json`
67
+ - `~/<pi-config-dir>/agent/extensions/notify.json`
68
+ - `<project>/<pi-config-dir>/notify.json`
69
69
 
70
- Project config is only read after Pi reports that the project is trusted.
70
+ Here `<pi-config-dir>` is Pi's runtime config directory name (`CONFIG_DIR_NAME`; `.pi` by default). Project config is only read after Pi reports that the project is trusted.
71
71
 
72
72
  A ready-to-copy sample file is included at [`notify.example.json`](./notify.example.json).
73
73
 
@@ -9,17 +9,15 @@
9
9
  * - sound playback
10
10
  *
11
11
  * Config files (project overrides global):
12
- * - ~/.pi/agent/extensions/notify.json
13
- * - <cwd>/.pi/notify.json, when the project is trusted
12
+ * - ~/<pi-config-dir>/agent/extensions/notify.json
13
+ * - <cwd>/<pi-config-dir>/notify.json, when the project is trusted
14
14
  */
15
15
 
16
16
  import { execFile } from "node:child_process";
17
17
  import { existsSync, readFileSync } from "node:fs";
18
18
  import { join } from "node:path";
19
19
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
20
- import { getAgentDir } from "@earendil-works/pi-coding-agent";
21
-
22
- const CONFIG_DIR_NAME = ".pi";
20
+ import { CONFIG_DIR_NAME, getAgentDir } from "@earendil-works/pi-coding-agent";
23
21
 
24
22
  type TerminalBackend = "auto" | "osc777" | "osc99" | "none";
25
23
  type DesktopBackend = "auto" | "macos" | "linux" | "windows-toast" | "none";
@@ -257,7 +255,7 @@ async function playSound(config: NotifyConfig, backend: Exclude<SoundBackend, "a
257
255
  }
258
256
 
259
257
  export default function notifyExtension(pi: ExtensionAPI) {
260
- pi.on("agent_end", async (_event, ctx) => {
258
+ pi.on("agent_settled", async (_event, ctx) => {
261
259
  const config = loadConfig(ctx);
262
260
  if (!config.enabled) return;
263
261
  if (config.onlyWhenInteractive && !ctx.hasUI) return;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-notify",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "A pi extension that sends a notification when the agent is ready for input.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -1 +1 @@
1
- 0.80.3
1
+ 0.80.6
@@ -1,6 +1,6 @@
1
1
  # openai-fast
2
2
 
3
- A pi extension that enables OpenAI Codex Fast mode for ChatGPT-auth GPT-5.4 and GPT-5.5.
3
+ A pi extension that enables OpenAI Codex Fast mode for ChatGPT-auth GPT-5.4, GPT-5.5, and GPT-5.6 Codex variants (`gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`).
4
4
 
5
5
  When active, the extension injects this into eligible OpenAI Codex request payloads:
6
6
 
@@ -18,7 +18,7 @@ Fast mode is only injected when all of these are true:
18
18
 
19
19
  - The current provider is `openai-codex`.
20
20
  - The current API is `openai-codex-responses`.
21
- - The current model is `gpt-5.4` or `gpt-5.5`.
21
+ - The current model is `gpt-5.4`, `gpt-5.5`, `gpt-5.6-sol`, `gpt-5.6-terra`, or `gpt-5.6-luna`.
22
22
  - The provider is using ChatGPT OAuth/subscription auth, not API-key auth.
23
23
  - The request payload does not already include `service_tier`.
24
24
 
@@ -37,16 +37,16 @@ The extension defaults to off so installing the full collection does not acciden
37
37
  Optional global config:
38
38
 
39
39
  ```text
40
- ~/.pi/agent/extensions/openai-fast.json
40
+ ~/<pi-config-dir>/agent/extensions/openai-fast.json
41
41
  ```
42
42
 
43
43
  Optional project config:
44
44
 
45
45
  ```text
46
- .pi/openai-fast.json
46
+ <project>/<pi-config-dir>/openai-fast.json
47
47
  ```
48
48
 
49
- Project config overrides global config after Pi reports that the project is trusted.
49
+ Here `<pi-config-dir>` is Pi's runtime config directory name (`CONFIG_DIR_NAME`; `.pi` by default). Project config overrides global config after Pi reports that the project is trusted.
50
50
 
51
51
  ```json
52
52
  {
@@ -1,18 +1,24 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
2
  import { dirname, join } from "node:path";
3
3
  import {
4
+ CONFIG_DIR_NAME,
4
5
  getAgentDir,
5
6
  type ExtensionAPI,
6
7
  type ExtensionContext,
7
8
  } from "@earendil-works/pi-coding-agent";
8
9
 
9
- const CONFIG_DIR_NAME = ".pi";
10
-
11
10
  const EXTENSION_ID = "openai-fast";
12
11
  const PROVIDER_ID = "openai-codex";
13
12
  const API_ID = "openai-codex-responses";
14
13
  const FAST_SERVICE_TIER = "priority";
15
- const SUPPORTED_MODELS = new Set(["gpt-5.4", "gpt-5.5"]);
14
+ const SUPPORTED_MODELS = new Set([
15
+ "gpt-5.4",
16
+ "gpt-5.5",
17
+ "gpt-5.6-sol",
18
+ "gpt-5.6-terra",
19
+ "gpt-5.6-luna",
20
+ ]);
21
+ const SUPPORTED_MODELS_LABEL = "gpt-5.4, gpt-5.5, gpt-5.6-sol, gpt-5.6-terra, or gpt-5.6-luna";
16
22
 
17
23
  const DEFAULT_CONFIG: OpenAIFastConfig = {
18
24
  enabled: false,
@@ -148,7 +154,7 @@ function getEligibility(ctx: ExtensionContext): Eligibility {
148
154
  return {
149
155
  eligible: false,
150
156
  modelKey: key,
151
- reason: "Fast mode is only enabled for gpt-5.4 and gpt-5.5",
157
+ reason: `Fast mode is only enabled for ${SUPPORTED_MODELS_LABEL}`,
152
158
  };
153
159
  }
154
160
 
@@ -251,7 +257,7 @@ export default function openAIFastExtension(pi: ExtensionAPI) {
251
257
  });
252
258
 
253
259
  pi.registerCommand("fast", {
254
- description: "Toggle OpenAI Codex Fast mode for ChatGPT-auth GPT-5.4/GPT-5.5",
260
+ description: "Toggle OpenAI Codex Fast mode for ChatGPT-auth GPT-5.4, GPT-5.5, and GPT-5.6 Codex variants",
255
261
  getArgumentCompletions: () => null,
256
262
  handler: async (args, ctx) => {
257
263
  const state = getState(ctx);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-openai-fast",
3
- "version": "0.1.7",
4
- "description": "A pi extension that enables OpenAI Codex Fast mode for ChatGPT-auth GPT-5.4 and GPT-5.5 by injecting the priority service tier.",
3
+ "version": "0.1.9",
4
+ "description": "A pi extension that enables OpenAI Codex Fast mode for ChatGPT-auth GPT-5.4, GPT-5.5, and GPT-5.6 Codex variants by injecting the priority service tier.",
5
5
  "keywords": [
6
6
  "pi-package",
7
7
  "pi",
@@ -1 +1 @@
1
- 0.80.3
1
+ 0.80.6
@@ -7,7 +7,7 @@ import { getAgentDir, getMarkdownTheme, type ExtensionAPI, type ExtensionContext
7
7
  import { Container, Markdown, Spacer, Text } from "@earendil-works/pi-tui";
8
8
  import { Type } from "typebox";
9
9
 
10
- type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
10
+ type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
11
11
  type ThinkingLevelMap = Partial<Record<ThinkingLevel, unknown | null>>;
12
12
 
13
13
  type PiModel = {
@@ -67,7 +67,7 @@ interface OraclePreferences {
67
67
  const READ_ONLY_TOOLS = ["read", "grep", "find", "ls"];
68
68
  const READ_ONLY_PLUS_BASH_TOOLS = [...READ_ONLY_TOOLS, "bash"];
69
69
  const DEFAULT_THINKING_LEVEL: ThinkingLevel = "xhigh";
70
- const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh"] as const;
70
+ const THINKING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"] as const;
71
71
  const COLLAPSED_LINE_LIMIT = 8;
72
72
  const ORACLE_STATUS_ID = "oracle";
73
73
  const ORACLE_WIDGET_ID = "oracle";
@@ -96,40 +96,32 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
96
96
  anthropic: [
97
97
  "claude-fable-5",
98
98
  "claude-opus-4-8",
99
- "claude-opus-4.8",
100
99
  "claude-opus-4-7",
101
- "claude-opus-4.7",
102
100
  "claude-opus-4-6",
103
- "claude-opus-4.6",
104
101
  "claude-opus-4-5",
105
- "claude-opus-4.5",
106
102
  "claude-opus-4-1",
107
- "claude-opus-4.1",
108
- "claude-opus-4-0",
109
- "claude-opus-4",
110
- "claude-sonnet-5-0",
111
- "claude-sonnet-5.0",
112
103
  "claude-sonnet-5",
113
104
  "claude-sonnet-4-6",
114
- "claude-sonnet-4.6",
115
105
  "claude-sonnet-4-5",
116
- "claude-sonnet-4.5",
117
- "claude-sonnet-4-0",
118
- "claude-sonnet-4",
119
- "claude-3-7-sonnet",
120
106
  ],
121
107
  "ant-ling": ["Ling-2.6-1T", "Ling-2.6-flash"],
122
108
  "azure-openai-responses": [
109
+ "gpt-5.6-sol",
110
+ "gpt-5.6-terra",
111
+ "gpt-5.6-luna",
123
112
  "gpt-5.5-pro",
124
113
  "gpt-5.5",
125
114
  "gpt-5.4-pro",
126
115
  "gpt-5.4",
127
116
  "gpt-5.3-codex",
128
117
  "gpt-5-pro",
118
+ "gpt-5-chat-latest",
129
119
  "gpt-5.2-pro",
130
120
  "gpt-5.2",
131
121
  "gpt-5.2-codex",
132
122
  "gpt-5.1-codex-max",
123
+ "gpt-5.1-codex",
124
+ "gpt-5.1",
133
125
  "gpt-5.1-chat-latest",
134
126
  "o3-pro",
135
127
  "o3-deep-research",
@@ -137,7 +129,7 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
137
129
  "gpt-5.4-mini",
138
130
  "gpt-5-mini",
139
131
  ],
140
- cerebras: ["gpt-oss-120b", "zai-glm-4.7", "llama3.1-8b"],
132
+ cerebras: ["gpt-oss-120b", "zai-glm-4.7", "gemma-4-31b"],
141
133
  "cloudflare-ai-gateway": [
142
134
  "claude-fable-5",
143
135
  "claude-opus-4-7",
@@ -155,8 +147,8 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
155
147
  "@cf/zai-org/glm-5.2",
156
148
  "@cf/moonshotai/kimi-k2.6",
157
149
  "@cf/nvidia/nemotron-3-120b-a12b",
158
- "@cf/moonshotai/kimi-k2.5",
159
150
  "@cf/openai/gpt-oss-120b",
151
+ "@cf/qwen/qwen3-30b-a3b-fp8",
160
152
  "@cf/zai-org/glm-4.7-flash",
161
153
  ],
162
154
  deepseek: ["deepseek-v4-pro", "deepseek-v4-flash"],
@@ -165,13 +157,17 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
165
157
  "accounts/fireworks/models/kimi-k2p7-code",
166
158
  "accounts/fireworks/routers/kimi-k2p7-code-fast",
167
159
  "accounts/fireworks/models/glm-5p2",
160
+ "accounts/fireworks/routers/glm-5p2-fast",
168
161
  "accounts/fireworks/models/minimax-m3",
169
162
  "accounts/fireworks/models/glm-5p1",
163
+ "accounts/fireworks/routers/glm-5p1-fast",
170
164
  "accounts/fireworks/models/kimi-k2p6",
165
+ "accounts/fireworks/routers/kimi-k2p6-turbo",
166
+ "accounts/fireworks/routers/kimi-k2p6-fast",
171
167
  "accounts/fireworks/models/minimax-m2p7",
172
168
  "accounts/fireworks/models/qwen3p7-plus",
173
- "accounts/fireworks/models/qwen3p6-plus",
174
169
  "accounts/fireworks/models/gpt-oss-120b",
170
+ "accounts/fireworks/models/gpt-oss-20b",
175
171
  ],
176
172
  "github-copilot": [
177
173
  "claude-fable-5",
@@ -182,42 +178,46 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
182
178
  "gpt-5.5",
183
179
  "gpt-5.4",
184
180
  "gpt-5.3-codex",
181
+ "gpt-5.2-codex",
185
182
  "gpt-5.2",
186
- "gpt-5.1-codex-max",
187
- "gpt-5.1",
188
- "gpt-5",
189
183
  "gemini-3.1-pro-preview",
190
- "gemini-3-pro-preview",
191
- "claude-sonnet-5.0",
184
+ "gemini-3.5-flash",
185
+ "gemini-3-flash-preview",
192
186
  "claude-sonnet-5",
193
187
  "claude-sonnet-4.6",
194
188
  "claude-sonnet-4.5",
195
189
  "gemini-2.5-pro",
190
+ "gpt-5-mini",
191
+ "kimi-k2.7-code",
196
192
  ],
197
193
  google: [
198
194
  "gemini-3.1-pro-preview-customtools",
199
195
  "gemini-3.1-pro-preview",
200
196
  "gemini-3-pro-preview",
201
- "gemini-2.5-pro-preview",
197
+ "gemini-3.5-flash",
202
198
  "gemini-2.5-pro",
203
- "gemini-2.5-flash-preview",
204
- "gemini-2.5-flash-lite-preview",
199
+ "gemini-2.5-flash",
200
+ "gemini-3.1-flash-lite-preview",
201
+ "gemini-3.1-flash-lite",
205
202
  "gemini-2.5-flash-lite",
203
+ "gemini-2.0-flash",
206
204
  ],
207
205
  "google-vertex": [
208
206
  "gemini-3.1-pro-preview-customtools",
209
207
  "gemini-3.1-pro-preview",
210
- "gemini-3-pro-preview",
208
+ "gemini-3.5-flash",
209
+ "gemini-3-flash-preview",
211
210
  "gemini-2.5-pro",
211
+ "gemini-2.5-flash",
212
+ "gemini-3.1-flash-lite",
212
213
  "gemini-2.5-flash-lite",
213
- "gemini-2.0-flash-lite",
214
214
  ],
215
215
  groq: [
216
216
  "openai/gpt-oss-120b",
217
- "groq/compound-mini",
218
217
  "qwen/qwen3-32b",
219
- "moonshotai/kimi-k2-instruct",
220
- "meta-llama/llama-4-scout",
218
+ "meta-llama/llama-4-scout-17b-16e-instruct",
219
+ "llama-3.3-70b-versatile",
220
+ "openai/gpt-oss-20b",
221
221
  ],
222
222
  huggingface: [
223
223
  "zai-org/GLM-5.1",
@@ -247,16 +247,22 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
247
247
  "devstral-2512",
248
248
  ],
249
249
  openai: [
250
+ "gpt-5.6-sol",
251
+ "gpt-5.6-terra",
252
+ "gpt-5.6-luna",
250
253
  "gpt-5.5-pro",
251
254
  "gpt-5.5",
252
255
  "gpt-5.4-pro",
253
256
  "gpt-5.4",
254
257
  "gpt-5.3-codex",
255
258
  "gpt-5-pro",
259
+ "gpt-5-chat-latest",
256
260
  "gpt-5.2-pro",
257
261
  "gpt-5.2",
258
262
  "gpt-5.2-codex",
259
263
  "gpt-5.1-codex-max",
264
+ "gpt-5.1-codex",
265
+ "gpt-5.1",
260
266
  "gpt-5.1-chat-latest",
261
267
  "o3-pro",
262
268
  "o3-deep-research",
@@ -265,14 +271,13 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
265
271
  "gpt-5-mini",
266
272
  ],
267
273
  "openai-codex": [
274
+ "gpt-5.6-sol",
275
+ "gpt-5.6-terra",
276
+ "gpt-5.6-luna",
268
277
  "gpt-5.5",
269
278
  "gpt-5.4",
270
- "gpt-5.3-codex",
271
- "gpt-5.2",
272
- "gpt-5.1-codex-max",
273
279
  "gpt-5.4-mini",
274
- "gpt-5.1-codex-mini",
275
- "big-pickle",
280
+ "gpt-5.3-codex-spark",
276
281
  ],
277
282
  opencode: [
278
283
  "claude-fable-5",
@@ -287,15 +292,19 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
287
292
  "gpt-5.3-codex",
288
293
  "gpt-5.2-codex",
289
294
  "gpt-5.1-codex",
295
+ "grok-4.5",
296
+ "gemini-3.5-flash",
290
297
  "gemini-3.1-pro",
298
+ "glm-5.2",
291
299
  "glm-5.1",
292
300
  "glm-5",
301
+ "kimi-k2.7-code",
293
302
  "kimi-k2.6",
294
303
  "kimi-k2.5",
295
304
  "qwen3.6-plus",
296
305
  "qwen3.5-plus",
306
+ "minimax-m3",
297
307
  "minimax-m2.7",
298
- "minimax-m2.5-free",
299
308
  ],
300
309
  "opencode-go": [
301
310
  "deepseek-v4-pro",
@@ -305,12 +314,11 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
305
314
  "qwen3.7-plus",
306
315
  "qwen3.6-plus",
307
316
  "mimo-v2.5-pro",
308
- "mimo-v2-pro",
317
+ "mimo-v2.5",
309
318
  "minimax-m3",
310
319
  "minimax-m2.7",
311
320
  "kimi-k2.7-code",
312
321
  "kimi-k2.6",
313
- "kimi-k2.5",
314
322
  ],
315
323
  openrouter: [
316
324
  "anthropic/claude-fable-5",
@@ -318,20 +326,30 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
318
326
  "anthropic/claude-opus-4.8",
319
327
  "anthropic/claude-opus-4.8-fast",
320
328
  "anthropic/claude-opus-4.7",
321
- "anthropic/claude-opus-4.6-fast",
329
+ "anthropic/claude-opus-4.7-fast",
322
330
  "anthropic/claude-opus-4.6",
323
331
  "anthropic/claude-opus-4.5",
324
- "anthropic/claude-opus-4",
332
+ "anthropic/claude-opus-4.1",
333
+ "openai/gpt-5.6-sol-pro",
334
+ "openai/gpt-5.6-sol",
335
+ "openai/gpt-5.6-terra-pro",
336
+ "openai/gpt-5.6-terra",
337
+ "openai/gpt-5.6-luna-pro",
338
+ "openai/gpt-5.6-luna",
325
339
  "openai/gpt-5.5-pro",
326
340
  "openai/gpt-5.5",
327
- "openai/gpt-5.4-pro",
328
- "openai/gpt-5.4",
341
+ "~openai/gpt-latest",
329
342
  "google/gemini-3.1-pro-preview-customtools",
330
343
  "google/gemini-3.1-pro-preview",
344
+ "~google/gemini-pro-latest",
345
+ "google/gemini-3.5-flash",
331
346
  "google/gemini-2.5-pro",
332
347
  "moonshotai/kimi-k2.7-code",
348
+ "~moonshotai/kimi-latest",
333
349
  "moonshotai/kimi-k2.6",
334
350
  "moonshotai/kimi-k2-thinking",
351
+ "x-ai/grok-4.5",
352
+ "~x-ai/grok-latest",
335
353
  "deepseek/deepseek-v4-pro",
336
354
  "deepseek/deepseek-r1",
337
355
  "deepseek/deepseek-v3.2",
@@ -343,6 +361,7 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
343
361
  ],
344
362
  together: [
345
363
  "deepseek-ai/DeepSeek-V4-Pro",
364
+ "zai-org/GLM-5.2",
346
365
  "zai-org/GLM-5.1",
347
366
  "moonshotai/Kimi-K2.7-Code",
348
367
  "moonshotai/Kimi-K2.6",
@@ -351,12 +370,10 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
351
370
  "MiniMaxAI/MiniMax-M3",
352
371
  "MiniMaxAI/MiniMax-M2.7",
353
372
  "Qwen/Qwen3.5-397B-A17B",
354
- "Qwen/Qwen3-Coder-Next-FP8",
355
- "Qwen/Qwen3-235B-A22B-Instruct-2507-tput",
356
373
  "openai/gpt-oss-120b",
357
- "moonshotai/Kimi-K2.5",
358
- "deepseek-ai/DeepSeek-V3-1",
359
- "MiniMaxAI/MiniMax-M2.5",
374
+ "openai/gpt-oss-20b",
375
+ "nvidia/nemotron-3-ultra-550b-a55b",
376
+ "google/gemma-4-31B-it",
360
377
  ],
361
378
  "vercel-ai-gateway": [
362
379
  "anthropic/claude-fable-5",
@@ -365,13 +382,17 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
365
382
  "anthropic/claude-opus-4.6",
366
383
  "anthropic/claude-opus-4.5",
367
384
  "anthropic/claude-opus-4.1",
368
- "anthropic/claude-sonnet-5.0",
369
385
  "anthropic/claude-sonnet-5",
370
386
  "anthropic/claude-sonnet-4.6",
387
+ "openai/gpt-5.6-sol",
388
+ "openai/gpt-5.6-terra",
389
+ "openai/gpt-5.6-luna",
371
390
  "openai/gpt-5.5-pro",
372
391
  "openai/gpt-5.5",
373
392
  "openai/gpt-5.4-pro",
374
393
  "openai/gpt-5.4",
394
+ "openai/gpt-5.3-codex",
395
+ "openai/gpt-5.2-codex",
375
396
  "openai/gpt-5.1-codex",
376
397
  "openai/gpt-5-codex",
377
398
  "moonshotai/kimi-k2.7-code",
@@ -382,52 +403,37 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
382
403
  "deepseek/deepseek-v3.2-thinking",
383
404
  "alibaba/qwen3.7-max",
384
405
  "alibaba/qwen3.7-plus",
406
+ "alibaba/qwen3.6-plus",
385
407
  "alibaba/qwen3.5-plus",
386
408
  "alibaba/qwen3-max-thinking",
387
409
  "google/gemini-3.1-pro-preview",
410
+ "google/gemini-3.5-flash",
388
411
  "google/gemini-3-flash",
389
- "xai/grok-4.3",
412
+ "xai/grok-4.5",
413
+ "xai/grok-4.20-reasoning",
390
414
  "minimax/minimax-m3",
391
415
  "zai/glm-5.2",
392
416
  "zai/glm-5.1",
393
417
  ],
394
418
  xai: [
395
- "grok-4.3",
419
+ "grok-4.5",
396
420
  "grok-4.20-0309-reasoning",
397
- "grok-4-1-fast",
398
- "grok-4-fast",
399
- "grok-4",
400
- "grok-3-mini-latest",
401
- "grok-3-mini-fast",
402
- "grok-3-latest",
421
+ "grok-4.20-0309-non-reasoning",
422
+ "grok-4.3",
423
+ "grok-build-0.1",
424
+ "grok-code-fast-1",
425
+ "grok-3-fast",
426
+ "grok-3",
403
427
  ],
404
428
  xiaomi: ["mimo-v2.5-pro", "mimo-v2.5", "mimo-v2-pro", "mimo-v2-omni", "mimo-v2-flash"],
405
- "xiaomi-token-plan-ams": [
406
- "mimo-v2.5-pro",
407
- "mimo-v2.5",
408
- "mimo-v2-pro",
409
- "mimo-v2-omni",
410
- "mimo-v2-flash",
411
- ],
412
- "xiaomi-token-plan-cn": [
413
- "mimo-v2.5-pro",
414
- "mimo-v2.5",
415
- "mimo-v2-pro",
416
- "mimo-v2-omni",
417
- "mimo-v2-flash",
418
- ],
419
- "xiaomi-token-plan-sgp": [
420
- "mimo-v2.5-pro",
421
- "mimo-v2.5",
422
- "mimo-v2-pro",
423
- "mimo-v2-omni",
424
- "mimo-v2-flash",
425
- ],
429
+ "xiaomi-token-plan-ams": ["mimo-v2.5-pro", "mimo-v2.5", "mimo-v2-pro"],
430
+ "xiaomi-token-plan-cn": ["mimo-v2.5-pro", "mimo-v2.5", "mimo-v2-pro"],
431
+ "xiaomi-token-plan-sgp": ["mimo-v2.5-pro", "mimo-v2.5", "mimo-v2-pro"],
426
432
  nvidia: [
427
433
  "nvidia/nemotron-3-ultra-550b-a55b",
428
434
  "nvidia/nemotron-3-super-120b-a12b",
429
435
  "moonshotai/kimi-k2.6",
430
- "z-ai/glm-5.1",
436
+ "z-ai/glm-5.2",
431
437
  "qwen/qwen3.5-122b-a10b",
432
438
  "openai/gpt-oss-120b",
433
439
  "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning",
@@ -438,11 +444,7 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
438
444
  "glm-5.1",
439
445
  "glm-5-turbo",
440
446
  "glm-5v-turbo",
441
- "glm-5",
442
447
  "glm-4.7",
443
- "glm-4.7-flash",
444
- "glm-4.6v",
445
- "glm-4.5v",
446
448
  "glm-4.5-air",
447
449
  ],
448
450
  "zai-coding-cn": [
@@ -524,7 +526,7 @@ function normalizeModelPreference(value: unknown): string | undefined {
524
526
  function parseModelPreference(value: unknown): { model?: string; thinkingLevel?: ThinkingLevel } {
525
527
  const model = normalizeModelPreference(value);
526
528
  if (!model) return {};
527
- const match = model.match(/^(.*):(off|minimal|low|medium|high|xhigh)$/i);
529
+ const match = model.match(/^(.*):(off|minimal|low|medium|high|xhigh|max)$/i);
528
530
  if (!match?.[1]) return { model };
529
531
  return { model: match[1], thinkingLevel: parseThinkingLevel(match[2]) };
530
532
  }
@@ -721,7 +723,7 @@ function getPiInvocation(args: string[]): { command: string; args: string[] } {
721
723
  }
722
724
 
723
725
  function withThinking(modelRef: string, thinkingLevel: ThinkingLevel): string {
724
- if (/(?:^|\/)[^:]+:(off|minimal|low|medium|high|xhigh)$/i.test(modelRef)) return modelRef;
726
+ if (/(?:^|\/)[^:]+:(off|minimal|low|medium|high|xhigh|max)$/i.test(modelRef)) return modelRef;
725
727
  return `${modelRef}:${thinkingLevel}`;
726
728
  }
727
729
 
@@ -730,8 +732,8 @@ function isThinkingLevelSupported(model: PiModel, level: ThinkingLevel): boolean
730
732
  if (!model.reasoning) return level === "off";
731
733
 
732
734
  const map = model.thinkingLevelMap;
733
- if (level === "xhigh") {
734
- return !!map && Object.prototype.hasOwnProperty.call(map, "xhigh") && map.xhigh != null;
735
+ if (level === "xhigh" || level === "max") {
736
+ return !!map && Object.prototype.hasOwnProperty.call(map, level) && map[level] != null;
735
737
  }
736
738
  return map?.[level] !== null;
737
739
  }
@@ -752,11 +754,16 @@ function clampThinkingLevel(model: PiModel, requested: ThinkingLevel): ThinkingL
752
754
  return "off";
753
755
  }
754
756
 
757
+ function isGpt56SolModel(model: PiModel | undefined): boolean {
758
+ if (!model) return false;
759
+ return /\bgpt-5\.6-sol\b/i.test(`${model.id} ${model.name ?? ""}`);
760
+ }
761
+
755
762
  function resolveThinkingLevel(
756
763
  model: PiModel | undefined,
757
764
  override: ThinkingLevel | undefined,
758
765
  ): { requested: ThinkingLevel; effective: ThinkingLevel; clamped: boolean } {
759
- const requested = override ?? (model?.reasoning ? DEFAULT_THINKING_LEVEL : "off");
766
+ const requested = override ?? (model?.reasoning ? (isGpt56SolModel(model) ? "high" : DEFAULT_THINKING_LEVEL) : "off");
760
767
  const effective = model ? clampThinkingLevel(model, requested) : requested;
761
768
  return { requested, effective, clamped: effective !== requested };
762
769
  }
@@ -1239,7 +1246,7 @@ export default function oracleExtension(pi: ExtensionAPI) {
1239
1246
  return;
1240
1247
  }
1241
1248
 
1242
- notifyCommand(ctx, "Usage: /oracle status | model <provider/model|auto> | thinking <off|minimal|low|medium|high|xhigh|auto> | clear [all|model|thinking]", "warning");
1249
+ notifyCommand(ctx, "Usage: /oracle status | model <provider/model|auto> | thinking <off|minimal|low|medium|high|xhigh|max|auto> | clear [all|model|thinking]", "warning");
1243
1250
  },
1244
1251
  });
1245
1252
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diegopetrucci/pi-oracle",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "An Amp-style oracle extension for pi that consults the strongest reasoning model on your current provider.",
5
5
  "keywords": [
6
6
  "pi-package",