pi-clawbay 0.0.20 → 0.0.22

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/README.md CHANGED
@@ -7,6 +7,7 @@ A provider extension for [Pi Coding Agent](https://github.com/earendil-works/pi)
7
7
  - **GPT-5 & Codex Models** - Access via Codex Responses API with session-based prompt cache
8
8
  - **Single Provider** - Only `theclawbay` is registered
9
9
  - **GPT-5.4 Split Options** - `gpt-5.4` and `gpt-5.4[1m]` for clearer cost/context choice
10
+ - **GPT Image 2** - Generate PNG images through TheClawBay's OpenAI-compatible Images endpoint
10
11
  - **High Usage Headroom** - More capacity than standard subscriptions
11
12
  - **Simple Setup** - Single API key
12
13
 
@@ -56,16 +57,21 @@ Model IDs are discovered dynamically at extension load from:
56
57
 
57
58
  If discovery fails or `THECLAWBAY_API_KEY` is not set yet, the extension falls back to the last successful discovery cache, even if it is stale, then to a bundled default list so `/model` still works on startup. Live discovery refreshes the cache in the background after the provider has been registered.
58
59
 
59
- Requests for `theclawbay/*` models are sent through TheClawBay's native Codex route:
60
+ Requests for `theclawbay/*` text and coding models are sent through TheClawBay's native Codex route:
60
61
 
61
62
  - `https://api.theclawbay.com/backend-api/codex`
62
63
 
64
+ Requests for `theclawbay/gpt-image-2` are sent through TheClawBay's Codex Responses route with the hosted `image_generation` tool:
65
+
66
+ - `https://api.theclawbay.com/backend-api/codex/responses`
67
+
63
68
  This extension uses a custom Responses transport for that route. It sends:
64
69
 
65
70
  - `Authorization: Bearer $THECLAWBAY_API_KEY`
66
71
  - `chatgpt-account-id: theclawbay`
67
72
  - `session_id` when Pi provides a session id
68
73
  - `prompt_cache_key` in the request body
74
+ - `tools: [{ type: "image_generation", model: "gpt-image-2", output_format: "png", size: "1024x1024", partial_images: 2 }]`
69
75
 
70
76
  This avoids Pi's built-in `openai-codex-responses` JWT parsing path, which expects a ChatGPT/Codex-style token and can fail with `Failed to extract accountId from token` when given a normal TheClawBay API key.
71
77
 
@@ -98,6 +104,7 @@ Why split it?
98
104
  - `gpt-5.4` is configured with a `272,000` token context window.
99
105
  - `gpt-5.4[1m]` is configured with a `1,050,000` token context window.
100
106
  - Current non-5.4 GPT-5/Codex variants default to `272,000` context and `128,000` max output tokens.
107
+ - `gpt-image-2` uses the Images API path with `1024x1024` PNG output, `272,000` context metadata, and `65,536` max output metadata.
101
108
 
102
109
  ### Example Model List
103
110
 
@@ -107,13 +114,14 @@ Current fallback list in this package:
107
114
  - `gpt-5.4`
108
115
  - `gpt-5.4[1m]`
109
116
  - `gpt-5.4-mini`
117
+ - `gpt-image-2`
110
118
  - `gpt-5.3-codex`
111
119
  - `gpt-5.2-codex`
112
120
  - `gpt-5.2`
113
121
  - `gpt-5.1-codex-max`
114
122
  - `gpt-5.1-codex-mini`
115
123
 
116
- Image-generation models returned by discovery, such as `gpt-image-*`, are intentionally hidden from `/model` until this extension has a dedicated, tested image-generation flow.
124
+ `gpt-image-2` is exposed because TheClawBay's latest npm setup marks it as an image generation model backed by `codex-lb`. The extension uses the hosted Responses image tool instead of the synchronous Images API because realistic 1024x1024 prompts can exceed the Images route socket window and fail as `fetch failed`. Other native image-generation models returned by discovery, such as `gpt-image-1.5`, remain hidden until this extension has a dedicated, tested flow for them.
117
125
 
118
126
  ## Usage
119
127
 
@@ -125,8 +133,11 @@ Use `/model` command in pi:
125
133
  /model theclawbay/gpt-5.5
126
134
  /model theclawbay/gpt-5.4
127
135
  /model theclawbay/gpt-5.4[1m]
136
+ /model theclawbay/gpt-image-2
128
137
  ```
129
138
 
139
+ When `gpt-image-2` is selected, Pi receives a normal assistant message event sequence and the generated PNG is saved locally. Set `PI_CLAWBAY_IMAGE_DIR` to override the output directory; otherwise images are saved under Pi's generated-files directory. If TheClawBay sends partial images and the final image is unavailable, the latest partial PNG is saved instead of returning a socket-level failure.
140
+
130
141
  ### Commands
131
142
 
132
143
  This extension currently registers:
@@ -152,6 +163,7 @@ export default function (pi: ExtensionAPI) {
152
163
  // - theclawbay/gpt-5.4
153
164
  // - theclawbay/gpt-5.4[1m]
154
165
  // - theclawbay/gpt-5.4-mini
166
+ // - theclawbay/gpt-image-2
155
167
  // - theclawbay/gpt-5.3-codex
156
168
  }
157
169
  ```
@@ -163,6 +175,7 @@ export default function (pi: ExtensionAPI) {
163
175
  | Provider | Base URL | API Type |
164
176
  |----------|----------|----------|
165
177
  | `theclawbay` | `https://api.theclawbay.com/backend-api/codex` | OpenAI Codex Responses |
178
+ | `theclawbay/gpt-image-2` | `https://api.theclawbay.com/backend-api/codex/responses` | Hosted Responses `image_generation` |
166
179
 
167
180
  ### Authentication
168
181
 
@@ -211,6 +224,9 @@ PI_CLAWBAY_DEBUG=1 pi --no-extensions -e /path/to/pi-clawbay --model theclawbay/
211
224
 
212
225
  # Tool-call path
213
226
  PI_CLAWBAY_DEBUG=1 pi --no-extensions -e /path/to/pi-clawbay --model theclawbay/gpt-5.4 --thinking low --tools ls -p "Use the ls tool on the current directory, then summarize whether package.json exists."
227
+
228
+ # Image generation path
229
+ PI_CLAWBAY_IMAGE_DIR=/tmp/pi-clawbay-images pi --no-extensions -e /path/to/pi-clawbay --model theclawbay/gpt-image-2 -p "Generate a simple square icon of a red crab claw on a white background. No text."
214
230
  ```
215
231
 
216
232
  ## Troubleshooting
@@ -219,7 +235,8 @@ PI_CLAWBAY_DEBUG=1 pi --no-extensions -e /path/to/pi-clawbay --model theclawbay/
219
235
  - `401` or `invalid_api_key`: verify the key in the TheClawBay dashboard and in your shell environment.
220
236
  - `429`, `weekly_cost_limit_reached`, or `5h_cost_limit_reached`: run `/quota` or `/clawbay-quota` and wait for the reset window.
221
237
  - Model missing from `/model`: run `/clawbay-refresh-models`; if discovery still omits it, TheClawBay may not expose it for your account.
222
- - `gpt-image-*` missing: image-generation models are intentionally hidden until this extension has a dedicated tested image flow.
238
+ - `gpt-image-2` missing: run `/clawbay-refresh-models`; if discovery still omits it, TheClawBay may not expose it for your account.
239
+ - `gpt-image-1.5` missing: native image output models are intentionally hidden until this extension has a dedicated tested image flow for them.
223
240
 
224
241
  ## Building
225
242
 
@@ -1,8 +1,10 @@
1
1
  import type { ProviderModelConfig } from "@earendil-works/pi-coding-agent";
2
2
  export declare const THECLAWBAY_OPENAI_DISCOVERY_BASE_URL = "https://api.theclawbay.com/v1";
3
3
  export declare const THECLAWBAY_CODEX_BASE_URL = "https://api.theclawbay.com/backend-api/codex";
4
+ export declare const THECLAWBAY_CODEX_RESPONSES_URL = "https://api.theclawbay.com/backend-api/codex/responses";
4
5
  export declare const THECLAWBAY_QUOTA_URL = "https://theclawbay.com/api/codex-auth/v1/quota";
5
6
  export declare const THECLAWBAY_OPENAI_MODELS_URL = "https://api.theclawbay.com/v1/models";
7
+ export declare const THECLAWBAY_IMAGES_GENERATIONS_URL = "https://api.theclawbay.com/v1/images/generations";
6
8
  export declare const THECLAWBAY_CODEX_API = "theclawbay-codex-responses";
7
9
  export declare const THECLAWBAY_CHATGPT_ACCOUNT_ID = "theclawbay";
8
10
  export declare const MODEL_CACHE_VERSION = 1;
@@ -11,7 +13,9 @@ export declare const MODEL_DISCOVERY_TIMEOUT_MS = 10000;
11
13
  export declare const GPT_54_UPSTREAM_MODEL_ID = "gpt-5.4";
12
14
  export declare const GPT_54_DEFAULT_MODEL_ID = "gpt-5.4";
13
15
  export declare const GPT_54_1M_MODEL_ID = "gpt-5.4[1m]";
16
+ export declare const GPT_IMAGE_2_MODEL_ID = "gpt-image-2";
14
17
  export declare const MODEL_INPUTS: readonly ["text", "image"];
18
+ export declare const IMAGE_GENERATION_MODEL_INPUTS: readonly ["text"];
15
19
  export declare const OPENAI_CODEX_THINKING_LEVEL_MAP: {
16
20
  readonly xhigh: "xhigh";
17
21
  readonly minimal: "low";
@@ -27,6 +31,7 @@ export declare const OPENAI_CODEX_CONTEXT_WINDOW = 272000;
27
31
  export declare const OPENAI_DEFAULT_CONTEXT_WINDOW = 272000;
28
32
  export declare const OPENAI_FRONTIER_CONTEXT_WINDOW = 1050000;
29
33
  export declare const OPENAI_DEFAULT_MAX_TOKENS = 128000;
34
+ export declare const OPENAI_IMAGE_MAX_TOKENS = 65536;
30
35
  export declare const HIDDEN_MODEL_ID_PREFIXES: readonly ["gpt-image-"];
31
36
  export declare const PINNED_MODEL_IDS: string[];
32
37
  export declare const FALLBACK_OPENAI_MODEL_IDS: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,eAAO,MAAM,oCAAoC,kCAAkC,CAAC;AACpF,eAAO,MAAM,yBAAyB,iDAAiD,CAAC;AACxF,eAAO,MAAM,oBAAoB,mDAAmD,CAAC;AACrF,eAAO,MAAM,4BAA4B,yCAAmD,CAAC;AAC7F,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AACjE,eAAO,MAAM,6BAA6B,eAAe,CAAC;AAE1D,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,kBAAkB,QAAqB,CAAC;AACrD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD,eAAO,MAAM,YAAY,4BAA6B,CAAC;AACvD,eAAO,MAAM,+BAA+B;;;CAA8C,CAAC;AAC3F,eAAO,MAAM,SAAS;;;;;CAAgE,CAAC;AACvF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAU1E,CAAC;AACF,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAClD,eAAO,MAAM,6BAA6B,SAA8B,CAAC;AACzE,eAAO,MAAM,8BAA8B,UAAU,CAAC;AACtD,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD,eAAO,MAAM,wBAAwB,yBAA0B,CAAC;AAChE,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAAO,CAAC;AAC7C,eAAO,MAAM,yBAAyB,UAUrC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,eAAO,MAAM,oCAAoC,kCAAkC,CAAC;AACpF,eAAO,MAAM,yBAAyB,iDAAiD,CAAC;AACxF,eAAO,MAAM,8BAA8B,2DAA2C,CAAC;AACvF,eAAO,MAAM,oBAAoB,mDAAmD,CAAC;AACrF,eAAO,MAAM,4BAA4B,yCAAmD,CAAC;AAC7F,eAAO,MAAM,iCAAiC,qDAA+D,CAAC;AAC9G,eAAO,MAAM,oBAAoB,+BAA+B,CAAC;AACjE,eAAO,MAAM,6BAA6B,eAAe,CAAC;AAE1D,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,kBAAkB,QAAqB,CAAC;AACrD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAChD,eAAO,MAAM,oBAAoB,gBAAgB,CAAC;AAElD,eAAO,MAAM,YAAY,4BAA6B,CAAC;AACvD,eAAO,MAAM,6BAA6B,mBAAoB,CAAC;AAC/D,eAAO,MAAM,+BAA+B;;;CAA8C,CAAC;AAC3F,eAAO,MAAM,SAAS;;;;;CAAgE,CAAC;AACvF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAW1E,CAAC;AACF,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAClD,eAAO,MAAM,6BAA6B,SAA8B,CAAC;AACzE,eAAO,MAAM,8BAA8B,UAAU,CAAC;AACtD,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAChD,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,eAAO,MAAM,wBAAwB,yBAA0B,CAAC;AAChE,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAAO,CAAC;AAC7C,eAAO,MAAM,yBAAyB,UAWrC,CAAC"}
package/dist/constants.js CHANGED
@@ -1,7 +1,9 @@
1
1
  export const THECLAWBAY_OPENAI_DISCOVERY_BASE_URL = "https://api.theclawbay.com/v1";
2
2
  export const THECLAWBAY_CODEX_BASE_URL = "https://api.theclawbay.com/backend-api/codex";
3
+ export const THECLAWBAY_CODEX_RESPONSES_URL = `${THECLAWBAY_CODEX_BASE_URL}/responses`;
3
4
  export const THECLAWBAY_QUOTA_URL = "https://theclawbay.com/api/codex-auth/v1/quota";
4
5
  export const THECLAWBAY_OPENAI_MODELS_URL = `${THECLAWBAY_OPENAI_DISCOVERY_BASE_URL}/models`;
6
+ export const THECLAWBAY_IMAGES_GENERATIONS_URL = `${THECLAWBAY_OPENAI_DISCOVERY_BASE_URL}/images/generations`;
5
7
  export const THECLAWBAY_CODEX_API = "theclawbay-codex-responses";
6
8
  export const THECLAWBAY_CHATGPT_ACCOUNT_ID = "theclawbay";
7
9
  export const MODEL_CACHE_VERSION = 1;
@@ -10,7 +12,9 @@ export const MODEL_DISCOVERY_TIMEOUT_MS = 10_000;
10
12
  export const GPT_54_UPSTREAM_MODEL_ID = "gpt-5.4";
11
13
  export const GPT_54_DEFAULT_MODEL_ID = "gpt-5.4";
12
14
  export const GPT_54_1M_MODEL_ID = "gpt-5.4[1m]";
15
+ export const GPT_IMAGE_2_MODEL_ID = "gpt-image-2";
13
16
  export const MODEL_INPUTS = ["text", "image"];
17
+ export const IMAGE_GENERATION_MODEL_INPUTS = ["text"];
14
18
  export const OPENAI_CODEX_THINKING_LEVEL_MAP = { xhigh: "xhigh", minimal: "low" };
15
19
  export const ZERO_COST = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
16
20
  export const OPENAI_KNOWN_COSTS = {
@@ -18,6 +22,7 @@ export const OPENAI_KNOWN_COSTS = {
18
22
  [GPT_54_DEFAULT_MODEL_ID]: { input: 2.5, output: 15.0, cacheRead: 0.25, cacheWrite: 2.5 },
19
23
  [GPT_54_1M_MODEL_ID]: { input: 5.0, output: 22.5, cacheRead: 0.5, cacheWrite: 5.0 },
20
24
  "gpt-5.4-mini": { input: 1.25, output: 10.0, cacheRead: 0.125, cacheWrite: 1.25 },
25
+ [GPT_IMAGE_2_MODEL_ID]: { input: 5.0, output: 30.0, cacheRead: 2.0, cacheWrite: 5.0 },
21
26
  "gpt-5.3-codex": { input: 1.75, output: 14.0, cacheRead: 0.175, cacheWrite: 1.75 },
22
27
  "gpt-5.2-codex": { input: 1.75, output: 14.0, cacheRead: 0.175, cacheWrite: 1.75 },
23
28
  "gpt-5.2": { input: 1.75, output: 14.0, cacheRead: 0.175, cacheWrite: 1.75 },
@@ -28,6 +33,7 @@ export const OPENAI_CODEX_CONTEXT_WINDOW = 272000;
28
33
  export const OPENAI_DEFAULT_CONTEXT_WINDOW = OPENAI_CODEX_CONTEXT_WINDOW;
29
34
  export const OPENAI_FRONTIER_CONTEXT_WINDOW = 1050000;
30
35
  export const OPENAI_DEFAULT_MAX_TOKENS = 128000;
36
+ export const OPENAI_IMAGE_MAX_TOKENS = 65536;
31
37
  export const HIDDEN_MODEL_ID_PREFIXES = ["gpt-image-"];
32
38
  export const PINNED_MODEL_IDS = [];
33
39
  export const FALLBACK_OPENAI_MODEL_IDS = [
@@ -35,6 +41,7 @@ export const FALLBACK_OPENAI_MODEL_IDS = [
35
41
  GPT_54_DEFAULT_MODEL_ID,
36
42
  GPT_54_1M_MODEL_ID,
37
43
  "gpt-5.4-mini",
44
+ GPT_IMAGE_2_MODEL_ID,
38
45
  "gpt-5.3-codex",
39
46
  "gpt-5.2-codex",
40
47
  "gpt-5.2",
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Api, type AssistantMessageEventStream, type Context, type Model, type SimpleStreamOptions } from "@earendil-works/pi-ai";
2
+ export declare function getImageOutputDir(): string;
3
+ export declare function streamSimpleTheClawBayImageGeneration(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
4
+ //# sourceMappingURL=image-generation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generation.d.ts","sourceRoot":"","sources":["../src/image-generation.ts"],"names":[],"mappings":"AAIA,OAAO,EAEN,KAAK,GAAG,EAER,KAAK,2BAA2B,EAChC,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,MAAM,uBAAuB,CAAC;AAwB/B,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAyRD,wBAAgB,qCAAqC,CACpD,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC3B,2BAA2B,CAsB7B"}
@@ -0,0 +1,284 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { mkdirSync, writeFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { createAssistantMessageEventStream, } from "@earendil-works/pi-ai";
6
+ import { THECLAWBAY_CHATGPT_ACCOUNT_ID, THECLAWBAY_CODEX_RESPONSES_URL, MODEL_INPUTS, OPENAI_CODEX_THINKING_LEVEL_MAP, OPENAI_KNOWN_COSTS, } from "./constants.js";
7
+ const DEFAULT_IMAGE_RESPONSES_MODEL_ID = "gpt-5.5";
8
+ const HOSTED_IMAGE_PARTIAL_COUNT = 2;
9
+ export function getImageOutputDir() {
10
+ const overrideDir = process.env.PI_CLAWBAY_IMAGE_DIR?.trim();
11
+ if (overrideDir) {
12
+ return overrideDir;
13
+ }
14
+ const agentDir = process.env.PI_CODING_AGENT_DIR?.trim() || join(homedir(), ".pi", "agent");
15
+ return join(agentDir, "generated", "pi-clawbay");
16
+ }
17
+ function createEmptyAssistantMessage(model) {
18
+ return {
19
+ role: "assistant",
20
+ content: [],
21
+ api: model.api,
22
+ provider: model.provider,
23
+ model: model.id,
24
+ usage: {
25
+ input: 0,
26
+ output: 0,
27
+ cacheRead: 0,
28
+ cacheWrite: 0,
29
+ totalTokens: 0,
30
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
31
+ },
32
+ stopReason: "stop",
33
+ timestamp: Date.now(),
34
+ };
35
+ }
36
+ function extractPrompt(context) {
37
+ const userMessages = context.messages.filter((message) => message.role === "user");
38
+ const latest = userMessages.at(-1);
39
+ if (!latest) {
40
+ throw new Error("gpt-image-2 requires a user prompt");
41
+ }
42
+ if (typeof latest.content === "string") {
43
+ return latest.content.trim();
44
+ }
45
+ return latest.content
46
+ .filter((item) => item.type === "text")
47
+ .map((item) => item.text.trim())
48
+ .filter(Boolean)
49
+ .join("\n")
50
+ .trim();
51
+ }
52
+ function headersToRecord(headers) {
53
+ return Object.fromEntries(Array.from(headers.entries()));
54
+ }
55
+ function saveGeneratedPng(base64) {
56
+ const image = Buffer.from(base64, "base64");
57
+ const outputDir = getImageOutputDir();
58
+ mkdirSync(outputDir, { recursive: true });
59
+ const path = join(outputDir, `gpt-image-2-${Date.now()}-${randomUUID()}.png`);
60
+ writeFileSync(path, image, "binary");
61
+ return { path, bytes: image.byteLength };
62
+ }
63
+ function formatSuccessMessage(path, bytes, revisedPrompt, usedPartial = false) {
64
+ const lines = [`Generated image saved to \`${path}\` (${bytes.toLocaleString()} bytes).`];
65
+ if (usedPartial) {
66
+ lines.push("Saved latest partial image because the final image was unavailable.");
67
+ }
68
+ if (revisedPrompt) {
69
+ lines.push(`Revised prompt: ${revisedPrompt}`);
70
+ }
71
+ return lines.join("\n");
72
+ }
73
+ async function requestImageGeneration(model, context, options) {
74
+ const apiKey = options?.apiKey ?? process.env.THECLAWBAY_API_KEY;
75
+ if (!apiKey) {
76
+ throw new Error("No API key for provider: theclawbay");
77
+ }
78
+ const body = await buildHostedImageRequestBody(model, context, options);
79
+ const payload = await fetchHostedImageGeneration(model, apiKey, body, options);
80
+ const saved = saveGeneratedPng(payload.base64);
81
+ return { ...saved, revisedPrompt: payload.revisedPrompt, usedPartial: payload.usedPartial };
82
+ }
83
+ async function buildHostedImageRequestBody(model, context, options) {
84
+ const prompt = extractPrompt(context);
85
+ if (!prompt) {
86
+ throw new Error("gpt-image-2 requires a non-empty user prompt");
87
+ }
88
+ const body = {
89
+ model: getImageResponsesModelId(),
90
+ store: false,
91
+ stream: true,
92
+ instructions: context.systemPrompt,
93
+ input: [{ role: "user", content: [{ type: "input_text", text: prompt }] }],
94
+ tools: [
95
+ {
96
+ type: "image_generation",
97
+ model: model.id,
98
+ output_format: "png",
99
+ size: "1024x1024",
100
+ partial_images: HOSTED_IMAGE_PARTIAL_COUNT,
101
+ },
102
+ ],
103
+ tool_choice: "auto",
104
+ parallel_tool_calls: true,
105
+ text: { verbosity: "low" },
106
+ include: ["reasoning.encrypted_content"],
107
+ ...(options?.sessionId ? { prompt_cache_key: options.sessionId } : {}),
108
+ };
109
+ return (await options?.onPayload?.(body, model)) ?? body;
110
+ }
111
+ function buildHostedRequestHeaders(apiKey, options) {
112
+ return {
113
+ ...(options?.headers ?? {}),
114
+ Authorization: `Bearer ${apiKey}`,
115
+ "Content-Type": "application/json",
116
+ "chatgpt-account-id": THECLAWBAY_CHATGPT_ACCOUNT_ID,
117
+ originator: "pi",
118
+ "OpenAI-Beta": "responses=experimental",
119
+ ...(options?.sessionId ? { session_id: options.sessionId } : {}),
120
+ };
121
+ }
122
+ function createHostedRequestModel(model) {
123
+ const requestModelId = getImageResponsesModelId();
124
+ return {
125
+ ...model,
126
+ id: requestModelId,
127
+ name: requestModelId,
128
+ reasoning: true,
129
+ input: [...MODEL_INPUTS],
130
+ cost: OPENAI_KNOWN_COSTS[requestModelId] ?? model.cost,
131
+ thinkingLevelMap: { ...OPENAI_CODEX_THINKING_LEVEL_MAP },
132
+ };
133
+ }
134
+ function getImageResponsesModelId() {
135
+ return process.env.PI_CLAWBAY_IMAGE_RESPONSES_MODEL?.trim() || DEFAULT_IMAGE_RESPONSES_MODEL_ID;
136
+ }
137
+ async function fetchHostedImageGeneration(model, apiKey, body, options) {
138
+ const response = await fetch(THECLAWBAY_CODEX_RESPONSES_URL, {
139
+ method: "POST",
140
+ headers: buildHostedRequestHeaders(apiKey, options),
141
+ body: JSON.stringify(body),
142
+ signal: options?.signal,
143
+ });
144
+ await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, createHostedRequestModel(model));
145
+ if (!response.ok) {
146
+ throw new Error(await response.text());
147
+ }
148
+ return readHostedImageGenerationStream(response);
149
+ }
150
+ async function readHostedImageGenerationStream(response) {
151
+ let finalImage;
152
+ let latestPartial;
153
+ let completed = false;
154
+ for await (const event of parseTheClawBaySse(response)) {
155
+ const eventType = typeof event.type === "string" ? event.type : undefined;
156
+ if (eventType === "response.image_generation_call.partial_image" && typeof event.partial_image_b64 === "string") {
157
+ latestPartial = {
158
+ base64: event.partial_image_b64,
159
+ partialIndex: typeof event.partial_image_index === "number" ? event.partial_image_index : undefined,
160
+ };
161
+ continue;
162
+ }
163
+ if (eventType === "response.output_item.done" && isRecord(event.item) && event.item.type === "image_generation_call") {
164
+ if (typeof event.item.result === "string" && event.item.result.length > 0) {
165
+ finalImage = {
166
+ base64: event.item.result,
167
+ revisedPrompt: typeof event.item.revised_prompt === "string" ? event.item.revised_prompt : undefined,
168
+ };
169
+ }
170
+ continue;
171
+ }
172
+ if (eventType === "response.completed") {
173
+ completed = true;
174
+ continue;
175
+ }
176
+ if (eventType === "response.failed") {
177
+ if (latestPartial) {
178
+ return { ...latestPartial, usedPartial: true };
179
+ }
180
+ throw new Error(readResponseFailureMessage(event, "TheClawBay hosted image generation failed"));
181
+ }
182
+ if (eventType === "error") {
183
+ if (latestPartial) {
184
+ return { ...latestPartial, usedPartial: true };
185
+ }
186
+ throw new Error(readResponseFailureMessage(event, "TheClawBay hosted image generation stream error"));
187
+ }
188
+ }
189
+ if (finalImage) {
190
+ return { ...finalImage, usedPartial: false };
191
+ }
192
+ if (latestPartial) {
193
+ return { ...latestPartial, usedPartial: true };
194
+ }
195
+ if (!completed) {
196
+ throw new Error("TheClawBay hosted image generation stream ended before completion");
197
+ }
198
+ throw new Error("TheClawBay hosted image generation response did not include an image");
199
+ }
200
+ async function* parseTheClawBaySse(response) {
201
+ if (!response.body) {
202
+ return;
203
+ }
204
+ const reader = response.body.getReader();
205
+ const decoder = new TextDecoder();
206
+ let buffer = "";
207
+ try {
208
+ while (true) {
209
+ const { done, value } = await reader.read();
210
+ if (done) {
211
+ break;
212
+ }
213
+ buffer += decoder.decode(value, { stream: true });
214
+ let index = buffer.indexOf("\n\n");
215
+ while (index !== -1) {
216
+ const chunk = buffer.slice(0, index);
217
+ buffer = buffer.slice(index + 2);
218
+ const data = chunk
219
+ .split("\n")
220
+ .filter((line) => line.startsWith("data:"))
221
+ .map((line) => line.slice(5).trim())
222
+ .join("\n")
223
+ .trim();
224
+ if (data && data !== "[DONE]") {
225
+ yield JSON.parse(data);
226
+ }
227
+ index = buffer.indexOf("\n\n");
228
+ }
229
+ }
230
+ }
231
+ finally {
232
+ try {
233
+ await reader.cancel();
234
+ }
235
+ catch {
236
+ // Ignore stream cleanup errors.
237
+ }
238
+ try {
239
+ reader.releaseLock();
240
+ }
241
+ catch {
242
+ // Ignore stream cleanup errors.
243
+ }
244
+ }
245
+ }
246
+ function isRecord(value) {
247
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
248
+ }
249
+ function readResponseFailureMessage(event, fallback) {
250
+ const response = isRecord(event.response) ? event.response : undefined;
251
+ const error = isRecord(response?.error) ? response.error : undefined;
252
+ if (typeof error?.message === "string" && error.message.trim()) {
253
+ return error.message;
254
+ }
255
+ if (typeof event.message === "string" && event.message.trim()) {
256
+ return event.message;
257
+ }
258
+ return fallback;
259
+ }
260
+ export function streamSimpleTheClawBayImageGeneration(model, context, options) {
261
+ const stream = createAssistantMessageEventStream();
262
+ void (async () => {
263
+ const output = createEmptyAssistantMessage(model);
264
+ try {
265
+ const result = await requestImageGeneration(model, context, options);
266
+ const text = formatSuccessMessage(result.path, result.bytes, result.revisedPrompt, result.usedPartial);
267
+ output.content.push({ type: "text", text });
268
+ stream.push({ type: "start", partial: output });
269
+ stream.push({ type: "text_start", contentIndex: 0, partial: output });
270
+ stream.push({ type: "text_delta", contentIndex: 0, delta: text, partial: output });
271
+ stream.push({ type: "text_end", contentIndex: 0, content: text, partial: output });
272
+ stream.push({ type: "done", reason: "stop", message: output });
273
+ stream.end();
274
+ }
275
+ catch (error) {
276
+ output.stopReason = options?.signal?.aborted ? "aborted" : "error";
277
+ output.errorMessage = error instanceof Error ? error.message : String(error);
278
+ stream.push({ type: "error", reason: output.stopReason, error: output });
279
+ stream.end();
280
+ }
281
+ })();
282
+ return stream;
283
+ }
284
+ //# sourceMappingURL=image-generation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generation.js","sourceRoot":"","sources":["../src/image-generation.ts"],"names":[],"mappings":"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"}
package/dist/models.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { ProviderModelConfig } from "@earendil-works/pi-coding-agent";
2
2
  export declare function dedupeIds(ids: string[]): string[];
