package sidekick // Role represents the role of an agent type Role string const ( RoleCoordinator Role = "COORDINATOR" RoleSpecialist Role = "SPECIALIST" RoleCollector Role = "COLLECTOR" ) // MessageRole represents the role of a message sender type MessageRole string const ( MessageRoleSystem MessageRole = "system" MessageRoleUser MessageRole = "user" MessageRoleAssistant MessageRole = "assistant" MessageRoleTool MessageRole = "tool" ) // Message is a chat message in the context type Message struct { Role MessageRole `json:"role"` Content string `json:"content"` // For native tool calls from LLM ToolCalls []ToolCall `json:"tool_calls,omitempty"` // For tool responses ToolCallID string `json:"tool_call_id,omitempty"` } // ToolCall represents a tool invocation from the LLM type ToolCall struct { ID string `json:"id"` Type string `json:"type"` // usually "function" Function FunctionCall `json:"function"` } // FunctionCall contains the function name and arguments type FunctionCall struct { Name string `json:"name"` Arguments string `json:"arguments"` // JSON string } // ActionType represents the type of action the agent decided to take type ActionType string const ( ActionTypeToolCall ActionType = "TOOL_CALL" ActionTypeDelegate ActionType = "DELEGATE" ActionTypeRespond ActionType = "RESPOND" ) // ActionEnvelope is the JSON format contract expected from the LLM (if not using native tool calls) type ActionEnvelope struct { Action ActionType `json:"action"` Params map[string]interface{} `json:"params"` Reasoning string `json:"reasoning,omitempty"` }