@iam-brain/opencode-codex-auth 0.3.1 → 1.0.0

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.
Files changed (215) hide show
  1. package/README.md +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +45 -6
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/accounts-tools.d.ts.map +1 -1
  6. package/dist/lib/accounts-tools.js +88 -4
  7. package/dist/lib/accounts-tools.js.map +1 -1
  8. package/dist/lib/auth-refresh.d.ts +2 -0
  9. package/dist/lib/auth-refresh.d.ts.map +1 -0
  10. package/dist/lib/auth-refresh.js +2 -0
  11. package/dist/lib/auth-refresh.js.map +1 -0
  12. package/dist/lib/cache-io.d.ts +24 -0
  13. package/dist/lib/cache-io.d.ts.map +1 -0
  14. package/dist/lib/cache-io.js +95 -0
  15. package/dist/lib/cache-io.js.map +1 -0
  16. package/dist/lib/cache-lock.d.ts +7 -0
  17. package/dist/lib/cache-lock.d.ts.map +1 -0
  18. package/dist/lib/cache-lock.js +37 -0
  19. package/dist/lib/cache-lock.js.map +1 -0
  20. package/dist/lib/claims.d.ts.map +1 -1
  21. package/dist/lib/claims.js +4 -1
  22. package/dist/lib/claims.js.map +1 -1
  23. package/dist/lib/codex-cache-layout.d.ts +15 -0
  24. package/dist/lib/codex-cache-layout.d.ts.map +1 -0
  25. package/dist/lib/codex-cache-layout.js +52 -0
  26. package/dist/lib/codex-cache-layout.js.map +1 -0
  27. package/dist/lib/codex-native/accounts.d.ts +21 -0
  28. package/dist/lib/codex-native/accounts.d.ts.map +1 -0
  29. package/dist/lib/codex-native/accounts.js +203 -0
  30. package/dist/lib/codex-native/accounts.js.map +1 -0
  31. package/dist/lib/codex-native/acquire-auth.d.ts +22 -0
  32. package/dist/lib/codex-native/acquire-auth.d.ts.map +1 -0
  33. package/dist/lib/codex-native/acquire-auth.js +389 -0
  34. package/dist/lib/codex-native/acquire-auth.js.map +1 -0
  35. package/dist/lib/codex-native/auth-menu-flow.d.ts +9 -0
  36. package/dist/lib/codex-native/auth-menu-flow.d.ts.map +1 -0
  37. package/dist/lib/codex-native/auth-menu-flow.js +304 -0
  38. package/dist/lib/codex-native/auth-menu-flow.js.map +1 -0
  39. package/dist/lib/codex-native/auth-menu-quotas.d.ts +9 -0
  40. package/dist/lib/codex-native/auth-menu-quotas.d.ts.map +1 -0
  41. package/dist/lib/codex-native/auth-menu-quotas.js +213 -0
  42. package/dist/lib/codex-native/auth-menu-quotas.js.map +1 -0
  43. package/dist/lib/codex-native/catalog-auth.d.ts.map +1 -1
  44. package/dist/lib/codex-native/catalog-auth.js +4 -1
  45. package/dist/lib/codex-native/catalog-auth.js.map +1 -1
  46. package/dist/lib/codex-native/catalog-sync.d.ts +28 -0
  47. package/dist/lib/codex-native/catalog-sync.d.ts.map +1 -0
  48. package/dist/lib/codex-native/catalog-sync.js +36 -0
  49. package/dist/lib/codex-native/catalog-sync.js.map +1 -0
  50. package/dist/lib/codex-native/chat-hooks.d.ts +85 -0
  51. package/dist/lib/codex-native/chat-hooks.d.ts.map +1 -0
  52. package/dist/lib/codex-native/chat-hooks.js +175 -0
  53. package/dist/lib/codex-native/chat-hooks.js.map +1 -0
  54. package/dist/lib/codex-native/client-identity.d.ts.map +1 -1
  55. package/dist/lib/codex-native/client-identity.js +55 -40
  56. package/dist/lib/codex-native/client-identity.js.map +1 -1
  57. package/dist/lib/codex-native/collaboration.d.ts +25 -0
  58. package/dist/lib/codex-native/collaboration.d.ts.map +1 -0
  59. package/dist/lib/codex-native/collaboration.js +306 -0
  60. package/dist/lib/codex-native/collaboration.js.map +1 -0
  61. package/dist/lib/codex-native/oauth-auth-methods.d.ts +45 -0
  62. package/dist/lib/codex-native/oauth-auth-methods.d.ts.map +1 -0
  63. package/dist/lib/codex-native/oauth-auth-methods.js +182 -0
  64. package/dist/lib/codex-native/oauth-auth-methods.js.map +1 -0
  65. package/dist/lib/codex-native/oauth-persistence.d.ts +4 -0
  66. package/dist/lib/codex-native/oauth-persistence.d.ts.map +1 -0
  67. package/dist/lib/codex-native/oauth-persistence.js +28 -0
  68. package/dist/lib/codex-native/oauth-persistence.js.map +1 -0
  69. package/dist/lib/codex-native/oauth-server.d.ts.map +1 -1
  70. package/dist/lib/codex-native/oauth-server.js +63 -5
  71. package/dist/lib/codex-native/oauth-server.js.map +1 -1
  72. package/dist/lib/codex-native/oauth-utils.d.ts +51 -0
  73. package/dist/lib/codex-native/oauth-utils.d.ts.map +1 -0
  74. package/dist/lib/codex-native/oauth-utils.js +265 -0
  75. package/dist/lib/codex-native/oauth-utils.js.map +1 -0
  76. package/dist/lib/codex-native/openai-loader-fetch.d.ts +39 -0
  77. package/dist/lib/codex-native/openai-loader-fetch.d.ts.map +1 -0
  78. package/dist/lib/codex-native/openai-loader-fetch.js +337 -0
  79. package/dist/lib/codex-native/openai-loader-fetch.js.map +1 -0
  80. package/dist/lib/codex-native/rate-limit-snapshots.d.ts +2 -0
  81. package/dist/lib/codex-native/rate-limit-snapshots.d.ts.map +1 -0
  82. package/dist/lib/codex-native/rate-limit-snapshots.js +28 -0
  83. package/dist/lib/codex-native/rate-limit-snapshots.js.map +1 -0
  84. package/dist/lib/codex-native/request-routing.d.ts +3 -0
  85. package/dist/lib/codex-native/request-routing.d.ts.map +1 -0
  86. package/dist/lib/codex-native/request-routing.js +41 -0
  87. package/dist/lib/codex-native/request-routing.js.map +1 -0
  88. package/dist/lib/codex-native/request-transform-pipeline.d.ts +20 -0
  89. package/dist/lib/codex-native/request-transform-pipeline.d.ts.map +1 -0
  90. package/dist/lib/codex-native/request-transform-pipeline.js +25 -0
  91. package/dist/lib/codex-native/request-transform-pipeline.js.map +1 -0
  92. package/dist/lib/codex-native/request-transform.d.ts +28 -4
  93. package/dist/lib/codex-native/request-transform.d.ts.map +1 -1
  94. package/dist/lib/codex-native/request-transform.js +347 -41
  95. package/dist/lib/codex-native/request-transform.js.map +1 -1
  96. package/dist/lib/codex-native/session-affinity-state.d.ts +17 -0
  97. package/dist/lib/codex-native/session-affinity-state.d.ts.map +1 -0
  98. package/dist/lib/codex-native/session-affinity-state.js +56 -0
  99. package/dist/lib/codex-native/session-affinity-state.js.map +1 -0
  100. package/dist/lib/codex-native/session-messages.d.ts +8 -0
  101. package/dist/lib/codex-native/session-messages.d.ts.map +1 -0
  102. package/dist/lib/codex-native/session-messages.js +58 -0
  103. package/dist/lib/codex-native/session-messages.js.map +1 -0
  104. package/dist/lib/codex-native.d.ts +12 -30
  105. package/dist/lib/codex-native.d.ts.map +1 -1
  106. package/dist/lib/codex-native.js +141 -1644
  107. package/dist/lib/codex-native.js.map +1 -1
  108. package/dist/lib/codex-prompts-cache.d.ts +17 -0
  109. package/dist/lib/codex-prompts-cache.d.ts.map +1 -0
  110. package/dist/lib/codex-prompts-cache.js +184 -0
  111. package/dist/lib/codex-prompts-cache.js.map +1 -0
  112. package/dist/lib/codex-status-storage.d.ts.map +1 -1
  113. package/dist/lib/codex-status-storage.js +8 -43
  114. package/dist/lib/codex-status-storage.js.map +1 -1
  115. package/dist/lib/codex-status-tool.js +1 -1
  116. package/dist/lib/codex-status-tool.js.map +1 -1
  117. package/dist/lib/codex-status-ui.d.ts.map +1 -1
  118. package/dist/lib/codex-status-ui.js +14 -8
  119. package/dist/lib/codex-status-ui.js.map +1 -1
  120. package/dist/lib/codex-status.d.ts.map +1 -1
  121. package/dist/lib/codex-status.js +28 -2
  122. package/dist/lib/codex-status.js.map +1 -1
  123. package/dist/lib/compat-sanitizer.d.ts.map +1 -1
  124. package/dist/lib/compat-sanitizer.js +5 -4
  125. package/dist/lib/compat-sanitizer.js.map +1 -1
  126. package/dist/lib/config-dir-gitignore.d.ts +3 -0
  127. package/dist/lib/config-dir-gitignore.d.ts.map +1 -0
  128. package/dist/lib/config-dir-gitignore.js +45 -0
  129. package/dist/lib/config-dir-gitignore.js.map +1 -0
  130. package/dist/lib/config.d.ts +30 -11
  131. package/dist/lib/config.d.ts.map +1 -1
  132. package/dist/lib/config.js +359 -153
  133. package/dist/lib/config.js.map +1 -1
  134. package/dist/lib/fetch-orchestrator.d.ts +19 -0
  135. package/dist/lib/fetch-orchestrator.d.ts.map +1 -1
  136. package/dist/lib/fetch-orchestrator.js +33 -6
  137. package/dist/lib/fetch-orchestrator.js.map +1 -1
  138. package/dist/lib/installer-cli.d.ts.map +1 -1
  139. package/dist/lib/installer-cli.js +14 -1
  140. package/dist/lib/installer-cli.js.map +1 -1
  141. package/dist/lib/logger.d.ts.map +1 -1
  142. package/dist/lib/logger.js +4 -1
  143. package/dist/lib/logger.js.map +1 -1
  144. package/dist/lib/model-catalog.d.ts +1 -0
  145. package/dist/lib/model-catalog.d.ts.map +1 -1
  146. package/dist/lib/model-catalog.js +198 -103
  147. package/dist/lib/model-catalog.js.map +1 -1
  148. package/dist/lib/opencode-install.d.ts.map +1 -1
  149. package/dist/lib/opencode-install.js +30 -6
  150. package/dist/lib/opencode-install.js.map +1 -1
  151. package/dist/lib/orchestrator-agent.d.ts +31 -0
  152. package/dist/lib/orchestrator-agent.d.ts.map +1 -0
  153. package/dist/lib/orchestrator-agent.js +268 -0
  154. package/dist/lib/orchestrator-agent.js.map +1 -0
  155. package/dist/lib/paths.d.ts +1 -1
  156. package/dist/lib/paths.d.ts.map +1 -1
  157. package/dist/lib/paths.js +1 -1
  158. package/dist/lib/paths.js.map +1 -1
  159. package/dist/lib/persona-tool-cli.d.ts.map +1 -1
  160. package/dist/lib/persona-tool-cli.js +4 -1
  161. package/dist/lib/persona-tool-cli.js.map +1 -1
  162. package/dist/lib/personalities.d.ts.map +1 -1
  163. package/dist/lib/personalities.js +9 -2
  164. package/dist/lib/personalities.js.map +1 -1
  165. package/dist/lib/personality-command.d.ts.map +1 -1
  166. package/dist/lib/personality-command.js +4 -1
  167. package/dist/lib/personality-command.js.map +1 -1
  168. package/dist/lib/personality-create.d.ts.map +1 -1
  169. package/dist/lib/personality-create.js +5 -1
  170. package/dist/lib/personality-create.js.map +1 -1
  171. package/dist/lib/personality-skill.d.ts.map +1 -1
  172. package/dist/lib/personality-skill.js +4 -1
  173. package/dist/lib/personality-skill.js.map +1 -1
  174. package/dist/lib/prompt-cache-key.d.ts +7 -0
  175. package/dist/lib/prompt-cache-key.d.ts.map +1 -0
  176. package/dist/lib/prompt-cache-key.js +17 -0
  177. package/dist/lib/prompt-cache-key.js.map +1 -0
  178. package/dist/lib/quarantine.d.ts.map +1 -1
  179. package/dist/lib/quarantine.js +22 -5
  180. package/dist/lib/quarantine.js.map +1 -1
  181. package/dist/lib/quota-threshold-alerts.d.ts +31 -0
  182. package/dist/lib/quota-threshold-alerts.d.ts.map +1 -0
  183. package/dist/lib/quota-threshold-alerts.js +97 -0
  184. package/dist/lib/quota-threshold-alerts.js.map +1 -0
  185. package/dist/lib/refresh-queue.d.ts.map +1 -1
  186. package/dist/lib/refresh-queue.js +9 -2
  187. package/dist/lib/refresh-queue.js.map +1 -1
  188. package/dist/lib/remote-cache-fetch.d.ts +28 -0
  189. package/dist/lib/remote-cache-fetch.d.ts.map +1 -0
  190. package/dist/lib/remote-cache-fetch.js +67 -0
  191. package/dist/lib/remote-cache-fetch.js.map +1 -0
  192. package/dist/lib/request-snapshots.d.ts +3 -0
  193. package/dist/lib/request-snapshots.d.ts.map +1 -1
  194. package/dist/lib/request-snapshots.js +88 -13
  195. package/dist/lib/request-snapshots.js.map +1 -1
  196. package/dist/lib/rotation.d.ts +4 -0
  197. package/dist/lib/rotation.d.ts.map +1 -1
  198. package/dist/lib/rotation.js +57 -10
  199. package/dist/lib/rotation.js.map +1 -1
  200. package/dist/lib/session-affinity.d.ts.map +1 -1
  201. package/dist/lib/session-affinity.js +22 -36
  202. package/dist/lib/session-affinity.js.map +1 -1
  203. package/dist/lib/storage.d.ts +8 -5
  204. package/dist/lib/storage.d.ts.map +1 -1
  205. package/dist/lib/storage.js +50 -39
  206. package/dist/lib/storage.js.map +1 -1
  207. package/dist/lib/ui/tty/select.d.ts.map +1 -1
  208. package/dist/lib/ui/tty/select.js +8 -2
  209. package/dist/lib/ui/tty/select.js.map +1 -1
  210. package/dist/lib/util.d.ts +2 -0
  211. package/dist/lib/util.d.ts.map +1 -0
  212. package/dist/lib/util.js +4 -0
  213. package/dist/lib/util.js.map +1 -0
  214. package/package.json +8 -5
  215. package/schemas/codex-config.schema.json +29 -43
