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}