diff --git a/assets/oh-my-opencode.schema.json b/assets/oh-my-opencode.schema.json index 3108227a..55385f5c 100644 --- a/assets/oh-my-opencode.schema.json +++ b/assets/oh-my-opencode.schema.json @@ -3338,11 +3338,6 @@ "type": "string", "minLength": 1 }, - "temperature": { - "type": "number", - "minimum": 0, - "maximum": 2 - }, "variant": { "type": "string" }, diff --git a/src/agents/athena/council-orchestrator.test.ts b/src/agents/athena/council-orchestrator.test.ts index 428aefda..706e8ef5 100644 --- a/src/agents/athena/council-orchestrator.test.ts +++ b/src/agents/athena/council-orchestrator.test.ts @@ -11,8 +11,6 @@ interface MockLaunchInput { parentMessageID: string parentAgent?: string model?: { providerID: string; modelID: string; variant?: string } - temperature?: number - permission?: Record } function createMockTask(id: string, launch: MockLaunchInput) { @@ -68,7 +66,6 @@ describe("executeCouncil", () => { for (const launch of launches) { expect(launch.prompt).toBe(expectedPrompt) expect(launch.agent).toBe("athena") - expect(launch.permission).toEqual({ write: "deny", edit: "deny", task: "deny", athena_council: "deny" }) } expect(launches[0]?.model).toEqual({ providerID: "openai", modelID: "gpt-5.3-codex" }) @@ -170,10 +167,10 @@ describe("executeCouncil", () => { expect(result.failures.find((f) => f.member.model === "invalid-model")?.error).toContain("Launch failed") }) - //#given members with per-member temperature and variant + //#given members with per-member variant //#when executeCouncil is called - //#then launch receives those values for each corresponding member - test("passes member temperature and variant to launch input", async () => { + //#then launch receives variant in model for each corresponding member + test("passes member variant to launch input model", async () => { const launches: MockLaunchInput[] = [] const launcher = { launch: async (input: MockLaunchInput) => { @@ -186,8 +183,8 @@ describe("executeCouncil", () => { question: "Compare architecture options", council: { members: [ - { model: "openai/gpt-5.3-codex", temperature: 0.1, variant: "high" }, - { model: "anthropic/claude-sonnet-4-5", temperature: 0.3 }, + { model: "openai/gpt-5.3-codex", variant: "high" }, + { model: "anthropic/claude-sonnet-4-5" }, ], }, launcher, @@ -196,9 +193,7 @@ describe("executeCouncil", () => { }) expect(launches).toHaveLength(2) - expect(launches[0]?.temperature).toBe(0.1) expect(launches[0]?.model?.variant).toBe("high") - expect(launches[1]?.temperature).toBe(0.3) expect(launches[1]?.model?.variant).toBeUndefined() }) diff --git a/src/agents/athena/council-orchestrator.ts b/src/agents/athena/council-orchestrator.ts index 915dd10f..cf143cff 100644 --- a/src/agents/athena/council-orchestrator.ts +++ b/src/agents/athena/council-orchestrator.ts @@ -1,5 +1,4 @@ import type { LaunchInput, BackgroundTask } from "../../features/background-agent/types" -import { createAgentToolRestrictions } from "../../shared/permission-compat" import { buildCouncilPrompt } from "./council-prompt" import { parseModelString } from "./model-parser" import type { CouncilConfig, CouncilLaunchFailure, CouncilLaunchedMember, CouncilLaunchResult, CouncilMemberConfig } from "./types" @@ -72,7 +71,6 @@ async function launchMember( throw new Error(`Invalid model string: "${member.model}"`) } - const restrictions = createAgentToolRestrictions(["write", "edit", "task", "athena_council"]) const memberName = member.name ?? member.model return launcher.launch({ description: `Council member: ${memberName}`, @@ -86,7 +84,5 @@ async function launchMember( modelID: parsedModel.modelID, ...(member.variant ? { variant: member.variant } : {}), }, - ...(member.temperature !== undefined ? { temperature: member.temperature } : {}), - permission: restrictions.permission, }) } diff --git a/src/agents/athena/types.ts b/src/agents/athena/types.ts index cb881b9b..2809e95a 100644 --- a/src/agents/athena/types.ts +++ b/src/agents/athena/types.ts @@ -1,6 +1,5 @@ export interface CouncilMemberConfig { model: string - temperature?: number variant?: string name?: string } @@ -9,11 +8,6 @@ export interface CouncilConfig { members: CouncilMemberConfig[] } -export interface AthenaConfig { - model?: string - council: CouncilConfig -} - export interface CouncilLaunchFailure { member: CouncilMemberConfig error: string diff --git a/src/config/schema/athena.test.ts b/src/config/schema/athena.test.ts index b698dc26..b8838bdf 100644 --- a/src/config/schema/athena.test.ts +++ b/src/config/schema/athena.test.ts @@ -18,7 +18,6 @@ describe("CouncilMemberSchema", () => { //#given const config = { model: "openai/gpt-5.3-codex", - temperature: 0.4, variant: "high", name: "analyst-a", } @@ -32,7 +31,7 @@ describe("CouncilMemberSchema", () => { test("rejects member config missing model", () => { //#given - const config = { temperature: 0.5 } + const config = { name: "no-model" } //#when const result = CouncilMemberSchema.safeParse(config) @@ -85,34 +84,11 @@ describe("CouncilMemberSchema", () => { expect(result.success).toBe(false) }) - test("rejects temperature below 0", () => { - //#given - const config = { model: "openai/gpt-5.3-codex", temperature: -0.1 } - - //#when - const result = CouncilMemberSchema.safeParse(config) - - //#then - expect(result.success).toBe(false) - }) - - test("rejects temperature above 2", () => { - //#given - const config = { model: "openai/gpt-5.3-codex", temperature: 2.1 } - - //#when - const result = CouncilMemberSchema.safeParse(config) - - //#then - expect(result.success).toBe(false) - }) - test("z.infer produces expected type shape", () => { //#given type InferredCouncilMember = z.infer const member: InferredCouncilMember = { model: "anthropic/claude-opus-4-6", - temperature: 0.1, variant: "medium", name: "oracle", } @@ -132,7 +108,6 @@ describe("CouncilMemberSchema", () => { const parsed = CouncilMemberSchema.parse(config) //#then - expect(parsed.temperature).toBeUndefined() expect(parsed.variant).toBeUndefined() expect(parsed.name).toBeUndefined() }) @@ -156,9 +131,9 @@ describe("CouncilConfigSchema", () => { //#given const config = { members: [ - { model: "anthropic/claude-opus-4-6", name: "a", temperature: 0.1 }, + { model: "anthropic/claude-opus-4-6", name: "a" }, { model: "openai/gpt-5.3-codex", name: "b", variant: "high" }, - { model: "xai/grok-code-fast-1", name: "c", temperature: 1.2, variant: "low" }, + { model: "xai/grok-code-fast-1", name: "c", variant: "low" }, ], } diff --git a/src/config/schema/athena.ts b/src/config/schema/athena.ts index cbd5821f..ec9e135b 100644 --- a/src/config/schema/athena.ts +++ b/src/config/schema/athena.ts @@ -14,7 +14,6 @@ const ModelStringSchema = z export const CouncilMemberSchema = z.object({ model: ModelStringSchema, - temperature: z.number().min(0).max(2).optional(), variant: z.string().optional(), name: z.string().optional(), }) diff --git a/src/features/background-agent/types.ts b/src/features/background-agent/types.ts index 72f0ed3d..6973dd78 100644 --- a/src/features/background-agent/types.ts +++ b/src/features/background-agent/types.ts @@ -72,10 +72,6 @@ export interface LaunchInput { skills?: string[] skillContent?: string category?: string - /** Per-task temperature override for council members or custom launches */ - temperature?: number - /** Tool permission overrides (e.g., { write: "deny", edit: "deny" }) */ - permission?: Record } export interface ResumeInput { diff --git a/src/tools/athena-council/council-launcher.test.ts b/src/tools/athena-council/council-launcher.test.ts index ee839c1c..3877308c 100644 --- a/src/tools/athena-council/council-launcher.test.ts +++ b/src/tools/athena-council/council-launcher.test.ts @@ -16,10 +16,10 @@ function createMockTask(id: string): BackgroundTask { } describe("createCouncilLauncher", () => { - //#given a council launch input with temperature and permission + //#given a council launch input with all fields //#when launch is called - //#then temperature and permission are forwarded to the background manager - test("forwards temperature and permission to background manager", async () => { + //#then all fields are forwarded to the background manager + test("forwards all launch input fields to background manager", async () => { const capturedInputs: LaunchInput[] = [] const mockManager = { launch: async (input: LaunchInput) => { @@ -38,40 +38,14 @@ describe("createCouncilLauncher", () => { parentSessionID: "session-1", parentMessageID: "message-1", model: { providerID: "openai", modelID: "gpt-5.3-codex" }, - temperature: 0.3, - permission: { write: "deny", edit: "deny", task: "deny" }, }) expect(capturedInputs).toHaveLength(1) - expect(capturedInputs[0]?.temperature).toBe(0.3) - expect(capturedInputs[0]?.permission).toEqual({ write: "deny", edit: "deny", task: "deny" }) - }) - - //#given a council launch input without temperature and permission - //#when launch is called - //#then undefined temperature and permission are forwarded (not dropped) - test("forwards undefined temperature and permission without error", async () => { - const capturedInputs: LaunchInput[] = [] - const mockManager = { - launch: async (input: LaunchInput) => { - capturedInputs.push(input) - return createMockTask("bg-2") - }, - getTask: () => undefined, - } as unknown as BackgroundManager - - const launcher = createCouncilLauncher(mockManager) - - await launcher.launch({ - description: "Council member: test", - prompt: "Analyze this", - agent: "athena", - parentSessionID: "session-1", - parentMessageID: "message-1", - }) - - expect(capturedInputs).toHaveLength(1) - expect(capturedInputs[0]?.temperature).toBeUndefined() - expect(capturedInputs[0]?.permission).toBeUndefined() + expect(capturedInputs[0]?.description).toBe("Council member: test") + expect(capturedInputs[0]?.prompt).toBe("Analyze this") + expect(capturedInputs[0]?.agent).toBe("athena") + expect(capturedInputs[0]?.parentSessionID).toBe("session-1") + expect(capturedInputs[0]?.parentMessageID).toBe("message-1") + expect(capturedInputs[0]?.model).toEqual({ providerID: "openai", modelID: "gpt-5.3-codex" }) }) }) diff --git a/src/tools/athena-council/council-launcher.ts b/src/tools/athena-council/council-launcher.ts index c690a3da..0f83ba5c 100644 --- a/src/tools/athena-council/council-launcher.ts +++ b/src/tools/athena-council/council-launcher.ts @@ -12,8 +12,6 @@ export function createCouncilLauncher(manager: BackgroundManager): CouncilLaunch parentMessageID: input.parentMessageID, parentAgent: input.parentAgent, model: input.model, - temperature: input.temperature, - permission: input.permission, }) }, }