@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.
- package/README.md +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/accounts-tools.d.ts.map +1 -1
- package/dist/lib/accounts-tools.js +88 -4
- package/dist/lib/accounts-tools.js.map +1 -1
- package/dist/lib/auth-refresh.d.ts +2 -0
- package/dist/lib/auth-refresh.d.ts.map +1 -0
- package/dist/lib/auth-refresh.js +2 -0
- package/dist/lib/auth-refresh.js.map +1 -0
- package/dist/lib/cache-io.d.ts +24 -0
- package/dist/lib/cache-io.d.ts.map +1 -0
- package/dist/lib/cache-io.js +95 -0
- package/dist/lib/cache-io.js.map +1 -0
- package/dist/lib/cache-lock.d.ts +7 -0
- package/dist/lib/cache-lock.d.ts.map +1 -0
- package/dist/lib/cache-lock.js +37 -0
- package/dist/lib/cache-lock.js.map +1 -0
- package/dist/lib/claims.d.ts.map +1 -1
- package/dist/lib/claims.js +4 -1
- package/dist/lib/claims.js.map +1 -1
- package/dist/lib/codex-cache-layout.d.ts +15 -0
- package/dist/lib/codex-cache-layout.d.ts.map +1 -0
- package/dist/lib/codex-cache-layout.js +52 -0
- package/dist/lib/codex-cache-layout.js.map +1 -0
- package/dist/lib/codex-native/accounts.d.ts +21 -0
- package/dist/lib/codex-native/accounts.d.ts.map +1 -0
- package/dist/lib/codex-native/accounts.js +203 -0
- package/dist/lib/codex-native/accounts.js.map +1 -0
- package/dist/lib/codex-native/acquire-auth.d.ts +22 -0
- package/dist/lib/codex-native/acquire-auth.d.ts.map +1 -0
- package/dist/lib/codex-native/acquire-auth.js +389 -0
- package/dist/lib/codex-native/acquire-auth.js.map +1 -0
- package/dist/lib/codex-native/auth-menu-flow.d.ts +9 -0
- package/dist/lib/codex-native/auth-menu-flow.d.ts.map +1 -0
- package/dist/lib/codex-native/auth-menu-flow.js +304 -0
- package/dist/lib/codex-native/auth-menu-flow.js.map +1 -0
- package/dist/lib/codex-native/auth-menu-quotas.d.ts +9 -0
- package/dist/lib/codex-native/auth-menu-quotas.d.ts.map +1 -0
- package/dist/lib/codex-native/auth-menu-quotas.js +213 -0
- package/dist/lib/codex-native/auth-menu-quotas.js.map +1 -0
- package/dist/lib/codex-native/catalog-auth.d.ts.map +1 -1
- package/dist/lib/codex-native/catalog-auth.js +4 -1
- package/dist/lib/codex-native/catalog-auth.js.map +1 -1
- package/dist/lib/codex-native/catalog-sync.d.ts +28 -0
- package/dist/lib/codex-native/catalog-sync.d.ts.map +1 -0
- package/dist/lib/codex-native/catalog-sync.js +36 -0
- package/dist/lib/codex-native/catalog-sync.js.map +1 -0
- package/dist/lib/codex-native/chat-hooks.d.ts +85 -0
- package/dist/lib/codex-native/chat-hooks.d.ts.map +1 -0
- package/dist/lib/codex-native/chat-hooks.js +175 -0
- package/dist/lib/codex-native/chat-hooks.js.map +1 -0
- package/dist/lib/codex-native/client-identity.d.ts.map +1 -1
- package/dist/lib/codex-native/client-identity.js +55 -40
- package/dist/lib/codex-native/client-identity.js.map +1 -1
- package/dist/lib/codex-native/collaboration.d.ts +25 -0
- package/dist/lib/codex-native/collaboration.d.ts.map +1 -0
- package/dist/lib/codex-native/collaboration.js +306 -0
- package/dist/lib/codex-native/collaboration.js.map +1 -0
- package/dist/lib/codex-native/oauth-auth-methods.d.ts +45 -0
- package/dist/lib/codex-native/oauth-auth-methods.d.ts.map +1 -0
- package/dist/lib/codex-native/oauth-auth-methods.js +182 -0
- package/dist/lib/codex-native/oauth-auth-methods.js.map +1 -0
- package/dist/lib/codex-native/oauth-persistence.d.ts +4 -0
- package/dist/lib/codex-native/oauth-persistence.d.ts.map +1 -0
- package/dist/lib/codex-native/oauth-persistence.js +28 -0
- package/dist/lib/codex-native/oauth-persistence.js.map +1 -0
- package/dist/lib/codex-native/oauth-server.d.ts.map +1 -1
- package/dist/lib/codex-native/oauth-server.js +63 -5
- package/dist/lib/codex-native/oauth-server.js.map +1 -1
- package/dist/lib/codex-native/oauth-utils.d.ts +51 -0
- package/dist/lib/codex-native/oauth-utils.d.ts.map +1 -0
- package/dist/lib/codex-native/oauth-utils.js +265 -0
- package/dist/lib/codex-native/oauth-utils.js.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch.d.ts +39 -0
- package/dist/lib/codex-native/openai-loader-fetch.d.ts.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch.js +337 -0
- package/dist/lib/codex-native/openai-loader-fetch.js.map +1 -0
- package/dist/lib/codex-native/rate-limit-snapshots.d.ts +2 -0
- package/dist/lib/codex-native/rate-limit-snapshots.d.ts.map +1 -0
- package/dist/lib/codex-native/rate-limit-snapshots.js +28 -0
- package/dist/lib/codex-native/rate-limit-snapshots.js.map +1 -0
- package/dist/lib/codex-native/request-routing.d.ts +3 -0
- package/dist/lib/codex-native/request-routing.d.ts.map +1 -0
- package/dist/lib/codex-native/request-routing.js +41 -0
- package/dist/lib/codex-native/request-routing.js.map +1 -0
- package/dist/lib/codex-native/request-transform-pipeline.d.ts +20 -0
- package/dist/lib/codex-native/request-transform-pipeline.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-pipeline.js +25 -0
- package/dist/lib/codex-native/request-transform-pipeline.js.map +1 -0
- package/dist/lib/codex-native/request-transform.d.ts +28 -4
- package/dist/lib/codex-native/request-transform.d.ts.map +1 -1
- package/dist/lib/codex-native/request-transform.js +347 -41
- package/dist/lib/codex-native/request-transform.js.map +1 -1
- package/dist/lib/codex-native/session-affinity-state.d.ts +17 -0
- package/dist/lib/codex-native/session-affinity-state.d.ts.map +1 -0
- package/dist/lib/codex-native/session-affinity-state.js +56 -0
- package/dist/lib/codex-native/session-affinity-state.js.map +1 -0
- package/dist/lib/codex-native/session-messages.d.ts +8 -0
- package/dist/lib/codex-native/session-messages.d.ts.map +1 -0
- package/dist/lib/codex-native/session-messages.js +58 -0
- package/dist/lib/codex-native/session-messages.js.map +1 -0
- package/dist/lib/codex-native.d.ts +12 -30
- package/dist/lib/codex-native.d.ts.map +1 -1
- package/dist/lib/codex-native.js +141 -1644
- package/dist/lib/codex-native.js.map +1 -1
- package/dist/lib/codex-prompts-cache.d.ts +17 -0
- package/dist/lib/codex-prompts-cache.d.ts.map +1 -0
- package/dist/lib/codex-prompts-cache.js +184 -0
- package/dist/lib/codex-prompts-cache.js.map +1 -0
- package/dist/lib/codex-status-storage.d.ts.map +1 -1
- package/dist/lib/codex-status-storage.js +8 -43
- package/dist/lib/codex-status-storage.js.map +1 -1
- package/dist/lib/codex-status-tool.js +1 -1
- package/dist/lib/codex-status-tool.js.map +1 -1
- package/dist/lib/codex-status-ui.d.ts.map +1 -1
- package/dist/lib/codex-status-ui.js +14 -8
- package/dist/lib/codex-status-ui.js.map +1 -1
- package/dist/lib/codex-status.d.ts.map +1 -1
- package/dist/lib/codex-status.js +28 -2
- package/dist/lib/codex-status.js.map +1 -1
- package/dist/lib/compat-sanitizer.d.ts.map +1 -1
- package/dist/lib/compat-sanitizer.js +5 -4
- package/dist/lib/compat-sanitizer.js.map +1 -1
- package/dist/lib/config-dir-gitignore.d.ts +3 -0
- package/dist/lib/config-dir-gitignore.d.ts.map +1 -0
- package/dist/lib/config-dir-gitignore.js +45 -0
- package/dist/lib/config-dir-gitignore.js.map +1 -0
- package/dist/lib/config.d.ts +30 -11
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +359 -153
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/fetch-orchestrator.d.ts +19 -0
- package/dist/lib/fetch-orchestrator.d.ts.map +1 -1
- package/dist/lib/fetch-orchestrator.js +33 -6
- package/dist/lib/fetch-orchestrator.js.map +1 -1
- package/dist/lib/installer-cli.d.ts.map +1 -1
- package/dist/lib/installer-cli.js +14 -1
- package/dist/lib/installer-cli.js.map +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +4 -1
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/model-catalog.d.ts +1 -0
- package/dist/lib/model-catalog.d.ts.map +1 -1
- package/dist/lib/model-catalog.js +198 -103
- package/dist/lib/model-catalog.js.map +1 -1
- package/dist/lib/opencode-install.d.ts.map +1 -1
- package/dist/lib/opencode-install.js +30 -6
- package/dist/lib/opencode-install.js.map +1 -1
- package/dist/lib/orchestrator-agent.d.ts +31 -0
- package/dist/lib/orchestrator-agent.d.ts.map +1 -0
- package/dist/lib/orchestrator-agent.js +268 -0
- package/dist/lib/orchestrator-agent.js.map +1 -0
- package/dist/lib/paths.d.ts +1 -1
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +1 -1
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/persona-tool-cli.d.ts.map +1 -1
- package/dist/lib/persona-tool-cli.js +4 -1
- package/dist/lib/persona-tool-cli.js.map +1 -1
- package/dist/lib/personalities.d.ts.map +1 -1
- package/dist/lib/personalities.js +9 -2
- package/dist/lib/personalities.js.map +1 -1
- package/dist/lib/personality-command.d.ts.map +1 -1
- package/dist/lib/personality-command.js +4 -1
- package/dist/lib/personality-command.js.map +1 -1
- package/dist/lib/personality-create.d.ts.map +1 -1
- package/dist/lib/personality-create.js +5 -1
- package/dist/lib/personality-create.js.map +1 -1
- package/dist/lib/personality-skill.d.ts.map +1 -1
- package/dist/lib/personality-skill.js +4 -1
- package/dist/lib/personality-skill.js.map +1 -1
- package/dist/lib/prompt-cache-key.d.ts +7 -0
- package/dist/lib/prompt-cache-key.d.ts.map +1 -0
- package/dist/lib/prompt-cache-key.js +17 -0
- package/dist/lib/prompt-cache-key.js.map +1 -0
- package/dist/lib/quarantine.d.ts.map +1 -1
- package/dist/lib/quarantine.js +22 -5
- package/dist/lib/quarantine.js.map +1 -1
- package/dist/lib/quota-threshold-alerts.d.ts +31 -0
- package/dist/lib/quota-threshold-alerts.d.ts.map +1 -0
- package/dist/lib/quota-threshold-alerts.js +97 -0
- package/dist/lib/quota-threshold-alerts.js.map +1 -0
- package/dist/lib/refresh-queue.d.ts.map +1 -1
- package/dist/lib/refresh-queue.js +9 -2
- package/dist/lib/refresh-queue.js.map +1 -1
- package/dist/lib/remote-cache-fetch.d.ts +28 -0
- package/dist/lib/remote-cache-fetch.d.ts.map +1 -0
- package/dist/lib/remote-cache-fetch.js +67 -0
- package/dist/lib/remote-cache-fetch.js.map +1 -0
- package/dist/lib/request-snapshots.d.ts +3 -0
- package/dist/lib/request-snapshots.d.ts.map +1 -1
- package/dist/lib/request-snapshots.js +88 -13
- package/dist/lib/request-snapshots.js.map +1 -1
- package/dist/lib/rotation.d.ts +4 -0
- package/dist/lib/rotation.d.ts.map +1 -1
- package/dist/lib/rotation.js +57 -10
- package/dist/lib/rotation.js.map +1 -1
- package/dist/lib/session-affinity.d.ts.map +1 -1
- package/dist/lib/session-affinity.js +22 -36
- package/dist/lib/session-affinity.js.map +1 -1
- package/dist/lib/storage.d.ts +8 -5
- package/dist/lib/storage.d.ts.map +1 -1
- package/dist/lib/storage.js +50 -39
- package/dist/lib/storage.js.map +1 -1
- package/dist/lib/ui/tty/select.d.ts.map +1 -1
- package/dist/lib/ui/tty/select.js +8 -2
- package/dist/lib/ui/tty/select.js.map +1 -1
- package/dist/lib/util.d.ts +2 -0
- package/dist/lib/util.d.ts.map +1 -0
- package/dist/lib/util.js +4 -0
- package/dist/lib/util.js.map +1 -0
- package/package.json +8 -5
- 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 @@
|
|
|
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 @@
|
|
|
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 {
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"request-transform.d.ts","sourceRoot":"","sources":["../../../lib/codex-native/request-transform.ts"],"names":[],"mappings":"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"}
|