agent.go

 1package agent
 2
 3import (
 4	"context"
 5	"errors"
 6
 7	"github.com/charmbracelet/catwalk/pkg/catwalk"
 8	"github.com/charmbracelet/crush/internal/message"
 9	"github.com/charmbracelet/crush/internal/pubsub"
10)
11
12// Common errors
13var (
14	ErrRequestCancelled = errors.New("request canceled by user")
15	ErrSessionBusy      = errors.New("session is currently processing another request")
16)
17
18type AgentEventType string
19
20const (
21	AgentEventTypeError     AgentEventType = "error"
22	AgentEventTypeResponse  AgentEventType = "response"
23	AgentEventTypeSummarize AgentEventType = "summarize"
24)
25
26type AgentEvent struct {
27	Type    AgentEventType
28	Message message.Message
29	Error   error
30
31	// When summarizing
32	SessionID string
33	Progress  string
34	Done      bool
35}
36
37type Service interface {
38	pubsub.Suscriber[AgentEvent]
39	Model() catwalk.Model
40	Run(ctx context.Context, sessionID string, content string, attachments ...message.Attachment) (<-chan AgentEvent, error)
41	Cancel(sessionID string)
42	CancelAll()
43	IsSessionBusy(sessionID string) bool
44	IsBusy() bool
45	Summarize(ctx context.Context, sessionID string) error
46	UpdateModel() error
47	QueuedPrompts(sessionID string) int
48	ClearQueue(sessionID string)
49}