mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-13 18:32:12 +03:00
Landed with the design call resolved per the owner's pick — **option 1**: the synced store is now endpoint-agnostic (persistDiscoveredModels and managedModelImport no longer drop non-chat models at write time), and chat selectability moved to read time (auto-pool expansion in autoStrategy applies filterChatSelectableModels; the models-route projection already had its chatOnly filter). Your discovery test now passes end-to-end (3/3): /api/show capabilities persist per connection and image/embedding requests route through the advertising host. Reconciliation notes: conflicted areas merged onto the current tip (adobe discovery import, requestedModel preflight signature, resolvedProvider fast-path coexists with the synced-route override — explicit resolution wins); carried base-red drains (#10055 memoization, #11071 test variants) dropped as already-landed; the managed-model-import exclusion test was propagated to the new contract (image/video models persist; the read filter still hides them from chat pickers — pinned by a new assertion). Full battery: 205/206 focused (the one red is a confirmed periodic-timer timing flake on the loaded devbox — 20/20 isolated), autoCombo vitest 30/30, combo suites 46/46, gates + typecheck clean. Thank you @yourspraveen — the capability probe + routing design was right; it just needed the store contract opened up. Fixes #11087.
456 lines
17 KiB
TypeScript
456 lines
17 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import {
|
|
applyCodexClientIdentityHeaders,
|
|
applyCodexClientMetadata,
|
|
applyCodexOriginalIdentityHeaders,
|
|
createCodexClientIdentity,
|
|
ensureCodexFingerprintSeed,
|
|
getCodexClientSessionId,
|
|
getCodexConvergedSessionId,
|
|
getCodexConvergedThreadId,
|
|
getCodexFingerprintMode,
|
|
getCodexInstallationId,
|
|
resolveCodexFingerprintIdentity,
|
|
resolveCodexOriginalIdentityHeaders,
|
|
withCodexFingerprintCredentials,
|
|
} from "../../open-sse/config/codexIdentity.ts";
|
|
|
|
const oauthCredentials = {
|
|
accessToken: "oauth-token",
|
|
connectionId: "connection-42",
|
|
providerSpecificData: { workspaceId: "workspace-42" },
|
|
};
|
|
|
|
test("Codex fingerprint mode defaults to session and only explicit off disables it", () => {
|
|
assert.equal(getCodexFingerprintMode(undefined), "session");
|
|
assert.equal(getCodexFingerprintMode({ codexFingerprintMode: "invalid" }), "session");
|
|
assert.equal(getCodexFingerprintMode({ codexFingerprintMode: "off" }), "off");
|
|
assert.equal(
|
|
resolveCodexFingerprintIdentity({
|
|
credentials: { ...oauthCredentials, providerSpecificData: { codexFingerprintMode: "off" } },
|
|
clientHeaders: { "session-id": "client-session" },
|
|
body: {},
|
|
}),
|
|
null
|
|
);
|
|
});
|
|
|
|
test("Codex off mode preserves original OAuth identity headers", () => {
|
|
const clientHeaders = {
|
|
"session-id": "client-session",
|
|
"thread-id": "client-thread",
|
|
"x-client-request-id": "client-request",
|
|
"x-codex-window-id": "client-thread:0",
|
|
"x-codex-turn-metadata": '{"turn_id":"client-turn"}',
|
|
};
|
|
const credentials = {
|
|
...oauthCredentials,
|
|
providerSpecificData: { codexFingerprintMode: "off" },
|
|
};
|
|
const original = resolveCodexOriginalIdentityHeaders({
|
|
credentials,
|
|
clientHeaders,
|
|
});
|
|
const wrapped = withCodexFingerprintCredentials(credentials, clientHeaders, {});
|
|
assert.deepEqual(wrapped.providerSpecificData.codexOriginalIdentityHeaders, original);
|
|
assert.equal(wrapped.providerSpecificData.codexClientIdentity, undefined);
|
|
|
|
const resolvedAgain = resolveCodexOriginalIdentityHeaders({
|
|
credentials,
|
|
clientHeaders,
|
|
});
|
|
assert.ok(resolvedAgain);
|
|
|
|
const headers: Record<string, string> = { session_id: "generated-session" };
|
|
applyCodexOriginalIdentityHeaders(headers, resolvedAgain);
|
|
assert.equal(headers["session-id"], "client-session");
|
|
assert.equal(headers["thread-id"], "client-thread");
|
|
assert.equal(headers["x-client-request-id"], "client-request");
|
|
assert.equal(headers["x-codex-window-id"], "client-thread:0");
|
|
assert.equal(headers["x-codex-turn-metadata"], '{"turn_id":"client-turn"}');
|
|
assert.equal(
|
|
resolveCodexOriginalIdentityHeaders({
|
|
credentials: {
|
|
...oauthCredentials,
|
|
requestEndpointPath: "/responses/compact",
|
|
providerSpecificData: { codexFingerprintMode: "off" },
|
|
},
|
|
clientHeaders: { "session-id": "compact-session" },
|
|
}),
|
|
null
|
|
);
|
|
});
|
|
|
|
test("Codex device/session/full modes preserve their Sub2API convergence boundaries", () => {
|
|
const providerSpecificData = { workspaceId: "workspace-42" };
|
|
const device = createCodexClientIdentity("client-session-a", providerSpecificData, {
|
|
mode: "device",
|
|
});
|
|
const sessionA = createCodexClientIdentity("client-session-a", providerSpecificData, {
|
|
mode: "session",
|
|
accountKey: "connection-42",
|
|
});
|
|
const sessionB = createCodexClientIdentity("client-session-b", providerSpecificData, {
|
|
mode: "session",
|
|
accountKey: "connection-42",
|
|
});
|
|
const fullA = createCodexClientIdentity("client-session-a", providerSpecificData, {
|
|
mode: "full",
|
|
accountKey: "connection-42",
|
|
});
|
|
const fullB = createCodexClientIdentity("client-session-b", providerSpecificData, {
|
|
mode: "full",
|
|
accountKey: "connection-42",
|
|
});
|
|
|
|
assert.ok(device && sessionA && sessionB && fullA && fullB);
|
|
assert.equal(device.installationId, getCodexInstallationId(providerSpecificData, undefined));
|
|
assert.notEqual(
|
|
getCodexInstallationId({}, "connection-a"),
|
|
getCodexInstallationId({}, "connection-b")
|
|
);
|
|
assert.equal(device.sessionId, "");
|
|
assert.equal(sessionA.sessionId, sessionB.sessionId);
|
|
assert.notEqual(sessionA.threadId, sessionB.threadId);
|
|
assert.equal(sessionA.windowId, `${sessionA.threadId}:0`);
|
|
assert.equal(fullA.sessionId, fullB.sessionId);
|
|
assert.equal(fullA.threadId, fullA.sessionId);
|
|
assert.equal(fullA.threadId, fullB.threadId);
|
|
assert.notEqual(sessionA.turnId, sessionB.turnId);
|
|
assert.equal(
|
|
getCodexConvergedSessionId(providerSpecificData, "connection-42"),
|
|
sessionA.sessionId
|
|
);
|
|
assert.equal(
|
|
getCodexConvergedThreadId("client-session-a", providerSpecificData, "connection-42"),
|
|
sessionA.threadId
|
|
);
|
|
});
|
|
|
|
test("Codex client session extraction prefers hyphenated session-id and rejects unsafe values", () => {
|
|
assert.equal(
|
|
getCodexClientSessionId({ "session-id": "hyphen", session_id: "underscore" }),
|
|
"hyphen"
|
|
);
|
|
assert.equal(getCodexClientSessionId({ session_id: "underscore" }), "underscore");
|
|
assert.equal(getCodexClientSessionId({ "session-id": "bad\\r\\nheader" }), null);
|
|
});
|
|
|
|
test("One Codex identity is shared by headers, body metadata, and nested turn metadata", () => {
|
|
const identity = resolveCodexFingerprintIdentity({
|
|
credentials: oauthCredentials,
|
|
clientHeaders: { "session-id": "client-session" },
|
|
body: {},
|
|
});
|
|
assert.ok(identity);
|
|
|
|
const headers: Record<string, string> = {};
|
|
applyCodexClientIdentityHeaders(headers, identity);
|
|
const body: Record<string, unknown> = {
|
|
client_metadata: { "x-codex-turn-metadata": '{"sandbox":"none"}' },
|
|
};
|
|
applyCodexClientMetadata(body, identity);
|
|
|
|
const headerMetadata = JSON.parse(headers["x-codex-turn-metadata"]);
|
|
const clientMetadata = body.client_metadata as Record<string, unknown>;
|
|
const bodyMetadata = JSON.parse(clientMetadata["x-codex-turn-metadata"] as string);
|
|
|
|
assert.equal(headers["session-id"], clientMetadata.session_id);
|
|
assert.equal(headers["thread-id"], clientMetadata.thread_id);
|
|
assert.equal(headers["x-codex-window-id"], clientMetadata["x-codex-window-id"]);
|
|
assert.equal(identity.installationId, headers["x-codex-installation-id"]);
|
|
assert.equal(identity.turnId, clientMetadata.turn_id);
|
|
assert.equal(identity.turnId, headerMetadata.turn_id);
|
|
assert.equal(identity.turnId, bodyMetadata.turn_id);
|
|
assert.equal(bodyMetadata.sandbox, "none");
|
|
});
|
|
|
|
test("Codex compact requests do not resolve a fingerprint identity", () => {
|
|
assert.equal(
|
|
resolveCodexFingerprintIdentity({
|
|
credentials: {
|
|
...oauthCredentials,
|
|
requestEndpointPath: "/responses/compact",
|
|
},
|
|
clientHeaders: { "session-id": "client-session" },
|
|
body: {},
|
|
}),
|
|
null
|
|
);
|
|
});
|
|
|
|
test("Codex HTTP off mode preserves original identity headers and body metadata", async () => {
|
|
const { CodexExecutor } = await import("../../open-sse/executors/codex.ts");
|
|
const executor = new CodexExecutor();
|
|
const originalFetch = globalThis.fetch;
|
|
let upstreamHeaders = new Headers();
|
|
let upstreamBody: Record<string, unknown> = {};
|
|
globalThis.fetch = async (_url, init) => {
|
|
upstreamHeaders = new Headers(init?.headers);
|
|
upstreamBody = JSON.parse(String(init?.body || "{}"));
|
|
return new Response(JSON.stringify({ id: "resp-off", object: "response" }), {
|
|
status: 200,
|
|
headers: { "Content-Type": "application/json" },
|
|
});
|
|
};
|
|
|
|
try {
|
|
await executor.execute({
|
|
model: "gpt-5.5",
|
|
body: {
|
|
model: "gpt-5.5",
|
|
input: [{ role: "user", content: "hello" }],
|
|
client_metadata: {
|
|
session_id: "client-session",
|
|
thread_id: "client-thread",
|
|
turn_id: "client-turn",
|
|
"x-codex-window-id": "client-thread:0",
|
|
"x-codex-turn-metadata": '{"turn_id":"client-turn"}',
|
|
},
|
|
_nativeCodexPassthrough: true,
|
|
},
|
|
stream: true,
|
|
clientHeaders: {
|
|
"session-id": "client-session",
|
|
"thread-id": "client-thread",
|
|
"x-client-request-id": "client-request",
|
|
"x-codex-window-id": "client-thread:0",
|
|
"x-codex-turn-metadata": '{"turn_id":"client-turn"}',
|
|
},
|
|
credentials: {
|
|
accessToken: "codex-token",
|
|
connectionId: "conn-http-off",
|
|
providerSpecificData: { workspaceId: "http-off", codexFingerprintMode: "off" },
|
|
},
|
|
});
|
|
} finally {
|
|
globalThis.fetch = originalFetch;
|
|
}
|
|
|
|
const metadata = upstreamBody.client_metadata as Record<string, unknown>;
|
|
assert.equal(upstreamHeaders.get("session-id"), "client-session");
|
|
assert.equal(upstreamHeaders.get("thread-id"), "client-thread");
|
|
assert.equal(upstreamHeaders.get("x-client-request-id"), "client-request");
|
|
assert.equal(upstreamHeaders.get("x-codex-window-id"), "client-thread:0");
|
|
assert.equal(upstreamHeaders.get("x-codex-turn-metadata"), '{"turn_id":"client-turn"}');
|
|
assert.equal(metadata.session_id, "client-session");
|
|
assert.equal(metadata.thread_id, "client-thread");
|
|
assert.equal(metadata.turn_id, "client-turn");
|
|
assert.equal(metadata["x-codex-window-id"], "client-thread:0");
|
|
assert.equal(metadata["x-codex-turn-metadata"], '{"turn_id":"client-turn"}');
|
|
});
|
|
|
|
test("Codex websocket off mode preserves original identity headers and body metadata", async () => {
|
|
const { CodexExecutor, __setCodexWebSocketTransportForTesting } =
|
|
await import("../../open-sse/executors/codex.ts");
|
|
const executor = new CodexExecutor();
|
|
let sent: string | null = null;
|
|
let wsHeaders: Record<string, string> = {};
|
|
__setCodexWebSocketTransportForTesting(async (_url, opts) => {
|
|
wsHeaders = (opts?.headers as Record<string, string>) || {};
|
|
return {
|
|
send(data: string) {
|
|
sent = data;
|
|
queueMicrotask(() => {
|
|
this.onmessage?.({
|
|
data: JSON.stringify({
|
|
type: "response.completed",
|
|
response: { status: "completed" },
|
|
}),
|
|
});
|
|
});
|
|
},
|
|
close() {},
|
|
onmessage: null,
|
|
onerror: null,
|
|
onclose: null,
|
|
};
|
|
});
|
|
|
|
try {
|
|
const result = await executor.execute({
|
|
model: "gpt-5.5",
|
|
body: {
|
|
model: "gpt-5.5",
|
|
input: [{ role: "user", content: "hello" }],
|
|
client_metadata: {
|
|
session_id: "client-session",
|
|
thread_id: "client-thread",
|
|
turn_id: "client-turn",
|
|
},
|
|
},
|
|
stream: true,
|
|
clientHeaders: {
|
|
"session-id": "client-session",
|
|
"thread-id": "client-thread",
|
|
"x-client-request-id": "client-request",
|
|
"x-codex-window-id": "client-thread:0",
|
|
"x-codex-turn-metadata": '{"turn_id":"client-turn"}',
|
|
},
|
|
credentials: {
|
|
accessToken: "codex-token",
|
|
connectionId: "conn-ws-off",
|
|
providerSpecificData: {
|
|
workspaceId: "ws-off",
|
|
codexTransport: "websocket",
|
|
codexFingerprintMode: "off",
|
|
},
|
|
},
|
|
});
|
|
await result.response.text();
|
|
} finally {
|
|
__setCodexWebSocketTransportForTesting(undefined);
|
|
}
|
|
|
|
assert.ok(sent);
|
|
const payload = JSON.parse(sent as string) as Record<string, unknown>;
|
|
const metadata = payload.client_metadata as Record<string, unknown>;
|
|
assert.equal(wsHeaders["session-id"], "client-session");
|
|
assert.equal(wsHeaders["thread-id"], "client-thread");
|
|
assert.equal(wsHeaders["x-client-request-id"], "client-request");
|
|
assert.equal(wsHeaders["x-codex-window-id"], "client-thread:0");
|
|
assert.equal(wsHeaders["x-codex-turn-metadata"], '{"turn_id":"client-turn"}');
|
|
assert.equal(metadata.session_id, "client-session");
|
|
assert.equal(metadata.thread_id, "client-thread");
|
|
assert.equal(metadata.turn_id, "client-turn");
|
|
});
|
|
|
|
test("Codex websocket headers and payload share one fingerprint identity", async () => {
|
|
const { CodexExecutor, __setCodexWebSocketTransportForTesting } =
|
|
await import("../../open-sse/executors/codex.ts");
|
|
const executor = new CodexExecutor();
|
|
let sent: string | null = null;
|
|
let wsHeaders: Record<string, string> = {};
|
|
__setCodexWebSocketTransportForTesting(async (_url, opts) => {
|
|
wsHeaders = (opts?.headers as Record<string, string>) || {};
|
|
return {
|
|
send(data: string) {
|
|
sent = data;
|
|
queueMicrotask(() => {
|
|
this.onmessage?.({
|
|
data: JSON.stringify({
|
|
type: "response.completed",
|
|
response: { status: "completed" },
|
|
}),
|
|
});
|
|
});
|
|
},
|
|
close() {},
|
|
onmessage: null,
|
|
onerror: null,
|
|
onclose: null,
|
|
};
|
|
});
|
|
|
|
try {
|
|
const result = await executor.execute({
|
|
model: "gpt-5.5",
|
|
body: {
|
|
model: "gpt-5.5",
|
|
session_id: "client-ws",
|
|
input: [{ role: "user", content: "hello" }],
|
|
},
|
|
stream: true,
|
|
credentials: {
|
|
accessToken: "codex-token",
|
|
connectionId: "conn-ws",
|
|
providerSpecificData: { workspaceId: "ws-ws", codexTransport: "websocket" },
|
|
},
|
|
});
|
|
await result.response.text();
|
|
} finally {
|
|
__setCodexWebSocketTransportForTesting(undefined);
|
|
}
|
|
|
|
assert.ok(sent);
|
|
const payload = JSON.parse(sent as string) as Record<string, unknown>;
|
|
const metadata = (payload.client_metadata as Record<string, unknown>) || {};
|
|
assert.equal(wsHeaders.session_id, metadata.session_id);
|
|
assert.equal(wsHeaders["x-client-request-id"], metadata.thread_id);
|
|
assert.equal(wsHeaders["x-codex-window-id"], metadata["x-codex-window-id"]);
|
|
assert.equal(payload.type, "response.create");
|
|
});
|
|
|
|
test("Codex fingerprint seed: persisted seed drives v2 derivation deterministically", () => {
|
|
const seed = "11111111-2222-4233-8444-555555555555";
|
|
const seeded = { workspaceId: "workspace-42", codexFingerprintSeed: seed };
|
|
|
|
const installationId = getCodexInstallationId(seeded, "connection-42");
|
|
const sessionId = getCodexConvergedSessionId(seeded, "connection-42");
|
|
const threadId = getCodexConvergedThreadId("client-session", seeded, "connection-42");
|
|
|
|
// Deterministic: same seed → same ids, regardless of the connection key.
|
|
assert.equal(getCodexInstallationId(seeded, "another-connection"), installationId);
|
|
assert.equal(getCodexConvergedSessionId(seeded, "another-connection"), sessionId);
|
|
assert.equal(getCodexConvergedThreadId("client-session", seeded, null), threadId);
|
|
|
|
// v2 derivation deliberately rotates away from the legacy workspace-derived ids.
|
|
const legacy = { workspaceId: "workspace-42" };
|
|
assert.notEqual(installationId, getCodexInstallationId(legacy, "connection-42"));
|
|
assert.notEqual(sessionId, getCodexConvergedSessionId(legacy, "connection-42"));
|
|
|
|
// Two connections never share an identity once seeded (sub2api #5696).
|
|
const otherSeed = { codexFingerprintSeed: "aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee" };
|
|
assert.notEqual(getCodexInstallationId(otherSeed, "connection-42"), installationId);
|
|
assert.notEqual(getCodexConvergedSessionId(otherSeed, "connection-42"), sessionId);
|
|
|
|
// Admin-configured explicit installation id still wins over the seed.
|
|
assert.equal(
|
|
getCodexInstallationId(
|
|
{ ...seeded, codexInstallationId: "99999999-8888-4777-8666-555555555555" },
|
|
"connection-42"
|
|
),
|
|
"99999999-8888-4777-8666-555555555555"
|
|
);
|
|
});
|
|
|
|
test("ensureCodexFingerprintSeed creates once, preserves, and skips non-converged", () => {
|
|
const oauth = { accessToken: "oauth-token" };
|
|
|
|
// Default mode (session) on OAuth → seed created.
|
|
const created = ensureCodexFingerprintSeed(undefined, oauth);
|
|
assert.match(created?.codexFingerprintSeed as string, /^[0-9a-f-]{36}$/);
|
|
|
|
// The stored seed ALWAYS wins over an incoming payload that omits it
|
|
// (partial update) or carries a client-forged one (system-managed key).
|
|
const stored = { codexFingerprintSeed: "11111111-2222-4233-8444-555555555555" };
|
|
assert.deepEqual(ensureCodexFingerprintSeed(undefined, oauth, stored), stored);
|
|
assert.deepEqual(
|
|
ensureCodexFingerprintSeed(
|
|
{ codexFingerprintSeed: "99999999-8888-4777-8666-555555555555" },
|
|
oauth,
|
|
stored
|
|
),
|
|
stored
|
|
);
|
|
// The stored seed stays dormant when the mode is switched off.
|
|
assert.deepEqual(ensureCodexFingerprintSeed({ codexFingerprintMode: "off" }, oauth, stored), {
|
|
codexFingerprintMode: "off",
|
|
codexFingerprintSeed: "11111111-2222-4233-8444-555555555555",
|
|
});
|
|
|
|
// Explicit off without a stored seed stays seedless; a client-supplied seed
|
|
// on create is stripped and replaced by a system-generated one.
|
|
assert.deepEqual(ensureCodexFingerprintSeed({ codexFingerprintMode: "off" }, oauth), {
|
|
codexFingerprintMode: "off",
|
|
});
|
|
const forgedOnCreate = ensureCodexFingerprintSeed(
|
|
{ codexFingerprintSeed: "99999999-8888-4777-8666-555555555555" },
|
|
oauth
|
|
);
|
|
assert.match(forgedOnCreate?.codexFingerprintSeed as string, /^[0-9a-f-]{36}$/);
|
|
assert.notEqual(forgedOnCreate?.codexFingerprintSeed, "99999999-8888-4777-8666-555555555555");
|
|
|
|
// Non-OAuth (API key) connections are never seeded.
|
|
assert.equal(ensureCodexFingerprintSeed(undefined, { apiKey: "sk-x" }), undefined);
|
|
assert.equal(ensureCodexFingerprintSeed(undefined, undefined), undefined);
|
|
|
|
// device/full modes require the seed as well.
|
|
for (const mode of ["device", "full"]) {
|
|
const result = ensureCodexFingerprintSeed({ codexFingerprintMode: mode }, oauth);
|
|
assert.match(result?.codexFingerprintSeed as string, /^[0-9a-f-]{36}$/);
|
|
}
|
|
});
|