Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ require("codereview").setup({
review_level = "info", -- "info" | "suggestion" | "warning" | "error"
max_file_size = 500, -- skip files larger than N lines (0 = unlimited)

claude_cli = { cmd = "claude", agent = "code-review" },
claude_cli = { cmd = "claude", model = nil, agent = "code-review" },
codex_cli = { cmd = "codex", model = nil },
copilot_cli = { cmd = "copilot", model = nil, agent = nil },
gemini_cli = { cmd = "gemini", model = nil },
Expand Down
2 changes: 2 additions & 0 deletions doc/codereview.txt
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,7 @@ Options for AI review. See |codereview-ai-review|.

claude_cli = {
cmd = "claude", -- path or name of the claude binary
model = nil, -- optional model override
agent = "code-review", -- Claude agent/profile name
},
codex_cli = {
Expand Down Expand Up @@ -398,6 +399,7 @@ Requirements:
provider = "claude_cli",
claude_cli = {
cmd = "claude", -- binary name or full path
model = "opus", -- optional model override
agent = "code-review", -- agent/profile name
},
}
Expand Down
8 changes: 6 additions & 2 deletions lua/codereview/ai/providers/claude_cli.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@ local config = require("codereview.config")
local utils = require("codereview.ai.providers.utils")
local M = {}

function M.build_cmd(claude_cmd, agent)
function M.build_cmd(claude_cmd, model, agent)
local cmd = { claude_cmd, "-p" }
if model and model ~= "" then
table.insert(cmd, "--model")
table.insert(cmd, model)
end
if agent then
table.insert(cmd, "--agent")
table.insert(cmd, agent)
Expand All @@ -22,7 +26,7 @@ function M.run(prompt, callback, opts)
local pcfg = cfg.ai.claude_cli or {}
local claude_cmd = pcfg.cmd or cfg.ai.claude_cmd or "claude"
local agent = (not opts.skip_agent) and (pcfg.agent or cfg.ai.agent) or nil
local cmd = M.build_cmd(claude_cmd, agent)
local cmd = M.build_cmd(claude_cmd, pcfg.model, agent)
return utils.run_cli(prompt, callback, cmd)
end

Expand Down
3 changes: 2 additions & 1 deletion lua/codereview/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@

---@class codereview.config.ai.ClaudeCLI
---@field cmd? string Claude CLI command (default: `claude`)
---@field model? string Claude model name
---@field agent? string Claude Agent (default: `code-review`)

---@class codereview.config.ai.CodexCLI
Expand Down Expand Up @@ -104,7 +105,7 @@ local defaults = {
provider = "claude_cli",
review_level = "info",
max_file_size = 500,
claude_cli = { cmd = "claude", agent = "code-review" },
claude_cli = { cmd = "claude", model = nil, agent = "code-review" },
codex_cli = { cmd = "codex", model = nil },
copilot_cli = { cmd = "copilot", model = nil, agent = nil },
gemini_cli = { cmd = "gemini", model = nil },
Expand Down
15 changes: 12 additions & 3 deletions tests/codereview/ai/providers/claude_cli_spec.lua
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package.loaded["codereview.config"] = {
get = function()
return { ai = { enabled = true, provider = "claude_cli", claude_cli = { cmd = "claude", agent = "code-review" } } }
return {
ai = {
enabled = true,
provider = "claude_cli",
claude_cli = { cmd = "claude", model = nil, agent = "code-review" },
},
}
end,
}
package.loaded["codereview.log"] = { debug = function() end, warn = function() end, error = function() end }
Expand All @@ -13,10 +19,13 @@ describe("ai.providers.claude_cli", function()
assert.same({ "claude", "-p" }, claude_cli.build_cmd("claude"))
end)
it("includes agent flag when provided", function()
assert.same({ "claude", "-p", "--agent", "code-review" }, claude_cli.build_cmd("claude", "code-review"))
assert.same({ "claude", "-p", "--agent", "code-review" }, claude_cli.build_cmd("claude", nil, "code-review"))
end)
it("omits agent flag when nil", function()
assert.same({ "claude", "-p" }, claude_cli.build_cmd("claude", nil))
assert.same({ "claude", "-p" }, claude_cli.build_cmd("claude", nil, nil))
end)
it("includes model flag when provided", function()
assert.same({ "claude", "-p", "--model", "model" }, claude_cli.build_cmd("claude", "model", nil))
end)
end)
end)
12 changes: 11 additions & 1 deletion tests/codereview/ai/subprocess_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,23 @@ describe("ai.subprocess", function()
end)

it("includes agent flag when provided", function()
local cmd = subprocess.build_cmd("claude", "code-review")
local cmd = subprocess.build_cmd("claude", nil, "code-review")
assert.same({ "claude", "-p", "--agent", "code-review" }, cmd)
end)

it("omits agent flag when agent is nil", function()
local cmd = subprocess.build_cmd("claude", nil)
assert.same({ "claude", "-p" }, cmd)
end)

it("includes model flag when provided", function()
local cmd = subprocess.build_cmd("claude", "model")
assert.same({ "claude", "-p", "--model", "model" }, cmd)
end)

it("omits model flag when model is nil", function()
local cmd = subprocess.build_cmd("claude", nil, nil)
assert.same({ "claude", "-p" }, cmd)
end)
end)
end)
Loading