events

package
v1.3.18 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 28, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package events provides a generic EventBus for pub/sub communication. It implements the core.EventPublisher interface and can be used with any project that imports seed/core.

Index

Constants

View Source
const (
	EventTypeQueryStarted   = "query_started"
	EventTypeQueryCompleted = "query_completed"
	EventTypeError          = "error"
	EventTypeToolStart      = "tool_start"
	EventTypeToolEnd        = "tool_end"
	EventTypeStreamChunk    = "stream_chunk"
	EventTypeMetricsUpdate  = "metrics_update"
	EventTypeCompaction     = "compaction"
)

Generic event types used by the core package. These are the only event types any consumer of seed/core needs to handle. (They match the constants in core/interfaces.go.)

View Source
const (
	EventTypeQueryProgress           = "query_progress"
	EventTypeToolExecution           = "tool_execution"
	EventTypeSubagentActivity        = "subagent_activity"
	EventTypeTodoUpdate              = "todo_update"
	EventTypeFileChanged             = "file_changed"
	EventTypeFileContentChanged      = "file_content_changed"
	EventTypeValidation              = "validation"
	EventTypeSecurityApprovalRequest = "security_approval_request"
	EventTypeSecurityPromptRequest   = "security_prompt_request"
	EventTypeAskUserRequest          = "ask_user_request"
	EventTypeAgentMessage            = "agent_message"
	EventTypeWorkspaceChanged        = "workspace_changed"
	EventTypeSessionTerminated       = "session_terminated"
)

Sprout-specific event types. These are used by the sprout application and are not part of the generic seed/core contract. External consumers of seed/core do not need to handle these.

Variables

This section is empty.

Functions

func AgentMessageEvent

func AgentMessageEvent(category, message string, extra map[string]interface{}) map[string]interface{}

AgentMessageEvent creates an agent system message event. category: "info", "warning", "error", "tool_log", "thought"

func AskUserRequestEvent

func AskUserRequestEvent(requestID, question, clientID string) map[string]interface{}

AskUserRequestEvent creates an ask_user request event for the webui

func CompactionEvent

func CompactionEvent(strategy string, messagesBefore, messagesAfter, tokensSaved int) map[string]interface{}

CompactionEvent creates a compaction event with strategy name, message count delta, and estimated tokens saved.

func ErrorEvent

func ErrorEvent(message string, err error) map[string]interface{}

ErrorEvent creates an error event

func FileChangedEvent

func FileChangedEvent(filePath, action string, content string) map[string]interface{}

FileChangedEvent creates a file changed event

func FileContentChangedEvent

func FileContentChangedEvent(filePath string, modTime int64, size int64) map[string]interface{}

FileContentChangedEvent creates an event indicating a file's content on disk has changed while it was open in the editor

func MetricsUpdateEvent

func MetricsUpdateEvent(totalTokens, contextTokens, maxContextTokens, iteration int, totalCost float64) map[string]interface{}

MetricsUpdateEvent creates a metrics update event

func QueryCompletedEvent

func QueryCompletedEvent(query, response string, tokensUsed int, cost float64, duration time.Duration) map[string]interface{}

QueryCompletedEvent creates a query completed event

func QueryProgressEvent

func QueryProgressEvent(message string, iteration int, tokensUsed int) map[string]interface{}

QueryProgressEvent creates a query progress event

func QueryStartedEvent

func QueryStartedEvent(query, provider, model string) map[string]interface{}

QueryStartedEvent creates a query started event

func SecurityApprovalRequestEvent

func SecurityApprovalRequestEvent(requestID, toolName, riskLevel, reasoning string, extras map[string]string) map[string]interface{}

SecurityApprovalRequestEvent creates a security approval request event for the webui

func SecurityPromptRequestEvent

func SecurityPromptRequestEvent(requestID, prompt string, defaultResponse bool, extras map[string]string) map[string]interface{}

SecurityPromptRequestEvent creates a security prompt request event for the webui

func SecurityPromptResponseEvent

func SecurityPromptResponseEvent(requestID, response bool) map[string]interface{}

SecurityPromptResponseEvent creates a security prompt response event

func StreamChunkEvent

func StreamChunkEvent(chunk string, contentType string) map[string]interface{}

StreamChunkEvent creates a stream chunk event with content type

func SubagentActivityEvent

func SubagentActivityEvent(toolCallID, toolName, phase, message string, details map[string]interface{}) map[string]interface{}

SubagentActivityEvent creates a structured subagent activity event. phase is typically "spawn", "output", or "complete".

func TodoUpdateEvent

func TodoUpdateEvent(todos []map[string]interface{}) map[string]interface{}

TodoUpdateEvent creates a todo update event

func ToolEndEvent

func ToolEndEvent(toolCallID, toolName, status, result, errorMessage string, duration time.Duration) map[string]interface{}

ToolEndEvent creates a tool end event with result and status

func ToolExecutionEvent

func ToolExecutionEvent(toolName, action string, details map[string]interface{}) map[string]interface{}

ToolExecutionEvent creates a tool execution event

func ToolStartEvent

func ToolStartEvent(toolName, toolCallID, arguments, displayName, persona string, isSubagent bool, subagentType string, toolIndex int) map[string]interface{}

ToolStartEvent creates a tool start event with rich metadata

func ValidationEvent

func ValidationEvent(filePath string, diagnostics []map[string]interface{}) map[string]interface{}

ValidationEvent creates a validation event

func WorkspaceChangedEvent

func WorkspaceChangedEvent(daemonRoot, workspaceRoot, previousWorkspaceRoot string) map[string]interface{}

WorkspaceChangedEvent creates a workspace changed event

Types

type EventBus

type EventBus struct {
	// contains filtered or unexported fields
}

EventBus manages event distribution between CLI and Web UI

func NewEventBus

func NewEventBus() *EventBus

NewEventBus creates a new event bus

func (*EventBus) Publish

func (eb *EventBus) Publish(eventType string, data any)

Publish broadcasts an event to all subscribers. Critical events (security approvals, prompts) are never silently dropped — if the channel is full, they replace the oldest event to make room.

func (*EventBus) Subscribe

func (eb *EventBus) Subscribe(name string) <-chan UIEvent

Subscribe adds a new subscriber to the event bus

func (*EventBus) Unsubscribe

func (eb *EventBus) Unsubscribe(name string)

Unsubscribe removes a subscriber from the event bus

type UIEvent

type UIEvent struct {
	ID        string    `json:"id"`
	Type      string    `json:"type"`
	Timestamp time.Time `json:"timestamp"`
	Data      any       `json:"data"`
}

UIEvent represents an event that can be forwarded between CLI and Web UI

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL