41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package agent
|
|
|
|
import (
|
|
"gitea.alexandru.macocian.me/Charlie/sherlock/internal/mcp"
|
|
)
|
|
|
|
func init() { Register(&claude{}) }
|
|
|
|
// claude integrates Anthropic's Claude Code CLI (npm package
|
|
// `@anthropic-ai/claude-code` → `claude` on PATH). MCP config is
|
|
// passed via --mcp-config <path> in the canonical `.mcp.json` shape
|
|
// (`{"mcpServers": ...}`) — same shape Copilot uses.
|
|
//
|
|
// We also forbid ANTHROPIC_API_KEY in the child env so an
|
|
// inadvertently-set personal key can't override the broker-managed
|
|
// session. (Phase 2 will surface a proper Anthropic auth grant.)
|
|
type claude struct{}
|
|
|
|
func (claude) Name() string { return "claude" }
|
|
func (claude) Description() string { return "Anthropic Claude Code CLI" }
|
|
|
|
func (c claude) Spawn(ctx Context, args []string) error {
|
|
bin, err := LookPath("claude")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
mcpPath, err := mcp.Render(c.Name(), ctx.Servers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
argv := c.buildArgv(bin, mcpPath, args)
|
|
env := BuildEnv([]string{"ANTHROPIC_API_KEY"}, nil)
|
|
return DefaultExecer.Exec(bin, argv, env)
|
|
}
|
|
|
|
func (claude) buildArgv(bin, mcpPath string, userArgs []string) []string {
|
|
argv := []string{bin, "--mcp-config", mcpPath}
|
|
argv = append(argv, userArgs...)
|
|
return argv
|
|
}
|