diff --git a/internal/core/agent.go b/internal/core/agent.go index 90d94ad..b5f827b 100644 --- a/internal/core/agent.go +++ b/internal/core/agent.go @@ -116,7 +116,7 @@ func (a *Agent) runTurn(ctx context.Context, session *Session, userInput string, response, err := a.client.Complete(ctx, provider.Request{ Model: a.config.Model, - Messages: cloneMessages(session.Messages), + Messages: session.Messages, Tools: a.registry.Definitions(), MaxTokens: a.config.MaxTokens, Temperature: a.config.Temperature, @@ -202,12 +202,6 @@ func (a *Agent) runTurn(ctx context.Context, session *Session, userInput string, return result, fmt.Errorf("agent exceeded max steps (%d)", a.config.MaxSteps) } -func cloneMessages(messages []provider.Message) []provider.Message { - cloned := make([]provider.Message, len(messages)) - copy(cloned, messages) - return cloned -} - func stringifyArguments(arguments json.RawMessage) string { if len(arguments) == 0 { return "{}" diff --git a/internal/provider/anthropic.go b/internal/provider/anthropic.go index 1171676..1f21e70 100644 --- a/internal/provider/anthropic.go +++ b/internal/provider/anthropic.go @@ -73,7 +73,7 @@ func (c *AnthropicClient) Complete(ctx context.Context, req Request) (Response, } var textParts []string - toolCalls := make([]ToolCall, 0) + var toolCalls []ToolCall for _, block := range response.Content { switch block.Type { case "text": @@ -124,7 +124,7 @@ type anthropicResponse struct { } func toAnthropicMessages(messages []Message) (string, []map[string]any, error) { - systemParts := make([]string, 0) + var systemParts []string converted := make([]map[string]any, 0, len(messages)) for _, message := range messages { diff --git a/internal/provider/gemini.go b/internal/provider/gemini.go index 0576991..6f23ab9 100644 --- a/internal/provider/gemini.go +++ b/internal/provider/gemini.go @@ -83,8 +83,8 @@ func (c *GeminiClient) Complete(ctx context.Context, req Request) (Response, err } parts := response.Candidates[0].Content.Parts - textParts := make([]string, 0) - toolCalls := make([]ToolCall, 0) + var textParts []string + var toolCalls []ToolCall for index, part := range parts { if part.Text != "" { textParts = append(textParts, part.Text) @@ -140,7 +140,7 @@ type geminiResponse struct { } func toGeminiMessages(messages []Message) (string, []map[string]any, error) { - systemParts := make([]string, 0) + var systemParts []string converted := make([]map[string]any, 0, len(messages)) for _, message := range messages { diff --git a/internal/tools/edit_tool.go b/internal/tools/edit_tool.go index fc86dfd..68d9b26 100644 --- a/internal/tools/edit_tool.go +++ b/internal/tools/edit_tool.go @@ -106,16 +106,11 @@ func (t *EditTool) edit(target, oldContent, newContent string, all bool) (Result return Result{}, fmt.Errorf("write file %q: %w", target, err) } - replacedCount := count - if !all { - replacedCount = 1 - } - return Result{ - Output: fmt.Sprintf("replaced %d occurrence(s) in %s", replacedCount, target), + Output: fmt.Sprintf("replaced %d occurrence(s) in %s", count, target), Metadata: map[string]any{ "path": target, - "replaced_count": replacedCount, + "replaced_count": count, "total_found": count, "all": all, }, diff --git a/internal/tools/write_tool.go b/internal/tools/write_tool.go index 6d073a9..a002073 100644 --- a/internal/tools/write_tool.go +++ b/internal/tools/write_tool.go @@ -19,7 +19,6 @@ type writeArgs struct { Path string `json:"path"` Content string `json:"content"` Append bool `json:"append,omitempty"` - Create bool `json:"create,omitempty"` } func NewWriteTool(root string) *WriteTool { @@ -73,10 +72,8 @@ func (t *WriteTool) Execute(_ context.Context, invocation Invocation) (Result, e } create := true - if invocation.ParsedArgs != nil { - if v, ok := invocation.ParsedArgs["create"].(bool); ok { - create = v - } + if v, ok := invocation.ParsedArgs["create"].(bool); ok { + create = v } return t.write(target, args.Content, args.Append, create)