@moxxy/plugin-provider-openai-codex 0.34.0 → 0.35.1
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/dist/codex/headers.d.ts +1 -1
- package/dist/codex/headers.d.ts.map +1 -1
- package/dist/codex/headers.js +15 -9
- package/dist/codex/headers.js.map +1 -1
- package/dist/codex/sse-event-handler.d.ts.map +1 -1
- package/dist/codex/sse-event-handler.js +31 -2
- package/dist/codex/sse-event-handler.js.map +1 -1
- package/dist/codex/stream-types.d.ts +8 -0
- package/dist/codex/stream-types.d.ts.map +1 -1
- package/dist/codex/stream-types.js.map +1 -1
- package/dist/oauth.d.ts +10 -1
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +10 -1
- package/dist/oauth.js.map +1 -1
- package/package.json +6 -6
- package/src/codex/headers.ts +16 -9
- package/src/codex/sse-event-handler.test.ts +61 -0
- package/src/codex/sse-event-handler.ts +34 -2
- package/src/codex/stream-types.ts +3 -1
- package/src/oauth.test.ts +1 -1
- package/src/oauth.ts +10 -1
- package/src/provider.test.ts +4 -2
package/dist/codex/headers.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CodexTokens } from '../types.js';
|
|
2
2
|
export declare const PLUGIN_VERSION: string;
|
|
3
|
-
export declare const CODEX_USER_AGENT
|
|
3
|
+
export declare const CODEX_USER_AGENT = "codex_cli_rs/0.51.0";
|
|
4
4
|
export declare function buildCodexHeaders(tokens: CodexTokens, sessionId: string): Record<string, string>;
|
|
5
5
|
//# sourceMappingURL=headers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/codex/headers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../src/codex/headers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAqB/C,eAAO,MAAM,cAAc,QAAyB,CAAC;AAWrD,eAAO,MAAM,gBAAgB,wBAAsC,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWhG"}
|
package/dist/codex/headers.js
CHANGED
|
@@ -2,14 +2,12 @@ import { createRequire } from 'node:module';
|
|
|
2
2
|
import { ORIGINATOR } from '../oauth.js';
|
|
3
3
|
/**
|
|
4
4
|
* Resolve this plugin's real version from its package.json once at module load
|
|
5
|
-
* rather than freezing a stale literal in
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* single-file CLI bundle the relative resolve fails and we keep the `0.0.0`
|
|
12
|
-
* fallback; a build-time constant would close that gap — see TECH_DEBT.)
|
|
5
|
+
* rather than freezing a stale literal in the plugin def. Resolves correctly
|
|
6
|
+
* when the package runs from its own dist (dev, tests, third-party
|
|
7
|
+
* `~/.moxxy/plugins` installs); falls back to `0.0.0` defensively — never
|
|
8
|
+
* throws. (NOTE: when inlined into the single-file CLI bundle the relative
|
|
9
|
+
* resolve fails and we keep the `0.0.0` fallback; a build-time constant would
|
|
10
|
+
* close that gap — see TECH_DEBT.)
|
|
13
11
|
*/
|
|
14
12
|
function resolvePluginVersion() {
|
|
15
13
|
try {
|
|
@@ -22,7 +20,15 @@ function resolvePluginVersion() {
|
|
|
22
20
|
}
|
|
23
21
|
}
|
|
24
22
|
export const PLUGIN_VERSION = resolvePluginVersion();
|
|
25
|
-
|
|
23
|
+
/**
|
|
24
|
+
* The Codex backend gates on `User-Agent` together with `originator` — see
|
|
25
|
+
* ORIGINATOR in `../oauth.js` for the measurement behind both. Only the
|
|
26
|
+
* `codex_cli_rs/` product token is load-bearing, not the version, so this
|
|
27
|
+
* carries a pinned literal instead of moxxy's version (which would read as a
|
|
28
|
+
* nonsense CLI release).
|
|
29
|
+
*/
|
|
30
|
+
const CODEX_CLI_VERSION = '0.51.0';
|
|
31
|
+
export const CODEX_USER_AGENT = `codex_cli_rs/${CODEX_CLI_VERSION}`;
|
|
26
32
|
export function buildCodexHeaders(tokens, sessionId) {
|
|
27
33
|
const headers = {
|
|
28
34
|
'Content-Type': 'application/json',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/codex/headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC
|
|
1
|
+
{"version":3,"file":"headers.js","sourceRoot":"","sources":["../../src/codex/headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC;;;;;;;;GAQG;AACH,SAAS,oBAAoB;IAC3B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAA0B,CAAC;QACnE,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,iBAAiB,EAAE,CAAC;AAEpE,MAAM,UAAU,iBAAiB,CAAC,MAAmB,EAAE,SAAiB;IACtE,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;QAClC,MAAM,EAAE,mBAAmB;QAC3B,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;QACxC,UAAU,EAAE,UAAU;QACtB,YAAY,EAAE,gBAAgB;QAC9B,UAAU,EAAE,SAAS;KACtB,CAAC;IACF,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;IACvE,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -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;AAuD3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACzC,aAAa,UAAQ,GACpB,aAAa,CAgIf"}
|
|
@@ -17,6 +17,31 @@ const MAX_TOOL_ARGS_CHARS = 16 * 1024 * 1024;
|
|
|
17
17
|
* turn fans out to anywhere near this many parallel tool calls.
|
|
18
18
|
*/
|
|
19
19
|
const MAX_PENDING_TOOL_CALLS = 1024;
|
|
20
|
+
/**
|
|
21
|
+
* Transient in-band failures. The Codex backend reports capacity and internal
|
|
22
|
+
* faults INSIDE a 200 SSE stream, so they never reach the HTTP-status
|
|
23
|
+
* classifier in `provider.ts` — without this the turn dies on a blip that a
|
|
24
|
+
* single retry would clear. Deliberately an allowlist: quota exhaustion and
|
|
25
|
+
* validation rejects must stay fatal, since retrying those only hammers the
|
|
26
|
+
* backend and delays the real error reaching the user.
|
|
27
|
+
*/
|
|
28
|
+
const RETRYABLE_FAILURE_CODES = new Set([
|
|
29
|
+
'server_is_overloaded',
|
|
30
|
+
'server_error',
|
|
31
|
+
'internal_error',
|
|
32
|
+
'rate_limit_exceeded',
|
|
33
|
+
]);
|
|
34
|
+
const RETRYABLE_FAILURE_TYPES = new Set([
|
|
35
|
+
'service_unavailable_error',
|
|
36
|
+
'server_error',
|
|
37
|
+
'rate_limit_error',
|
|
38
|
+
]);
|
|
39
|
+
function isRetryableFailure(err) {
|
|
40
|
+
if (!err)
|
|
41
|
+
return false;
|
|
42
|
+
return ((err.code !== undefined && RETRYABLE_FAILURE_CODES.has(err.code)) ||
|
|
43
|
+
(err.type !== undefined && RETRYABLE_FAILURE_TYPES.has(err.type)));
|
|
44
|
+
}
|
|
20
45
|
const TOOL_STREAM_LIMIT_ERROR = (what) => ({
|
|
21
46
|
events: [{ type: 'error', message: `Codex tool-call stream exceeded ${what} limit`, retryable: false }],
|
|
22
47
|
terminal: true,
|
|
@@ -149,8 +174,12 @@ export function handleSseEvent(ev, pending, emitReasoning = false) {
|
|
|
149
174
|
};
|
|
150
175
|
}
|
|
151
176
|
if (type === 'response.failed' || type === 'response.error' || type === 'error') {
|
|
152
|
-
const
|
|
153
|
-
|
|
177
|
+
const err = ev.error ?? ev.response?.error;
|
|
178
|
+
const msg = err?.message ?? `Codex stream failed: ${type}`;
|
|
179
|
+
return {
|
|
180
|
+
events: [{ type: 'error', message: msg, retryable: isRetryableFailure(err) }],
|
|
181
|
+
terminal: true,
|
|
182
|
+
};
|
|
154
183
|
}
|
|
155
184
|
return {};
|
|
156
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sse-event-handler.js","sourceRoot":"","sources":["../../src/codex/sse-event-handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sse-event-handler.js","sourceRoot":"","sources":["../../src/codex/sse-event-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,12 @@ export interface ResponsesSseEvent {
|
|
|
27
27
|
incomplete_details?: {
|
|
28
28
|
reason?: string;
|
|
29
29
|
};
|
|
30
|
+
/** `response.failed` carries the failure here, NOT in the sibling `error`. */
|
|
31
|
+
error?: {
|
|
32
|
+
type?: string;
|
|
33
|
+
code?: string;
|
|
34
|
+
message?: string;
|
|
35
|
+
};
|
|
30
36
|
usage?: {
|
|
31
37
|
input_tokens?: number;
|
|
32
38
|
output_tokens?: number;
|
|
@@ -36,6 +42,8 @@ export interface ResponsesSseEvent {
|
|
|
36
42
|
};
|
|
37
43
|
};
|
|
38
44
|
error?: {
|
|
45
|
+
type?: string;
|
|
46
|
+
code?: string;
|
|
39
47
|
message?: string;
|
|
40
48
|
};
|
|
41
49
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-types.d.ts","sourceRoot":"","sources":["../../src/codex/stream-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,4EAA4E;QAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,oBAAoB,CAAC,EAAE;gBAAE,aAAa,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACnD,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"stream-types.d.ts","sourceRoot":"","sources":["../../src/codex/stream-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,4EAA4E;QAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,8EAA8E;QAC9E,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC3D,KAAK,CAAC,EAAE;YACN,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,oBAAoB,CAAC,EAAE;gBAAE,aAAa,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACnD,CAAC;KACH,CAAC;IACF,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOnD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-types.js","sourceRoot":"","sources":["../../src/codex/stream-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stream-types.js","sourceRoot":"","sources":["../../src/codex/stream-types.ts"],"names":[],"mappings":"AA+CA;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
|
package/dist/oauth.d.ts
CHANGED
|
@@ -21,7 +21,16 @@ export declare const DEFAULT_CALLBACK_PORT = 1455;
|
|
|
21
21
|
export declare const DEFAULT_REDIRECT_PATH = "/auth/callback";
|
|
22
22
|
export declare const DEFAULT_REDIRECT_URI = "http://localhost:1455/auth/callback";
|
|
23
23
|
export declare const SCOPES = "openid profile email offline_access";
|
|
24
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Client identity sent to the ChatGPT Codex backend. It gates on `originator`
|
|
26
|
+
* TOGETHER WITH the `User-Agent` (see `codex/headers.ts`): a request that names
|
|
27
|
+
* anything else is throttled with in-band `server_is_overloaded` /
|
|
28
|
+
* `internal_error` failures rather than a clean rejection. Measured on one
|
|
29
|
+
* account with identical payloads interleaved back to back: the official pair
|
|
30
|
+
* succeeded 6/6 where `moxxy` managed 2/6, and matching only one of the two
|
|
31
|
+
* headers still failed. Keep this in lockstep with `CODEX_USER_AGENT`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const ORIGINATOR = "codex_cli_rs";
|
|
25
34
|
/**
|
|
26
35
|
* PKCE pair for the Codex flow. Delegates to `@moxxy/plugin-oauth`'s shared
|
|
27
36
|
* primitives (S256 verifier -> challenge) instead of hand-rolling crypto;
|
package/dist/oauth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAKL,aAAa,IAAI,kBAAkB,EAGpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,iCAAiC,CAAC;AACxD,eAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,eAAO,MAAM,aAAa,4CAA8B,CAAC;AACzD,eAAO,MAAM,SAAS,wCAA0B,CAAC;AACjD,eAAO,MAAM,mBAAmB,oDAAoD,CAAC;AACrF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,oBAAoB,wCAAsE,CAAC;AACxG,eAAO,MAAM,MAAM,wCAAwC,CAAC;AAC5D,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAKL,aAAa,IAAI,kBAAkB,EAGpC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,SAAS,iCAAiC,CAAC;AACxD,eAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,eAAO,MAAM,aAAa,4CAA8B,CAAC;AACzD,eAAO,MAAM,SAAS,wCAA0B,CAAC;AACjD,eAAO,MAAM,mBAAmB,oDAAoD,CAAC;AACrF,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAC1C,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AACtD,eAAO,MAAM,oBAAoB,wCAAsE,CAAC;AACxG,eAAO,MAAM,MAAM,wCAAwC,CAAC;AAC5D;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,iBAAiB,CAAC;AAEzC;;;;;GAKG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAGvD;AAED,eAAO,MAAM,aAAa,2BAAqB,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAc7F;AAcD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAkB/E;AAED,UAAU,eAAe;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAmB5E;AAkBD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,EACf,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,WAAW,CAAC,CAYtB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,WAAW,CAAC,CAQtB"}
|
package/dist/oauth.js
CHANGED
|
@@ -22,7 +22,16 @@ export const DEFAULT_CALLBACK_PORT = 1455;
|
|
|
22
22
|
export const DEFAULT_REDIRECT_PATH = '/auth/callback';
|
|
23
23
|
export const DEFAULT_REDIRECT_URI = `http://localhost:${DEFAULT_CALLBACK_PORT}${DEFAULT_REDIRECT_PATH}`;
|
|
24
24
|
export const SCOPES = 'openid profile email offline_access';
|
|
25
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Client identity sent to the ChatGPT Codex backend. It gates on `originator`
|
|
27
|
+
* TOGETHER WITH the `User-Agent` (see `codex/headers.ts`): a request that names
|
|
28
|
+
* anything else is throttled with in-band `server_is_overloaded` /
|
|
29
|
+
* `internal_error` failures rather than a clean rejection. Measured on one
|
|
30
|
+
* account with identical payloads interleaved back to back: the official pair
|
|
31
|
+
* succeeded 6/6 where `moxxy` managed 2/6, and matching only one of the two
|
|
32
|
+
* headers still failed. Keep this in lockstep with `CODEX_USER_AGENT`.
|
|
33
|
+
*/
|
|
34
|
+
export const ORIGINATOR = 'codex_cli_rs';
|
|
26
35
|
/**
|
|
27
36
|
* PKCE pair for the Codex flow. Delegates to `@moxxy/plugin-oauth`'s shared
|
|
28
37
|
* primitives (S256 verifier -> challenge) instead of hand-rolling crypto;
|
package/dist/oauth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,IAAI,yBAAyB,EACjD,oBAAoB,EACpB,aAAa,IAAI,kBAAkB,EACnC,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,8BAA8B,CAAC;AACxD,MAAM,CAAC,MAAM,MAAM,GAAG,yBAAyB,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,MAAM,kBAAkB,CAAC;AACzD,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,MAAM,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,iDAAiD,CAAC;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,qBAAqB,GAAG,qBAAqB,EAAE,CAAC;AACxG,MAAM,CAAC,MAAM,MAAM,GAAG,qCAAqC,CAAC;AAC5D,MAAM,CAAC,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"oauth.js","sourceRoot":"","sources":["../src/oauth.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.
|
|
3
|
+
"version": "0.35.1",
|
|
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,17 +59,17 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@moxxy/plugin-browser": "0.
|
|
63
|
-
"@moxxy/plugin-oauth": "0.
|
|
64
|
-
"@moxxy/sdk": "0.
|
|
62
|
+
"@moxxy/plugin-browser": "0.35.1",
|
|
63
|
+
"@moxxy/plugin-oauth": "0.35.1",
|
|
64
|
+
"@moxxy/sdk": "0.35.1"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/node": "^22.10.0",
|
|
68
68
|
"typescript": "^5.7.3",
|
|
69
69
|
"vitest": "^2.1.8",
|
|
70
70
|
"zod": "^3.24.0",
|
|
71
|
-
"@moxxy/
|
|
72
|
-
"@moxxy/
|
|
71
|
+
"@moxxy/tsconfig": "0.0.0",
|
|
72
|
+
"@moxxy/vitest-preset": "0.0.0"
|
|
73
73
|
},
|
|
74
74
|
"scripts": {
|
|
75
75
|
"build": "tsc -p tsconfig.json",
|
package/src/codex/headers.ts
CHANGED
|
@@ -4,14 +4,12 @@ import type { CodexTokens } from '../types.js';
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Resolve this plugin's real version from its package.json once at module load
|
|
7
|
-
* rather than freezing a stale literal in
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* single-file CLI bundle the relative resolve fails and we keep the `0.0.0`
|
|
14
|
-
* fallback; a build-time constant would close that gap — see TECH_DEBT.)
|
|
7
|
+
* rather than freezing a stale literal in the plugin def. Resolves correctly
|
|
8
|
+
* when the package runs from its own dist (dev, tests, third-party
|
|
9
|
+
* `~/.moxxy/plugins` installs); falls back to `0.0.0` defensively — never
|
|
10
|
+
* throws. (NOTE: when inlined into the single-file CLI bundle the relative
|
|
11
|
+
* resolve fails and we keep the `0.0.0` fallback; a build-time constant would
|
|
12
|
+
* close that gap — see TECH_DEBT.)
|
|
15
13
|
*/
|
|
16
14
|
function resolvePluginVersion(): string {
|
|
17
15
|
try {
|
|
@@ -25,7 +23,16 @@ function resolvePluginVersion(): string {
|
|
|
25
23
|
|
|
26
24
|
export const PLUGIN_VERSION = resolvePluginVersion();
|
|
27
25
|
|
|
28
|
-
|
|
26
|
+
/**
|
|
27
|
+
* The Codex backend gates on `User-Agent` together with `originator` — see
|
|
28
|
+
* ORIGINATOR in `../oauth.js` for the measurement behind both. Only the
|
|
29
|
+
* `codex_cli_rs/` product token is load-bearing, not the version, so this
|
|
30
|
+
* carries a pinned literal instead of moxxy's version (which would read as a
|
|
31
|
+
* nonsense CLI release).
|
|
32
|
+
*/
|
|
33
|
+
const CODEX_CLI_VERSION = '0.51.0';
|
|
34
|
+
|
|
35
|
+
export const CODEX_USER_AGENT = `codex_cli_rs/${CODEX_CLI_VERSION}`;
|
|
29
36
|
|
|
30
37
|
export function buildCodexHeaders(tokens: CodexTokens, sessionId: string): Record<string, string> {
|
|
31
38
|
const headers: Record<string, string> = {
|
|
@@ -88,3 +88,64 @@ describe('handleSseEvent — hostile-stream bounds', () => {
|
|
|
88
88
|
expect(pending.size).toBeLessThanOrEqual(1024);
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
|
+
|
|
92
|
+
describe('handleSseEvent — in-band failures', () => {
|
|
93
|
+
// Verbatim frame the backend sends when it sheds load; it arrives inside a
|
|
94
|
+
// 200 SSE stream, so the HTTP-status classifier never sees it.
|
|
95
|
+
const overloaded = {
|
|
96
|
+
type: 'error',
|
|
97
|
+
error: {
|
|
98
|
+
type: 'service_unavailable_error',
|
|
99
|
+
code: 'server_is_overloaded',
|
|
100
|
+
message: 'Our servers are currently overloaded. Please try again later.',
|
|
101
|
+
},
|
|
102
|
+
} satisfies ResponsesSseEvent;
|
|
103
|
+
|
|
104
|
+
it('marks a server_is_overloaded error retryable so the turn survives a blip', () => {
|
|
105
|
+
const out = run(overloaded, false);
|
|
106
|
+
expect(out.terminal).toBe(true);
|
|
107
|
+
expect(out.events?.[0]).toEqual({
|
|
108
|
+
type: 'error',
|
|
109
|
+
message: 'Our servers are currently overloaded. Please try again later.',
|
|
110
|
+
retryable: true,
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
it('reads the failure out of response.failed, where it nests under response.error', () => {
|
|
115
|
+
const out = run(
|
|
116
|
+
{
|
|
117
|
+
type: 'response.failed',
|
|
118
|
+
response: {
|
|
119
|
+
status: 'failed',
|
|
120
|
+
error: { code: 'server_is_overloaded', message: 'Our servers are currently overloaded.' },
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
false,
|
|
124
|
+
);
|
|
125
|
+
expect(out.events?.[0]).toEqual({
|
|
126
|
+
type: 'error',
|
|
127
|
+
message: 'Our servers are currently overloaded.',
|
|
128
|
+
retryable: true,
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('keeps quota exhaustion fatal — retrying cannot clear it', () => {
|
|
133
|
+
const out = run(
|
|
134
|
+
{
|
|
135
|
+
type: 'error',
|
|
136
|
+
error: { type: 'usage_limit_error', code: 'usage_limit_reached', message: 'Limit reached.' },
|
|
137
|
+
},
|
|
138
|
+
false,
|
|
139
|
+
);
|
|
140
|
+
expect(out.events?.[0]).toMatchObject({ type: 'error', retryable: false });
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it('keeps an unrecognised failure fatal rather than guessing', () => {
|
|
144
|
+
const out = run({ type: 'response.failed' }, false);
|
|
145
|
+
expect(out.events?.[0]).toEqual({
|
|
146
|
+
type: 'error',
|
|
147
|
+
message: 'Codex stream failed: response.failed',
|
|
148
|
+
retryable: false,
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -26,6 +26,34 @@ const MAX_TOOL_ARGS_CHARS = 16 * 1024 * 1024;
|
|
|
26
26
|
*/
|
|
27
27
|
const MAX_PENDING_TOOL_CALLS = 1024;
|
|
28
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Transient in-band failures. The Codex backend reports capacity and internal
|
|
31
|
+
* faults INSIDE a 200 SSE stream, so they never reach the HTTP-status
|
|
32
|
+
* classifier in `provider.ts` — without this the turn dies on a blip that a
|
|
33
|
+
* single retry would clear. Deliberately an allowlist: quota exhaustion and
|
|
34
|
+
* validation rejects must stay fatal, since retrying those only hammers the
|
|
35
|
+
* backend and delays the real error reaching the user.
|
|
36
|
+
*/
|
|
37
|
+
const RETRYABLE_FAILURE_CODES = new Set([
|
|
38
|
+
'server_is_overloaded',
|
|
39
|
+
'server_error',
|
|
40
|
+
'internal_error',
|
|
41
|
+
'rate_limit_exceeded',
|
|
42
|
+
]);
|
|
43
|
+
const RETRYABLE_FAILURE_TYPES = new Set([
|
|
44
|
+
'service_unavailable_error',
|
|
45
|
+
'server_error',
|
|
46
|
+
'rate_limit_error',
|
|
47
|
+
]);
|
|
48
|
+
|
|
49
|
+
function isRetryableFailure(err: { type?: string; code?: string } | undefined): boolean {
|
|
50
|
+
if (!err) return false;
|
|
51
|
+
return (
|
|
52
|
+
(err.code !== undefined && RETRYABLE_FAILURE_CODES.has(err.code)) ||
|
|
53
|
+
(err.type !== undefined && RETRYABLE_FAILURE_TYPES.has(err.type))
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
29
57
|
const TOOL_STREAM_LIMIT_ERROR = (what: string): SseStepResult => ({
|
|
30
58
|
events: [{ type: 'error', message: `Codex tool-call stream exceeded ${what} limit`, retryable: false }],
|
|
31
59
|
terminal: true,
|
|
@@ -167,8 +195,12 @@ export function handleSseEvent(
|
|
|
167
195
|
}
|
|
168
196
|
|
|
169
197
|
if (type === 'response.failed' || type === 'response.error' || type === 'error') {
|
|
170
|
-
const
|
|
171
|
-
|
|
198
|
+
const err = ev.error ?? ev.response?.error;
|
|
199
|
+
const msg = err?.message ?? `Codex stream failed: ${type}`;
|
|
200
|
+
return {
|
|
201
|
+
events: [{ type: 'error', message: msg, retryable: isRetryableFailure(err) }],
|
|
202
|
+
terminal: true,
|
|
203
|
+
};
|
|
172
204
|
}
|
|
173
205
|
|
|
174
206
|
return {};
|
|
@@ -27,13 +27,15 @@ export interface ResponsesSseEvent {
|
|
|
27
27
|
response?: {
|
|
28
28
|
status?: string;
|
|
29
29
|
incomplete_details?: { reason?: string };
|
|
30
|
+
/** `response.failed` carries the failure here, NOT in the sibling `error`. */
|
|
31
|
+
error?: { type?: string; code?: string; message?: string };
|
|
30
32
|
usage?: {
|
|
31
33
|
input_tokens?: number;
|
|
32
34
|
output_tokens?: number;
|
|
33
35
|
input_tokens_details?: { cached_tokens?: number };
|
|
34
36
|
};
|
|
35
37
|
};
|
|
36
|
-
error?: { message?: string };
|
|
38
|
+
error?: { type?: string; code?: string; message?: string };
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
export interface SseStepResult {
|
package/src/oauth.test.ts
CHANGED
|
@@ -59,7 +59,7 @@ describe('buildAuthorizeUrl', () => {
|
|
|
59
59
|
expect(params.get('id_token_add_organizations')).toBe('true');
|
|
60
60
|
expect(params.get('codex_cli_simplified_flow')).toBe('true');
|
|
61
61
|
expect(params.get('state')).toBe('STATE');
|
|
62
|
-
expect(params.get('originator')).toBe('
|
|
62
|
+
expect(params.get('originator')).toBe('codex_cli_rs');
|
|
63
63
|
});
|
|
64
64
|
});
|
|
65
65
|
|
package/src/oauth.ts
CHANGED
|
@@ -33,7 +33,16 @@ export const DEFAULT_CALLBACK_PORT = 1455;
|
|
|
33
33
|
export const DEFAULT_REDIRECT_PATH = '/auth/callback';
|
|
34
34
|
export const DEFAULT_REDIRECT_URI = `http://localhost:${DEFAULT_CALLBACK_PORT}${DEFAULT_REDIRECT_PATH}`;
|
|
35
35
|
export const SCOPES = 'openid profile email offline_access';
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Client identity sent to the ChatGPT Codex backend. It gates on `originator`
|
|
38
|
+
* TOGETHER WITH the `User-Agent` (see `codex/headers.ts`): a request that names
|
|
39
|
+
* anything else is throttled with in-band `server_is_overloaded` /
|
|
40
|
+
* `internal_error` failures rather than a clean rejection. Measured on one
|
|
41
|
+
* account with identical payloads interleaved back to back: the official pair
|
|
42
|
+
* succeeded 6/6 where `moxxy` managed 2/6, and matching only one of the two
|
|
43
|
+
* headers still failed. Keep this in lockstep with `CODEX_USER_AGENT`.
|
|
44
|
+
*/
|
|
45
|
+
export const ORIGINATOR = 'codex_cli_rs';
|
|
37
46
|
|
|
38
47
|
/**
|
|
39
48
|
* PKCE pair for the Codex flow. Delegates to `@moxxy/plugin-oauth`'s shared
|
package/src/provider.test.ts
CHANGED
|
@@ -116,9 +116,11 @@ describe('CodexProvider.stream', () => {
|
|
|
116
116
|
const h = captured.init?.headers as Record<string, string>;
|
|
117
117
|
expect(h['Authorization']).toBe('Bearer AT');
|
|
118
118
|
expect(h['ChatGPT-Account-Id']).toBe('acct_test');
|
|
119
|
-
|
|
119
|
+
// Both headers must name the official CLI together — the backend throttles
|
|
120
|
+
// requests that identify as anything else. See ORIGINATOR in oauth.ts.
|
|
121
|
+
expect(h['originator']).toBe('codex_cli_rs');
|
|
120
122
|
expect(h['session_id']).toBe('sess_fixed');
|
|
121
|
-
expect(h['User-Agent']).toMatch(/^
|
|
123
|
+
expect(h['User-Agent']).toMatch(/^codex_cli_rs\//);
|
|
122
124
|
expect(h['Accept']).toBe('text/event-stream');
|
|
123
125
|
|
|
124
126
|
// Event sequence: message_start, text_delta('hello'), message_end (with usage)
|