@diegopetrucci/pi-extensions 0.1.36 → 0.1.38
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/.pi-fleet-tested-version +1 -1
- package/README.md +1 -0
- package/extensions/agent-workflow-audit/.pi-fleet-tested-version +1 -1
- package/extensions/agent-workflow-audit/package.json +1 -1
- package/extensions/brrr/.pi-fleet-tested-version +1 -1
- package/extensions/brrr/package.json +1 -1
- package/extensions/claude-fast/.pi-fleet-tested-version +1 -0
- package/extensions/claude-fast/README.md +97 -0
- package/extensions/claude-fast/claude-fast.example.json +4 -0
- package/extensions/claude-fast/index.ts +283 -0
- package/extensions/claude-fast/package.json +35 -0
- package/extensions/confirm-destructive/.pi-fleet-tested-version +1 -1
- package/extensions/confirm-destructive/package.json +1 -1
- package/extensions/context-cap/.pi-fleet-tested-version +1 -1
- package/extensions/context-cap/package.json +1 -1
- package/extensions/context-inspector/.pi-fleet-tested-version +1 -1
- package/extensions/context-inspector/package.json +1 -1
- package/extensions/dirty-repo-guard/.pi-fleet-tested-version +1 -1
- package/extensions/dirty-repo-guard/package.json +1 -1
- package/extensions/gnosis/.pi-fleet-tested-version +1 -1
- package/extensions/gnosis/package.json +1 -1
- package/extensions/inline-bash/.pi-fleet-tested-version +1 -1
- package/extensions/inline-bash/package.json +1 -1
- package/extensions/librarian/.pi-fleet-tested-version +1 -1
- package/extensions/librarian/package.json +1 -1
- package/extensions/minimal-footer/.pi-fleet-tested-version +1 -1
- package/extensions/minimal-footer/package.json +1 -1
- package/extensions/notify/.pi-fleet-tested-version +1 -1
- package/extensions/notify/package.json +1 -1
- package/extensions/openai-fast/.pi-fleet-tested-version +1 -1
- package/extensions/openai-fast/package.json +1 -1
- package/extensions/oracle/.pi-fleet-tested-version +1 -1
- package/extensions/oracle/index.ts +8 -0
- package/extensions/oracle/package.json +1 -1
- package/extensions/permission-gate/.pi-fleet-tested-version +1 -1
- package/extensions/permission-gate/package.json +1 -1
- package/extensions/quiet-tools/.pi-fleet-tested-version +1 -1
- package/extensions/quiet-tools/package.json +1 -1
- package/extensions/review/.pi-fleet-tested-version +1 -1
- package/extensions/review/package.json +1 -1
- package/extensions/todo/.pi-fleet-tested-version +1 -1
- package/extensions/todo/package.json +1 -1
- package/extensions/triage-comments/.pi-fleet-tested-version +1 -1
- package/extensions/triage-comments/package.json +1 -1
- package/package.json +5 -4
package/.pi-fleet-tested-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
package/README.md
CHANGED
|
@@ -4,6 +4,7 @@ A collection of [pi](https://github.com/earendil-works/pi-mono) agent extensions
|
|
|
4
4
|
|
|
5
5
|
- [`agent-workflow-audit`](./extensions/agent-workflow-audit): Adds `/agent-workflow-audit`, which runs an isolated repo workflow audit subagent and returns only the final distilled report to the main session.
|
|
6
6
|
- [`brrr`](./extensions/brrr): Sends brrr push notifications when pi finishes an agent turn and is ready for input, with optional macOS idle gating.
|
|
7
|
+
- [`claude-fast`](./extensions/claude-fast): Adds `/claude-fast` to enable Anthropic Claude Fast mode for supported Claude Opus models by injecting `speed: "fast"`.
|
|
7
8
|
- [`confirm-destructive`](./extensions/confirm-destructive): Confirms before destructive session actions like clear, switch, and fork.
|
|
8
9
|
- [`context-cap`](./extensions/context-cap): Caps effective model context windows at 200k tokens by default so pi avoids the `dumb zone`; toggle temporarily with `/context-cap`.
|
|
9
10
|
- [`context-inspector`](./extensions/context-inspector): Adds `/context`, a local self-contained HTML dashboard that breaks down where the current session context is going, with category overview, top offenders, and drilldown search.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.78.0
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# claude-fast
|
|
2
|
+
|
|
3
|
+
A pi extension that enables Anthropic Claude Fast mode for supported Claude Opus models.
|
|
4
|
+
|
|
5
|
+
When active, the extension injects this into eligible Anthropic request payloads:
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"speed": "fast"
|
|
10
|
+
}
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
It also adds the required Anthropic beta header value to the current model before requests:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
anthropic-beta: fast-mode-2026-02-01
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Eligibility
|
|
20
|
+
|
|
21
|
+
Fast mode is only injected when all of these are true:
|
|
22
|
+
|
|
23
|
+
- The current provider is `anthropic`.
|
|
24
|
+
- The current API is `anthropic-messages`.
|
|
25
|
+
- The current model is `claude-opus-4-6`, `claude-opus-4-7`, or `claude-opus-4-8`.
|
|
26
|
+
- The request payload does not already include `speed`.
|
|
27
|
+
|
|
28
|
+
Claude Fast mode is available for API-key access and Claude Code subscription/OAuth access when the account has access to Anthropic's Fast mode research preview. For Claude Code subscription users, Anthropic documents this as extra usage credits, not included subscription usage.
|
|
29
|
+
|
|
30
|
+
## Commands
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
/claude-fast
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Run `/claude-fast` to toggle Fast mode on or off for the current session/runtime. The command reports the new state in chat, and the footer shows `fast` while Fast mode is active for an eligible model.
|
|
37
|
+
|
|
38
|
+
The extension defaults to off so installing the full collection does not accidentally spend Fast-mode credits.
|
|
39
|
+
|
|
40
|
+
## Config
|
|
41
|
+
|
|
42
|
+
Optional global config:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
~/.pi/agent/extensions/claude-fast.json
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Optional project config:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
.pi/claude-fast.json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Project config overrides global config.
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"enabled": false,
|
|
59
|
+
"showStatus": true
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
- `enabled`: default Fast-mode state when there is no session override.
|
|
64
|
+
- `showStatus`: show a compact `fast` status when Fast mode is active for the current model.
|
|
65
|
+
|
|
66
|
+
## Install
|
|
67
|
+
|
|
68
|
+
### Standalone npm package
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pi install npm:@diegopetrucci/pi-claude-fast
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Collection package
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
pi install npm:@diegopetrucci/pi-extensions
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### GitHub package
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
pi install git:github.com/diegopetrucci/pi-extensions
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Then reload pi:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
/reload
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Notes
|
|
93
|
+
|
|
94
|
+
- Anthropic Fast mode has separate rate limits and costs more than standard speed.
|
|
95
|
+
- Requests at different speeds do not share prompt-cache prefixes.
|
|
96
|
+
- Anthropic documents Fast mode as unavailable with Priority Tier.
|
|
97
|
+
- If pi adds first-class speed support later, this extension skips payloads that already contain `speed`.
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import {
|
|
4
|
+
getAgentDir,
|
|
5
|
+
type ExtensionAPI,
|
|
6
|
+
type ExtensionContext,
|
|
7
|
+
} from "@earendil-works/pi-coding-agent";
|
|
8
|
+
|
|
9
|
+
const EXTENSION_ID = "claude-fast";
|
|
10
|
+
const PROVIDER_ID = "anthropic";
|
|
11
|
+
const API_ID = "anthropic-messages";
|
|
12
|
+
const FAST_SPEED = "fast";
|
|
13
|
+
const FAST_BETA = "fast-mode-2026-02-01";
|
|
14
|
+
const CLAUDE_CODE_OAUTH_BETAS = ["claude-code-20250219", "oauth-2025-04-20"];
|
|
15
|
+
const SUPPORTED_MODELS = new Set(["claude-opus-4-6", "claude-opus-4-7", "claude-opus-4-8"]);
|
|
16
|
+
|
|
17
|
+
const DEFAULT_CONFIG: ClaudeFastConfig = {
|
|
18
|
+
enabled: false,
|
|
19
|
+
showStatus: true,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type FastOverride = "auto" | "on" | "off";
|
|
23
|
+
|
|
24
|
+
type ClaudeFastConfig = {
|
|
25
|
+
/** Default Fast-mode state when there is no session override. */
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
/** Show a compact `fast` status when Fast mode is active for the current model. */
|
|
28
|
+
showStatus: boolean;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
type SessionState = {
|
|
32
|
+
config: ClaudeFastConfig;
|
|
33
|
+
override: FastOverride;
|
|
34
|
+
lastInjectedAt?: number;
|
|
35
|
+
lastInjectedModel?: string;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
type RecursivePartial<T> = {
|
|
39
|
+
[P in keyof T]?: T[P] extends object ? RecursivePartial<T[P]> : T[P];
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
type PayloadRecord = Record<string, unknown>;
|
|
43
|
+
|
|
44
|
+
type Eligibility = {
|
|
45
|
+
eligible: boolean;
|
|
46
|
+
modelKey: string;
|
|
47
|
+
reason?: string;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
type HeaderModel = {
|
|
51
|
+
headers?: Record<string, string>;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
function readConfigFile(path: string): RecursivePartial<ClaudeFastConfig> {
|
|
55
|
+
if (!existsSync(path)) return {};
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
59
|
+
return isPayloadRecord(parsed) ? (parsed as RecursivePartial<ClaudeFastConfig>) : {};
|
|
60
|
+
} catch (error) {
|
|
61
|
+
console.error(`Warning: Could not parse ${path}: ${error}`);
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function normalizeBoolean(value: unknown, fallback: boolean): boolean {
|
|
67
|
+
return typeof value === "boolean" ? value : fallback;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function mergeConfig(
|
|
71
|
+
base: ClaudeFastConfig,
|
|
72
|
+
overrides: RecursivePartial<ClaudeFastConfig>,
|
|
73
|
+
): ClaudeFastConfig {
|
|
74
|
+
return {
|
|
75
|
+
enabled: normalizeBoolean(overrides.enabled, base.enabled),
|
|
76
|
+
showStatus: normalizeBoolean(overrides.showStatus, base.showStatus),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function findProjectConfigPath(cwd: string): string {
|
|
81
|
+
let current = cwd;
|
|
82
|
+
while (true) {
|
|
83
|
+
const candidate = join(current, ".pi", "claude-fast.json");
|
|
84
|
+
if (existsSync(candidate)) return candidate;
|
|
85
|
+
|
|
86
|
+
const parent = dirname(current);
|
|
87
|
+
if (parent === current) return join(cwd, ".pi", "claude-fast.json");
|
|
88
|
+
current = parent;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function loadConfig(cwd: string): ClaudeFastConfig {
|
|
93
|
+
const globalConfig = readConfigFile(join(getAgentDir(), "extensions", "claude-fast.json"));
|
|
94
|
+
const projectConfig = readConfigFile(findProjectConfigPath(cwd));
|
|
95
|
+
return mergeConfig(mergeConfig(DEFAULT_CONFIG, globalConfig), projectConfig);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function isPayloadRecord(payload: unknown): payload is PayloadRecord {
|
|
99
|
+
return typeof payload === "object" && payload !== null && !Array.isArray(payload);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function modelKey(ctx: ExtensionContext): string {
|
|
103
|
+
const model = ctx.model;
|
|
104
|
+
return model ? `${model.provider}/${model.id}` : "no-model";
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function isFastEnabled(state: SessionState): boolean {
|
|
108
|
+
if (state.override === "on") return true;
|
|
109
|
+
if (state.override === "off") return false;
|
|
110
|
+
return state.config.enabled;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function describeMode(state: SessionState): string {
|
|
114
|
+
if (state.override === "on") return "on (session override)";
|
|
115
|
+
if (state.override === "off") return "off (session override)";
|
|
116
|
+
return state.config.enabled ? "on (config default)" : "off (config default)";
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function getEligibility(ctx: ExtensionContext): Eligibility {
|
|
120
|
+
const model = ctx.model;
|
|
121
|
+
if (!model) {
|
|
122
|
+
return { eligible: false, modelKey: "no-model", reason: "no model is selected" };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const key = `${model.provider}/${model.id}`;
|
|
126
|
+
if (model.provider !== PROVIDER_ID) {
|
|
127
|
+
return {
|
|
128
|
+
eligible: false,
|
|
129
|
+
modelKey: key,
|
|
130
|
+
reason: `current provider is ${model.provider}, not ${PROVIDER_ID}`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (model.api !== API_ID) {
|
|
135
|
+
return {
|
|
136
|
+
eligible: false,
|
|
137
|
+
modelKey: key,
|
|
138
|
+
reason: `current API is ${model.api}, not ${API_ID}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (!SUPPORTED_MODELS.has(model.id)) {
|
|
143
|
+
return {
|
|
144
|
+
eligible: false,
|
|
145
|
+
modelKey: key,
|
|
146
|
+
reason: "Fast mode is only enabled for Claude Opus 4.6, 4.7, and 4.8",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
return { eligible: true, modelKey: key };
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function splitBetaHeader(value: string | undefined): string[] {
|
|
154
|
+
return (value ?? "")
|
|
155
|
+
.split(",")
|
|
156
|
+
.map((part) => part.trim())
|
|
157
|
+
.filter(Boolean);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function syncModelBetaHeader(ctx: ExtensionContext, state: SessionState): void {
|
|
161
|
+
const model = ctx.model as (typeof ctx.model & HeaderModel) | undefined;
|
|
162
|
+
if (!model || model.provider !== PROVIDER_ID || model.api !== API_ID) return;
|
|
163
|
+
|
|
164
|
+
const shouldEnable = isFastEnabled(state) && getEligibility(ctx).eligible;
|
|
165
|
+
const headers = { ...(model.headers ?? {}) };
|
|
166
|
+
const existing = splitBetaHeader(headers["anthropic-beta"] ?? headers["Anthropic-Beta"]);
|
|
167
|
+
const requiredBase = ctx.modelRegistry.isUsingOAuth(model) ? CLAUDE_CODE_OAUTH_BETAS : [];
|
|
168
|
+
const next = shouldEnable
|
|
169
|
+
? Array.from(new Set([...existing, ...requiredBase, FAST_BETA]))
|
|
170
|
+
: existing.filter((beta) => beta !== FAST_BETA && !CLAUDE_CODE_OAUTH_BETAS.includes(beta));
|
|
171
|
+
|
|
172
|
+
delete headers["Anthropic-Beta"];
|
|
173
|
+
if (next.length > 0) headers["anthropic-beta"] = next.join(",");
|
|
174
|
+
else delete headers["anthropic-beta"];
|
|
175
|
+
model.headers = headers;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function updateStatus(ctx: ExtensionContext, state: SessionState): void {
|
|
179
|
+
syncModelBetaHeader(ctx, state);
|
|
180
|
+
if (!ctx.hasUI) return;
|
|
181
|
+
if (!state.config.showStatus) {
|
|
182
|
+
ctx.ui.setStatus(EXTENSION_ID, undefined);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const eligibility = getEligibility(ctx);
|
|
187
|
+
ctx.ui.setStatus(
|
|
188
|
+
EXTENSION_ID,
|
|
189
|
+
isFastEnabled(state) && eligibility.eligible ? "fast" : undefined,
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
function getStatusMessage(ctx: ExtensionContext, state: SessionState): string {
|
|
194
|
+
const enabled = isFastEnabled(state);
|
|
195
|
+
const eligibility = getEligibility(ctx);
|
|
196
|
+
const active = enabled && eligibility.eligible;
|
|
197
|
+
const injected = state.lastInjectedAt
|
|
198
|
+
? ` Last injected for ${state.lastInjectedModel ?? "unknown model"} ${Math.max(0, Math.round((Date.now() - state.lastInjectedAt) / 1000))}s ago.`
|
|
199
|
+
: "";
|
|
200
|
+
|
|
201
|
+
if (active) {
|
|
202
|
+
return `Claude Fast mode is ${describeMode(state)} and active for ${eligibility.modelKey}; requests will use speed=${FAST_SPEED}.${injected}`;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (enabled) {
|
|
206
|
+
return `Claude Fast mode is ${describeMode(state)}, but inactive for ${eligibility.modelKey}: ${eligibility.reason}.${injected}`;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return `Claude Fast mode is ${describeMode(state)}. Current model: ${eligibility.modelKey}.${injected}`;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
function injectFastSpeed(
|
|
213
|
+
payload: unknown,
|
|
214
|
+
ctx: ExtensionContext,
|
|
215
|
+
state: SessionState,
|
|
216
|
+
): PayloadRecord | undefined {
|
|
217
|
+
if (!isFastEnabled(state)) return undefined;
|
|
218
|
+
if (!getEligibility(ctx).eligible) return undefined;
|
|
219
|
+
if (!isPayloadRecord(payload)) return undefined;
|
|
220
|
+
if (payload.model !== ctx.model?.id) return undefined;
|
|
221
|
+
if ("speed" in payload) return undefined;
|
|
222
|
+
|
|
223
|
+
state.lastInjectedAt = Date.now();
|
|
224
|
+
state.lastInjectedModel = modelKey(ctx);
|
|
225
|
+
return {
|
|
226
|
+
...payload,
|
|
227
|
+
speed: FAST_SPEED,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export default function claudeFastExtension(pi: ExtensionAPI) {
|
|
232
|
+
const states = new WeakMap<object, SessionState>();
|
|
233
|
+
|
|
234
|
+
function getState(ctx: ExtensionContext): SessionState {
|
|
235
|
+
let state = states.get(ctx.sessionManager);
|
|
236
|
+
if (!state) {
|
|
237
|
+
state = {
|
|
238
|
+
config: loadConfig(ctx.cwd),
|
|
239
|
+
override: "auto",
|
|
240
|
+
};
|
|
241
|
+
states.set(ctx.sessionManager, state);
|
|
242
|
+
}
|
|
243
|
+
return state;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
pi.on("session_start", (_event, ctx) => {
|
|
247
|
+
const state: SessionState = {
|
|
248
|
+
config: loadConfig(ctx.cwd),
|
|
249
|
+
override: "auto",
|
|
250
|
+
};
|
|
251
|
+
states.set(ctx.sessionManager, state);
|
|
252
|
+
updateStatus(ctx, state);
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
pi.on("model_select", (_event, ctx) => {
|
|
256
|
+
updateStatus(ctx, getState(ctx));
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
pi.on("before_provider_request", (event, ctx) => {
|
|
260
|
+
const state = getState(ctx);
|
|
261
|
+
const nextPayload = injectFastSpeed(event.payload, ctx, state);
|
|
262
|
+
updateStatus(ctx, state);
|
|
263
|
+
return nextPayload;
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
pi.registerCommand("claude-fast", {
|
|
267
|
+
description: "Toggle Claude Fast mode for supported Anthropic Claude Opus models",
|
|
268
|
+
getArgumentCompletions: () => null,
|
|
269
|
+
handler: async (args, ctx) => {
|
|
270
|
+
const state = getState(ctx);
|
|
271
|
+
const action = args.trim();
|
|
272
|
+
|
|
273
|
+
if (!action) {
|
|
274
|
+
state.override = isFastEnabled(state) ? "off" : "on";
|
|
275
|
+
updateStatus(ctx, state);
|
|
276
|
+
ctx.ui.notify(getStatusMessage(ctx, state), "info");
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
ctx.ui.notify("Usage: /claude-fast", "warning");
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@diegopetrucci/pi-claude-fast",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "A pi extension that enables Anthropic Claude Fast mode for supported Claude Opus models by injecting speed=fast.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"pi-package",
|
|
7
|
+
"pi",
|
|
8
|
+
"claude",
|
|
9
|
+
"anthropic",
|
|
10
|
+
"fast"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/diegopetrucci/pi-extensions.git",
|
|
16
|
+
"directory": "extensions/claude-fast"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"index.ts",
|
|
20
|
+
"claude-fast.example.json",
|
|
21
|
+
"README.md",
|
|
22
|
+
".pi-fleet-tested-version"
|
|
23
|
+
],
|
|
24
|
+
"publishConfig": {
|
|
25
|
+
"access": "public"
|
|
26
|
+
},
|
|
27
|
+
"pi": {
|
|
28
|
+
"extensions": [
|
|
29
|
+
"index.ts"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"@earendil-works/pi-coding-agent": "*"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diegopetrucci/pi-openai-fast",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
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.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -75,6 +75,7 @@ const ORACLE_CONFIG_FILE = "oracle.json";
|
|
|
75
75
|
|
|
76
76
|
const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
|
|
77
77
|
"amazon-bedrock": [
|
|
78
|
+
"claude-opus-4-8",
|
|
78
79
|
"claude-opus-4-7",
|
|
79
80
|
"claude-opus-4-6",
|
|
80
81
|
"claude-opus-4-5",
|
|
@@ -91,6 +92,8 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
|
|
|
91
92
|
"zai.glm-5",
|
|
92
93
|
],
|
|
93
94
|
anthropic: [
|
|
95
|
+
"claude-opus-4-8",
|
|
96
|
+
"claude-opus-4.8",
|
|
94
97
|
"claude-opus-4-7",
|
|
95
98
|
"claude-opus-4.7",
|
|
96
99
|
"claude-opus-4-6",
|
|
@@ -156,6 +159,7 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
|
|
|
156
159
|
"accounts/fireworks/models/gpt-oss-120b",
|
|
157
160
|
],
|
|
158
161
|
"github-copilot": [
|
|
162
|
+
"claude-opus-4.8",
|
|
159
163
|
"claude-opus-4.7",
|
|
160
164
|
"claude-opus-4.6",
|
|
161
165
|
"claude-opus-4.5",
|
|
@@ -257,6 +261,7 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
|
|
|
257
261
|
"gpt-5.5",
|
|
258
262
|
"gpt-5.4-pro",
|
|
259
263
|
"gpt-5.4",
|
|
264
|
+
"claude-opus-4-8",
|
|
260
265
|
"claude-opus-4-7",
|
|
261
266
|
"claude-opus-4-6",
|
|
262
267
|
"claude-opus-4-5",
|
|
@@ -284,6 +289,8 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
|
|
|
284
289
|
"kimi-k2.5",
|
|
285
290
|
],
|
|
286
291
|
openrouter: [
|
|
292
|
+
"anthropic/claude-opus-4.8",
|
|
293
|
+
"anthropic/claude-opus-4.8-fast",
|
|
287
294
|
"anthropic/claude-opus-4.7",
|
|
288
295
|
"anthropic/claude-opus-4.6-fast",
|
|
289
296
|
"anthropic/claude-opus-4.6",
|
|
@@ -320,6 +327,7 @@ const PROVIDER_MODEL_PREFERENCES: Record<string, string[]> = {
|
|
|
320
327
|
"MiniMaxAI/MiniMax-M2.5",
|
|
321
328
|
],
|
|
322
329
|
"vercel-ai-gateway": [
|
|
330
|
+
"anthropic/claude-opus-4.8",
|
|
323
331
|
"anthropic/claude-opus-4.7",
|
|
324
332
|
"anthropic/claude-opus-4.6",
|
|
325
333
|
"anthropic/claude-opus-4.5",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.78.0
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diegopetrucci/pi-extensions",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.38",
|
|
4
4
|
"description": "A collection of pi extensions for context management, workflow audits, review-comment triage, notifications, brrr push alerts, safety guards, GitHub research, repo-local knowledge, todos, tool rendering, and model/provider helpers.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"extensions": [
|
|
37
37
|
"./extensions/agent-workflow-audit/index.ts",
|
|
38
38
|
"./extensions/brrr/index.ts",
|
|
39
|
+
"./extensions/claude-fast/index.ts",
|
|
39
40
|
"./extensions/minimal-footer/index.ts",
|
|
40
41
|
"./extensions/oracle/index.ts",
|
|
41
42
|
"./extensions/context-cap/index.ts",
|
|
@@ -56,9 +57,9 @@
|
|
|
56
57
|
"image": "https://raw.githubusercontent.com/diegopetrucci/pi-extensions/main/assets/oracle-preview.svg"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
|
-
"@earendil-works/pi-ai": "^0.
|
|
60
|
-
"@earendil-works/pi-coding-agent": "^0.
|
|
61
|
-
"@earendil-works/pi-tui": "^0.
|
|
60
|
+
"@earendil-works/pi-ai": "^0.78.0",
|
|
61
|
+
"@earendil-works/pi-coding-agent": "^0.78.0",
|
|
62
|
+
"@earendil-works/pi-tui": "^0.78.0",
|
|
62
63
|
"@types/node": "^25.9.1",
|
|
63
64
|
"husky": "^9.1.7",
|
|
64
65
|
"typebox": "^1.1.38",
|