@moxxy/plugin-provider-openai-codex 0.35.1 → 0.35.3
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse-event-handler.d.ts","sourceRoot":"","sources":["../../src/codex/sse-event-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sse-event-handler.d.ts","sourceRoot":"","sources":["../../src/codex/sse-event-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAyE3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACzC,aAAa,UAAQ,GACpB,aAAa,CAgIf"}
|
|
@@ -36,11 +36,25 @@ const RETRYABLE_FAILURE_TYPES = new Set([
|
|
|
36
36
|
'server_error',
|
|
37
37
|
'rate_limit_error',
|
|
38
38
|
]);
|
|
39
|
+
/**
|
|
40
|
+
* Transient-failure phrasing, consulted ONLY when the frame carries no `code`
|
|
41
|
+
* and no `type`. The Codex gateway reports its own internal faults with an
|
|
42
|
+
* error object that is just `{ code: null, message }`, so the allowlists above
|
|
43
|
+
* see nothing to match and the turn died on a fault whose own message says the
|
|
44
|
+
* request can be retried. Requiring the classification to be entirely absent
|
|
45
|
+
* keeps every typed failure (quota, validation) fatal however it is worded.
|
|
46
|
+
*/
|
|
47
|
+
const RETRYABLE_FAILURE_MESSAGE = /an error occurred while processing your request|you can retry your request|please try again|temporarily unavailable|internal server error/i;
|
|
39
48
|
function isRetryableFailure(err) {
|
|
40
49
|
if (!err)
|
|
41
50
|
return false;
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
// `!= null` rather than `!== undefined`: the gateway sends an explicit JSON
|
|
52
|
+
// `null` for an unclassified fault, which must fall through to the message.
|
|
53
|
+
if (err.code != null || err.type != null) {
|
|
54
|
+
return ((err.code != null && RETRYABLE_FAILURE_CODES.has(err.code)) ||
|
|
55
|
+
(err.type != null && RETRYABLE_FAILURE_TYPES.has(err.type)));
|
|
56
|
+
}
|
|
57
|
+
return err.message !== undefined && RETRYABLE_FAILURE_MESSAGE.test(err.message);
|
|
44
58
|
}
|
|
45
59
|
const TOOL_STREAM_LIMIT_ERROR = (what) => ({
|
|
46
60
|
events: [{ type: 'error', message: `Codex tool-call stream exceeded ${what} limit`, retryable: false }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse-event-handler.js","sourceRoot":"","sources":["../../src/codex/sse-event-handler.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,GAId,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,sBAAsB;IACtB,cAAc;IACd,gBAAgB;IAChB,qBAAqB;CACtB,CAAC,CAAC;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,2BAA2B;IAC3B,cAAc;IACd,kBAAkB;CACnB,CAAC,CAAC;AAEH,SAAS,kBAAkB,
|
|
1
|
+
{"version":3,"file":"sse-event-handler.js","sourceRoot":"","sources":["../../src/codex/sse-event-handler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moxxy/plugin-provider-openai-codex",
|
|
3
|
-
"version": "0.35.
|
|
3
|
+
"version": "0.35.3",
|
|
4
4
|
"description": "OpenAI Codex (ChatGPT Pro/Plus OAuth) LLMProvider plugin for moxxy. Streams against https://chatgpt.com/backend-api/codex/responses using PKCE-based OAuth tokens.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"moxxy",
|
|
@@ -59,9 +59,9 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@moxxy/plugin-browser": "0.35.
|
|
63
|
-
"@moxxy/plugin-oauth": "0.35.
|
|
64
|
-
"@moxxy/sdk": "0.35.
|
|
62
|
+
"@moxxy/plugin-browser": "0.35.3",
|
|
63
|
+
"@moxxy/plugin-oauth": "0.35.3",
|
|
64
|
+
"@moxxy/sdk": "0.35.3"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/node": "^22.10.0",
|
|
@@ -129,6 +129,44 @@ describe('handleSseEvent — in-band failures', () => {
|
|
|
129
129
|
});
|
|
130
130
|
});
|
|
131
131
|
|
|
132
|
+
it('retries the gateway internal fault, which arrives with no code and no type', () => {
|
|
133
|
+
const message =
|
|
134
|
+
'An error occurred while processing your request. You can retry your request, or contact us ' +
|
|
135
|
+
'through our help center at help.openai.com if the error persists. Please include the request ' +
|
|
136
|
+
'ID 1a3a7285-4738-42de-acb6-385fb334c4a5 in your message.';
|
|
137
|
+
const out = run(
|
|
138
|
+
{
|
|
139
|
+
type: 'response.failed',
|
|
140
|
+
response: { status: 'failed', error: { code: undefined, message } },
|
|
141
|
+
},
|
|
142
|
+
false,
|
|
143
|
+
);
|
|
144
|
+
expect(out.events?.[0]).toEqual({ type: 'error', message, retryable: true });
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it('treats an explicit null code as unclassified, not as a code that failed to match', () => {
|
|
148
|
+
const out = run(
|
|
149
|
+
{
|
|
150
|
+
type: 'error',
|
|
151
|
+
// The wire shape: JSON `null`, which the declared `code?: string` hides.
|
|
152
|
+
error: { code: null, message: 'Please try again later.' } as unknown as {
|
|
153
|
+
code?: string;
|
|
154
|
+
message?: string;
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
false,
|
|
158
|
+
);
|
|
159
|
+
expect(out.events?.[0]).toMatchObject({ retryable: true });
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it('keeps an unclassified failure fatal when its message claims nothing transient', () => {
|
|
163
|
+
const out = run(
|
|
164
|
+
{ type: 'error', error: { message: 'Your prompt was rejected by content policy.' } },
|
|
165
|
+
false,
|
|
166
|
+
);
|
|
167
|
+
expect(out.events?.[0]).toMatchObject({ retryable: false });
|
|
168
|
+
});
|
|
169
|
+
|
|
132
170
|
it('keeps quota exhaustion fatal — retrying cannot clear it', () => {
|
|
133
171
|
const out = run(
|
|
134
172
|
{
|
|
@@ -46,12 +46,30 @@ const RETRYABLE_FAILURE_TYPES = new Set([
|
|
|
46
46
|
'rate_limit_error',
|
|
47
47
|
]);
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Transient-failure phrasing, consulted ONLY when the frame carries no `code`
|
|
51
|
+
* and no `type`. The Codex gateway reports its own internal faults with an
|
|
52
|
+
* error object that is just `{ code: null, message }`, so the allowlists above
|
|
53
|
+
* see nothing to match and the turn died on a fault whose own message says the
|
|
54
|
+
* request can be retried. Requiring the classification to be entirely absent
|
|
55
|
+
* keeps every typed failure (quota, validation) fatal however it is worded.
|
|
56
|
+
*/
|
|
57
|
+
const RETRYABLE_FAILURE_MESSAGE =
|
|
58
|
+
/an error occurred while processing your request|you can retry your request|please try again|temporarily unavailable|internal server error/i;
|
|
59
|
+
|
|
60
|
+
function isRetryableFailure(
|
|
61
|
+
err: { type?: string; code?: string; message?: string } | undefined,
|
|
62
|
+
): boolean {
|
|
50
63
|
if (!err) return false;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
64
|
+
// `!= null` rather than `!== undefined`: the gateway sends an explicit JSON
|
|
65
|
+
// `null` for an unclassified fault, which must fall through to the message.
|
|
66
|
+
if (err.code != null || err.type != null) {
|
|
67
|
+
return (
|
|
68
|
+
(err.code != null && RETRYABLE_FAILURE_CODES.has(err.code)) ||
|
|
69
|
+
(err.type != null && RETRYABLE_FAILURE_TYPES.has(err.type))
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
return err.message !== undefined && RETRYABLE_FAILURE_MESSAGE.test(err.message);
|
|
55
73
|
}
|
|
56
74
|
|
|
57
75
|
const TOOL_STREAM_LIMIT_ERROR = (what: string): SseStepResult => ({
|