import type { OhMyOpenCodeConfig } from "../config"; import { getAgentDisplayName } from "../shared/agent-display-names"; type AgentWithPermission = { permission?: Record }; function agentByKey(agentResult: Record, key: string): AgentWithPermission | undefined { return (agentResult[key] ?? agentResult[getAgentDisplayName(key)]) as | AgentWithPermission | undefined; } export function applyToolConfig(params: { config: Record; pluginConfig: OhMyOpenCodeConfig; agentResult: Record; }): void { const denyTodoTools = params.pluginConfig.experimental?.task_system ? { todowrite: "deny", todoread: "deny" } : {} params.config.tools = { ...(params.config.tools as Record), "grep_app_*": false, LspHover: false, LspCodeActions: false, LspCodeActionResolve: false, "task_*": false, teammate: false, ...(params.pluginConfig.experimental?.task_system ? { todowrite: false, todoread: false } : {}), }; const isCliRunMode = process.env.OPENCODE_CLI_RUN_MODE === "true"; const questionPermission = isCliRunMode ? "deny" : "allow"; const librarian = agentByKey(params.agentResult, "librarian"); if (librarian) { librarian.permission = { ...librarian.permission, "grep_app_*": "allow" }; } const looker = agentByKey(params.agentResult, "multimodal-looker"); if (looker) { looker.permission = { ...looker.permission, task: "deny", look_at: "deny" }; } const atlas = agentByKey(params.agentResult, "atlas"); if (atlas) { atlas.permission = { ...atlas.permission, task: "allow", call_omo_agent: "deny", "task_*": "allow", teammate: "allow", ...denyTodoTools, }; } const sisyphus = agentByKey(params.agentResult, "sisyphus"); if (sisyphus) { sisyphus.permission = { ...sisyphus.permission, call_omo_agent: "deny", task: "allow", question: questionPermission, "task_*": "allow", teammate: "allow", ...denyTodoTools, }; } const hephaestus = agentByKey(params.agentResult, "hephaestus"); if (hephaestus) { hephaestus.permission = { ...hephaestus.permission, call_omo_agent: "deny", task: "allow", question: questionPermission, ...denyTodoTools, }; } const prometheus = agentByKey(params.agentResult, "prometheus"); if (prometheus) { prometheus.permission = { ...prometheus.permission, call_omo_agent: "deny", task: "allow", question: questionPermission, "task_*": "allow", teammate: "allow", ...denyTodoTools, }; } const junior = agentByKey(params.agentResult, "sisyphus-junior"); if (junior) { junior.permission = { ...junior.permission, task: "allow", "task_*": "allow", teammate: "allow", ...denyTodoTools, }; } params.config.permission = { ...(params.config.permission as Record), webfetch: "allow", external_directory: "allow", task: "deny", }; }