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
@@ -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)
+}