53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package ai
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"fmt"
|
|
"os/exec"
|
|
"strings"
|
|
)
|
|
|
|
type claudeCodeProvider struct {
|
|
model string
|
|
}
|
|
|
|
func newClaudeCode(model string) *claudeCodeProvider {
|
|
if model == "" {
|
|
model = "claude-sonnet-4-6"
|
|
}
|
|
return &claudeCodeProvider{model: model}
|
|
}
|
|
|
|
func (p *claudeCodeProvider) Name() string { return "claudecode" }
|
|
|
|
func (p *claudeCodeProvider) Summarize(ctx context.Context, prompt string, _ GenOptions) (string, error) {
|
|
var stdout, stderr bytes.Buffer
|
|
cmd := exec.CommandContext(ctx, "claude", "-p", prompt, "--model", p.model)
|
|
cmd.Stdout = &stdout
|
|
cmd.Stderr = &stderr
|
|
|
|
err := cmd.Run()
|
|
fmt.Printf("[claudecode] stdout len=%d stderr=%q err=%v\n", stdout.Len(), stderr.String(), err)
|
|
|
|
if err != nil {
|
|
msg := strings.TrimSpace(stderr.String())
|
|
if msg == "" {
|
|
msg = strings.TrimSpace(stdout.String())
|
|
}
|
|
if msg == "" {
|
|
msg = err.Error()
|
|
}
|
|
return "", fmt.Errorf("claude cli: %s", msg)
|
|
}
|
|
return strings.TrimSpace(stdout.String()), nil
|
|
}
|
|
|
|
func (p *claudeCodeProvider) ListModels(_ context.Context) ([]string, error) {
|
|
return []string{
|
|
"claude-opus-4-7",
|
|
"claude-sonnet-4-6",
|
|
"claude-haiku-4-5-20251001",
|
|
}, nil
|
|
}
|