diff --git a/internal/agent/agent.go b/internal/agent/agent.go new file mode 100644 index 0000000000000000000000000000000000000000..0f7d008699dddcfcdaeacbabe4f752236d5c2ebf --- /dev/null +++ b/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) +} diff --git a/internal/ai/tools/bash.go b/internal/agent/tools/bash.go similarity index 100% rename from internal/ai/tools/bash.go rename to internal/agent/tools/bash.go diff --git a/internal/ai/tools/bash_commands.go b/internal/agent/tools/bash_commands.go similarity index 100% rename from internal/ai/tools/bash_commands.go rename to internal/agent/tools/bash_commands.go diff --git a/internal/ai/tools/common.go b/internal/agent/tools/common.go similarity index 100% rename from internal/ai/tools/common.go rename to internal/agent/tools/common.go diff --git a/internal/ai/tools/diagnostics.go b/internal/agent/tools/diagnostics.go similarity index 100% rename from internal/ai/tools/diagnostics.go rename to internal/agent/tools/diagnostics.go diff --git a/internal/ai/tools/download.go b/internal/agent/tools/download.go similarity index 100% rename from internal/ai/tools/download.go rename to internal/agent/tools/download.go diff --git a/internal/ai/tools/edit.go b/internal/agent/tools/edit.go similarity index 100% rename from internal/ai/tools/edit.go rename to internal/agent/tools/edit.go diff --git a/internal/ai/tools/fetch.go b/internal/agent/tools/fetch.go similarity index 100% rename from internal/ai/tools/fetch.go rename to internal/agent/tools/fetch.go diff --git a/internal/ai/tools/glob.go b/internal/agent/tools/glob.go similarity index 100% rename from internal/ai/tools/glob.go rename to internal/agent/tools/glob.go diff --git a/internal/ai/tools/grep.go b/internal/agent/tools/grep.go similarity index 100% rename from internal/ai/tools/grep.go rename to internal/agent/tools/grep.go diff --git a/internal/ai/tools/ls.go b/internal/agent/tools/ls.go similarity index 100% rename from internal/ai/tools/ls.go rename to internal/agent/tools/ls.go diff --git a/internal/ai/tools/multiedit.go b/internal/agent/tools/multiedit.go similarity index 100% rename from internal/ai/tools/multiedit.go rename to internal/agent/tools/multiedit.go diff --git a/internal/ai/tools/rg.go b/internal/agent/tools/rg.go similarity index 100% rename from internal/ai/tools/rg.go rename to internal/agent/tools/rg.go diff --git a/internal/ai/tools/sourcegraph.go b/internal/agent/tools/sourcegraph.go similarity index 100% rename from internal/ai/tools/sourcegraph.go rename to internal/agent/tools/sourcegraph.go diff --git a/internal/ai/tools/view.go b/internal/agent/tools/view.go similarity index 100% rename from internal/ai/tools/view.go rename to internal/agent/tools/view.go diff --git a/internal/ai/tools/write.go b/internal/agent/tools/write.go similarity index 100% rename from internal/ai/tools/write.go rename to internal/agent/tools/write.go