Skip to content

Commit 7ff622c

Browse files
authored
Merge pull request #736 from dgageot/printer
Don't just fmt.Println
2 parents e24a458 + 07dd033 commit 7ff622c

14 files changed

Lines changed: 49 additions & 34 deletions

File tree

cmd/root/api.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/spf13/cobra"
1212

1313
"github.com/docker/cagent/pkg/agentfile"
14+
"github.com/docker/cagent/pkg/cli"
1415
"github.com/docker/cagent/pkg/config"
1516
"github.com/docker/cagent/pkg/remote"
1617
"github.com/docker/cagent/pkg/server"
@@ -58,6 +59,7 @@ func (f *apiFlags) runAPICommand(cmd *cobra.Command, args []string) error {
5859
telemetry.TrackCommand("api", args)
5960

6061
ctx := cmd.Context()
62+
out := cli.NewPrinter(cmd.OutOrStdout())
6163
agentsPath := args[0]
6264

6365
// Make sure no question is ever asked to the user in api mode.
@@ -67,7 +69,7 @@ func (f *apiFlags) runAPICommand(cmd *cobra.Command, args []string) error {
6769
return fmt.Errorf("--pull-interval flag can only be used with OCI references, not local files")
6870
}
6971

70-
resolvedPath, err := agentfile.Resolve(ctx, agentsPath)
72+
resolvedPath, err := agentfile.Resolve(ctx, out, agentsPath)
7173
if err != nil {
7274
return err
7375
}
@@ -139,7 +141,7 @@ func (f *apiFlags) runAPICommand(cmd *cobra.Command, args []string) error {
139141
}
140142

141143
// Resolve the OCI reference to get the updated file path
142-
newResolvedPath, err := agentfile.Resolve(ctx, agentsPath)
144+
newResolvedPath, err := agentfile.Resolve(ctx, out, agentsPath)
143145
if err != nil {
144146
slog.Error("Failed to resolve OCI reference after pull", "reference", agentsPath, "error", err)
145147
continue

cmd/root/build.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package root
33
import (
44
"github.com/spf13/cobra"
55

6+
"github.com/docker/cagent/pkg/cli"
67
"github.com/docker/cagent/pkg/filesystem"
78
"github.com/docker/cagent/pkg/oci"
89
"github.com/docker/cagent/pkg/telemetry"
@@ -33,11 +34,14 @@ func newBuildCmd() *cobra.Command {
3334
func (f *buildFlags) runBuildCommand(cmd *cobra.Command, args []string) error {
3435
telemetry.TrackCommand("build", args)
3536

37+
ctx := cmd.Context()
38+
out := cli.NewPrinter(cmd.OutOrStdout())
39+
3640
agentFilePath := args[0]
3741
dockerImageName := ""
3842
if len(args) > 1 {
3943
dockerImageName = args[1]
4044
}
4145

42-
return oci.BuildDockerImage(cmd.Context(), agentFilePath, filesystem.AllowAll, dockerImageName, f.opts)
46+
return oci.BuildDockerImage(ctx, out, agentFilePath, filesystem.AllowAll, dockerImageName, f.opts)
4347
}

cmd/root/eval.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package root
22

33
import (
4-
"fmt"
5-
64
"github.com/spf13/cobra"
75

6+
"github.com/docker/cagent/pkg/cli"
87
"github.com/docker/cagent/pkg/config"
98
"github.com/docker/cagent/pkg/evaluation"
109
"github.com/docker/cagent/pkg/teamloader"
@@ -33,6 +32,8 @@ func newEvalCmd() *cobra.Command {
3332
func (f *evalFlags) runEvalCommand(cmd *cobra.Command, args []string) error {
3433
telemetry.TrackCommand("eval", args)
3534

35+
out := cli.NewPrinter(cmd.OutOrStdout())
36+
3637
agents, err := teamloader.Load(cmd.Context(), args[0], f.runConfig)
3738
if err != nil {
3839
return err
@@ -44,9 +45,9 @@ func (f *evalFlags) runEvalCommand(cmd *cobra.Command, args []string) error {
4445
}
4546

4647
for _, evalResult := range evalResults {
47-
fmt.Printf("Eval file: %s\n", evalResult.EvalFile)
48-
fmt.Printf("Tool trajectory score: %f\n", evalResult.Score.ToolTrajectoryScore)
49-
fmt.Printf("Rouge-1 score: %f\n", evalResult.Score.Rouge1Score)
48+
out.Printf("Eval file: %s\n", evalResult.EvalFile)
49+
out.Printf("Tool trajectory score: %f\n", evalResult.Score.ToolTrajectoryScore)
50+
out.Printf("Rouge-1 score: %f\n", evalResult.Score.Rouge1Score)
5051
}
5152

5253
return nil

cmd/root/mcp.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package root
33
import (
44
"github.com/spf13/cobra"
55

6+
"github.com/docker/cagent/pkg/cli"
67
"github.com/docker/cagent/pkg/config"
78
"github.com/docker/cagent/pkg/mcp"
89
"github.com/docker/cagent/pkg/telemetry"
@@ -35,11 +36,13 @@ func newMCPCmd() *cobra.Command {
3536

3637
func (f *mcpFlags) runMCPCommand(cmd *cobra.Command, args []string) error {
3738
telemetry.TrackCommand("mcp", args)
39+
3840
ctx := cmd.Context()
41+
out := cli.NewPrinter(cmd.OutOrStdout())
3942

4043
if err := setupWorkingDirectory(f.workingDir); err != nil {
4144
return err
4245
}
4346

44-
return mcp.StartMCPServer(ctx, args[0], f.runConfig)
47+
return mcp.StartMCPServer(ctx, out, args[0], f.runConfig)
4548
}

cmd/root/run.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func (f *runExecFlags) runOrExec(ctx context.Context, out *cli.Printer, args []s
9494
return err
9595
}
9696
} else {
97-
agentFileName, err = f.resolveAgentFile(ctx, args[0])
97+
agentFileName, err = f.resolveAgentFile(ctx, out, args[0])
9898
if err != nil {
9999
return err
100100
}
@@ -127,11 +127,11 @@ func (f *runExecFlags) setupWorkingDirectory() error {
127127

128128
// resolveAgentFile is a wrapper method that calls the agentfile.Resolve function
129129
// after checking for remote address
130-
func (f *runExecFlags) resolveAgentFile(ctx context.Context, agentFilename string) (string, error) {
130+
func (f *runExecFlags) resolveAgentFile(ctx context.Context, out *cli.Printer, agentFilename string) (string, error) {
131131
if f.remoteAddress != "" {
132132
return agentFilename, nil
133133
}
134-
return agentfile.Resolve(ctx, agentFilename)
134+
return agentfile.Resolve(ctx, out, agentFilename)
135135
}
136136

137137
func (f *runExecFlags) loadAgents(ctx context.Context, agentFilename string) (*team.Team, error) {

cmd/root/run_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ agents:
7878
defer cancel()
7979

8080
// Test resolving a local file
81-
resolved, err := agentfile.Resolve(ctx, yamlFile)
81+
resolved, err := agentfile.Resolve(ctx, nil, yamlFile)
8282
require.NoError(t, err)
8383

8484
// Should return absolute path
@@ -115,7 +115,7 @@ agents:
115115
defer cancel()
116116

117117
// First resolution
118-
resolved1, err := agentfile.Resolve(ctx, ociRef)
118+
resolved1, err := agentfile.Resolve(ctx, nil, ociRef)
119119
require.NoError(t, err)
120120
assert.NotEmpty(t, resolved1)
121121

@@ -132,7 +132,7 @@ agents:
132132
firstResolvedPath := resolved1
133133

134134
// Second resolution (simulating a reload)
135-
resolved2, err := agentfile.Resolve(ctx, ociRef)
135+
resolved2, err := agentfile.Resolve(ctx, nil, ociRef)
136136
require.NoError(t, err)
137137

138138
// Should return the SAME filename
@@ -158,7 +158,7 @@ agents:
158158
require.NoError(t, err)
159159

160160
// Third resolution (simulating reload after update)
161-
resolved3, err := agentfile.Resolve(ctx, ociRef)
161+
resolved3, err := agentfile.Resolve(ctx, nil, ociRef)
162162
require.NoError(t, err)
163163

164164
// Should STILL use the same filename
@@ -211,10 +211,10 @@ agents:
211211
defer cancel()
212212

213213
// Resolve both OCI refs
214-
resolved1, err := agentfile.Resolve(ctx, ociRef1)
214+
resolved1, err := agentfile.Resolve(ctx, nil, ociRef1)
215215
require.NoError(t, err)
216216

217-
resolved2, err := agentfile.Resolve(ctx, ociRef2)
217+
resolved2, err := agentfile.Resolve(ctx, nil, ociRef2)
218218
require.NoError(t, err)
219219

220220
// Should have DIFFERENT filenames
@@ -262,7 +262,7 @@ agents:
262262
ctx, cancel := context.WithCancel(t.Context())
263263

264264
// Resolve the OCI ref
265-
resolved, err := agentfile.Resolve(ctx, ociRef)
265+
resolved, err := agentfile.Resolve(ctx, nil, ociRef)
266266
require.NoError(t, err)
267267
assert.FileExists(t, resolved)
268268

cmd/root/version.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ func newVersionCmd() *cobra.Command {
1919
}
2020
}
2121

22-
func runVersionCommand(_ *cobra.Command, args []string) {
22+
func runVersionCommand(cmd *cobra.Command, args []string) {
2323
telemetry.TrackCommand("version", args)
2424

25-
fmt.Printf("cagent version %s\n", version.Version)
26-
fmt.Printf("Commit: %s\n", version.Commit)
25+
out := cmd.OutOrStdout()
26+
fmt.Fprintf(out, "cagent version %s\n", version.Version)
27+
fmt.Fprintf(out, "Commit: %s\n", version.Commit)
2728
}

pkg/agentfile/resolver.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"strings"
1212

1313
"github.com/docker/cagent/pkg/aliases"
14+
"github.com/docker/cagent/pkg/cli"
1415
"github.com/docker/cagent/pkg/content"
1516
"github.com/docker/cagent/pkg/remote"
1617
)
@@ -55,7 +56,7 @@ func OciRefToFilename(ociRef string) string {
5556
}
5657

5758
// Resolve resolves an agent file reference (local file or OCI image) to a local file path
58-
func Resolve(ctx context.Context, agentFilename string) (string, error) {
59+
func Resolve(ctx context.Context, out *cli.Printer, agentFilename string) (string, error) {
5960
originalOCIRef := agentFilename // Store the original for OCI ref tracking
6061

6162
// Try to resolve as an alias first
@@ -83,7 +84,7 @@ func Resolve(ctx context.Context, agentFilename string) (string, error) {
8384
// Treat as an OCI image reference. Try local store first, otherwise pull then load.
8485
a, err := FromStore(agentFilename)
8586
if err != nil {
86-
fmt.Println("Pulling agent", agentFilename)
87+
out.Println("Pulling agent", agentFilename)
8788
if _, pullErr := remote.Pull(agentFilename); pullErr != nil {
8889
return "", fmt.Errorf("failed to pull OCI image %s: %w", agentFilename, pullErr)
8990
}

pkg/cli/runner.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/base64"
66
"fmt"
77
"io"
8+
"log/slog"
89
"os"
910
"path/filepath"
1011
"strings"
@@ -397,7 +398,7 @@ func createUserMessageWithAttachment(agentFilename, userContent, attachmentPath
397398
// Convert file to data URL
398399
dataURL, err := fileToDataURL(attachmentPath)
399400
if err != nil {
400-
fmt.Printf("Warning: Failed to attach file %s: %v\n", attachmentPath, err)
401+
slog.Warn("Failed to attach file", "path", attachmentPath, "error", err)
401402
return session.UserMessage(agentFilename, userContent)
402403
}
403404

pkg/creator/agent.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
_ "embed"
66
"encoding/json"
77
"fmt"
8+
"log/slog"
89
"os"
910
"path/filepath"
1011
"strings"
@@ -91,7 +92,7 @@ func CreateAgent(ctx context.Context, baseDir, prompt string, runConfig config.R
9192
return "", "", fmt.Errorf("failed to create LLM client: %w", err)
9293
}
9394

94-
fmt.Println("Generating agent configuration....")
95+
slog.Info("Generating agent configuration....")
9596

9697
fsToolset := fsToolset{inner: builtin.NewFilesystemTool([]string{baseDir})}
9798
fileName := filepath.Base(fsToolset.path)
@@ -142,7 +143,7 @@ func Agent(ctx context.Context, baseDir string, runConfig config.RuntimeConfig,
142143
if modelNameOverride != "" {
143144
modelName = modelNameOverride
144145
} else {
145-
fmt.Printf("Using default model: %s\n", modelName)
146+
slog.Info("Using default model: " + modelName)
146147
}
147148

148149
// If not using a model gateway, avoid selecting a provider the user can't run

0 commit comments

Comments
 (0)