feat(slashcommand): support parent opencode config dirs for command discovery
This commit is contained in:
@@ -157,4 +157,28 @@ describe("slashcommand command discovery plugin integration", () => {
|
|||||||
expect(names).not.toContain("daplug:run-prompt")
|
expect(names).not.toContain("daplug:run-prompt")
|
||||||
expect(names).not.toContain("daplug:plugin-plan")
|
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.")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { basename, join } from "path"
|
|||||||
import {
|
import {
|
||||||
parseFrontmatter,
|
parseFrontmatter,
|
||||||
sanitizeModelField,
|
sanitizeModelField,
|
||||||
getOpenCodeConfigDir,
|
getOpenCodeCommandDirs,
|
||||||
discoverPluginCommandDefinitions,
|
discoverPluginCommandDefinitions,
|
||||||
} from "../../shared"
|
} from "../../shared"
|
||||||
import type { CommandFrontmatter } from "../../features/claude-code-command-loader/types"
|
import type { CommandFrontmatter } from "../../features/claude-code-command-loader/types"
|
||||||
@@ -79,14 +79,15 @@ export function discoverCommandsSync(
|
|||||||
directory?: string,
|
directory?: string,
|
||||||
options?: CommandDiscoveryOptions,
|
options?: CommandDiscoveryOptions,
|
||||||
): CommandInfo[] {
|
): CommandInfo[] {
|
||||||
const configDir = getOpenCodeConfigDir({ binary: "opencode" })
|
|
||||||
const userCommandsDir = join(getClaudeConfigDir(), "commands")
|
const userCommandsDir = join(getClaudeConfigDir(), "commands")
|
||||||
const projectCommandsDir = join(directory ?? process.cwd(), ".claude", "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 opencodeProjectDir = join(directory ?? process.cwd(), ".opencode", "command")
|
||||||
|
|
||||||
const userCommands = discoverCommandsFromDir(userCommandsDir, "user")
|
const userCommands = discoverCommandsFromDir(userCommandsDir, "user")
|
||||||
const opencodeGlobalCommands = discoverCommandsFromDir(opencodeGlobalDir, "opencode")
|
const opencodeGlobalCommands = opencodeGlobalDirs.flatMap((commandsDir) =>
|
||||||
|
discoverCommandsFromDir(commandsDir, "opencode")
|
||||||
|
)
|
||||||
const projectCommands = discoverCommandsFromDir(projectCommandsDir, "project")
|
const projectCommands = discoverCommandsFromDir(projectCommandsDir, "project")
|
||||||
const opencodeProjectCommands = discoverCommandsFromDir(opencodeProjectDir, "opencode-project")
|
const opencodeProjectCommands = discoverCommandsFromDir(opencodeProjectDir, "opencode-project")
|
||||||
const pluginCommands = discoverPluginCommands(options)
|
const pluginCommands = discoverPluginCommands(options)
|
||||||
|
|||||||
Reference in New Issue
Block a user