@iam-brain/opencode-codex-auth 0.1.7 → 0.1.8

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 CHANGED
@@ -54,12 +54,14 @@ The installer does two things:
54
54
  - `Codex Compact.md.disabled`
55
55
  3. Creates `~/.config/opencode/codex-config.json` with defaults when missing.
56
56
  4. Synchronizes `~/.config/opencode/commands/create-personality.md` for `/create-personality` (created/updated as needed).
57
+ 5. Synchronizes `~/.config/opencode/skills/personality-builder/SKILL.md` (plus references) for skill-driven personality workflows.
57
58
 
58
59
  At plugin startup, files are reconciled against runtime mode:
59
60
 
60
61
  - `mode: "collab"` -> `.md.disabled` files are activated to `.md`
61
62
  - `mode: "native"` or `mode: "codex"` -> Codex agents are disabled to `.md.disabled`
62
63
  - `/create-personality` command template is synchronized to the latest managed version.
64
+ - `personality-builder` skill template bundle is synchronized to the latest managed version.
63
65
 
64
66
  To install only the agent templates (no `opencode.json` edits):
65
67
 
@@ -102,6 +104,8 @@ Create guided custom personalities with:
102
104
 
103
105
  - Provider auth marker: `~/.local/share/opencode/auth.json`
104
106
  - Plugin multi-account store: `~/.config/opencode/codex-accounts.json`
107
+ - Session affinity cache: `~/.config/opencode/cache/codex-session-affinity.json`
108
+ - Quota snapshot cache: `~/.config/opencode/cache/codex-snapshots.json`
105
109
 
106
110
  Legacy sources can be imported explicitly from the auth menu:
107
111
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAsCjD,eAAO,MAAM,qBAAqB,EAAE,MA0LnC,CAAA;AAED,eAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAyCjD,eAAO,MAAM,qBAAqB,EAAE,MA6LnC,CAAA;AAED,eAAe,qBAAqB,CAAA"}
package/dist/index.js CHANGED
@@ -1,12 +1,13 @@
1
1
  import { tool } from "@opencode-ai/plugin";
2
2
  import { listAccountsForTools, removeAccountByIndex, switchAccountByIndex, toggleAccountEnabledByIndex } from "./lib/accounts-tools";
3
3
  import { CodexAuthPlugin, refreshAccessToken } from "./lib/codex-native";
4
- import { ensureDefaultConfigFile, getCompatInputSanitizerEnabled, getCustomSettings, getDebugEnabled, getHeaderSnapshotsEnabled, getMode, getPidOffsetEnabled, getPersonality, getProactiveRefreshBufferMs, getProactiveRefreshEnabled, getSpoofMode, getQuietMode, loadConfigFile, resolveConfig } from "./lib/config";
4
+ import { ensureDefaultConfigFile, getCompatInputSanitizerEnabled, getCustomSettings, getDebugEnabled, getHeaderTransformDebugEnabled, getHeaderSnapshotsEnabled, getMode, getRotationStrategy, getPidOffsetEnabled, getPersonality, getProactiveRefreshBufferMs, getProactiveRefreshEnabled, getSpoofMode, getQuietMode, loadConfigFile, resolveConfig } from "./lib/config";
5
5
  import { createLogger } from "./lib/logger";
6
6
  import { reconcileOrchestratorAgentsState } from "./lib/orchestrator-agents";
7
7
  import { generatePersonaSpec } from "./lib/persona-tool";
8
8
  import { createPersonalityFile } from "./lib/personality-create";
9
9
  import { installCreatePersonalityCommand } from "./lib/personality-command";
10
+ import { installPersonalityBuilderSkill } from "./lib/personality-skill";
10
11
  import { runOneProactiveRefreshTick } from "./lib/proactive-refresh";
11
12
  import { toolOutputForStatus } from "./lib/codex-status-tool";
12
13
  import { requireOpenAIMultiOauthAuth, saveAuthStorage } from "./lib/storage";
