import { describe, expect, it } from "vitest";import { getComposerProviderState } from "./composerProviderRegistry"; describe("getComposerProviderState", () => { it("returns codex defaults when no codex draft options exist", () => { const state = getComposerProviderState({ provider: "codex", model: "gpt-5.4", prompt: "", modelOptions: undefined, }); expect(state).toEqual({ provider: "codex", promptEffort: "high", modelOptionsForDispatch: undefined, }); }); it("normalizes codex dispatch options while preserving the selected effort", () => { const state = getComposerProviderState({ provider: "codex", model: "gpt-5.4", prompt: "", modelOptions: { codex: { reasoningEffort: "low", fastMode: true, }, }, }); expect(state).toEqual({ provider: "codex", promptEffort: "low", modelOptionsForDispatch: { reasoningEffort: "low", fastMode: true, }, }); }); it("preserves codex fast mode when it is the only active option", () => { const state = getComposerProviderState({ provider: "codex", model: "gpt-5.4", prompt: "", modelOptions: { codex: { fastMode: true, }, }, }); expect(state).toEqual({ provider: "codex", promptEffort: "high", modelOptionsForDispatch: { fastMode: true, }, }); }); it("drops explicit codex default/off overrides from dispatch while keeping the selected effort label", () => { const state = getComposerProviderState({ provider: "codex", model: "gpt-5.4", prompt: "", modelOptions: { codex: { reasoningEffort: "high", fastMode: false, }, }, }); expect(state).toEqual({ provider: "codex", promptEffort: "high", modelOptionsForDispatch: undefined, }); }); it("returns Claude defaults for effort-capable models", () => { const state = getComposerProviderState({ provider: "claudeAgent", model: "claude-sonnet-4-6", prompt: "", modelOptions: undefined, }); expect(state).toEqual({ provider: "claudeAgent", promptEffort: "high", modelOptionsForDispatch: undefined, }); }); it("tracks Claude ultrathink from the prompt without changing dispatch effort", () => { const state = getComposerProviderState({ provider: "claudeAgent", model: "claude-sonnet-4-6", prompt: "Ultrathink:\nInvestigate this failure", modelOptions: { claudeAgent: { effort: "medium", }, }, }); expect(state).toEqual({ provider: "claudeAgent", promptEffort: "medium", modelOptionsForDispatch: { effort: "medium", }, composerFrameClassName: "ultrathink-frame", composerSurfaceClassName: "shadow-[0_0_0_1px_rgba(255,255,255,0.04)_inset]", modelPickerIconClassName: "ultrathink-chroma", }); }); it("drops unsupported Claude effort options for models without effort controls", () => { const state = getComposerProviderState({ provider: "claudeAgent", model: "claude-haiku-4-5", prompt: "", modelOptions: { claudeAgent: { effort: "max", thinking: false, }, }, }); expect(state).toEqual({ provider: "claudeAgent", promptEffort: null, modelOptionsForDispatch: { thinking: false, }, }); }); it("preserves Claude fast mode when it is the only active option", () => { const state = getComposerProviderState({ provider: "claudeAgent", model: "claude-opus-4-6", prompt: "", modelOptions: { claudeAgent: { fastMode: true, }, }, }); expect(state).toEqual({ provider: "claudeAgent", promptEffort: "high", modelOptionsForDispatch: { fastMode: true, }, }); }); it("drops explicit Claude default/off overrides from dispatch while keeping the selected effort label", () => { const state = getComposerProviderState({ provider: "claudeAgent", model: "claude-opus-4-6", prompt: "", modelOptions: { claudeAgent: { effort: "high", fastMode: false, }, }, }); expect(state).toEqual({ provider: "claudeAgent", promptEffort: "high", modelOptionsForDispatch: undefined, }); });});
import { describe, expect, it } from "vitest";
import { getComposerProviderState } from "./composerProviderRegistry";
describe("getComposerProviderState", () => {
it("returns codex defaults when no codex draft options exist", () => {
const state = getComposerProviderState({
provider: "codex",
model: "gpt-5.4",
prompt: "",
modelOptions: undefined,
});
expect(state).toEqual({
provider: "codex",
promptEffort: "high",
modelOptionsForDispatch: undefined,
});
});
it("normalizes codex dispatch options while preserving the selected effort", () => {
const state = getComposerProviderState({
provider: "codex",
model: "gpt-5.4",
prompt: "",
modelOptions: {
codex: {
reasoningEffort: "low",
fastMode: true,
},
},
});
expect(state).toEqual({
provider: "codex",
promptEffort: "low",
modelOptionsForDispatch: {
reasoningEffort: "low",
fastMode: true,
},
});
});
it("preserves codex fast mode when it is the only active option", () => {
const state = getComposerProviderState({
provider: "codex",
model: "gpt-5.4",
prompt: "",
modelOptions: {
codex: {
fastMode: true,
},
},
});
expect(state).toEqual({
provider: "codex",
promptEffort: "high",
modelOptionsForDispatch: {
fastMode: true,
},
});
});
it("drops explicit codex default/off overrides from dispatch while keeping the selected effort label", () => {
const state = getComposerProviderState({
provider: "codex",
model: "gpt-5.4",
prompt: "",
modelOptions: {
codex: {
reasoningEffort: "high",
fastMode: false,
},
},
});
expect(state).toEqual({
provider: "codex",
promptEffort: "high",
modelOptionsForDispatch: undefined,
});
});
it("returns Claude defaults for effort-capable models", () => {
const state = getComposerProviderState({
provider: "claudeAgent",
model: "claude-sonnet-4-6",
prompt: "",
modelOptions: undefined,
});
expect(state).toEqual({
provider: "claudeAgent",
promptEffort: "high",
modelOptionsForDispatch: undefined,
});
});
it("tracks Claude ultrathink from the prompt without changing dispatch effort", () => {
const state = getComposerProviderState({
provider: "claudeAgent",
model: "claude-sonnet-4-6",
prompt: "Ultrathink:\nInvestigate this failure",
modelOptions: {
claudeAgent: {
effort: "medium",
},
},
});
expect(state).toEqual({
provider: "claudeAgent",
promptEffort: "medium",
modelOptionsForDispatch: {
effort: "medium",
},
composerFrameClassName: "ultrathink-frame",
composerSurfaceClassName: "shadow-[0_0_0_1px_rgba(255,255,255,0.04)_inset]",
modelPickerIconClassName: "ultrathink-chroma",
});
});
it("drops unsupported Claude effort options for models without effort controls", () => {
const state = getComposerProviderState({
provider: "claudeAgent",
model: "claude-haiku-4-5",
prompt: "",
modelOptions: {
claudeAgent: {
effort: "max",
thinking: false,
},
},
});
expect(state).toEqual({
provider: "claudeAgent",
promptEffort: null,
modelOptionsForDispatch: {
thinking: false,
},
});
});
it("preserves Claude fast mode when it is the only active option", () => {
const state = getComposerProviderState({
provider: "claudeAgent",
model: "claude-opus-4-6",
prompt: "",
modelOptions: {
claudeAgent: {
fastMode: true,
},
},
});
expect(state).toEqual({
provider: "claudeAgent",
promptEffort: "high",
modelOptionsForDispatch: {
fastMode: true,
},
});
});
it("drops explicit Claude default/off overrides from dispatch while keeping the selected effort label", () => {
const state = getComposerProviderState({
provider: "claudeAgent",
model: "claude-opus-4-6",
prompt: "",
modelOptions: {
claudeAgent: {
effort: "high",
fastMode: false,
},
},
});
expect(state).toEqual({
provider: "claudeAgent",
promptEffort: "high",
modelOptionsForDispatch: undefined,
});
});
});