@@ -0,0 +1,337 @@
1
+ import { FetchOrchestrator } from "../fetch-orchestrator";
2
+ import { saveSnapshots } from "../codex-status-storage";
3
+ import { fetchQuotaSnapshotFromBackend } from "../codex-quota-fetch";
4
+ import { PluginFatalError, isPluginFatalError, toSyntheticErrorResponse } from "../fatal-errors";
5
+ import { defaultSnapshotsPath } from "../paths";
6
+ import { DEFAULT_QUOTA_THRESHOLD_TRACKER_STATE, evaluateQuotaThresholds } from "../quota-threshold-alerts";
7
+ import { acquireOpenAIAuth } from "./acquire-auth";
8
+ import { resolveRequestUserAgent } from "./client-identity";
9
+ import { resolveCodexOriginator } from "./originator";
10
+ import { buildProjectPromptCacheKey } from "../prompt-cache-key";
11
+ import { persistRateLimitSnapshotFromResponse } from "./rate-limit-snapshots";
12
+ import { assertAllowedOutboundUrl, rewriteUrl } from "./request-routing";
13
+ import { applyRequestTransformPipeline } from "./request-transform-pipeline";
14
+ import { applyPromptCacheKeyOverrideToRequest, sanitizeOutboundRequestIfNeeded, stripReasoningReplayFromRequest } from "./request-transform";
15
+ export function createOpenAIFetchHandler(input) {
16
+ const internalCollaborationAgentHeader = input.internalCollaborationAgentHeader ?? "x-opencode-collaboration-agent-kind";
17
+ const quotaTrackerByIdentity = new Map();
18
+ const quotaRefreshAtByIdentity = new Map();
19
+ const QUOTA_REFRESH_TTL_MS = 60_000;
20
+ const QUOTA_FETCH_TIMEOUT_MS = 3000;
21
+ const QUOTA_EXHAUSTED_FALLBACK_COOLDOWN_MS = 5 * 60 * 1000;
22
+ return async (requestInput, init) => {
23
+ const baseRequest = new Request(requestInput, init);
24
+ if (input.headerTransformDebug) {
25
+ await input.requestSnapshots.captureRequest("before-header-transform", baseRequest, {
26
+ spoofMode: input.spoofMode
27
+ });
28
+ }
29
+ let outbound = new Request(rewriteUrl(baseRequest), baseRequest);
30
+ const collaborationAgentKind = outbound.headers.get(internalCollaborationAgentHeader)?.trim() || undefined;
31
+ const inboundOriginator = outbound.headers.get("originator")?.trim();
32
+ const outboundOriginator = inboundOriginator === "opencode" || inboundOriginator === "codex_exec" || inboundOriginator === "codex_cli_rs"
33
+ ? inboundOriginator
34
+ : resolveCodexOriginator(input.spoofMode);
35
+ outbound.headers.set("originator", outboundOriginator);
36
+ const inboundUserAgent = outbound.headers.get("user-agent")?.trim();
37
+ if (input.spoofMode === "native" && inboundUserAgent) {
38
+ outbound.headers.set("user-agent", inboundUserAgent);
39
+ }
40
+ else {
41
+ outbound.headers.set("user-agent", resolveRequestUserAgent(input.spoofMode, outboundOriginator));
42
+ }
43
+ if (outbound.headers.has(input.internalCollaborationModeHeader)) {
44
+ outbound.headers.delete(input.internalCollaborationModeHeader);
45
+ }
46
+ if (outbound.headers.has(internalCollaborationAgentHeader)) {
47
+ outbound.headers.delete(internalCollaborationAgentHeader);
48
+ }
49
+ const transformed = await applyRequestTransformPipeline({
50
+ request: outbound,
51
+ spoofMode: input.spoofMode,
52
+ remapDeveloperMessagesToUserEnabled: input.remapDeveloperMessagesToUserEnabled,
53
+ catalogModels: input.getCatalogModels(),
54
+ behaviorSettings: input.behaviorSettings,
55
+ fallbackPersonality: input.personality,
56
+ preserveOrchestratorInstructions: collaborationAgentKind === "orchestrator"
57
+ });
58
+ outbound = transformed.request;
59
+ const isSubagentRequest = transformed.isSubagentRequest;
60
+ if (input.headerTransformDebug) {
61
+ await input.requestSnapshots.captureRequest("after-header-transform", outbound, {
62
+ spoofMode: input.spoofMode,
63
+ instructionsOverridden: transformed.instructionOverride.changed,
64
+ instructionOverrideReason: transformed.instructionOverride.reason,
65
+ developerMessagesRemapped: transformed.developerRoleRemap.changed,
66
+ developerMessageRemapReason: transformed.developerRoleRemap.reason,
67
+ developerMessageRemapCount: transformed.developerRoleRemap.remappedCount,
68
+ developerMessagePreservedCount: transformed.developerRoleRemap.preservedCount,
69
+ ...(isSubagentRequest ? { subagent: transformed.subagentHeader } : {})
70
+ });
71
+ }
72
+ let selectedIdentityKey;
73
+ let selectedAuthForQuota;
74
+ const replaySanitized = await stripReasoningReplayFromRequest({
75
+ request: outbound,
76
+ enabled: true
77
+ });
78
+ outbound = replaySanitized.request;
79
+ if (replaySanitized.changed) {
80
+ input.log?.debug("reasoning replay stripped", {
81
+ removedPartCount: replaySanitized.removedPartCount,
82
+ removedFieldCount: replaySanitized.removedFieldCount
83
+ });
84
+ }
85
+ await input.requestSnapshots.captureRequest("before-auth", outbound, { spoofMode: input.spoofMode });
86
+ const { orchestratorState, stickySessionState, hybridSessionState, persistSessionAffinityState } = input.sessionAffinityState;
87
+ const orchestrator = new FetchOrchestrator({
88
+ acquireAuth: async (context) => {
89
+ const auth = await acquireOpenAIAuth({
90
+ authMode: input.authMode,
91
+ context,
92
+ isSubagentRequest,
93
+ stickySessionState,
94
+ hybridSessionState,
95
+ seenSessionKeys: orchestratorState.seenSessionKeys,
96
+ persistSessionAffinityState,
97
+ pidOffsetEnabled: input.pidOffsetEnabled,
98
+ configuredRotationStrategy: input.configuredRotationStrategy,
99
+ log: input.log
100
+ });
101
+ if (input.spoofMode === "codex") {
102
+ const catalogModels = input.getCatalogModels();
103
+ const shouldAwaitCatalog = !catalogModels || catalogModels.length === 0;
104
+ if (shouldAwaitCatalog) {
105
+ try {
106
+ await input.syncCatalogFromAuth({ accessToken: auth.access, accountId: auth.accountId });
107
+ }
108
+ catch (error) {
109
+ if (error instanceof Error) {
110
+ // best-effort catalog load; request can still proceed
111
+ }
112
+ // best-effort catalog load; request can still proceed
113
+ }
114
+ }
115
+ else {
116
+ void input.syncCatalogFromAuth({ accessToken: auth.access, accountId: auth.accountId }).catch((error) => {
117
+ if (error instanceof Error) {
118
+ // best-effort background catalog refresh
119
+ }
120
+ });
121
+ }
122
+ }
123
+ else {
124
+ void input.syncCatalogFromAuth({ accessToken: auth.access, accountId: auth.accountId }).catch((error) => {
125
+ if (error instanceof Error) {
126
+ // best-effort background catalog refresh
127
+ }
128
+ });
129
+ }
130
+ selectedIdentityKey = auth.identityKey;
131
+ selectedAuthForQuota = {
132
+ access: auth.access,
133
+ accountId: auth.accountId,
134
+ identityKey: auth.identityKey
135
+ };
136
+ return auth;
137
+ },
138
+ setCooldown: input.setCooldown,
139
+ quietMode: input.quietMode,
140
+ state: orchestratorState,
141
+ onSessionObserved: ({ event, sessionKey }) => {
142
+ if (isSubagentRequest) {
143
+ orchestratorState.seenSessionKeys.delete(sessionKey);
144
+ stickySessionState.bySessionKey.delete(sessionKey);
145
+ hybridSessionState.bySessionKey.delete(sessionKey);
146
+ return;
147
+ }
148
+ if (event === "new" || event === "resume" || event === "switch") {
149
+ persistSessionAffinityState();
150
+ }
151
+ },
152
+ showToast: input.showToast,
153
+ onAttemptRequest: async ({ attempt, maxAttempts, attemptReasonCode, request, auth, sessionKey }) => {
154
+ const transformed = await applyRequestTransformPipeline({
155
+ request,
156
+ spoofMode: input.spoofMode,
157
+ remapDeveloperMessagesToUserEnabled: input.remapDeveloperMessagesToUserEnabled,
158
+ catalogModels: input.getCatalogModels(),
159
+ behaviorSettings: input.behaviorSettings,
160
+ fallbackPersonality: input.personality,
161
+ preserveOrchestratorInstructions: collaborationAgentKind === "orchestrator"
162
+ });
163
+ const promptCacheKeyStrategy = input.promptCacheKeyStrategy ?? "default";
164
+ const promptCacheKeyOverride = promptCacheKeyStrategy === "project"
165
+ ? await applyPromptCacheKeyOverrideToRequest({
166
+ request: transformed.request,
167
+ enabled: true,
168
+ promptCacheKey: buildProjectPromptCacheKey({
169
+ projectPath: input.projectPath ?? process.cwd(),
170
+ spoofMode: input.spoofMode
171
+ })
172
+ })
173
+ : {
174
+ request: transformed.request,
175
+ changed: false,
176
+ reason: "default_strategy"
177
+ };
178
+ await input.requestSnapshots.captureRequest("outbound-attempt", promptCacheKeyOverride.request, {
179
+ attempt: attempt + 1,
180
+ maxAttempts,
181
+ attemptReasonCode,
182
+ sessionKey,
183
+ identityKey: auth.identityKey,
184
+ accountLabel: auth.accountLabel,
185
+ instructionsOverridden: transformed.instructionOverride.changed,
186
+ instructionOverrideReason: transformed.instructionOverride.reason,
187
+ developerMessagesRemapped: transformed.developerRoleRemap.changed,
188
+ developerMessageRemapReason: transformed.developerRoleRemap.reason,
189
+ developerMessageRemapCount: transformed.developerRoleRemap.remappedCount,
190
+ developerMessagePreservedCount: transformed.developerRoleRemap.preservedCount,
191
+ promptCacheKeyOverridden: promptCacheKeyOverride.changed,
192
+ promptCacheKeyOverrideReason: promptCacheKeyOverride.reason,
193
+ ...(input.headerTransformDebug === true && auth.selectionTrace
194
+ ? {
195
+ selectionStrategy: auth.selectionTrace.strategy,
196
+ selectionDecision: auth.selectionTrace.decision,
197
+ selectionTotalCount: auth.selectionTrace.totalCount,
198
+ selectionDisabledCount: auth.selectionTrace.disabledCount,
199
+ selectionCooldownCount: auth.selectionTrace.cooldownCount,
200
+ selectionRefreshLeaseCount: auth.selectionTrace.refreshLeaseCount,
201
+ selectionEligibleCount: auth.selectionTrace.eligibleCount,
202
+ ...(typeof auth.selectionTrace.attemptedCount === "number"
203
+ ? { selectionAttemptedCount: auth.selectionTrace.attemptedCount }
204
+ : null),
205
+ ...(auth.selectionTrace.selectedIdentityKey
206
+ ? { selectionSelectedIdentityKey: auth.selectionTrace.selectedIdentityKey }
207
+ : null),
208
+ ...(typeof auth.selectionTrace.selectedIndex === "number"
209
+ ? { selectionSelectedIndex: auth.selectionTrace.selectedIndex }
210
+ : null),
211
+ ...(auth.selectionTrace.attemptKey ? { selectionAttemptKey: auth.selectionTrace.attemptKey } : null),
212
+ ...(auth.selectionTrace.activeIdentityKey
213
+ ? { selectionActiveIdentityKey: auth.selectionTrace.activeIdentityKey }
214
+ : null),
215
+ ...(auth.selectionTrace.sessionKey ? { selectionSessionKey: auth.selectionTrace.sessionKey } : null)
216
+ }
217
+ : null)
218
+ });
219
+ return promptCacheKeyOverride.request;
220
+ },
221
+ onAttemptResponse: async ({ attempt, maxAttempts, attemptReasonCode, response, auth, sessionKey }) => {
222
+ await input.requestSnapshots.captureResponse("outbound-response", response, {
223
+ attempt: attempt + 1,
224
+ maxAttempts,
225
+ attemptReasonCode,
226
+ sessionKey,
227
+ identityKey: auth.identityKey,
228
+ accountLabel: auth.accountLabel
229
+ });
230
+ }
231
+ });
232
+ const sanitizedOutbound = await sanitizeOutboundRequestIfNeeded(outbound, input.compatInputSanitizerEnabled);
233
+ if (sanitizedOutbound.changed) {
234
+ input.log?.debug("compat input sanitizer applied", { mode: input.spoofMode });
235
+ }
236
+ await input.requestSnapshots.captureRequest("after-sanitize", sanitizedOutbound.request, {
237
+ spoofMode: input.spoofMode,
238
+ sanitized: sanitizedOutbound.changed
239
+ });
240
+ try {
241
+ assertAllowedOutboundUrl(new URL(sanitizedOutbound.request.url));
242
+ }
243
+ catch (error) {
244
+ if (isPluginFatalError(error)) {
245
+ return toSyntheticErrorResponse(error);
246
+ }
247
+ return toSyntheticErrorResponse(new PluginFatalError({
248
+ message: "Outbound request validation failed before sending to OpenAI backend.",
249
+ status: 400,
250
+ type: "disallowed_outbound_request",
251
+ param: "request"
252
+ }));
253
+ }
254
+ let response;
255
+ try {
256
+ response = await orchestrator.execute(sanitizedOutbound.request);
257
+ }
258
+ catch (error) {
259
+ if (isPluginFatalError(error)) {
260
+ input.log?.debug("fatal auth/error response", {
261
+ type: error.type,
262
+ status: error.status
263
+ });
264
+ return toSyntheticErrorResponse(error);
265
+ }
266
+ input.log?.debug("unexpected fetch failure", {
267
+ error: error instanceof Error ? error.message : String(error)
268
+ });
269
+ return toSyntheticErrorResponse(new PluginFatalError({
270
+ message: "OpenAI request failed unexpectedly. Retry once, and if it persists run `opencode auth login`.",
271
+ status: 502,
272
+ type: "plugin_fetch_failed",
273
+ param: "request"
274
+ }));
275
+ }
276
+ persistRateLimitSnapshotFromResponse(response, selectedIdentityKey);
277
+ const identityForQuota = selectedAuthForQuota?.identityKey;
278
+ if (identityForQuota && selectedAuthForQuota?.access) {
279
+ try {
280
+ const now = Date.now();
281
+ const nextRefreshAt = quotaRefreshAtByIdentity.get(identityForQuota);
282
+ if (nextRefreshAt === undefined || now >= nextRefreshAt) {
283
+ quotaRefreshAtByIdentity.set(identityForQuota, now + QUOTA_REFRESH_TTL_MS);
284
+ const quotaSnapshot = await fetchQuotaSnapshotFromBackend({
285
+ accessToken: selectedAuthForQuota.access,
286
+ accountId: selectedAuthForQuota.accountId,
287
+ now,
288
+ modelFamily: "gpt-5.3-codex",
289
+ userAgent: resolveRequestUserAgent(input.spoofMode, resolveCodexOriginator(input.spoofMode)),
290
+ log: input.log,
291
+ timeoutMs: QUOTA_FETCH_TIMEOUT_MS
292
+ });
293
+ if (quotaSnapshot) {
294
+ await saveSnapshots(defaultSnapshotsPath(), (current) => ({
295
+ ...current,
296
+ [identityForQuota]: quotaSnapshot
297
+ }));
298
+ const previousTracker = quotaTrackerByIdentity.get(identityForQuota) ?? DEFAULT_QUOTA_THRESHOLD_TRACKER_STATE;
299
+ const evaluated = evaluateQuotaThresholds({
300
+ snapshot: quotaSnapshot,
301
+ previousState: previousTracker
302
+ });
303
+ quotaTrackerByIdentity.set(identityForQuota, evaluated.nextState);
304
+ for (const warning of evaluated.warnings) {
305
+ await input.showToast(warning.message, "warning", input.quietMode);
306
+ }
307
+ if (evaluated.exhaustedCrossings.length > 0) {
308
+ const cooldownCandidates = evaluated.exhaustedCrossings
309
+ .map((crossing) => crossing.resetsAt)
310
+ .filter((value) => typeof value === "number" && Number.isFinite(value) && value > now);
311
+ const cooldownUntil = cooldownCandidates.length > 0
312
+ ? Math.max(...cooldownCandidates)
313
+ : now + QUOTA_EXHAUSTED_FALLBACK_COOLDOWN_MS;
314
+ await input.setCooldown(identityForQuota, cooldownUntil);
315
+ if (evaluated.exhaustedCrossings.length === 1) {
316
+ const only = evaluated.exhaustedCrossings[0];
317
+ const label = only.window === "weekly" ? "weekly" : "5h";
318
+ await input.showToast(`Switching account due to ${label} quota limit`, "warning", input.quietMode);
319
+ }
320
+ else {
321
+ await input.showToast("Switching account due to 5h and weekly quota limits", "warning", input.quietMode);
322
+ }
323
+ }
324
+ }
325
+ }
326
+ }
327
+ catch (error) {
328
+ input.log?.debug("quota refresh during request failed", {
329
+ identityKey: identityForQuota,
330
+ error: error instanceof Error ? error.message : String(error)
331
+ });
332
+ }
333
+ }
334
+ return response;
335
+ };
336
+ }
337
+ //# sourceMappingURL=openai-loader-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-loader-fetch.js","sourceRoot":"","sources":["../../../lib/codex-native/openai-loader-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function persistRateLimitSnapshotFromResponse(response: Response, identityKey: string | undefined): void;
2
+ //# sourceMappingURL=rate-limit-snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit-snapshots.d.ts","sourceRoot":"","sources":["../../../lib/codex-native/rate-limit-snapshots.ts"],"names":[],"mappings":"AAIA,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAyB9G"}
@@ -0,0 +1,28 @@
1
+ import { CodexStatus } from "../codex-status";
2
+ import { saveSnapshots } from "../codex-status-storage";
3
+ import { defaultSnapshotsPath } from "../paths";
4
+ export function persistRateLimitSnapshotFromResponse(response, identityKey) {
5
+ if (!identityKey)
6
+ return;
7
+ const headers = {};
8
+ response.headers.forEach((value, key) => {
9
+ headers[key.toLowerCase()] = value;
10
+ });
11
+ const status = new CodexStatus();
12
+ const snapshot = status.parseFromHeaders({
13
+ now: Date.now(),
14
+ modelFamily: "codex",
15
+ headers
16
+ });
17
+ if (snapshot.limits.length === 0)
18
+ return;
19
+ void saveSnapshots(defaultSnapshotsPath(), (current) => ({
20
+ ...current,
21
+ [identityKey]: snapshot
22
+ })).catch((error) => {
23
+ if (error instanceof Error) {
24
+ // best-effort snapshot persistence
25
+ }
26
+ });
27
+ }
28
+ //# sourceMappingURL=rate-limit-snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit-snapshots.js","sourceRoot":"","sources":["../../../lib/codex-native/rate-limit-snapshots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAE/C,MAAM,UAAU,oCAAoC,CAAC,QAAkB,EAAE,WAA+B;IACtG,IAAI,CAAC,WAAW;QAAE,OAAM;IAExB,MAAM,OAAO,GAAc,EAAE,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACvC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QACf,WAAW,EAAE,OAAO;QACpB,OAAO;KACR,CAAC,CAAA;IAEF,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAExC,KAAK,aAAa,CAAC,oBAAoB,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvD,GAAG,OAAO;QACV,CAAC,WAAW,CAAC,EAAE,QAAQ;KACxB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAClB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,mCAAmC;QACrC,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function rewriteUrl(requestInput: string | URL | Request): URL;
2
+ export declare function assertAllowedOutboundUrl(url: URL): void;
3
+ //# sourceMappingURL=request-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-routing.d.ts","sourceRoot":"","sources":["../../../lib/codex-native/request-routing.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,GAAG,GAAG,CAWpE;AASD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAsBvD"}
@@ -0,0 +1,41 @@
1
+ import { PluginFatalError } from "../fatal-errors";
2
+ const CODEX_API_ENDPOINT = "https://chatgpt.com/backend-api/codex/responses";
3
+ const OPENAI_OUTBOUND_HOST_ALLOWLIST = new Set(["api.openai.com", "auth.openai.com", "chat.openai.com", "chatgpt.com"]);
4
+ export function rewriteUrl(requestInput) {
5
+ const parsed = requestInput instanceof URL
6
+ ? requestInput
7
+ : new URL(typeof requestInput === "string" ? requestInput : requestInput.url);
8
+ if (parsed.pathname.includes("/v1/responses") || parsed.pathname.includes("/chat/completions")) {
9
+ return new URL(CODEX_API_ENDPOINT);
10
+ }
11
+ return parsed;
12
+ }
13
+ function isAllowedOpenAIOutboundHost(hostname) {
14
+ const normalized = hostname.trim().toLowerCase();
15
+ if (!normalized)
16
+ return false;
17
+ if (OPENAI_OUTBOUND_HOST_ALLOWLIST.has(normalized))
18
+ return true;
19
+ return normalized.endsWith(".openai.com") || normalized.endsWith(".chatgpt.com");
20
+ }
21
+ export function assertAllowedOutboundUrl(url) {
22
+ const protocol = url.protocol.trim().toLowerCase();
23
+ if (protocol !== "https:") {
24
+ throw new PluginFatalError({
25
+ message: `Blocked outbound request with unsupported protocol "${protocol || "unknown"}". ` +
26
+ "This plugin only proxies HTTPS requests to OpenAI/ChatGPT backends.",
27
+ status: 400,
28
+ type: "disallowed_outbound_protocol",
29
+ param: "request"
30
+ });
31
+ }
32
+ if (isAllowedOpenAIOutboundHost(url.hostname))
33
+ return;
34
+ throw new PluginFatalError({
35
+ message: `Blocked outbound request to "${url.hostname}". ` + "This plugin only proxies OpenAI/ChatGPT backend traffic.",
36
+ status: 400,
37
+ type: "disallowed_outbound_host",
38
+ param: "request"
39
+ });
40
+ }
41
+ //# sourceMappingURL=request-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-routing.js","sourceRoot":"","sources":["../../../lib/codex-native/request-routing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,kBAAkB,GAAG,iDAAiD,CAAA;AAC5E,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAA;AAEvH,MAAM,UAAU,UAAU,CAAC,YAAoC;IAC7D,MAAM,MAAM,GACV,YAAY,YAAY,GAAG;QACzB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;IAEjF,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC/F,OAAO,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAgB;IACnD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAChD,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7B,IAAI,8BAA8B,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/D,OAAO,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;AAClF,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAQ;IAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAClD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CAAC;YACzB,OAAO,EACL,uDAAuD,QAAQ,IAAI,SAAS,KAAK;gBACjF,qEAAqE;YACvE,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,2BAA2B,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAM;IAErD,MAAM,IAAI,gBAAgB,CAAC;QACzB,OAAO,EACL,gCAAgC,GAAG,CAAC,QAAQ,KAAK,GAAG,0DAA0D;QAChH,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,0BAA0B;QAChC,KAAK,EAAE,SAAS;KACjB,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { BehaviorSettings, CodexSpoofMode, PersonalityOption } from "../config";
2
+ import type { CodexModelInfo } from "../model-catalog";
3
+ import { applyCatalogInstructionOverrideToRequest, remapDeveloperMessagesToUserOnRequest } from "./request-transform";
4
+ export type RequestTransformPipelineResult = {
5
+ request: Request;
6
+ instructionOverride: Awaited<ReturnType<typeof applyCatalogInstructionOverrideToRequest>>;
7
+ developerRoleRemap: Awaited<ReturnType<typeof remapDeveloperMessagesToUserOnRequest>>;
8
+ subagentHeader?: string;
9
+ isSubagentRequest: boolean;
10
+ };
11
+ export declare function applyRequestTransformPipeline(input: {
12
+ request: Request;
13
+ spoofMode: CodexSpoofMode;
14
+ remapDeveloperMessagesToUserEnabled: boolean;
15
+ catalogModels: CodexModelInfo[] | undefined;
16
+ behaviorSettings?: BehaviorSettings;
17
+ fallbackPersonality?: PersonalityOption;
18
+ preserveOrchestratorInstructions?: boolean;
19
+ }): Promise<RequestTransformPipelineResult>;
20
+ //# sourceMappingURL=request-transform-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-transform-pipeline.d.ts","sourceRoot":"","sources":["../../../lib/codex-native/request-transform-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACtD,OAAO,EAAE,wCAAwC,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAA;AAErH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,OAAO,EAAE,OAAO,CAAA;IAChB,mBAAmB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,wCAAwC,CAAC,CAAC,CAAA;IACzF,kBAAkB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,qCAAqC,CAAC,CAAC,CAAA;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,cAAc,CAAA;IACzB,mCAAmC,EAAE,OAAO,CAAA;IAC5C,aAAa,EAAE,cAAc,EAAE,GAAG,SAAS,CAAA;IAC3C,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,mBAAmB,CAAC,EAAE,iBAAiB,CAAA;IACvC,gCAAgC,CAAC,EAAE,OAAO,CAAA;CAC3C,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAuB1C"}
@@ -0,0 +1,25 @@
1
+ import { applyCatalogInstructionOverrideToRequest, remapDeveloperMessagesToUserOnRequest } from "./request-transform";
2
+ export async function applyRequestTransformPipeline(input) {
3
+ const instructionOverride = await applyCatalogInstructionOverrideToRequest({
4
+ request: input.request,
5
+ enabled: input.spoofMode === "codex",
6
+ catalogModels: input.catalogModels,
7
+ behaviorSettings: input.behaviorSettings,
8
+ fallbackPersonality: input.fallbackPersonality,
9
+ preserveOrchestratorInstructions: input.preserveOrchestratorInstructions
10
+ });
11
+ const developerRoleRemap = await remapDeveloperMessagesToUserOnRequest({
12
+ request: instructionOverride.request,
13
+ enabled: input.remapDeveloperMessagesToUserEnabled
14
+ });
15
+ const request = developerRoleRemap.request;
16
+ const subagentHeader = request.headers.get("x-openai-subagent")?.trim();
17
+ return {
18
+ request,
19
+ instructionOverride,
20
+ developerRoleRemap,
21
+ subagentHeader: subagentHeader || undefined,
22
+ isSubagentRequest: Boolean(subagentHeader)
23
+ };
24
+ }
25
+ //# sourceMappingURL=request-transform-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-transform-pipeline.js","sourceRoot":"","sources":["../../../lib/codex-native/request-transform-pipeline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wCAAwC,EAAE,qCAAqC,EAAE,MAAM,qBAAqB,CAAA;AAUrH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAQnD;IACC,MAAM,mBAAmB,GAAG,MAAM,wCAAwC,CAAC;QACzE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,SAAS,KAAK,OAAO;QACpC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,gCAAgC,EAAE,KAAK,CAAC,gCAAgC;KACzE,CAAC,CAAA;IACF,MAAM,kBAAkB,GAAG,MAAM,qCAAqC,CAAC;QACrE,OAAO,EAAE,mBAAmB,CAAC,OAAO;QACpC,OAAO,EAAE,KAAK,CAAC,mCAAmC;KACnD,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAA;IAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAA;IAEvE,OAAO;QACL,OAAO;QACP,mBAAmB;QACnB,kBAAkB;QAClB,cAAc,EAAE,cAAc,IAAI,SAAS;QAC3C,iBAAiB,EAAE,OAAO,CAAC,cAAc,CAAC;KAC3C,CAAA;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { CustomSettings, PersonalityOption } from "../config";
1
+ import type { BehaviorSettings, PersonalityOption } from "../config";
2
2
  import type { CodexModelInfo } from "../model-catalog";
