@iam-brain/opencode-codex-auth 0.3.1 → 0.3.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.
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- 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 +338 -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 +192 -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 +111 -0
- package/dist/lib/codex-native/auth-menu-quotas.js.map +1 -0
- 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 +76 -0
- package/dist/lib/codex-native/chat-hooks.d.ts.map +1 -0
- package/dist/lib/codex-native/chat-hooks.js +136 -0
- package/dist/lib/codex-native/chat-hooks.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 +171 -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 +31 -1
- 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 +268 -0
- package/dist/lib/codex-native/oauth-utils.js.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch.d.ts +36 -0
- package/dist/lib/codex-native/openai-loader-fetch.d.ts.map +1 -0
- package/dist/lib/codex-native/openai-loader-fetch.js +191 -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 +24 -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 +19 -0
- package/dist/lib/codex-native/request-transform-pipeline.d.ts.map +1 -0
- package/dist/lib/codex-native/request-transform-pipeline.js +24 -0
- package/dist/lib/codex-native/request-transform-pipeline.js.map +1 -0
- package/dist/lib/codex-native/request-transform.d.ts +8 -4
- package/dist/lib/codex-native/request-transform.d.ts.map +1 -1
- package/dist/lib/codex-native/request-transform.js +103 -33
- package/dist/lib/codex-native/request-transform.js.map +1 -1
- package/dist/lib/codex-native/session-affinity-state.d.ts +15 -0
- package/dist/lib/codex-native/session-affinity-state.d.ts.map +1 -0
- package/dist/lib/codex-native/session-affinity-state.js +49 -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 +55 -0
- package/dist/lib/codex-native/session-messages.js.map +1 -0
- package/dist/lib/codex-native.d.ts +6 -30
- package/dist/lib/codex-native.d.ts.map +1 -1
- package/dist/lib/codex-native.js +113 -1641
- package/dist/lib/codex-native.js.map +1 -1
- package/dist/lib/config.d.ts +11 -11
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +109 -152
- package/dist/lib/config.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 +166 -8
- package/dist/lib/model-catalog.js.map +1 -1
- package/dist/lib/request-snapshots.d.ts +2 -0
- package/dist/lib/request-snapshots.d.ts.map +1 -1
- package/dist/lib/request-snapshots.js +48 -1
- package/dist/lib/request-snapshots.js.map +1 -1
- package/dist/lib/rotation.d.ts.map +1 -1
- package/dist/lib/rotation.js +3 -0
- package/dist/lib/rotation.js.map +1 -1
- package/package.json +3 -2
- package/schemas/codex-config.schema.json +12 -43
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { FetchOrchestrator } from "../fetch-orchestrator";
|
|
2
|
+
import { PluginFatalError, isPluginFatalError, toSyntheticErrorResponse } from "../fatal-errors";
|
|
3
|
+
import { acquireOpenAIAuth } from "./acquire-auth";
|
|
4
|
+
import { resolveRequestUserAgent } from "./client-identity";
|
|
5
|
+
import { resolveCodexOriginator } from "./originator";
|
|
6
|
+
import { persistRateLimitSnapshotFromResponse } from "./rate-limit-snapshots";
|
|
7
|
+
import { assertAllowedOutboundUrl, rewriteUrl } from "./request-routing";
|
|
8
|
+
import { applyRequestTransformPipeline } from "./request-transform-pipeline";
|
|
9
|
+
import { sanitizeOutboundRequestIfNeeded } from "./request-transform";
|
|
10
|
+
export function createOpenAIFetchHandler(input) {
|
|
11
|
+
return async (requestInput, init) => {
|
|
12
|
+
const baseRequest = new Request(requestInput, init);
|
|
13
|
+
if (input.headerTransformDebug) {
|
|
14
|
+
await input.requestSnapshots.captureRequest("before-header-transform", baseRequest, {
|
|
15
|
+
spoofMode: input.spoofMode
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
let outbound = new Request(rewriteUrl(baseRequest), baseRequest);
|
|
19
|
+
const inboundOriginator = outbound.headers.get("originator")?.trim();
|
|
20
|
+
const outboundOriginator = inboundOriginator === "opencode" || inboundOriginator === "codex_exec" || inboundOriginator === "codex_cli_rs"
|
|
21
|
+
? inboundOriginator
|
|
22
|
+
: resolveCodexOriginator(input.spoofMode);
|
|
23
|
+
outbound.headers.set("originator", outboundOriginator);
|
|
24
|
+
const inboundUserAgent = outbound.headers.get("user-agent")?.trim();
|
|
25
|
+
if (input.spoofMode === "native" && inboundUserAgent) {
|
|
26
|
+
outbound.headers.set("user-agent", inboundUserAgent);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
outbound.headers.set("user-agent", resolveRequestUserAgent(input.spoofMode, outboundOriginator));
|
|
30
|
+
}
|
|
31
|
+
if (outbound.headers.has(input.internalCollaborationModeHeader)) {
|
|
32
|
+
outbound.headers.delete(input.internalCollaborationModeHeader);
|
|
33
|
+
}
|
|
34
|
+
const transformed = await applyRequestTransformPipeline({
|
|
35
|
+
request: outbound,
|
|
36
|
+
spoofMode: input.spoofMode,
|
|
37
|
+
remapDeveloperMessagesToUserEnabled: input.remapDeveloperMessagesToUserEnabled,
|
|
38
|
+
catalogModels: input.getCatalogModels(),
|
|
39
|
+
behaviorSettings: input.behaviorSettings,
|
|
40
|
+
fallbackPersonality: input.personality
|
|
41
|
+
});
|
|
42
|
+
outbound = transformed.request;
|
|
43
|
+
const isSubagentRequest = transformed.isSubagentRequest;
|
|
44
|
+
if (input.headerTransformDebug) {
|
|
45
|
+
await input.requestSnapshots.captureRequest("after-header-transform", outbound, {
|
|
46
|
+
spoofMode: input.spoofMode,
|
|
47
|
+
instructionsOverridden: transformed.instructionOverride.changed,
|
|
48
|
+
instructionOverrideReason: transformed.instructionOverride.reason,
|
|
49
|
+
developerMessagesRemapped: transformed.developerRoleRemap.changed,
|
|
50
|
+
developerMessageRemapReason: transformed.developerRoleRemap.reason,
|
|
51
|
+
developerMessageRemapCount: transformed.developerRoleRemap.remappedCount,
|
|
52
|
+
developerMessagePreservedCount: transformed.developerRoleRemap.preservedCount,
|
|
53
|
+
...(isSubagentRequest ? { subagent: transformed.subagentHeader } : {})
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
let selectedIdentityKey;
|
|
57
|
+
await input.requestSnapshots.captureRequest("before-auth", outbound, { spoofMode: input.spoofMode });
|
|
58
|
+
const { orchestratorState, stickySessionState, hybridSessionState, persistSessionAffinityState } = input.sessionAffinityState;
|
|
59
|
+
const orchestrator = new FetchOrchestrator({
|
|
60
|
+
acquireAuth: async (context) => {
|
|
61
|
+
const auth = await acquireOpenAIAuth({
|
|
62
|
+
authMode: input.authMode,
|
|
63
|
+
context,
|
|
64
|
+
isSubagentRequest,
|
|
65
|
+
stickySessionState,
|
|
66
|
+
hybridSessionState,
|
|
67
|
+
seenSessionKeys: orchestratorState.seenSessionKeys,
|
|
68
|
+
persistSessionAffinityState,
|
|
69
|
+
pidOffsetEnabled: input.pidOffsetEnabled,
|
|
70
|
+
configuredRotationStrategy: input.configuredRotationStrategy,
|
|
71
|
+
log: input.log
|
|
72
|
+
});
|
|
73
|
+
if (input.spoofMode === "codex") {
|
|
74
|
+
const catalogModels = input.getCatalogModels();
|
|
75
|
+
const shouldAwaitCatalog = !catalogModels || catalogModels.length === 0;
|
|
76
|
+
if (shouldAwaitCatalog) {
|
|
77
|
+
try {
|
|
78
|
+
await input.syncCatalogFromAuth({ accessToken: auth.access, accountId: auth.accountId });
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// best-effort catalog load; request can still proceed
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
void input.syncCatalogFromAuth({ accessToken: auth.access, accountId: auth.accountId }).catch(() => { });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
void input.syncCatalogFromAuth({ accessToken: auth.access, accountId: auth.accountId }).catch(() => { });
|
|
90
|
+
}
|
|
91
|
+
selectedIdentityKey = auth.identityKey;
|
|
92
|
+
return auth;
|
|
93
|
+
},
|
|
94
|
+
setCooldown: input.setCooldown,
|
|
95
|
+
quietMode: input.quietMode,
|
|
96
|
+
state: orchestratorState,
|
|
97
|
+
onSessionObserved: ({ event, sessionKey }) => {
|
|
98
|
+
if (isSubagentRequest) {
|
|
99
|
+
orchestratorState.seenSessionKeys.delete(sessionKey);
|
|
100
|
+
stickySessionState.bySessionKey.delete(sessionKey);
|
|
101
|
+
hybridSessionState.bySessionKey.delete(sessionKey);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (event === "new" || event === "resume" || event === "switch") {
|
|
105
|
+
persistSessionAffinityState();
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
showToast: input.showToast,
|
|
109
|
+
onAttemptRequest: async ({ attempt, maxAttempts, request, auth, sessionKey }) => {
|
|
110
|
+
const transformed = await applyRequestTransformPipeline({
|
|
111
|
+
request,
|
|
112
|
+
spoofMode: input.spoofMode,
|
|
113
|
+
remapDeveloperMessagesToUserEnabled: input.remapDeveloperMessagesToUserEnabled,
|
|
114
|
+
catalogModels: input.getCatalogModels(),
|
|
115
|
+
behaviorSettings: input.behaviorSettings,
|
|
116
|
+
fallbackPersonality: input.personality
|
|
117
|
+
});
|
|
118
|
+
await input.requestSnapshots.captureRequest("outbound-attempt", transformed.request, {
|
|
119
|
+
attempt: attempt + 1,
|
|
120
|
+
maxAttempts,
|
|
121
|
+
sessionKey,
|
|
122
|
+
identityKey: auth.identityKey,
|
|
123
|
+
accountLabel: auth.accountLabel,
|
|
124
|
+
instructionsOverridden: transformed.instructionOverride.changed,
|
|
125
|
+
instructionOverrideReason: transformed.instructionOverride.reason,
|
|
126
|
+
developerMessagesRemapped: transformed.developerRoleRemap.changed,
|
|
127
|
+
developerMessageRemapReason: transformed.developerRoleRemap.reason,
|
|
128
|
+
developerMessageRemapCount: transformed.developerRoleRemap.remappedCount,
|
|
129
|
+
developerMessagePreservedCount: transformed.developerRoleRemap.preservedCount
|
|
130
|
+
});
|
|
131
|
+
return transformed.request;
|
|
132
|
+
},
|
|
133
|
+
onAttemptResponse: async ({ attempt, maxAttempts, response, auth, sessionKey }) => {
|
|
134
|
+
await input.requestSnapshots.captureResponse("outbound-response", response, {
|
|
135
|
+
attempt: attempt + 1,
|
|
136
|
+
maxAttempts,
|
|
137
|
+
sessionKey,
|
|
138
|
+
identityKey: auth.identityKey,
|
|
139
|
+
accountLabel: auth.accountLabel
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const sanitizedOutbound = await sanitizeOutboundRequestIfNeeded(outbound, input.compatInputSanitizerEnabled);
|
|
144
|
+
if (sanitizedOutbound.changed) {
|
|
145
|
+
input.log?.debug("compat input sanitizer applied", { mode: input.spoofMode });
|
|
146
|
+
}
|
|
147
|
+
await input.requestSnapshots.captureRequest("after-sanitize", sanitizedOutbound.request, {
|
|
148
|
+
spoofMode: input.spoofMode,
|
|
149
|
+
sanitized: sanitizedOutbound.changed
|
|
150
|
+
});
|
|
151
|
+
try {
|
|
152
|
+
assertAllowedOutboundUrl(new URL(sanitizedOutbound.request.url));
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (isPluginFatalError(error)) {
|
|
156
|
+
return toSyntheticErrorResponse(error);
|
|
157
|
+
}
|
|
158
|
+
return toSyntheticErrorResponse(new PluginFatalError({
|
|
159
|
+
message: "Outbound request validation failed before sending to OpenAI backend.",
|
|
160
|
+
status: 400,
|
|
161
|
+
type: "disallowed_outbound_request",
|
|
162
|
+
param: "request"
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
let response;
|
|
166
|
+
try {
|
|
167
|
+
response = await orchestrator.execute(sanitizedOutbound.request);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
if (isPluginFatalError(error)) {
|
|
171
|
+
input.log?.debug("fatal auth/error response", {
|
|
172
|
+
type: error.type,
|
|
173
|
+
status: error.status
|
|
174
|
+
});
|
|
175
|
+
return toSyntheticErrorResponse(error);
|
|
176
|
+
}
|
|
177
|
+
input.log?.debug("unexpected fetch failure", {
|
|
178
|
+
error: error instanceof Error ? error.message : String(error)
|
|
179
|
+
});
|
|
180
|
+
return toSyntheticErrorResponse(new PluginFatalError({
|
|
181
|
+
message: "OpenAI request failed unexpectedly. Retry once, and if it persists run `opencode auth login`.",
|
|
182
|
+
status: 502,
|
|
183
|
+
type: "plugin_fetch_failed",
|
|
184
|
+
param: "request"
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
persistRateLimitSnapshotFromResponse(response, selectedIdentityKey);
|
|
188
|
+
return response;
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
//# 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,CAqB9G"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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(() => { });
|
|
23
|
+
}
|
|
24
|
+
//# 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,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AACrB,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,19 @@
|
|
|
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
|
+
}): Promise<RequestTransformPipelineResult>;
|
|
19
|
+
//# 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;CACxC,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAsB1C"}
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
});
|
|
10
|
+
const developerRoleRemap = await remapDeveloperMessagesToUserOnRequest({
|
|
11
|
+
request: instructionOverride.request,
|
|
12
|
+
enabled: input.remapDeveloperMessagesToUserEnabled
|
|
13
|
+
});
|
|
14
|
+
const request = developerRoleRemap.request;
|
|
15
|
+
const subagentHeader = request.headers.get("x-openai-subagent")?.trim();
|
|
16
|
+
return {
|
|
17
|
+
request,
|
|
18
|
+
instructionOverride,
|
|
19
|
+
developerRoleRemap,
|
|
20
|
+
subagentHeader: subagentHeader || undefined,
|
|
21
|
+
isSubagentRequest: Boolean(subagentHeader)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# 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,KAOnD;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;KAC/C,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;
|
|
@@ -49,7 +53,7 @@ export declare function applyCatalogInstructionOverrideToRequest(input: {
|
|
|
49
53
|
request: Request;
|
|
50
54
|
enabled: boolean;
|
|
51
55
|
catalogModels: CodexModelInfo[] | undefined;
|
|
52
|
-
|
|
56
|
+
behaviorSettings: BehaviorSettings | undefined;
|
|
53
57
|
fallbackPersonality: PersonalityOption | undefined;
|
|
54
58
|
}): Promise<{
|
|
55
59
|
request: Request;
|
|
@@ -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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"}
|
|
@@ -22,6 +22,23 @@ function normalizeReasoningSummaryOption(value) {
|
|
|
22
22
|
return normalized;
|
|
23
23
|
return undefined;
|
|
24
24
|
}
|
|
25
|
+
function normalizeTextVerbosity(value) {
|
|
26
|
+
const normalized = asString(value)?.toLowerCase();
|
|
27
|
+
if (!normalized)
|
|
28
|
+
return undefined;
|
|
29
|
+
if (normalized === "low" || normalized === "medium" || normalized === "high")
|
|
30
|
+
return normalized;
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
function normalizeVerbositySetting(value) {
|
|
34
|
+
const normalized = asString(value)?.toLowerCase();
|
|
35
|
+
if (!normalized)
|
|
36
|
+
return undefined;
|
|
37
|
+
if (normalized === "default" || normalized === "low" || normalized === "medium" || normalized === "high") {
|
|
38
|
+
return normalized;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
25
42
|
function readModelRuntimeDefaults(options) {
|
|
26
43
|
const raw = options.codexRuntimeDefaults;
|
|
27
44
|
if (!isRecord(raw))
|
|
@@ -137,8 +154,8 @@ function resolveCaseInsensitiveEntry(entries, candidate) {
|
|
|
137
154
|
}
|
|
138
155
|
return undefined;
|
|
139
156
|
}
|
|
140
|
-
function getModelPersonalityOverride(
|
|
141
|
-
const models =
|
|
157
|
+
function getModelPersonalityOverride(behaviorSettings, modelCandidates, variantCandidates) {
|
|
158
|
+
const models = behaviorSettings?.perModel;
|
|
142
159
|
if (!models)
|
|
143
160
|
return undefined;
|
|
144
161
|
for (const candidate of modelCandidates) {
|
|
@@ -147,18 +164,18 @@ function getModelPersonalityOverride(customSettings, modelCandidates, variantCan
|
|
|
147
164
|
continue;
|
|
148
165
|
for (const variantCandidate of variantCandidates) {
|
|
149
166
|
const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
|
|
150
|
-
const variantPersonality = normalizePersonalityKey(variantEntry?.
|
|
167
|
+
const variantPersonality = normalizePersonalityKey(variantEntry?.personality);
|
|
151
168
|
if (variantPersonality)
|
|
152
169
|
return variantPersonality;
|
|
153
170
|
}
|
|
154
|
-
const modelPersonality = normalizePersonalityKey(entry.
|
|
171
|
+
const modelPersonality = normalizePersonalityKey(entry.personality);
|
|
155
172
|
if (modelPersonality)
|
|
156
173
|
return modelPersonality;
|
|
157
174
|
}
|
|
158
175
|
return undefined;
|
|
159
176
|
}
|
|
160
|
-
export function getModelThinkingSummariesOverride(
|
|
161
|
-
const models =
|
|
177
|
+
export function getModelThinkingSummariesOverride(behaviorSettings, modelCandidates, variantCandidates) {
|
|
178
|
+
const models = behaviorSettings?.perModel;
|
|
162
179
|
if (!models)
|
|
163
180
|
return undefined;
|
|
164
181
|
for (const candidate of modelCandidates) {
|
|
@@ -177,11 +194,51 @@ export function getModelThinkingSummariesOverride(customSettings, modelCandidate
|
|
|
177
194
|
}
|
|
178
195
|
return undefined;
|
|
179
196
|
}
|
|
197
|
+
export function getModelVerbosityEnabledOverride(behaviorSettings, modelCandidates, variantCandidates) {
|
|
198
|
+
const models = behaviorSettings?.perModel;
|
|
199
|
+
if (!models)
|
|
200
|
+
return undefined;
|
|
201
|
+
for (const candidate of modelCandidates) {
|
|
202
|
+
const entry = resolveCaseInsensitiveEntry(models, candidate);
|
|
203
|
+
if (!entry)
|
|
204
|
+
continue;
|
|
205
|
+
for (const variantCandidate of variantCandidates) {
|
|
206
|
+
const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
|
|
207
|
+
if (typeof variantEntry?.verbosityEnabled === "boolean") {
|
|
208
|
+
return variantEntry.verbosityEnabled;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (typeof entry.verbosityEnabled === "boolean") {
|
|
212
|
+
return entry.verbosityEnabled;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
export function getModelVerbosityOverride(behaviorSettings, modelCandidates, variantCandidates) {
|
|
218
|
+
const models = behaviorSettings?.perModel;
|
|
219
|
+
if (!models)
|
|
220
|
+
return undefined;
|
|
221
|
+
for (const candidate of modelCandidates) {
|
|
222
|
+
const entry = resolveCaseInsensitiveEntry(models, candidate);
|
|
223
|
+
if (!entry)
|
|
224
|
+
continue;
|
|
225
|
+
for (const variantCandidate of variantCandidates) {
|
|
226
|
+
const variantEntry = resolveCaseInsensitiveEntry(entry.variants, variantCandidate);
|
|
227
|
+
const variantVerbosity = normalizeVerbositySetting(variantEntry?.verbosity);
|
|
228
|
+
if (variantVerbosity)
|
|
229
|
+
return variantVerbosity;
|
|
230
|
+
}
|
|
231
|
+
const modelVerbosity = normalizeVerbositySetting(entry.verbosity);
|
|
232
|
+
if (modelVerbosity)
|
|
233
|
+
return modelVerbosity;
|
|
234
|
+
}
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
180
237
|
export function resolvePersonalityForModel(input) {
|
|
181
|
-
const modelOverride = getModelPersonalityOverride(input.
|
|
238
|
+
const modelOverride = getModelPersonalityOverride(input.behaviorSettings, input.modelCandidates, input.variantCandidates);
|
|
182
239
|
if (modelOverride)
|
|
183
240
|
return modelOverride;
|
|
184
|
-
const globalOverride = normalizePersonalityKey(input.
|
|
241
|
+
const globalOverride = normalizePersonalityKey(input.behaviorSettings?.global?.personality);
|
|
185
242
|
if (globalOverride)
|
|
186
243
|
return globalOverride;
|
|
187
244
|
return normalizePersonalityKey(input.fallback);
|
|
@@ -225,10 +282,26 @@ export function applyCodexRuntimeDefaultsToParams(input) {
|
|
|
225
282
|
}
|
|
226
283
|
}
|
|
227
284
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
options.textVerbosity
|
|
285
|
+
const rawTextVerbosity = asString(options.textVerbosity);
|
|
286
|
+
const explicitTextVerbosity = normalizeTextVerbosity(rawTextVerbosity);
|
|
287
|
+
if (rawTextVerbosity !== undefined && !explicitTextVerbosity) {
|
|
288
|
+
delete options.textVerbosity;
|
|
289
|
+
}
|
|
290
|
+
const verbosityEnabled = input.verbosityEnabledOverride ?? true;
|
|
291
|
+
const verbositySetting = input.verbosityOverride ?? "default";
|
|
292
|
+
const supportsVerbosity = defaults.supportsVerbosity !== false;
|
|
293
|
+
if (!supportsVerbosity || !verbosityEnabled) {
|
|
294
|
+
delete options.textVerbosity;
|
|
295
|
+
}
|
|
296
|
+
else if (normalizeTextVerbosity(options.textVerbosity) === undefined) {
|
|
297
|
+
if (verbositySetting === "default") {
|
|
298
|
+
if (defaults.defaultVerbosity) {
|
|
299
|
+
options.textVerbosity = defaults.defaultVerbosity;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
options.textVerbosity = verbositySetting;
|
|
304
|
+
}
|
|
232
305
|
}
|
|
233
306
|
if (asString(options.applyPatchToolType) === undefined && defaults.applyPatchToolType) {
|
|
234
307
|
options.applyPatchToolType = defaults.applyPatchToolType;
|
|
@@ -266,15 +339,26 @@ export async function sanitizeOutboundRequestIfNeeded(request, enabled) {
|
|
|
266
339
|
const sanitized = sanitizeRequestPayloadForCompat(payload);
|
|
267
340
|
if (!sanitized.changed)
|
|
268
341
|
return { request, changed: false };
|
|
342
|
+
const sanitizedRequest = rebuildRequestWithJsonBody(request, sanitized.payload);
|
|
343
|
+
return { request: sanitizedRequest, changed: true };
|
|
344
|
+
}
|
|
345
|
+
function rebuildRequestWithJsonBody(request, body) {
|
|
269
346
|
const headers = new Headers(request.headers);
|
|
270
347
|
headers.set("content-type", "application/json");
|
|
271
|
-
|
|
348
|
+
return new Request(request.url, {
|
|
272
349
|
method: request.method,
|
|
273
350
|
headers,
|
|
274
|
-
body: JSON.stringify(
|
|
275
|
-
redirect: request.redirect
|
|
351
|
+
body: JSON.stringify(body),
|
|
352
|
+
redirect: request.redirect,
|
|
353
|
+
signal: request.signal,
|
|
354
|
+
credentials: request.credentials,
|
|
355
|
+
cache: request.cache,
|
|
356
|
+
mode: request.mode,
|
|
357
|
+
referrer: request.referrer,
|
|
358
|
+
referrerPolicy: request.referrerPolicy,
|
|
359
|
+
integrity: request.integrity,
|
|
360
|
+
keepalive: request.keepalive
|
|
276
361
|
});
|
|
277
|
-
return { request: sanitizedRequest, changed: true };
|
|
278
362
|
}
|
|
279
363
|
function messageContentToText(value) {
|
|
280
364
|
if (typeof value === "string")
|
|
@@ -392,14 +476,7 @@ export async function remapDeveloperMessagesToUserOnRequest(input) {
|
|
|
392
476
|
};
|
|
393
477
|
}
|
|
394
478
|
payload.input = nextInput;
|
|
395
|
-
const
|
|
396
|
-
headers.set("content-type", "application/json");
|
|
397
|
-
const updatedRequest = new Request(input.request.url, {
|
|
398
|
-
method: input.request.method,
|
|
399
|
-
headers,
|
|
400
|
-
body: JSON.stringify(payload),
|
|
401
|
-
redirect: input.request.redirect
|
|
402
|
-
});
|
|
479
|
+
const updatedRequest = rebuildRequestWithJsonBody(input.request, payload);
|
|
403
480
|
return {
|
|
404
481
|
request: updatedRequest,
|
|
405
482
|
changed: true,
|
|
@@ -457,7 +534,7 @@ export async function applyCatalogInstructionOverrideToRequest(input) {
|
|
|
457
534
|
modelSlug: modelSlugRaw
|
|
458
535
|
});
|
|
459
536
|
const effectivePersonality = resolvePersonalityForModel({
|
|
460
|
-
|
|
537
|
+
behaviorSettings: input.behaviorSettings,
|
|
461
538
|
modelCandidates,
|
|
462
539
|
variantCandidates,
|
|
463
540
|
fallback: input.fallbackPersonality
|
|
@@ -472,14 +549,7 @@ export async function applyCatalogInstructionOverrideToRequest(input) {
|
|
|
472
549
|
return { request: input.request, changed: false, reason: "already_matches" };
|
|
473
550
|
}
|
|
474
551
|
payload.instructions = rendered;
|
|
475
|
-
const
|
|
476
|
-
headers.set("content-type", "application/json");
|
|
477
|
-
const updatedRequest = new Request(input.request.url, {
|
|
478
|
-
method: input.request.method,
|
|
479
|
-
headers,
|
|
480
|
-
body: JSON.stringify(payload),
|
|
481
|
-
redirect: input.request.redirect
|
|
482
|
-
});
|
|
552
|
+
const updatedRequest = rebuildRequestWithJsonBody(input.request, payload);
|
|
483
553
|
return { request: updatedRequest, changed: true, reason: "updated" };
|
|
484
554
|
}
|
|
485
555
|
//# sourceMappingURL=request-transform.js.map
|