diff --git a/src/tools/slashcommand/command-discovery.test.ts b/src/tools/slashcommand/command-discovery.test.ts index 05e49ab3d..36e59ba0c 100644 --- a/src/tools/slashcommand/command-discovery.test.ts +++ b/src/tools/slashcommand/command-discovery.test.ts @@ -157,4 +157,28 @@ describe("slashcommand command discovery plugin integration", () => { expect(names).not.toContain("daplug:run-prompt") expect(names).not.toContain("daplug:plugin-plan") }) + + it("discovers parent opencode commands when profile config dir is active", () => { + const opencodeRootDir = join(tempDir, "opencode-root") + const profileConfigDir = join(opencodeRootDir, "profiles", "codex") + const globalCommandDir = join(opencodeRootDir, "command") + + mkdirSync(profileConfigDir, { recursive: true }) + mkdirSync(globalCommandDir, { recursive: true }) + writeFileSync( + join(globalCommandDir, "commit.md"), + `--- +description: Commit through parent opencode config +--- +Use parent opencode commit command. +` + ) + process.env.OPENCODE_CONFIG_DIR = profileConfigDir + + const commands = discoverCommandsSync(projectDir) + const commitCommand = commands.find(command => command.name === "commit") + + expect(commitCommand?.scope).toBe("opencode") + expect(commitCommand?.content).toContain("Use parent opencode commit command.") + }) }) diff --git a/src/tools/slashcommand/command-discovery.ts b/src/tools/slashcommand/command-discovery.ts index 078380526..7fb96c322 100644 --- a/src/tools/slashcommand/command-discovery.ts +++ b/src/tools/slashcommand/command-discovery.ts @@ -3,7 +3,7 @@ import { basename, join } from "path" import { parseFrontmatter, sanitizeModelField, - getOpenCodeConfigDir, + getOpenCodeCommandDirs, discoverPluginCommandDefinitions, } from "../../shared" import type { CommandFrontmatter } from "../../features/claude-code-command-loader/types" @@ -79,14 +79,15 @@ export function discoverCommandsSync( directory?: string, options?: CommandDiscoveryOptions, ): CommandInfo[] { - const configDir = getOpenCodeConfigDir({ binary: "opencode" }) const userCommandsDir = join(getClaudeConfigDir(), "commands") const projectCommandsDir = join(directory ?? process.cwd(), ".claude", "commands") - const opencodeGlobalDir = join(configDir, "command") + const opencodeGlobalDirs = getOpenCodeCommandDirs({ binary: "opencode" }) const opencodeProjectDir = join(directory ?? process.cwd(), ".opencode", "command") const userCommands = discoverCommandsFromDir(userCommandsDir, "user") - const opencodeGlobalCommands = discoverCommandsFromDir(opencodeGlobalDir, "opencode") + const opencodeGlobalCommands = opencodeGlobalDirs.flatMap((commandsDir) => + discoverCommandsFromDir(commandsDir, "opencode") + ) const projectCommands = discoverCommandsFromDir(projectCommandsDir, "project") const opencodeProjectCommands = discoverCommandsFromDir(opencodeProjectDir, "opencode-project") const pluginCommands = discoverPluginCommands(options)