3
3
  type ChatParamsOutput = {
4
4
  temperature: number;
@@ -17,9 +17,11 @@ export declare function getVariantLookupCandidates(input: {
17
17
  modelCandidates: string[];
18
18
  }): string[];
19
19
  export declare function findCatalogModelForCandidates(catalogModels: CodexModelInfo[] | undefined, modelCandidates: string[]): CodexModelInfo | undefined;
20
- export declare function getModelThinkingSummariesOverride(customSettings: CustomSettings | undefined, modelCandidates: string[], variantCandidates: string[]): boolean | undefined;
20
+ export declare function getModelThinkingSummariesOverride(behaviorSettings: BehaviorSettings | undefined, modelCandidates: string[], variantCandidates: string[]): boolean | undefined;
21
+ export declare function getModelVerbosityEnabledOverride(behaviorSettings: BehaviorSettings | undefined, modelCandidates: string[], variantCandidates: string[]): boolean | undefined;
22
+ export declare function getModelVerbosityOverride(behaviorSettings: BehaviorSettings | undefined, modelCandidates: string[], variantCandidates: string[]): "default" | "low" | "medium" | "high" | undefined;
21
23
  export declare function resolvePersonalityForModel(input: {
22
- customSettings?: CustomSettings;
24
+ behaviorSettings?: BehaviorSettings;
23
25
  modelCandidates: string[];
24
26
  variantCandidates: string[];
25
27
  fallback?: PersonalityOption;
@@ -28,6 +30,8 @@ export declare function applyCodexRuntimeDefaultsToParams(input: {
28
30
  modelOptions: Record<string, unknown>;
29
31
  modelToolCallCapable: boolean | undefined;
30
32
  thinkingSummariesOverride: boolean | undefined;
33
+ verbosityEnabledOverride: boolean | undefined;
34
+ verbosityOverride: "default" | "low" | "medium" | "high" | undefined;
31
35
  preferCodexInstructions: boolean;
32
36
  output: ChatParamsOutput;
33
37
  }): void;
@@ -35,6 +39,15 @@ export declare function sanitizeOutboundRequestIfNeeded(request: Request, enable
35
39
  request: Request;
36
40
  changed: boolean;
37
41
  }>;
42
+ export declare function applyPromptCacheKeyOverrideToRequest(input: {
43
+ request: Request;
44
+ enabled: boolean;
45
+ promptCacheKey?: string;
46
+ }): Promise<{
47
+ request: Request;
48
+ changed: boolean;
49
+ reason: string;
50
+ }>;
38
51
  export declare function remapDeveloperMessagesToUserOnRequest(input: {
39
52
  request: Request;
40
53
  enabled: boolean;
@@ -45,12 +58,23 @@ export declare function remapDeveloperMessagesToUserOnRequest(input: {
45
58
  remappedCount: number;
46
59
  preservedCount: number;
47
60
  }>;
61
+ export declare function stripReasoningReplayFromRequest(input: {
62
+ request: Request;
63
+ enabled: boolean;
64
+ }): Promise<{
65
+ request: Request;
66
+ changed: boolean;
67
+ reason: string;
68
+ removedPartCount: number;
69
+ removedFieldCount: number;
70
+ }>;
48
71
  export declare function applyCatalogInstructionOverrideToRequest(input: {
49
72
  request: Request;
50
73
  enabled: boolean;
51
74
  catalogModels: CodexModelInfo[] | undefined;
52
- customSettings: CustomSettings | undefined;
75
+ behaviorSettings: BehaviorSettings | undefined;
53
76
  fallbackPersonality: PersonalityOption | undefined;
77
+ preserveOrchestratorInstructions?: boolean;
54
78
  }): Promise<{
55
79
  request: Request;
56
80
  changed: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"request-transform.d.ts","sourceRoot":"","sources":["../../../lib/codex-native/request-transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAItD,KAAK,gBAAgB,GAAG;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC,CAAA;AAsED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAiBhG;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAsB5G;AAQD,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,cAAc,EAAE,GAAG,SAAS,EAC3C,eAAe,EAAE,MAAM,EAAE,GACxB,cAAc,GAAG,SAAS,CAgB5B;AA8CD,wBAAgB,iCAAiC,CAC/C,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,eAAe,EAAE,MAAM,EAAE,EACzB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,GAAG,SAAS,CAqBrB;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,QAAQ,CAAC,EAAE,iBAAiB,CAAA;CAC7B,GAAG,MAAM,GAAG,SAAS,CAYrB;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,oBAAoB,EAAE,OAAO,GAAG,SAAS,CAAA;IACzC,yBAAyB,EAAE,OAAO,GAAG,SAAS,CAAA;IAC9C,uBAAuB,EAAE,OAAO,CAAA;IAChC,MAAM,EAAE,gBAAgB,CAAA;CACzB,GAAG,IAAI,CAkEP;AAED,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CA8BjD;AAwBD,wBAAsB,qCAAqC,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC;IAClH,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAC,CA+GD;AAuBD,wBAAsB,wCAAwC,CAAC,KAAK,EAAE;IACpE,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,cAAc,EAAE,GAAG,SAAS,CAAA;IAC3C,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,mBAAmB,EAAE,iBAAiB,GAAG,SAAS,CAAA;CACnD,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqDlE"}
1
+ {"version":3,"file":"request-transform.d.ts","sourceRoot":"","sources":["../../../lib/codex-native/request-transform.ts"],"names":[],"mappings":"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"}