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.
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import {
|
|
applyNativeCodexTurnPin,
|
|
clearNativeCodexTurnPinsForTests,
|
|
getNativeCodexTurnPin,
|
|
pinNativeCodexTurn,
|
|
revokeNativeCodexTurnPinsForConnection,
|
|
} from "../../open-sse/services/combo/nativeCodexTurnPin.ts";
|
|
import type { ResolvedComboTarget } from "../../open-sse/services/combo/types.ts";
|
|
|
|
const body = {
|
|
client_metadata: {
|
|
"x-codex-turn-metadata": JSON.stringify({ thread_id: "thread-1", turn_id: "turn-1" }),
|
|
},
|
|
};
|
|
|
|
function target(modelStr: string, provider: string): ResolvedComboTarget {
|
|
return {
|
|
kind: "model",
|
|
stepId: `step-${provider}`,
|
|
executionKey: `${provider}:${modelStr}`,
|
|
modelStr,
|
|
provider,
|
|
providerId: provider,
|
|
connectionId: null,
|
|
weight: 1,
|
|
label: null,
|
|
};
|
|
}
|
|
|
|
test("native continuation pins provider, model and connection", () => {
|
|
clearNativeCodexTurnPinsForTests();
|
|
const pinnedTarget = target("chatgpt-web-codex/high", "chatgpt-web-codex");
|
|
pinNativeCodexTurn({
|
|
body,
|
|
comboName: "coding",
|
|
target: pinnedTarget,
|
|
connectionId: "connection-a",
|
|
});
|
|
const pin = getNativeCodexTurnPin(body, "coding");
|
|
assert.ok(pin);
|
|
assert.deepEqual(applyNativeCodexTurnPin([pinnedTarget], pin), [
|
|
{ ...pinnedTarget, connectionId: "connection-a", allowedConnectionIds: ["connection-a"] },
|
|
]);
|
|
assert.equal(revokeNativeCodexTurnPinsForConnection("connection-a"), 1);
|
|
assert.equal(getNativeCodexTurnPin(body, "coding"), null);
|
|
});
|
|
|
|
test("a pinned turn cannot silently move to another target", () => {
|
|
clearNativeCodexTurnPinsForTests();
|
|
pinNativeCodexTurn({
|
|
body,
|
|
comboName: "coding",
|
|
target: target("chatgpt-web-codex/high", "chatgpt-web-codex"),
|
|
connectionId: "connection-a",
|
|
});
|
|
assert.throws(
|
|
() =>
|
|
pinNativeCodexTurn({
|
|
body,
|
|
comboName: "coding",
|
|
target: target("codex/gpt-5.6-sol", "codex"),
|
|
connectionId: "connection-b",
|
|
}),
|
|
/changed after output/
|
|
);
|
|
});
|