chore: create new agent

Kujtim Hoxha created

Change summary

internal/agent/agent.go               | 49 +++++++++++++++++++++++++++++
internal/agent/tools/bash.go          |  0 
internal/agent/tools/bash_commands.go |  0 
internal/agent/tools/common.go        |  0 
internal/agent/tools/diagnostics.go   |  0 
internal/agent/tools/download.go      |  0 
internal/agent/tools/edit.go          |  0 
internal/agent/tools/fetch.go         |  0 
internal/agent/tools/glob.go          |  0 
internal/agent/tools/grep.go          |  0 
internal/agent/tools/ls.go            |  0 
internal/agent/tools/multiedit.go     |  0 
internal/agent/tools/rg.go            |  0 
internal/agent/tools/sourcegraph.go   |  0 
internal/agent/tools/view.go          |  0 
internal/agent/tools/write.go         |  0 
16 files changed, 49 insertions(+)

Detailed changes

internal/agent/agent.go 🔗

@@ -0,0 +1,49 @@
+package agent
+
+import (
+	"context"
+	"errors"
+
+	"github.com/charmbracelet/catwalk/pkg/catwalk"
+	"github.com/charmbracelet/crush/internal/message"
+	"github.com/charmbracelet/crush/internal/pubsub"
+)
+
+// Common errors
+var (
+	ErrRequestCancelled = errors.New("request canceled by user")
+	ErrSessionBusy      = errors.New("session is currently processing another request")
+)
+
+type AgentEventType string
+
+const (
+	AgentEventTypeError     AgentEventType = "error"
+	AgentEventTypeResponse  AgentEventType = "response"
+	AgentEventTypeSummarize AgentEventType = "summarize"
+)
+
+type AgentEvent struct {
+	Type    AgentEventType
+	Message message.Message
+	Error   error
+
+	// When summarizing
+	SessionID string
+	Progress  string
+	Done      bool
+}
+
+type Service interface {
+	pubsub.Suscriber[AgentEvent]
+	Model() catwalk.Model
+	Run(ctx context.Context, sessionID string, content string, attachments ...message.Attachment) (<-chan AgentEvent, error)
+	Cancel(sessionID string)
+	CancelAll()
+	IsSessionBusy(sessionID string) bool
+	IsBusy() bool
+	Summarize(ctx context.Context, sessionID string) error
+	UpdateModel() error
+	QueuedPrompts(sessionID string) int
+	ClearQueue(sessionID string)
+}