import { useCommand, type CommandOption } from "@/context/command" import { useLanguage } from "@/context/language" import { useLocal } from "@/context/local" import { useSettings } from "@/context/settings" import { useDialog } from "@opencode-ai/ui/context/dialog" import { useSessionLayout } from "./session-layout" import { createSessionOwnership } from "./session-ownership" const withCategory = (category: string) => { return (option: Omit): CommandOption => ({ ...option, category, }) } export const useComposerCommands = () => { const command = useCommand() const dialog = useDialog() const language = useLanguage() const local = useLocal() const settings = useSettings() const { sessionKey } = useSessionLayout() const sessionOwnership = createSessionOwnership(sessionKey) const modelCommand = withCategory(language.t("command.category.model")) const agentCommand = withCategory(language.t("command.category.agent")) const chooseModel = async () => { const owner = sessionOwnership.capture() const { DialogSelectModel } = await import("@/components/dialog-select-model") owner.run(() => { void dialog.show(() => ) }) } command.register("composer", () => [ modelCommand({ id: "model.choose", title: language.t("command.model.choose"), description: language.t("command.model.choose.description"), keybind: "mod+'", slash: "model", onSelect: chooseModel, }), modelCommand({ id: "model.variant.cycle", title: language.t("command.model.variant.cycle"), description: language.t("command.model.variant.cycle.description"), keybind: "shift+mod+d", onSelect: () => local.model.variant.cycle(), }), agentCommand({ id: "agent.cycle", title: language.t("command.agent.cycle"), description: language.t("command.agent.cycle.description"), keybind: "mod+.", slash: "agent", disabled: !settings.visibility.customAgents(), onSelect: () => local.agent.move(1), }), agentCommand({ id: "agent.cycle.reverse", title: language.t("command.agent.cycle.reverse"), description: language.t("command.agent.cycle.reverse.description"), keybind: "shift+mod+.", disabled: !settings.visibility.customAgents(), onSelect: () => local.agent.move(-1), }), ]) }