@moxxy/plugin-provider-openai-codex 0.35.0 → 0.35.2

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,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: string;
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;AAuB/C,eAAO,MAAM,cAAc,QAAyB,CAAC;AAErD,eAAO,MAAM,gBAAgB,QAAoC,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWhG"}
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"}
@@ -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 two places (the UA and the plugin
6
- * def). The User-Agent is sent on every request to the ChatGPT backend; a
7
- * permanently-`0.0.0` UA defeats server-side version gating and diverges from
8
- * the real release. Resolves correctly when the package runs from its own dist
9
- * (dev, tests, third-party `~/.moxxy/plugins` installs); falls back to `0.0.0`
10
- * defensively — never throws on a header build. (NOTE: when inlined into the
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
- export const CODEX_USER_AGENT = `moxxy/${PLUGIN_VERSION} (codex)`;
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;;;;;;;;;;GAUG;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,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,cAAc,UAAU,CAAC;AAElE,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
+ {"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;AA2B3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,iBAAiB,EACrB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACzC,aAAa,UAAQ,GACpB,aAAa,CA4Hf"}
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"}
@@ -17,6 +17,45 @@ 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
+ /**
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;
48
+ function isRetryableFailure(err) {
49
+ if (!err)
50
+ return false;
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);
58
+ }
20
59
  const TOOL_STREAM_LIMIT_ERROR = (what) => ({
21
60
  events: [{ type: 'error', message: `Codex tool-call stream exceeded ${what} limit`, retryable: false }],
22
61
  terminal: true,
@@ -149,8 +188,12 @@ export function handleSseEvent(ev, pending, emitReasoning = false) {
149
188
  };
150
189
  }
151
190
  if (type === 'response.failed' || type === 'response.error' || type === 'error') {
152
- const msg = ev.error?.message ?? `Codex stream failed: ${type}`;
153
- return { events: [{ type: 'error', message: msg, retryable: false }], terminal: true };
191
+ const err = ev.error ?? ev.response?.error;
192
+ const msg = err?.message ?? `Codex stream failed: ${type}`;
193
+ return {
194
+ events: [{ type: 'error', message: msg, retryable: isRetryableFailure(err) }],
195
+ terminal: true,
196
+ };
154
197
  }
155
198
  return {};
156
199
  }
@@ -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;CAC9B;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
+ {"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":"AA6CA;;;;;;;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"}
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
- export declare const ORIGINATOR = "moxxy";
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;
@@ -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,UAAU,CAAC;AAElC;;;;;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"}
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
- export const ORIGINATOR = 'moxxy';
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,OAAO,CAAC;AAElC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAe,EAAE,KAAa;IACnF,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,SAAS;QACnB,WAAW;QACX,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACzB,aAAa,EAAE,IAAI,CAAC,SAAS;QAC7B,KAAK;QACL,eAAe,EAAE;YACf,0BAA0B,EAAE,MAAM;YAClC,yBAAyB,EAAE,MAAM;YACjC,UAAU,EAAE,UAAU;SACvB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,aAAa,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;IAC3D,uEAAuE;IACvE,IAAI,OAAO,CAAC,MAAM,GAAG,qBAAqB;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;QACzF,yEAAyE;QACzE,0EAA0E;QAC1E,sEAAsE;QACtE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QACrF,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,KAAK,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACtD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAI,OAAmC,CAAC,oBAAoB,CAAC,CAAC;YAC3E,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;YAC1C,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,GAAa;IAClC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,YAAY,EAAE,GAAG,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,WAAW;QACvB,OAAO,EAAE,GAAG,CAAC,YAAY;QACzB,OAAO,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;QAC/C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,WAAmB,EACnB,IAAe,EACf,YAA0B,KAAK;IAE/B,MAAM,GAAG,GAAG,MAAM,yBAAyB,CACzC;QACE,QAAQ,EAAE,SAAS;QACnB,IAAI;QACJ,WAAW;QACX,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,IAAI,CAAC,QAAQ;KAC5B,EACD,SAAS,CACV,CAAC;IACF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAoB,EACpB,YAA0B,KAAK;IAE/B,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAClC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,EAC1D,SAAS,CACV,CAAC;IACF,OAAO,aAAa,CAClB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,CAClD,CAAC;AACJ,CAAC"}
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;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAe,EAAE,KAAa;IACnF,OAAO,YAAY,CAAC;QAClB,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,SAAS;QACnB,WAAW;QACX,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACzB,aAAa,EAAE,IAAI,CAAC,SAAS;QAC7B,KAAK;QACL,eAAe,EAAE;YACf,0BAA0B,EAAE,MAAM;YAClC,yBAAyB,EAAE,MAAM;YACjC,UAAU,EAAE,UAAU;SACvB;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,aAAa,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;IAC3D,uEAAuE;IACvE,IAAI,OAAO,CAAC,MAAM,GAAG,qBAAqB;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;QACzF,yEAAyE;QACzE,0EAA0E;QAC1E,sEAAsE;QACtE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,SAAS,CAAC;QACrF,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,KAAK,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACtD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAI,OAAmC,CAAC,oBAAoB,CAAC,CAAC;YAC3E,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAqB,CAAC;YAC1C,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC,EAAE,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,GAAa;IAClC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,SAAS,GAAG,gBAAgB,CAAC;QACjC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,YAAY,EAAE,GAAG,CAAC,WAAW;KAC9B,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,GAAG,CAAC,WAAW;QACvB,OAAO,EAAE,GAAG,CAAC,YAAY;QACzB,OAAO,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ;QAC/C,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,WAAmB,EACnB,IAAe,EACf,YAA0B,KAAK;IAE/B,MAAM,GAAG,GAAG,MAAM,yBAAyB,CACzC;QACE,QAAQ,EAAE,SAAS;QACnB,IAAI;QACJ,WAAW;QACX,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,IAAI,CAAC,QAAQ;KAC5B,EACD,SAAS,CACV,CAAC;IACF,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAAoB,EACpB,YAA0B,KAAK;IAE/B,MAAM,GAAG,GAAG,MAAM,kBAAkB,CAClC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,EAC1D,SAAS,CACV,CAAC;IACF,OAAO,aAAa,CAClB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,CAClD,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moxxy/plugin-provider-openai-codex",
3
- "version": "0.35.0",
3
+ "version": "0.35.2",
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.35.0",
63
- "@moxxy/plugin-oauth": "0.35.0",
64
- "@moxxy/sdk": "0.35.0"
62
+ "@moxxy/plugin-oauth": "0.35.2",
63
+ "@moxxy/plugin-browser": "0.35.2",
64
+ "@moxxy/sdk": "0.35.2"
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/vitest-preset": "0.0.0",
72
- "@moxxy/tsconfig": "0.0.0"
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",
@@ -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 two places (the UA and the plugin
8
- * def). The User-Agent is sent on every request to the ChatGPT backend; a
9
- * permanently-`0.0.0` UA defeats server-side version gating and diverges from
10
- * the real release. Resolves correctly when the package runs from its own dist
11
- * (dev, tests, third-party `~/.moxxy/plugins` installs); falls back to `0.0.0`
12
- * defensively — never throws on a header build. (NOTE: when inlined into the
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
- export const CODEX_USER_AGENT = `moxxy/${PLUGIN_VERSION} (codex)`;
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,102 @@ 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('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
+
170
+ it('keeps quota exhaustion fatal — retrying cannot clear it', () => {
171
+ const out = run(
172
+ {
173
+ type: 'error',
174
+ error: { type: 'usage_limit_error', code: 'usage_limit_reached', message: 'Limit reached.' },
175
+ },
176
+ false,
177
+ );
178
+ expect(out.events?.[0]).toMatchObject({ type: 'error', retryable: false });
179
+ });
180
+
181
+ it('keeps an unrecognised failure fatal rather than guessing', () => {
182
+ const out = run({ type: 'response.failed' }, false);
183
+ expect(out.events?.[0]).toEqual({
184
+ type: 'error',
185
+ message: 'Codex stream failed: response.failed',
186
+ retryable: false,
187
+ });
188
+ });
189
+ });
@@ -26,6 +26,52 @@ 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
+ /**
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 {
63
+ if (!err) return false;
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);
73
+ }
74
+
29
75
  const TOOL_STREAM_LIMIT_ERROR = (what: string): SseStepResult => ({
30
76
  events: [{ type: 'error', message: `Codex tool-call stream exceeded ${what} limit`, retryable: false }],
31
77
  terminal: true,
@@ -167,8 +213,12 @@ export function handleSseEvent(
167
213
  }
168
214
 
169
215
  if (type === 'response.failed' || type === 'response.error' || type === 'error') {
170
- const msg = ev.error?.message ?? `Codex stream failed: ${type}`;
171
- return { events: [{ type: 'error', message: msg, retryable: false }], terminal: true };
216
+ const err = ev.error ?? ev.response?.error;
217
+ const msg = err?.message ?? `Codex stream failed: ${type}`;
218
+ return {
219
+ events: [{ type: 'error', message: msg, retryable: isRetryableFailure(err) }],
220
+ terminal: true,
221
+ };
172
222
  }
173
223
 
174
224
  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('moxxy');
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
- export const ORIGINATOR = 'moxxy';
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
@@ -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
- expect(h['originator']).toBe('moxxy');
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(/^moxxy\//);
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)