3
+ export declare function isSupportedImageGenerationModel(id: string): boolean;
3
4
  export declare function buildOpenAIModels(ids: string[]): ProviderModelConfig[];
4
5
  export declare function buildFallbackOpenAIModels(): ProviderModelConfig[];
5
6
  export declare function normalizeOpenAIModelIds(ids: string[], options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAkB3E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAYjD;AA8ED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAEtE;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,EAAE,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,EAAE,CAGtG;AAcD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMzD"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAqB3E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAYjD;AA2CD,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEnE;AA8CD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAEtE;AAED,wBAAgB,yBAAyB,IAAI,mBAAmB,EAAE,CAEjE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,EAAE,CAGtG;AAcD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMzD"}
package/dist/models.js CHANGED
@@ -1,4 +1,4 @@
1
- import { FALLBACK_OPENAI_MODEL_IDS, HIDDEN_MODEL_ID_PREFIXES, GPT_54_1M_MODEL_ID, GPT_54_DEFAULT_MODEL_ID, GPT_54_UPSTREAM_MODEL_ID, MODEL_INPUTS, OPENAI_CODEX_CONTEXT_WINDOW, OPENAI_CODEX_THINKING_LEVEL_MAP, OPENAI_DEFAULT_CONTEXT_WINDOW, OPENAI_DEFAULT_MAX_TOKENS, OPENAI_FRONTIER_CONTEXT_WINDOW, OPENAI_KNOWN_COSTS, PINNED_MODEL_IDS, ZERO_COST, } from "./constants.js";
1
+ import { FALLBACK_OPENAI_MODEL_IDS, HIDDEN_MODEL_ID_PREFIXES, GPT_IMAGE_2_MODEL_ID, GPT_54_1M_MODEL_ID, GPT_54_DEFAULT_MODEL_ID, GPT_54_UPSTREAM_MODEL_ID, IMAGE_GENERATION_MODEL_INPUTS, MODEL_INPUTS, OPENAI_CODEX_CONTEXT_WINDOW, OPENAI_CODEX_THINKING_LEVEL_MAP, OPENAI_DEFAULT_CONTEXT_WINDOW, OPENAI_DEFAULT_MAX_TOKENS, OPENAI_FRONTIER_CONTEXT_WINDOW, OPENAI_IMAGE_MAX_TOKENS, OPENAI_KNOWN_COSTS, PINNED_MODEL_IDS, ZERO_COST, } from "./constants.js";
2
2
  export function dedupeIds(ids) {
3
3
  const seen = new Set();
4
4
  const deduped = [];
@@ -17,6 +17,9 @@ function toTitleCase(value) {
17
17
  return value.charAt(0).toUpperCase() + value.slice(1);
18
18
  }
19
19
  function formatOpenAIModelName(id) {
20
+ if (id === GPT_IMAGE_2_MODEL_ID) {
21
+ return "GPT Image 2";
22
+ }
20
23
  if (id === GPT_54_DEFAULT_MODEL_ID) {
21
24
  return "GPT-5.4";
22
25
  }
@@ -38,17 +41,21 @@ function formatModelNamePart(part) {
38
41
  function isGpt54Or55Model(id) {
39
42
  return id.startsWith("gpt-5.4") || id.startsWith("gpt-5.5");
40
43
  }
41
- function isImageGenerationModel(id) {
42
- return HIDDEN_MODEL_ID_PREFIXES.some((prefix) => id.startsWith(prefix));
44
+ export function isSupportedImageGenerationModel(id) {
45
+ return id === GPT_IMAGE_2_MODEL_ID;
46
+ }
47
+ function isHiddenImageGenerationModel(id) {
48
+ return HIDDEN_MODEL_ID_PREFIXES.some((prefix) => id.startsWith(prefix)) && !isSupportedImageGenerationModel(id);
43
49
  }
44
50
  function createModelConfig(id, name, cost, contextWindow, maxTokens) {
45
- const isReasoningModel = !isImageGenerationModel(id);
51
+ const isImageModel = isSupportedImageGenerationModel(id);
52
+ const isReasoningModel = !isImageModel;
46
53
  return {
47
54
  id,
48
55
  name,
49
56
  reasoning: isReasoningModel,
50
57
  ...(isReasoningModel && isGpt54Or55Model(id) ? { thinkingLevelMap: { ...OPENAI_CODEX_THINKING_LEVEL_MAP } } : {}),
51
- input: [...MODEL_INPUTS],
58
+ input: isImageModel ? [...IMAGE_GENERATION_MODEL_INPUTS] : [...MODEL_INPUTS],
52
59
  cost: { ...cost },
53
60
  contextWindow,
54
61
  maxTokens,
@@ -62,6 +69,9 @@ function createOpenAIModel(id) {
62
69
  if (id === GPT_54_1M_MODEL_ID) {
63
70
  return createModelConfig(id, formatOpenAIModelName(id), cost, OPENAI_FRONTIER_CONTEXT_WINDOW, OPENAI_DEFAULT_MAX_TOKENS);
64
71
  }
72
+ if (id === GPT_IMAGE_2_MODEL_ID) {
73
+ return createModelConfig(id, formatOpenAIModelName(id), cost, OPENAI_DEFAULT_CONTEXT_WINDOW, OPENAI_IMAGE_MAX_TOKENS);
74
+ }
65
75
  return createModelConfig(id, formatOpenAIModelName(id), cost, OPENAI_DEFAULT_CONTEXT_WINDOW, OPENAI_DEFAULT_MAX_TOKENS);
66
76
  }
67
77
  export function buildOpenAIModels(ids) {
@@ -75,7 +85,7 @@ export function normalizeOpenAIModelIds(ids, options) {
75
85
  return options?.includePinned ? dedupeIds([...normalized, ...PINNED_MODEL_IDS]) : normalized;
76
86
  }
77
87
  function normalizeOpenAIModelId(id) {
78
- if (id.startsWith("claude-") || id === "gpt-5.4-pro" || isImageGenerationModel(id)) {
88
+ if (id.startsWith("claude-") || id === "gpt-5.4-pro" || isHiddenImageGenerationModel(id)) {
79
89
  return [];
80
90
  }
81
91
  if (id === GPT_54_UPSTREAM_MODEL_ID) {
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,GAAG,EACR,KAAK,2BAA2B,EAChC,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,MAAM,uBAAuB,CAAC;AAI/B,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5F;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAgBlF;AAuBD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAOxF;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,EAC1D,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,GACtD,OAAO,CAgBT;AAaD,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAUzH;AAeD,wBAAgB,oCAAoC,CACnD,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,OAAO,GACf,2BAA2B,CAmB7B"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,KAAK,GAAG,EACR,KAAK,2BAA2B,EAChC,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,MAAM,uBAAuB,CAAC;AAK/B,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ5F;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAgBlF;AAuBD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAOxF;AAED,wBAAgB,6BAA6B,CAC5C,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,EAC1D,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,GACtD,OAAO,CAgBT;AAaD,wBAAgB,8BAA8B,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAUzH;AAeD,wBAAgB,oCAAoC,CACnD,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,OAAO,GACf,2BAA2B,CAuB7B"}
package/dist/transport.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { createAssistantMessageEventStream, streamSimpleOpenAIResponses, } from "@earendil-works/pi-ai";
2
2
  import { THECLAWBAY_CHATGPT_ACCOUNT_ID } from "./constants.js";
3
- import { dedupeIds, resolveUpstreamModelId } from "./models.js";
3
+ import { streamSimpleTheClawBayImageGeneration } from "./image-generation.js";
4
+ import { dedupeIds, isSupportedImageGenerationModel, resolveUpstreamModelId } from "./models.js";
4
5
  export function buildTheClawBayHeaders(options) {
5
6
  return {
6
7
  ...(options?.headers ?? {}),
@@ -99,6 +100,9 @@ export function streamSimpleTheClawBayCodexResponses(model, context, options) {
99
100
  const typedModel = model;
100
101
  const typedContext = context;
101
102
  const typedOptions = options;
103
+ if (isSupportedImageGenerationModel(typedModel.id)) {
104
+ return streamSimpleTheClawBayImageGeneration(typedModel, typedContext, typedOptions);
105
+ }
102
106
  const originalOnPayload = typedOptions?.onPayload;
103
107
  const streamModel = createTheClawBayStreamModel(typedModel);
104
108
  const streamOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-clawbay",
3
- "version": "0.0.20",
3
+ "version": "0.0.22",
4
4
  "description": "TheClawBay provider extension for Pi Coding Agent - access GPT-5 and Codex models",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",