11package claudecode
22
33import (
4- "bytes"
54 "context"
65 "encoding/json"
7- "errors"
86 "fmt"
9- "os"
107 "os/exec"
11- "strings"
8+
9+ "github.com/entireio/cli/cmd/entire/cli/agent"
1210)
1311
1412// GenerateText sends a prompt to the Claude CLI and returns the raw text response.
@@ -21,52 +19,22 @@ func (c *ClaudeCodeAgent) GenerateText(ctx context.Context, prompt string, model
2119 model = "haiku"
2220 }
2321
24- cmd := exec . CommandContext ( ctx , claudePath ,
22+ args := [] string {
2523 "--print" , "--output-format" , "json" ,
26- "--model" , model , "--setting-sources" , "" )
27-
28- // Isolate from the user's git repo to prevent recursive hook triggers
29- // and index pollution (same approach as summarize/claude.go).
30- cmd .Dir = os .TempDir ()
31- cmd .Env = stripGitEnv (os .Environ ())
32- cmd .Stdin = strings .NewReader (prompt )
33-
34- var stdout , stderr bytes.Buffer
35- cmd .Stdout = & stdout
36- cmd .Stderr = & stderr
37-
38- if err := cmd .Run (); err != nil {
39- var execErr * exec.Error
40- if errors .As (err , & execErr ) {
41- return "" , fmt .Errorf ("claude CLI not found: %w" , err )
42- }
43- var exitErr * exec.ExitError
44- if errors .As (err , & exitErr ) {
45- return "" , fmt .Errorf ("claude CLI failed (exit %d): %s" , exitErr .ExitCode (), stderr .String ())
46- }
47- return "" , fmt .Errorf ("failed to run claude CLI: %w" , err )
24+ "--model" , model , "--setting-sources" , "" ,
25+ }
26+ stdoutText , err := agent .RunIsolatedTextGeneratorCLI (ctx , exec .CommandContext , claudePath , "claude" , args , prompt )
27+ if err != nil {
28+ return "" , fmt .Errorf ("claude text generation failed: %w" , err )
4829 }
4930
5031 // Parse the {"result": "..."} envelope
5132 var response struct {
5233 Result string `json:"result"`
5334 }
54- if err := json .Unmarshal (stdout . Bytes ( ), & response ); err != nil {
35+ if err := json .Unmarshal ([] byte ( stdoutText ), & response ); err != nil {
5536 return "" , fmt .Errorf ("failed to parse claude CLI response: %w" , err )
5637 }
5738
5839 return response .Result , nil
5940}
60-
61- // stripGitEnv returns a copy of env with all GIT_* variables removed.
62- // This prevents a subprocess from discovering or modifying the parent's git repo.
63- // Duplicated from summarize/claude.go — simple filter not worth extracting to shared package.
64- func stripGitEnv (env []string ) []string {
65- filtered := make ([]string , 0 , len (env ))
66- for _ , e := range env {
67- if ! strings .HasPrefix (e , "GIT_" ) {
68- filtered = append (filtered , e )
69- }
70- }
71- return filtered
72- }
0 commit comments