@@ -19,6 +20,7 @@ export const OpenAIMultiAuthPlugin = async (input) => {
19
20
  }
20
21
  await ensureDefaultConfigFile({ env: process.env }).catch(() => { });
21
22
  await installCreatePersonalityCommand({ force: true }).catch(() => { });
23
+ await installPersonalityBuilderSkill({ force: true }).catch(() => { });
22
24
  const cfg = resolveConfig({
23
25
  env: process.env,
24
26
  file: loadConfigFile({ env: process.env })
@@ -66,9 +68,11 @@ export const OpenAIMultiAuthPlugin = async (input) => {
66
68
  mode: runtimeMode,
67
69
  quietMode: getQuietMode(cfg),
68
70
  pidOffsetEnabled: getPidOffsetEnabled(cfg),
71
+ rotationStrategy: getRotationStrategy(cfg),
69
72
  spoofMode: getSpoofMode(cfg),
70
73
  compatInputSanitizer: getCompatInputSanitizerEnabled(cfg),
71
74
  headerSnapshots: getHeaderSnapshotsEnabled(cfg),
75
+ headerTransformDebug: getHeaderTransformDebugEnabled(cfg),
72
76
  customSettings: getCustomSettings(cfg)
73
77
  });
74
78
  const z = tool.schema;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { Hooks, PluginInput } from "@opencode-ai/plugin";
2
2
  import { type IdTokenClaims } from "./claims";
3
3
  import type { Logger } from "./logger";
4
- import type { AccountRecord, OpenAIAuthMode, OpenAIOAuthDomain } from "./types";
4
+ import type { AccountRecord, OpenAIAuthMode, OpenAIOAuthDomain, RotationStrategy } from "./types";
5
5
  import type { CodexSpoofMode, CustomSettings, PersonalityOption, PluginRuntimeMode } from "./config";
6
6
  type BrowserOpenInvocation = {
7
7
  command: string;
@@ -39,6 +39,7 @@ export declare const __testOnly: {
39
39
  resolveHookAgentName: typeof resolveHookAgentName;
40
40
  resolveCollaborationModeKind: typeof resolveCollaborationModeKind;
41
41
  resolveSubagentHeaderValue: typeof resolveSubagentHeaderValue;
42
+ isOAuthDebugEnabled: typeof isOAuthDebugEnabled;
42
43
  stopOAuthServer: typeof stopOAuthServer;
43
44
  };
44
45
  export declare function refreshAccessToken(refreshToken: string): Promise<TokenResponse>;
@@ -48,10 +49,11 @@ declare function composeCodexSuccessRedirectUrl(tokens: TokenResponse, options?:
48
49
  }): string;
49
50
  declare function buildOAuthSuccessHtml(mode?: CodexSpoofMode): string;
50
51
  declare function buildOAuthErrorHtml(error: string): string;
52
+ declare function isOAuthDebugEnabled(): boolean;
51
53
  declare function stopOAuthServer(): void;
52
54
  declare function modeForRuntimeMode(runtimeMode: PluginRuntimeMode): OpenAIAuthMode;
53
55
  export declare function upsertAccount(openai: OpenAIOAuthDomain, incoming: AccountRecord): AccountRecord;
54
- type CodexOriginator = "codex_cli_rs" | "codex_exec";
56
+ type CodexOriginator = "opencode" | "codex_cli_rs" | "codex_exec";
55
57
  declare function buildCodexUserAgent(originator: CodexOriginator): string;
56
58
  declare function resolveRequestUserAgent(spoofMode: CodexSpoofMode, originator: CodexOriginator): string;
57
59
  type CodexCollaborationModeKind = "plan" | "code" | "execute" | "pair_programming";
@@ -65,9 +67,11 @@ export type CodexAuthPluginOptions = {
65
67
  mode?: PluginRuntimeMode;
66
68
  quietMode?: boolean;
67
69
  pidOffsetEnabled?: boolean;
70
+ rotationStrategy?: RotationStrategy;
68
71
  spoofMode?: CodexSpoofMode;
69
72
  compatInputSanitizer?: boolean;
70
73
  headerSnapshots?: boolean;
74
+ headerTransformDebug?: boolean;
71
75
  };
72
76
  export declare function CodexAuthPlugin(input: PluginInput, opts?: CodexAuthPluginOptions): Promise<Hooks>;
73
77
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"codex-native.d.ts","sourceRoot":"","sources":["../../lib/codex-native.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-native.d.ts","sourceRoot":"","sources":["../../lib/codex-native.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { CodexStatus } from "./codex-status";
9
9
  import { saveSnapshots } from "./codex-status-storage";
10
10
  import { PluginFatalError, formatWaitTime, isPluginFatalError, toSyntheticErrorResponse } from "./fatal-errors";
11
11
  import { buildIdentityKey, ensureIdentityKey, normalizeEmail, normalizePlan } from "./identity";
12
- import { defaultSnapshotsPath } from "./paths";
12
+ import { defaultSessionAffinityPath, defaultSnapshotsPath } from "./paths";
13
13
  import { createStickySessionState, selectAccount } from "./rotation";
14
14
  import { ensureOpenAIOAuthDomain, getOpenAIOAuthDomain, importLegacyInstallData, listOpenAIOAuthDomains, loadAuthStorage, saveAuthStorage, setAccountCooldown, shouldOfferLegacyTransfer } from "./storage";
15
15
  import { toolOutputForStatus } from "./codex-status-tool";
@@ -22,6 +22,7 @@ import { sanitizeRequestPayloadForCompat } from "./compat-sanitizer";
22
22
  import { fetchQuotaSnapshotFromBackend } from "./codex-quota-fetch";
23
23
  import { createRequestSnapshots } from "./request-snapshots";
24
24
  import { CODEX_OAUTH_SUCCESS_HTML } from "./oauth-pages";
25
+ import { createSessionExistsFn, loadSessionAffinity, pruneSessionAffinitySnapshot, readSessionAffinitySnapshot, saveSessionAffinity, writeSessionAffinitySnapshot } from "./session-affinity";
25
26
  const CLIENT_ID = "app_EMoamEEZ73f0CkXaXp7hrann";
26
27
  const ISSUER = "https://auth.openai.com";
27
28
  const CODEX_API_ENDPOINT = "https://chatgpt.com/backend-api/codex/responses";
@@ -192,6 +193,7 @@ export const __testOnly = {
192
193
  resolveHookAgentName,
193
194
  resolveCollaborationModeKind,
194
195
  resolveSubagentHeaderValue,
196
+ isOAuthDebugEnabled,
195
197
  stopOAuthServer
196
198
  };
197
199
  async function exchangeCodeForTokens(code, redirectUri, pkce) {
@@ -373,7 +375,8 @@ let oauthServer;
373
375
  let pendingOAuth;
374
376
  let oauthServerCloseTimer;
375
377
  function isOAuthDebugEnabled() {
376
- return process.env.CODEX_AUTH_DEBUG === "1";
378
+ const raw = process.env.CODEX_AUTH_DEBUG?.trim().toLowerCase();
379
+ return raw === "1" || raw === "true" || raw === "yes" || raw === "on";
377
380
  }
378
381
  function emitOAuthDebug(event, meta = {}) {
379
382
  if (!isOAuthDebugEnabled())
@@ -680,7 +683,8 @@ function rewriteUrl(requestInput) {
680
683
  return parsed;
681
684
  }
682
685
  function opencodeUserAgent() {
683
- return `opencode-codex-auth ( ${os.platform()} ${os.release()}; ${os.arch()} )`;
686
+ const version = resolvePluginVersion();
687
+ return `opencode/${version} (${os.platform()} ${os.release()}; ${os.arch()})`;
684
688
  }
685
689
  let cachedPluginVersion;
686
690
  let cachedMacProductVersion;
@@ -858,6 +862,8 @@ function resolveCodexPlatformSignature(platform = process.platform) {
858
862
  return `${platform} ${os.release()}; ${architecture}`;
859
863
  }
860
864
  function buildCodexUserAgent(originator) {
865
+ if (originator === "opencode")
866
+ return opencodeUserAgent();
861
867
  const buildVersion = resolvePluginVersion();
862
868
  const terminalToken = resolveTerminalUserAgentToken();
863
869
  const prefix = `${originator}/${buildVersion} (${resolveCodexPlatformSignature()}) ${terminalToken}`;
@@ -1017,7 +1023,7 @@ function isTuiWorkerInvocation(argv) {
1017
1023
  }
1018
1024
  function resolveCodexOriginator(spoofMode, argv = process.argv) {
1019
1025
  if (spoofMode !== "codex")
1020
- return "codex_cli_rs";
1026
+ return "opencode";
1021
1027
  const normalizedArgv = argv.map((entry) => String(entry));
1022
1028
  if (isTuiWorkerInvocation(normalizedArgv))
1023
1029
  return "codex_cli_rs";
@@ -1152,7 +1158,7 @@ function hydrateAccountIdentityFromAccessClaims(account) {
1152
1158
  ensureAccountAuthTypes(account);
1153
1159
  ensureIdentityKey(account);
1154
1160
  }
1155
- async function selectCatalogAuthCandidate(authMode, pidOffsetEnabled) {
1161
+ async function selectCatalogAuthCandidate(authMode, pidOffsetEnabled, rotationStrategy) {
1156
1162
  try {
1157
1163
  const auth = await loadAuthStorage();
1158
1164
  const domain = getOpenAIOAuthDomain(auth, authMode);
@@ -1161,7 +1167,7 @@ async function selectCatalogAuthCandidate(authMode, pidOffsetEnabled) {
1161
1167
  }
1162
1168
  const selected = selectAccount({
1163
1169
  accounts: domain.accounts,
1164
- strategy: domain.strategy,
1170
+ strategy: rotationStrategy ?? domain.strategy,
1165
1171
  activeIdentityKey: domain.activeIdentityKey,
1166
1172
  now: Date.now(),
1167
1173
  stickyPidOffset: pidOffsetEnabled
@@ -1461,7 +1467,7 @@ export async function CodexAuthPlugin(input, opts = {}) {
1461
1467
  };
1462
1468
  };
1463
1469
  const requestSnapshots = createRequestSnapshots({
1464
- enabled: opts.headerSnapshots === true,
1470
+ enabled: opts.headerSnapshots === true || opts.headerTransformDebug === true,
1465
1471
  log: opts.log
1466
1472
  });
1467
1473
  const showToast = async (message, variant = "info", quietMode = false) => {
@@ -1757,7 +1763,37 @@ export async function CodexAuthPlugin(input, opts = {}) {
1757
1763
  }
1758
1764
  if (!hasOAuth)
1759
1765
  return {};
1760
- const catalogAuth = await selectCatalogAuthCandidate(authMode, opts.pidOffsetEnabled === true);
1766
+ const sessionAffinityPath = defaultSessionAffinityPath();
1767
+ const loadedSessionAffinity = await loadSessionAffinity(sessionAffinityPath).catch(() => ({ version: 1 }));
1768
+ const initialSessionAffinity = readSessionAffinitySnapshot(loadedSessionAffinity, authMode);
1769
+ const sessionExists = createSessionExistsFn(process.env);
1770
+ await pruneSessionAffinitySnapshot(initialSessionAffinity, sessionExists).catch(() => 0);
1771
+ const orchestratorState = createFetchOrchestratorState();
1772
+ orchestratorState.seenSessionKeys = initialSessionAffinity.seenSessionKeys;
1773
+ const stickySessionState = createStickySessionState();
1774
+ stickySessionState.bySessionKey = initialSessionAffinity.stickyBySessionKey;
1775
+ const hybridSessionState = createStickySessionState();
1776
+ hybridSessionState.bySessionKey = initialSessionAffinity.hybridBySessionKey;
1777
+ let sessionAffinityPersistQueue = Promise.resolve();
1778
+ const persistSessionAffinityState = () => {
1779
+ sessionAffinityPersistQueue = sessionAffinityPersistQueue
1780
+ .then(async () => {
1781
+ await pruneSessionAffinitySnapshot({
1782
+ seenSessionKeys: orchestratorState.seenSessionKeys,
1783
+ stickyBySessionKey: stickySessionState.bySessionKey,
1784
+ hybridBySessionKey: hybridSessionState.bySessionKey
1785
+ }, sessionExists);
1786
+ await saveSessionAffinity(async (current) => writeSessionAffinitySnapshot(current, authMode, {
1787
+ seenSessionKeys: orchestratorState.seenSessionKeys,
1788
+ stickyBySessionKey: stickySessionState.bySessionKey,
1789
+ hybridBySessionKey: hybridSessionState.bySessionKey
1790
+ }), sessionAffinityPath);
1791
+ })
1792
+ .catch(() => {
1793
+ // best-effort persistence
1794
+ });
1795
+ };
1796
+ const catalogAuth = await selectCatalogAuthCandidate(authMode, opts.pidOffsetEnabled === true, opts.rotationStrategy);
1761
1797
  const catalogModels = await getCodexModelCatalog({
1762
1798
  accessToken: catalogAuth.accessToken,
1763
1799
  accountId: catalogAuth.accountId,
@@ -1770,23 +1806,47 @@ export async function CodexAuthPlugin(input, opts = {}) {
1770
1806
  fallbackModels: STATIC_FALLBACK_MODELS,
1771
1807
  personality: opts.personality
1772
1808
  });
1773
- const orchestratorState = createFetchOrchestratorState();
1774
- const stickySessionState = createStickySessionState();
1775
1809
  return {
1776
1810
  apiKey: OAUTH_DUMMY_KEY,
1777
1811
  async fetch(requestInput, init) {
1778
1812
  const baseRequest = new Request(requestInput, init);
1813
+ const inboundCollaborationModeKind = baseRequest.headers.get(INTERNAL_COLLABORATION_MODE_HEADER) ?? undefined;
1814
+ if (opts.headerTransformDebug === true) {
1815
+ await requestSnapshots.captureRequest("before-header-transform", baseRequest, {
1816
+ spoofMode,
1817
+ ...(inboundCollaborationModeKind
1818
+ ? { collaborationModeKind: inboundCollaborationModeKind }
1819
+ : {})
1820
+ });
1821
+ }
1779
1822
  const outbound = new Request(rewriteUrl(baseRequest), baseRequest);
1780
1823
  const inboundOriginator = outbound.headers.get("originator")?.trim();
1781
- const outboundOriginator = inboundOriginator === "codex_exec" || inboundOriginator === "codex_cli_rs"
1824
+ const outboundOriginator = inboundOriginator === "opencode" ||
1825
+ inboundOriginator === "codex_exec" ||
1826
+ inboundOriginator === "codex_cli_rs"
1782
1827
  ? inboundOriginator
1783
1828
  : resolveCodexOriginator(spoofMode);
1784
1829
  outbound.headers.set("originator", outboundOriginator);
1785
- outbound.headers.set("user-agent", resolveRequestUserAgent(spoofMode, outboundOriginator));
1830
+ const inboundUserAgent = outbound.headers.get("user-agent")?.trim();
1831
+ if (spoofMode === "native" && inboundUserAgent) {
1832
+ outbound.headers.set("user-agent", inboundUserAgent);
1833
+ }
1834
+ else {
1835
+ outbound.headers.set("user-agent", resolveRequestUserAgent(spoofMode, outboundOriginator));
1836
+ }
1786
1837
  const collaborationModeKind = outbound.headers.get(INTERNAL_COLLABORATION_MODE_HEADER);
1787
1838
  if (collaborationModeKind) {
1788
1839
  outbound.headers.delete(INTERNAL_COLLABORATION_MODE_HEADER);
1789
1840
  }
1841
+ const subagentHeader = outbound.headers.get("x-openai-subagent")?.trim();
1842
+ const isSubagentRequest = Boolean(subagentHeader);
1843
+ if (opts.headerTransformDebug === true) {
1844
+ await requestSnapshots.captureRequest("after-header-transform", outbound, {
1845
+ spoofMode,
1846
+ ...(collaborationModeKind ? { collaborationModeKind } : {}),
1847
+ ...(isSubagentRequest ? { subagent: subagentHeader } : {})
1848
+ });
1849
+ }
1790
1850
  let selectedIdentityKey;
1791
1851
  await requestSnapshots.captureRequest("before-auth", outbound, {
1792
1852
  spoofMode,
@@ -1801,6 +1861,11 @@ export async function CodexAuthPlugin(input, opts = {}) {
1801
1861
  let email;
1802
1862
  let plan;
1803
1863
  try {
1864
+ if (isSubagentRequest && context?.sessionKey) {
1865
+ orchestratorState.seenSessionKeys.delete(context.sessionKey);
1866
+ stickySessionState.bySessionKey.delete(context.sessionKey);
1867
+ hybridSessionState.bySessionKey.delete(context.sessionKey);
1868
+ }
1804
1869
  await saveAuthStorage(undefined, async (authFile) => {
1805
1870
  const now = Date.now();
1806
1871
  const openai = authFile.openai;
@@ -1834,8 +1899,9 @@ export async function CodexAuthPlugin(input, opts = {}) {
1834
1899
  let sawInvalidGrant = false;
1835
1900
  let sawRefreshFailure = false;
1836
1901
  let sawMissingRefresh = false;
1902
+ const rotationStrategy = opts.rotationStrategy ?? domain.strategy ?? "sticky";
1837
1903
  opts.log?.debug("rotation begin", {
1838
- strategy: domain.strategy ?? "sticky",
1904
+ strategy: rotationStrategy,
1839
1905
  activeIdentityKey: domain.activeIdentityKey,
1840
1906
  totalAccounts: domain.accounts.length,
1841
1907
  enabledAccounts: enabled.length,
@@ -1843,14 +1909,19 @@ export async function CodexAuthPlugin(input, opts = {}) {
1843
1909
  sessionKey: context?.sessionKey ?? null
1844
1910
  });
1845
1911
  while (attempted.size < domain.accounts.length) {
1912
+ const sessionState = rotationStrategy === "sticky"
1913
+ ? stickySessionState
1914
+ : rotationStrategy === "hybrid"
1915
+ ? hybridSessionState
1916
+ : undefined;
1846
1917
  const selected = selectAccount({
1847
1918
  accounts: domain.accounts,
1848
- strategy: domain.strategy,
1919
+ strategy: rotationStrategy,
1849
1920
  activeIdentityKey: domain.activeIdentityKey,
1850
1921
  now,
1851
1922
  stickyPidOffset: opts.pidOffsetEnabled === true,
1852
- stickySessionKey: context?.sessionKey,
1853
- stickySessionState,
1923
+ stickySessionKey: isSubagentRequest ? undefined : context?.sessionKey,
1924
+ stickySessionState: sessionState,
1854
1925
  onDebug: (event) => {
1855
1926
  opts.log?.debug("rotation decision", event);
1856
1927
  }
@@ -1875,6 +1946,9 @@ export async function CodexAuthPlugin(input, opts = {}) {
1875
1946
  break;
1876
1947
  }
1877
1948
  attempted.add(attemptKey);
1949
+ if (!isSubagentRequest && context?.sessionKey && sessionState) {
1950
+ persistSessionAffinityState();
1951
+ }
1878
1952
  opts.log?.debug("rotation candidate selected", {
1879
1953
  attemptKey,
1880
1954
  selectedIdentityKey: selected.identityKey,
@@ -2030,6 +2104,17 @@ export async function CodexAuthPlugin(input, opts = {}) {
2030
2104
  },
2031
2105
  quietMode: opts.quietMode === true,
2032
2106
  state: orchestratorState,
2107
+ onSessionObserved: ({ event, sessionKey }) => {
2108
+ if (isSubagentRequest) {
2109
+ orchestratorState.seenSessionKeys.delete(sessionKey);
2110
+ stickySessionState.bySessionKey.delete(sessionKey);
2111
+ hybridSessionState.bySessionKey.delete(sessionKey);
2112
+ return;
2113
+ }
2114
+ if (event === "new" || event === "resume" || event === "switch") {
2115
+ persistSessionAffinityState();
2116
+ }
2117
+ },
2033
2118
  showToast,
2034
2119
  onAttemptRequest: async ({ attempt, maxAttempts, request, auth, sessionKey }) => {
2035
2120
  await requestSnapshots.captureRequest("outbound-attempt", request, {
@@ -2121,7 +2206,7 @@ export async function CodexAuthPlugin(input, opts = {}) {
2121
2206
  const { redirectUri } = await startOAuthServer();
2122
2207
  const pkce = await generatePKCE();
2123
2208
  const state = generateState();
2124
- const authUrl = buildAuthorizeUrl(redirectUri, pkce, state, "codex_cli_rs");
2209
+ const authUrl = buildAuthorizeUrl(redirectUri, pkce, state, spoofMode === "codex" ? "codex_cli_rs" : "opencode");
2125
2210
  const callbackPromise = waitForOAuthCallback(pkce, state, authMode);
2126
2211
  void tryOpenUrlInBrowser(authUrl, opts.log);
2127
2212
  process.stdout.write(`\nGo to: ${authUrl}\n`);
@@ -2187,7 +2272,7 @@ export async function CodexAuthPlugin(input, opts = {}) {
2187
2272
  const { redirectUri } = await startOAuthServer();
2188
2273
  const pkce = await generatePKCE();
2189
2274
  const state = generateState();
2190
- const authUrl = buildAuthorizeUrl(redirectUri, pkce, state, "codex_cli_rs");
2275
+ const authUrl = buildAuthorizeUrl(redirectUri, pkce, state, spoofMode === "codex" ? "codex_cli_rs" : "opencode");
2191
2276
  const callbackPromise = waitForOAuthCallback(pkce, state, authMode);
2192
2277
  void tryOpenUrlInBrowser(authUrl, opts.log);
2193
2278
  return {
@@ -2369,15 +2454,9 @@ export async function CodexAuthPlugin(input, opts = {}) {
2369
2454
  const modelOptions = isRecord(hookInput.model.options) ? hookInput.model.options : {};
2370
2455
  const promptCacheKey = resolvePromptCacheKey(modelOptions);
2371
2456
  if (spoofMode === "native") {
2372
- output.headers["OpenAI-Beta"] = "responses=experimental";
2373
- if (promptCacheKey) {
2374
- output.headers.session_id = promptCacheKey;
2375
- output.headers.conversation_id = promptCacheKey;
2376
- }
2377
- else {
2378
- delete output.headers.session_id;
2379
- delete output.headers.conversation_id;
2380
- }
2457
+ output.headers.session_id = hookInput.sessionID;
2458
+ delete output.headers["OpenAI-Beta"];
2459
+ delete output.headers.conversation_id;
2381
2460
  }
2382
2461
  else {
2383
2462
  output.headers.session_id = promptCacheKey ?? hookInput.sessionID;