package sdk import "time" // ToolComplexity grades tools into simple (single-call, <2s) and complex (multi-round, async). type ToolComplexity string const ( ComplexitySimple ToolComplexity = "simple" ComplexityComplex ToolComplexity = "complex" ) // PluginMetadata describes a plugin's identity and requirements. type PluginMetadata struct { Name string `json:"name"` DisplayName string `json:"displayName"` Version string `json:"version"` MinCyreneVersion string `json:"minCyreneVersion"` Author PluginAuthor `json:"author"` Description string `json:"description"` License string `json:"license"` Keywords []string `json:"keywords,omitempty"` Category string `json:"category"` Dependencies map[string]string `json:"dependencies,omitempty"` // plugin name -> version range Homepage string `json:"homepage,omitempty"` Repository string `json:"repository,omitempty"` } type PluginAuthor struct { Name string `json:"name"` Email string `json:"email,omitempty"` URL string `json:"url,omitempty"` } // PluginConfig holds runtime configuration for a plugin. type PluginConfig map[string]interface{} // ToolDefinition describes a tool's interface for LLM function calling. type ToolDefinition struct { ID string `json:"id"` Name string `json:"name"` DisplayName string `json:"displayName"` Description string `json:"description"` Category string `json:"category"` Complexity ToolComplexity `json:"complexity"` Parameters map[string]interface{} `json:"parameters"` Returns map[string]interface{} `json:"returns,omitempty"` TimeoutMs int `json:"timeout_ms,omitempty"` MaxRetries int `json:"max_retries,omitempty"` DangerLevel string `json:"danger_level,omitempty"` // low / medium / high } // ToolResult is the standard tool execution result. type ToolResult struct { ToolName string `json:"tool_name"` Success bool `json:"success"` Output string `json:"output,omitempty"` Error string `json:"error,omitempty"` DurationMs int64 `json:"duration_ms,omitempty"` } // ToolProgress reports execution progress for complex (async) tools. type ToolProgress struct { ExecutionID string `json:"execution_id"` Status string `json:"status"` // started / running / completed / failed / cancelled Progress float64 `json:"progress"` // 0.0 - 1.0 Message string `json:"message,omitempty"` Error string `json:"error,omitempty"` Result *ToolResult `json:"result,omitempty"` } // PluginStatus represents the current lifecycle state of a plugin. type PluginStatus string const ( StatusInstalled PluginStatus = "installed" StatusLoaded PluginStatus = "loaded" StatusRunning PluginStatus = "running" StatusPaused PluginStatus = "paused" StatusError PluginStatus = "error" StatusDisabled PluginStatus = "disabled" ) // PluginInfo is the runtime view of an installed plugin. type PluginInfo struct { Metadata PluginMetadata `json:"metadata"` Status PluginStatus `json:"status"` Tools []string `json:"tools"` // tool IDs provided by this plugin InstalledAt time.Time `json:"installed_at"` Enabled bool `json:"enabled"` } // LLMMessage is a message in an LLM conversation. type LLMMessage struct { Role string `json:"role"` Content string `json:"content"` } // LLMResponse is the result of an LLM call. type LLMResponse struct { Content string `json:"content"` ToolCalls []ToolCall `json:"tool_calls,omitempty"` } // ToolCall represents a tool call requested by the LLM. type ToolCall struct { ID string `json:"id"` Name string `json:"name"` Arguments map[string]interface{} `json:"arguments"` } // IoTDeviceState is the shared device state across IoT plugins. type IoTDeviceState struct { ID string `json:"id"` Name string `json:"name"` Type string `json:"type"` Status string `json:"status"` Brightness int `json:"brightness,omitempty"` Color string `json:"color,omitempty"` Mode string `json:"mode,omitempty"` Temperature float64 `json:"temperature,omitempty"` Position int `json:"position,omitempty"` Value float64 `json:"value,omitempty"` Unit string `json:"unit,omitempty"` Battery int `json:"battery,omitempty"` } // MemoryEntry is a memory record. type MemoryEntry struct { UserID string `json:"user_id"` Content string `json:"content"` Type string `json:"type"` Meta map[string]interface{} `json:"meta,omitempty"` }