Documentation
¶
Overview ¶
Package webui – media_handlers.go provides HTTP handlers for media upload/download.
Package webui – security_handlers.go implements the security dashboard API endpoints: audit log, tool guard config, vault status, and API keys.
Package webui implements the DevClaw web dashboard. Serves a React SPA (embedded via embed.FS) with a JSON API backend. Chat streaming uses Server-Sent Events (SSE) for real-time token delivery.
Index ¶
- func GetDataDir() (string, error)
- type AssistantAPI
- type AssistantAdapter
- func (a *AssistantAdapter) AbortRun(sessionID string) bool
- func (a *AssistantAdapter) BlockWhatsAppUser(jid string) error
- func (a *AssistantAdapter) CreateMCPServer(name, command string, args []string, env map[string]string) error
- func (a *AssistantAdapter) CreateToolProfile(profile ToolProfileDef) error
- func (a *AssistantAdapter) CreateWebhook(url string, events []string) (WebhookInfo, error)
- func (a *AssistantAdapter) DeleteMCPServer(name string) error
- func (a *AssistantAdapter) DeleteSession(sessionID string) error
- func (a *AssistantAdapter) DeleteToolProfile(name string) error
- func (a *AssistantAdapter) DeleteWebhook(id string) error
- func (a *AssistantAdapter) DisconnectWhatsApp() error
- func (a *AssistantAdapter) GetAuditCount() int
- func (a *AssistantAdapter) GetAuditLog(limit int) []AuditEntry
- func (a *AssistantAdapter) GetChannelHealth() []ChannelHealthInfo
- func (a *AssistantAdapter) GetConfigMap() map[string]any
- func (a *AssistantAdapter) GetDatabaseStatus() DatabaseStatusInfo
- func (a *AssistantAdapter) GetDomainConfig() DomainConfigInfo
- func (a *AssistantAdapter) GetHookEvents() []HookEventInfo
- func (a *AssistantAdapter) GetProfileManager() profiles.ProfileManager
- func (a *AssistantAdapter) GetSchedulerJobs() []JobInfo
- func (a *AssistantAdapter) GetSecurityStatus() SecurityStatus
- func (a *AssistantAdapter) GetSessionMessages(sessionID string) []MessageInfo
- func (a *AssistantAdapter) GetToolGroups() map[string][]string
- func (a *AssistantAdapter) GetToolGuardStatus() ToolGuardStatus
- func (a *AssistantAdapter) GetUsageGlobal() UsageInfo
- func (a *AssistantAdapter) GetValidWebhookEvents() []string
- func (a *AssistantAdapter) GetVaultStatus() VaultStatus
- func (a *AssistantAdapter) GetWhatsAppAccessConfig() WhatsAppAccessConfig
- func (a *AssistantAdapter) GetWhatsAppConfig() map[string]any
- func (a *AssistantAdapter) GetWhatsAppGroupPolicies() WhatsAppGroupPolicies
- func (a *AssistantAdapter) GetWhatsAppJoinedGroups() ([]WhatsAppJoinedGroup, error)
- func (a *AssistantAdapter) GrantWhatsAppUserAccess(jid, level string) error
- func (a *AssistantAdapter) ListHooks() []HookInfo
- func (a *AssistantAdapter) ListMCPServers() []MCPServerInfo
- func (a *AssistantAdapter) ListSessions() []SessionInfo
- func (a *AssistantAdapter) ListSkills() []SkillInfo
- func (a *AssistantAdapter) ListToolProfiles() []ToolProfileInfo
- func (a *AssistantAdapter) ListWebhooks() []WebhookInfo
- func (a *AssistantAdapter) ReloadSkills() error
- func (a *AssistantAdapter) RemoveJob(id string) error
- func (a *AssistantAdapter) RemoveSkill(name string) error
- func (a *AssistantAdapter) RevokeWhatsAppUserAccess(jid string) error
- func (a *AssistantAdapter) SendChatMessage(sessionID, content string) (string, error)
- func (a *AssistantAdapter) SetWhatsAppGroupPolicy(jid string, policy any) error
- func (a *AssistantAdapter) StartChatStream(ctx context.Context, sessionID, content string) (*RunHandle, error)
- func (a *AssistantAdapter) StartMCPServer(name string) error
- func (a *AssistantAdapter) StopMCPServer(name string) error
- func (a *AssistantAdapter) ToggleHook(name string, enabled bool) error
- func (a *AssistantAdapter) ToggleJob(id string, enabled bool) error
- func (a *AssistantAdapter) ToggleSkill(name string, enabled bool) error
- func (a *AssistantAdapter) ToggleWebhook(id string, active bool) error
- func (a *AssistantAdapter) UnblockWhatsAppUser(jid string) error
- func (a *AssistantAdapter) UnregisterHook(name string) error
- func (a *AssistantAdapter) UpdateConfigMap(updates map[string]any) error
- func (a *AssistantAdapter) UpdateDomainConfig(update DomainConfigUpdate) error
- func (a *AssistantAdapter) UpdateMCPServer(name string, enabled bool) error
- func (a *AssistantAdapter) UpdateToolGuard(update ToolGuardStatus) error
- func (a *AssistantAdapter) UpdateToolProfile(profile ToolProfileDef) error
- func (a *AssistantAdapter) UpdateWhatsAppAccessDefaultPolicy(policy string) error
- func (a *AssistantAdapter) UpdateWhatsAppConfig(config map[string]any) error
- func (a *AssistantAdapter) UpdateWhatsAppGroupDefaultPolicy(policy string) error
- type AuditEntry
- type ChannelHealthInfo
- type Config
- type DatabaseStatusInfo
- type DeviceCodeProvider
- type DomainConfigInfo
- type DomainConfigUpdate
- type HookEventInfo
- type HookInfo
- type HubConfig
- type JobInfo
- type MCPServerInfo
- type MediaAPI
- type MediaAdapter
- func (m *MediaAdapter) Delete(mediaID string) error
- func (m *MediaAdapter) Get(mediaID string) ([]byte, string, string, error)
- func (m *MediaAdapter) List(sessionID string, mediaType string, limit int) ([]MediaInfo, error)
- func (m *MediaAdapter) Upload(r *http.Request, sessionID string) (string, string, string, int64, error)
- type MediaInfo
- type MessageInfo
- type OAuthAPI
- type OAuthHandlers
- func (h *OAuthHandlers) RegisterRoutes(mux *http.ServeMux, authMiddleware func(http.HandlerFunc) http.HandlerFunc)
- func (h *OAuthHandlers) SetHubConfig(cfg *HubConfig)
- func (h *OAuthHandlers) SetHubURLSaver(fn func(hubURL string) error)
- func (h *OAuthHandlers) SetSecretSaver(fn func(name, value string) error)
- func (h *OAuthHandlers) SetSkillBundleInstaller(fn func(name string, files map[string]string) error)
- func (h *OAuthHandlers) SetSkillInstaller(fn func(name, content string) error)
- func (h *OAuthHandlers) SetSkillReferenceRemover(fn func(skillName, refPath string) error)
- func (h *OAuthHandlers) Stop()
- func (h *OAuthHandlers) TokenManager() *oauth.TokenManager
- type OAuthProviderInfo
- type OAuthStartResponse
- type PKCEProvider
- type RunHandle
- type SecurityStatus
- type Server
- func (s *Server) GetOAuthHandlers() *OAuthHandlers
- func (s *Server) OnRestartRequested(fn func() error)
- func (s *Server) OnSetupDone(fn func())
- func (s *Server) OnUpdateRequested(fn func() error)
- func (s *Server) OnVaultInit(fn func(password string, secrets map[string]string) error)
- func (s *Server) SetAuthToken(token string)
- func (s *Server) SetMediaAPI(api MediaAPI)
- func (s *Server) SetOAuthHandlers(handlers *OAuthHandlers)
- func (s *Server) SetSetupMode(enabled bool)
- func (s *Server) SetUpdateChecker(uc UpdateChecker)
- func (s *Server) SetVersion(v string)
- func (s *Server) Start(ctx context.Context) error
- func (s *Server) Stop()
- type SessionInfo
- type SetupRequest
- type SkillInfo
- type StreamEvent
- type ToolGuardStatus
- type ToolProfileDef
- type ToolProfileInfo
- type UpdateChecker
- type UsageInfo
- type VaultStatus
- type WebhookInfo
- type WhatsAppAccessConfig
- type WhatsAppGroupPolicies
- type WhatsAppGroupPolicy
- type WhatsAppJoinedGroup
- type WhatsAppQREvent
- type WhatsAppStatus
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetDataDir ¶ added in v1.12.0
GetDataDir returns the default data directory.
Types ¶
type AssistantAPI ¶
type AssistantAPI interface {
// GetConfig returns the current config as a map.
GetConfigMap() map[string]any
// UpdateConfigMap updates config fields and persists to disk.
UpdateConfigMap(updates map[string]any) error
// ListSessions returns active session metadata.
ListSessions() []SessionInfo
// GetSessionMessages returns messages for a session.
GetSessionMessages(sessionID string) []MessageInfo
// GetUsageGlobal returns global token usage stats.
GetUsageGlobal() UsageInfo
// GetChannelHealth returns health of all channels.
GetChannelHealth() []ChannelHealthInfo
// GetSchedulerJobs returns all scheduler jobs.
GetSchedulerJobs() []JobInfo
// ToggleJob enables or disables a scheduler job by ID.
ToggleJob(id string, enabled bool) error
// RemoveJob removes a scheduler job by ID.
RemoveJob(id string) error
// ListSkills returns available skills.
ListSkills() []SkillInfo
// ToggleSkill enables or disables a skill by name.
ToggleSkill(name string, enabled bool) error
// RemoveSkill uninstalls a skill by name (removes from registry and disk).
RemoveSkill(name string) error
// ReloadSkills reloads the skill registry from disk (after install/remove).
ReloadSkills() error
// SendChatMessage sends a message and blocks until the full response is ready.
// Used as fallback when streaming is not available.
SendChatMessage(sessionID, content string) (string, error)
// StartChatStream starts an agent run with streaming.
// Returns a RunHandle with an event channel and cancel function.
// The caller is responsible for reading from Events until it's closed.
StartChatStream(ctx context.Context, sessionID, content string) (*RunHandle, error)
// AbortRun cancels an active agent run by session ID.
AbortRun(sessionID string) bool
// DeleteSession removes a session.
DeleteSession(sessionID string) error
// Security
GetAuditLog(limit int) []AuditEntry
GetAuditCount() int
GetToolGuardStatus() ToolGuardStatus
UpdateToolGuard(update ToolGuardStatus) error
GetVaultStatus() VaultStatus
GetSecurityStatus() SecurityStatus
// Domain & Network
GetDomainConfig() DomainConfigInfo
UpdateDomainConfig(update DomainConfigUpdate) error
// Webhooks
ListWebhooks() []WebhookInfo
CreateWebhook(url string, events []string) (WebhookInfo, error)
DeleteWebhook(id string) error
ToggleWebhook(id string, active bool) error
GetValidWebhookEvents() []string
// Hooks (lifecycle)
ListHooks() []HookInfo
ToggleHook(name string, enabled bool) error
UnregisterHook(name string) error
GetHookEvents() []HookEventInfo
// MCP Servers
ListMCPServers() []MCPServerInfo
CreateMCPServer(name, command string, args []string, env map[string]string) error
UpdateMCPServer(name string, enabled bool) error
DeleteMCPServer(name string) error
StartMCPServer(name string) error
StopMCPServer(name string) error
// Database
GetDatabaseStatus() DatabaseStatusInfo
// Settings: Tool Profiles
ListToolProfiles() []ToolProfileInfo
GetToolGroups() map[string][]string
CreateToolProfile(profile ToolProfileDef) error
UpdateToolProfile(profile ToolProfileDef) error
DeleteToolProfile(name string) error
// Auth Profiles for OAuth/API key management
GetProfileManager() profiles.ProfileManager
}
AssistantAPI defines the interface the web UI uses to access assistant state. This avoids a direct dependency on the copilot package.
type AssistantAdapter ¶
type AssistantAdapter struct {
GetConfigMapFn func() map[string]any
UpdateConfigMapFn func(updates map[string]any) error
ListSessionsFn func() []SessionInfo
GetSessionMessagesFn func(sessionID string) []MessageInfo
GetUsageGlobalFn func() UsageInfo
GetChannelHealthFn func() []ChannelHealthInfo
GetSchedulerJobsFn func() []JobInfo
ToggleJobFn func(id string, enabled bool) error
RemoveJobFn func(id string) error
ListSkillsFn func() []SkillInfo
ToggleSkillFn func(name string, enabled bool) error
RemoveSkillFn func(name string) error
ReloadSkillsFn func() error
SendChatMessageFn func(sessionID, content string) (string, error)
StartChatStreamFn func(ctx context.Context, sessionID, content string) (*RunHandle, error)
AbortRunFn func(sessionID string) bool
DeleteSessionFn func(sessionID string) error
// WhatsApp QR support
GetWhatsAppStatusFn func() WhatsAppStatus
SubscribeWhatsAppQRFn func() (chan WhatsAppQREvent, func())
RequestWhatsAppQRFn func() error
DisconnectWhatsAppFn func() error
// WhatsApp Access & Groups
GetWhatsAppAccessConfigFn func() WhatsAppAccessConfig
GrantWhatsAppUserAccessFn func(jid, level string) error
RevokeWhatsAppUserAccessFn func(jid string) error
BlockWhatsAppUserFn func(jid string) error
UnblockWhatsAppUserFn func(jid string) error
GetWhatsAppGroupPoliciesFn func() WhatsAppGroupPolicies
SetWhatsAppGroupPolicyFn func(jid string, policy any) error
UpdateWhatsAppGroupDefaultPolicyFn func(policy string) error
UpdateWhatsAppAccessDefaultPolicyFn func(policy string) error
GetWhatsAppJoinedGroupsFn func() ([]WhatsAppJoinedGroup, error)
GetWhatsAppConfigFn func() map[string]any
UpdateWhatsAppConfigFn func(config map[string]any) error
// Security: Audit Log
GetAuditLogFn func(limit int) []AuditEntry
GetAuditCountFn func() int
// Security: Tool Guard
GetToolGuardStatusFn func() ToolGuardStatus
UpdateToolGuardFn func(update ToolGuardStatus) error
// Security: Vault (read-only, no values)
GetVaultStatusFn func() VaultStatus
// Security: Overview
GetSecurityStatusFn func() SecurityStatus
// Domain & Network
GetDomainConfigFn func() DomainConfigInfo
UpdateDomainConfigFn func(update DomainConfigUpdate) error
// Webhooks
ListWebhooksFn func() []WebhookInfo
CreateWebhookFn func(url string, events []string) (WebhookInfo, error)
DeleteWebhookFn func(id string) error
ToggleWebhookFn func(id string, active bool) error
GetValidWebhookEventsFn func() []string
// Hooks (lifecycle)
ListHooksFn func() []HookInfo
ToggleHookFn func(name string, enabled bool) error
UnregisterHookFn func(name string) error
GetHookEventsFn func() []HookEventInfo
// MCP Servers
ListMCPServersFn func() []MCPServerInfo
CreateMCPServerFn func(name, command string, args []string, env map[string]string) error
UpdateMCPServerFn func(name string, enabled bool) error
DeleteMCPServerFn func(name string) error
StartMCPServerFn func(name string) error
StopMCPServerFn func(name string) error
// Database
GetDatabaseStatusFn func() DatabaseStatusInfo
// Settings: Tool Profiles
ListToolProfilesFn func() []ToolProfileInfo
CreateToolProfileFn func(profile ToolProfileDef) error
UpdateToolProfileFn func(name string, profile ToolProfileDef) error
DeleteToolProfileFn func(name string) error
// Auth Profiles
GetProfileManagerFn func() profiles.ProfileManager
}
AssistantAdapter wraps a generic set of callbacks to satisfy the AssistantAPI interface. This avoids a direct import cycle between copilot and webui.
func (*AssistantAdapter) AbortRun ¶
func (a *AssistantAdapter) AbortRun(sessionID string) bool
func (*AssistantAdapter) BlockWhatsAppUser ¶ added in v1.13.0
func (a *AssistantAdapter) BlockWhatsAppUser(jid string) error
func (*AssistantAdapter) CreateMCPServer ¶ added in v1.8.0
func (*AssistantAdapter) CreateToolProfile ¶ added in v1.12.0
func (a *AssistantAdapter) CreateToolProfile(profile ToolProfileDef) error
func (*AssistantAdapter) CreateWebhook ¶
func (a *AssistantAdapter) CreateWebhook(url string, events []string) (WebhookInfo, error)
func (*AssistantAdapter) DeleteMCPServer ¶ added in v1.8.0
func (a *AssistantAdapter) DeleteMCPServer(name string) error
func (*AssistantAdapter) DeleteSession ¶
func (a *AssistantAdapter) DeleteSession(sessionID string) error
func (*AssistantAdapter) DeleteToolProfile ¶ added in v1.12.0
func (a *AssistantAdapter) DeleteToolProfile(name string) error
func (*AssistantAdapter) DeleteWebhook ¶
func (a *AssistantAdapter) DeleteWebhook(id string) error
func (*AssistantAdapter) DisconnectWhatsApp ¶ added in v1.13.0
func (a *AssistantAdapter) DisconnectWhatsApp() error
func (*AssistantAdapter) GetAuditCount ¶
func (a *AssistantAdapter) GetAuditCount() int
func (*AssistantAdapter) GetAuditLog ¶
func (a *AssistantAdapter) GetAuditLog(limit int) []AuditEntry
func (*AssistantAdapter) GetChannelHealth ¶
func (a *AssistantAdapter) GetChannelHealth() []ChannelHealthInfo
func (*AssistantAdapter) GetConfigMap ¶
func (a *AssistantAdapter) GetConfigMap() map[string]any
func (*AssistantAdapter) GetDatabaseStatus ¶ added in v1.8.0
func (a *AssistantAdapter) GetDatabaseStatus() DatabaseStatusInfo
func (*AssistantAdapter) GetDomainConfig ¶
func (a *AssistantAdapter) GetDomainConfig() DomainConfigInfo
func (*AssistantAdapter) GetHookEvents ¶
func (a *AssistantAdapter) GetHookEvents() []HookEventInfo
func (*AssistantAdapter) GetProfileManager ¶ added in v1.13.0
func (a *AssistantAdapter) GetProfileManager() profiles.ProfileManager
GetProfileManager returns the auth profile manager for OAuth/API key management.
func (*AssistantAdapter) GetSchedulerJobs ¶
func (a *AssistantAdapter) GetSchedulerJobs() []JobInfo
func (*AssistantAdapter) GetSecurityStatus ¶
func (a *AssistantAdapter) GetSecurityStatus() SecurityStatus
func (*AssistantAdapter) GetSessionMessages ¶
func (a *AssistantAdapter) GetSessionMessages(sessionID string) []MessageInfo
func (*AssistantAdapter) GetToolGroups ¶ added in v1.12.0
func (a *AssistantAdapter) GetToolGroups() map[string][]string
func (*AssistantAdapter) GetToolGuardStatus ¶
func (a *AssistantAdapter) GetToolGuardStatus() ToolGuardStatus
func (*AssistantAdapter) GetUsageGlobal ¶
func (a *AssistantAdapter) GetUsageGlobal() UsageInfo
func (*AssistantAdapter) GetValidWebhookEvents ¶
func (a *AssistantAdapter) GetValidWebhookEvents() []string
func (*AssistantAdapter) GetVaultStatus ¶
func (a *AssistantAdapter) GetVaultStatus() VaultStatus
func (*AssistantAdapter) GetWhatsAppAccessConfig ¶ added in v1.13.0
func (a *AssistantAdapter) GetWhatsAppAccessConfig() WhatsAppAccessConfig
func (*AssistantAdapter) GetWhatsAppConfig ¶ added in v1.13.0
func (a *AssistantAdapter) GetWhatsAppConfig() map[string]any
func (*AssistantAdapter) GetWhatsAppGroupPolicies ¶ added in v1.13.0
func (a *AssistantAdapter) GetWhatsAppGroupPolicies() WhatsAppGroupPolicies
func (*AssistantAdapter) GetWhatsAppJoinedGroups ¶ added in v1.13.0
func (a *AssistantAdapter) GetWhatsAppJoinedGroups() ([]WhatsAppJoinedGroup, error)
func (*AssistantAdapter) GrantWhatsAppUserAccess ¶ added in v1.13.0
func (a *AssistantAdapter) GrantWhatsAppUserAccess(jid, level string) error
func (*AssistantAdapter) ListHooks ¶
func (a *AssistantAdapter) ListHooks() []HookInfo
func (*AssistantAdapter) ListMCPServers ¶ added in v1.8.0
func (a *AssistantAdapter) ListMCPServers() []MCPServerInfo
func (*AssistantAdapter) ListSessions ¶
func (a *AssistantAdapter) ListSessions() []SessionInfo
func (*AssistantAdapter) ListSkills ¶
func (a *AssistantAdapter) ListSkills() []SkillInfo
func (*AssistantAdapter) ListToolProfiles ¶ added in v1.12.0
func (a *AssistantAdapter) ListToolProfiles() []ToolProfileInfo
func (*AssistantAdapter) ListWebhooks ¶
func (a *AssistantAdapter) ListWebhooks() []WebhookInfo
func (*AssistantAdapter) ReloadSkills ¶ added in v1.13.0
func (a *AssistantAdapter) ReloadSkills() error
func (*AssistantAdapter) RemoveJob ¶ added in v1.13.0
func (a *AssistantAdapter) RemoveJob(id string) error
func (*AssistantAdapter) RemoveSkill ¶ added in v1.13.0
func (a *AssistantAdapter) RemoveSkill(name string) error
func (*AssistantAdapter) RevokeWhatsAppUserAccess ¶ added in v1.13.0
func (a *AssistantAdapter) RevokeWhatsAppUserAccess(jid string) error
func (*AssistantAdapter) SendChatMessage ¶
func (a *AssistantAdapter) SendChatMessage(sessionID, content string) (string, error)
func (*AssistantAdapter) SetWhatsAppGroupPolicy ¶ added in v1.13.0
func (a *AssistantAdapter) SetWhatsAppGroupPolicy(jid string, policy any) error
func (*AssistantAdapter) StartChatStream ¶
func (*AssistantAdapter) StartMCPServer ¶ added in v1.8.0
func (a *AssistantAdapter) StartMCPServer(name string) error
func (*AssistantAdapter) StopMCPServer ¶ added in v1.8.0
func (a *AssistantAdapter) StopMCPServer(name string) error
func (*AssistantAdapter) ToggleHook ¶
func (a *AssistantAdapter) ToggleHook(name string, enabled bool) error
func (*AssistantAdapter) ToggleJob ¶ added in v1.13.0
func (a *AssistantAdapter) ToggleJob(id string, enabled bool) error
func (*AssistantAdapter) ToggleSkill ¶
func (a *AssistantAdapter) ToggleSkill(name string, enabled bool) error
func (*AssistantAdapter) ToggleWebhook ¶
func (a *AssistantAdapter) ToggleWebhook(id string, active bool) error
func (*AssistantAdapter) UnblockWhatsAppUser ¶ added in v1.13.0
func (a *AssistantAdapter) UnblockWhatsAppUser(jid string) error
func (*AssistantAdapter) UnregisterHook ¶
func (a *AssistantAdapter) UnregisterHook(name string) error
func (*AssistantAdapter) UpdateConfigMap ¶
func (a *AssistantAdapter) UpdateConfigMap(updates map[string]any) error
func (*AssistantAdapter) UpdateDomainConfig ¶
func (a *AssistantAdapter) UpdateDomainConfig(update DomainConfigUpdate) error
func (*AssistantAdapter) UpdateMCPServer ¶ added in v1.8.0
func (a *AssistantAdapter) UpdateMCPServer(name string, enabled bool) error
func (*AssistantAdapter) UpdateToolGuard ¶
func (a *AssistantAdapter) UpdateToolGuard(update ToolGuardStatus) error
func (*AssistantAdapter) UpdateToolProfile ¶ added in v1.12.0
func (a *AssistantAdapter) UpdateToolProfile(profile ToolProfileDef) error
func (*AssistantAdapter) UpdateWhatsAppAccessDefaultPolicy ¶ added in v1.13.0
func (a *AssistantAdapter) UpdateWhatsAppAccessDefaultPolicy(policy string) error
func (*AssistantAdapter) UpdateWhatsAppConfig ¶ added in v1.13.0
func (a *AssistantAdapter) UpdateWhatsAppConfig(config map[string]any) error
func (*AssistantAdapter) UpdateWhatsAppGroupDefaultPolicy ¶ added in v1.13.0
func (a *AssistantAdapter) UpdateWhatsAppGroupDefaultPolicy(policy string) error
type AuditEntry ¶
type AuditEntry struct {
ID int64 `json:"id"`
Tool string `json:"tool"`
Caller string `json:"caller"`
Level string `json:"level"`
Allowed bool `json:"allowed"`
ArgsSummary string `json:"args_summary"`
ResultSummary string `json:"result_summary"`
CreatedAt string `json:"created_at"`
}
AuditEntry represents a single audit log record for the UI.
type ChannelHealthInfo ¶
type ChannelHealthInfo struct {
Name string `json:"name"`
Connected bool `json:"connected"`
ErrorCount int `json:"error_count"`
LastMsgAt time.Time `json:"last_msg_at"`
}
ChannelHealthInfo contains channel health for display.
type Config ¶
type Config struct {
// Enabled turns the web UI on/off.
Enabled bool `yaml:"enabled"`
// Address is the listen address (default: ":47716").
Address string `yaml:"address"`
// AuthToken is the Bearer token for authentication (empty = no auth).
AuthToken string `yaml:"auth_token"`
}
Config holds web UI configuration.
type DatabaseStatusInfo ¶ added in v1.8.0
type DatabaseStatusInfo struct {
Name string `json:"name"`
Healthy bool `json:"healthy"`
Latency int64 `json:"latency"` // ms
Version string `json:"version"`
OpenConns int `json:"open_connections"`
InUse int `json:"in_use"`
Idle int `json:"idle"`
WaitCount int `json:"wait_count"`
WaitDuration int64 `json:"wait_duration"` // ms
MaxOpenConns int `json:"max_open_conns"`
Error string `json:"error,omitempty"`
}
DatabaseStatusInfo contains database health status for the UI.
type DeviceCodeProvider ¶ added in v1.12.0
type DeviceCodeProvider interface {
Name() string
StartDeviceFlow(ctx context.Context) (*oauth.DeviceCodeResponse, error)
PollForToken(ctx context.Context, deviceCode string, interval time.Duration) (*oauth.OAuthCredential, error)
}
DeviceCodeProvider is the interface for device code OAuth providers.
type DomainConfigInfo ¶
type DomainConfigInfo struct {
// WebUI settings
WebuiAddress string `json:"webui_address"`
WebuiAuthToken bool `json:"webui_auth_configured"` // never expose the actual token
// Gateway API settings
GatewayEnabled bool `json:"gateway_enabled"`
GatewayAddress string `json:"gateway_address"`
GatewayAuthToken bool `json:"gateway_auth_configured"`
CORSOrigins []string `json:"cors_origins"`
// Tailscale settings
TailscaleEnabled bool `json:"tailscale_enabled"`
TailscaleServe bool `json:"tailscale_serve"`
TailscaleFunnel bool `json:"tailscale_funnel"`
TailscalePort int `json:"tailscale_port"`
TailscaleHostname string `json:"tailscale_hostname"`
TailscaleURL string `json:"tailscale_url"` // resolved URL if active
// Computed URLs
WebuiURL string `json:"webui_url"`
GatewayURL string `json:"gateway_url"`
PublicURL string `json:"public_url"` // tailscale funnel URL if active
}
DomainConfigInfo contains domain/network configuration for the UI.
type DomainConfigUpdate ¶
type DomainConfigUpdate struct {
WebuiAddress *string `json:"webui_address,omitempty"`
WebuiAuthToken *string `json:"webui_auth_token,omitempty"`
GatewayEnabled *bool `json:"gateway_enabled,omitempty"`
GatewayAddress *string `json:"gateway_address,omitempty"`
GatewayAuthToken *string `json:"gateway_auth_token,omitempty"`
CORSOrigins []string `json:"cors_origins,omitempty"`
TailscaleEnabled *bool `json:"tailscale_enabled,omitempty"`
TailscaleServe *bool `json:"tailscale_serve,omitempty"`
TailscaleFunnel *bool `json:"tailscale_funnel,omitempty"`
TailscalePort *int `json:"tailscale_port,omitempty"`
}
DomainConfigUpdate contains the mutable domain/network fields from the UI.
type HookEventInfo ¶
type HookEventInfo struct {
Event string `json:"event"`
Description string `json:"description"`
Hooks []string `json:"hooks"` // names of hooks subscribed to this event
}
HookEventInfo describes a supported hook event.
type HookInfo ¶
type HookInfo struct {
Name string `json:"name"`
Description string `json:"description"`
Source string `json:"source"`
Events []string `json:"events"`
Priority int `json:"priority"`
Enabled bool `json:"enabled"`
}
HookInfo contains lifecycle hook metadata for the UI.
type JobInfo ¶
type JobInfo struct {
ID string `json:"id"`
Schedule string `json:"schedule"`
Type string `json:"type"`
Command string `json:"command"`
Enabled bool `json:"enabled"`
RunCount int `json:"run_count"`
LastRunAt time.Time `json:"last_run_at"`
LastError string `json:"last_error"`
}
JobInfo contains scheduler job info for display.
type MCPServerInfo ¶ added in v1.8.0
type MCPServerInfo struct {
Name string `json:"name"`
Command string `json:"command"`
Args []string `json:"args"`
Env map[string]string `json:"env"`
Enabled bool `json:"enabled"`
Status string `json:"status"` // running, stopped, error
Error string `json:"error,omitempty"`
}
MCPServerInfo contains MCP server info for the UI.
type MediaAPI ¶ added in v1.8.0
type MediaAPI interface {
// Upload stores media and returns its ID, type, and URL.
Upload(r *http.Request, sessionID string) (mediaID string, mediaType string, filename string, size int64, err error)
// Get retrieves media by ID.
Get(mediaID string) ([]byte, string, string, error) // data, mimeType, filename, error
// List returns media matching the filter.
List(sessionID string, mediaType string, limit int) ([]MediaInfo, error)
// Delete removes media by ID.
Delete(mediaID string) error
}
MediaAPI defines the interface for media operations. Implemented by the media service adapter in the copilot package.
type MediaAdapter ¶ added in v1.8.0
type MediaAdapter struct {
UploadFn func(r *http.Request, sessionID string) (mediaID string, mediaType string, filename string, size int64, err error)
GetFn func(mediaID string) ([]byte, string, string, error)
ListFn func(sessionID string, mediaType string, limit int) ([]MediaInfo, error)
DeleteFn func(mediaID string) error
}
MediaAdapter wraps a MediaService to implement the MediaAPI interface. This avoids importing the media package directly in webui.
func (*MediaAdapter) Delete ¶ added in v1.8.0
func (m *MediaAdapter) Delete(mediaID string) error
Delete implements MediaAPI.Delete.
type MediaInfo ¶ added in v1.8.0
type MediaInfo struct {
ID string `json:"id"`
Filename string `json:"filename"`
Type string `json:"type"`
Size int64 `json:"size"`
URL string `json:"url"`
CreatedAt string `json:"created_at"`
}
MediaInfo contains media metadata for the UI.
type MessageInfo ¶
type MessageInfo struct {
Role string `json:"role"`
Content string `json:"content"`
Timestamp time.Time `json:"timestamp"`
}
MessageInfo contains a single message for display.
type OAuthAPI ¶ added in v1.12.0
type OAuthAPI interface {
// TokenManager returns the OAuth token manager
GetTokenManager() *oauth.TokenManager
}
OAuthAPI provides OAuth operations for the web UI.
type OAuthHandlers ¶ added in v1.12.0
type OAuthHandlers struct {
// contains filtered or unexported fields
}
OAuthHandlers manages OAuth-related HTTP handlers.
func NewOAuthHandlers ¶ added in v1.12.0
func NewOAuthHandlers(dataDir string, logger *slog.Logger) (*OAuthHandlers, error)
NewOAuthHandlers creates new OAuth handlers.
func (*OAuthHandlers) RegisterRoutes ¶ added in v1.12.0
func (h *OAuthHandlers) RegisterRoutes(mux *http.ServeMux, authMiddleware func(http.HandlerFunc) http.HandlerFunc)
RegisterRoutes registers OAuth routes on the mux.
func (*OAuthHandlers) SetHubConfig ¶ added in v1.13.0
func (h *OAuthHandlers) SetHubConfig(cfg *HubConfig)
SetHubConfig enables Hub mode for OAuth operations.
func (*OAuthHandlers) SetHubURLSaver ¶ added in v1.13.0
func (h *OAuthHandlers) SetHubURLSaver(fn func(hubURL string) error)
SetHubURLSaver sets the callback for persisting the Hub URL to config.
func (*OAuthHandlers) SetSecretSaver ¶ added in v1.13.0
func (h *OAuthHandlers) SetSecretSaver(fn func(name, value string) error)
SetSecretSaver sets the callback for storing secrets in the vault.
func (*OAuthHandlers) SetSkillBundleInstaller ¶ added in v1.13.0
func (h *OAuthHandlers) SetSkillBundleInstaller(fn func(name string, files map[string]string) error)
SetSkillBundleInstaller sets the callback for writing multi-file skill bundles.
func (*OAuthHandlers) SetSkillInstaller ¶ added in v1.13.0
func (h *OAuthHandlers) SetSkillInstaller(fn func(name, content string) error)
SetSkillInstaller sets the callback for writing skills to disk and reloading the registry.
func (*OAuthHandlers) SetSkillReferenceRemover ¶ added in v1.13.0
func (h *OAuthHandlers) SetSkillReferenceRemover(fn func(skillName, refPath string) error)
SetSkillReferenceRemover sets the callback for removing skill reference files.
func (*OAuthHandlers) Stop ¶ added in v1.12.0
func (h *OAuthHandlers) Stop()
Stop stops the OAuth handlers.
func (*OAuthHandlers) TokenManager ¶ added in v1.12.0
func (h *OAuthHandlers) TokenManager() *oauth.TokenManager
TokenManager returns the token manager.
type OAuthProviderInfo ¶ added in v1.12.0
type OAuthProviderInfo struct {
ID string `json:"id"`
Label string `json:"label"`
FlowType string `json:"flow_type"` // "pkce" or "device_code"
Experimental bool `json:"experimental,omitempty"`
}
OAuthProviderInfo contains provider info for the UI.
type OAuthStartResponse ¶ added in v1.12.0
type OAuthStartResponse struct {
FlowType string `json:"flow_type"`
AuthURL string `json:"auth_url,omitempty"` // For PKCE flow
Provider string `json:"provider"`
UserCode string `json:"user_code,omitempty"` // For device code flow
VerifyURL string `json:"verify_url,omitempty"` // For device code flow
ExpiresIn int `json:"expires_in,omitempty"` // For device code flow
Experimental bool `json:"experimental,omitempty"` // Warning flag
}
OAuthStartResponse is returned when starting an OAuth flow.
type PKCEProvider ¶ added in v1.12.0
type PKCEProvider interface {
Name() string
Label() string
AuthURL(state, challenge string) string
ExchangeCode(ctx context.Context, code, verifier string) (*oauth.OAuthCredential, error)
RedirectPort() int
}
PKCEProvider is the interface for PKCE-based OAuth providers.
type RunHandle ¶
type RunHandle struct {
RunID string
SessionID string
Events chan StreamEvent // Backend pushes events here; handler writes SSE.
Cancel context.CancelFunc
}
RunHandle represents an active agent run that can stream events and be aborted.
type SecurityStatus ¶
type SecurityStatus struct {
GatewayAuthConfigured bool `json:"gateway_auth_configured"`
WebUIAuthConfigured bool `json:"webui_auth_configured"`
ToolGuardEnabled bool `json:"tool_guard_enabled"`
VaultExists bool `json:"vault_exists"`
VaultUnlocked bool `json:"vault_unlocked"`
AuditEntryCount int `json:"audit_entry_count"`
}
SecurityStatus is an overview returned at /api/security.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is the web UI HTTP server.
func New ¶
func New(cfg Config, api AssistantAPI, logger *slog.Logger) *Server
New creates a new web UI server.
func (*Server) GetOAuthHandlers ¶ added in v1.12.0
func (s *Server) GetOAuthHandlers() *OAuthHandlers
GetOAuthHandlers returns the OAuth handlers (may be nil).
func (*Server) OnRestartRequested ¶ added in v1.13.0
OnRestartRequested registers a callback invoked when the user requests a restart.
func (*Server) OnSetupDone ¶
func (s *Server) OnSetupDone(fn func())
OnSetupDone registers a callback invoked when the setup wizard finishes.
func (*Server) OnUpdateRequested ¶ added in v1.13.0
OnUpdateRequested registers a callback invoked when the user requests an update.
func (*Server) OnVaultInit ¶
OnVaultInit registers a callback to create the encrypted vault during setup.
func (*Server) SetAuthToken ¶ added in v1.13.0
SetAuthToken updates the auth token at runtime (e.g. when changed via the domain settings page).
func (*Server) SetMediaAPI ¶ added in v1.8.0
SetMediaAPI sets the media API for file upload/download operations.
func (*Server) SetOAuthHandlers ¶ added in v1.12.0
func (s *Server) SetOAuthHandlers(handlers *OAuthHandlers)
SetOAuthHandlers sets the OAuth handlers for OAuth endpoints.
func (*Server) SetSetupMode ¶
SetSetupMode enables setup-only mode (no assistant, only setup + auth endpoints).
func (*Server) SetUpdateChecker ¶ added in v1.13.0
func (s *Server) SetUpdateChecker(uc UpdateChecker)
SetUpdateChecker sets the update checker for update endpoints.
func (*Server) SetVersion ¶ added in v1.13.0
SetVersion sets the current binary version for the version endpoint.
type SessionInfo ¶
type SessionInfo struct {
ID string `json:"id"`
Channel string `json:"channel"`
ChatID string `json:"chat_id"`
Title string `json:"title,omitempty"`
MessageCount int `json:"message_count"`
LastMessageAt time.Time `json:"last_message_at"`
CreatedAt time.Time `json:"created_at"`
}
SessionInfo contains session metadata for the UI.
type SetupRequest ¶
type SetupRequest struct {
Name string `json:"name"`
Language string `json:"language"`
Timezone string `json:"timezone"`
Provider string `json:"provider"`
APIKey string `json:"apiKey"`
Model string `json:"model"`
BaseURL string `json:"baseUrl"`
OwnerPhone string `json:"ownerPhone"`
WebuiPassword string `json:"webuiPassword"`
Password string `json:"password"` // V2 wizard sends "password"
VaultPassword string `json:"vaultPassword"`
AccessMode string `json:"accessMode"`
Channels map[string]bool `json:"channels"`
EnabledSkills []string `json:"enabledSkills"`
}
SetupRequest contains all data from the setup wizard frontend.
type SkillInfo ¶
type SkillInfo struct {
Name string `json:"name"`
Description string `json:"description"`
Enabled bool `json:"enabled"`
ToolCount int `json:"tool_count"`
}
SkillInfo contains skill info for display.
type StreamEvent ¶
type StreamEvent struct {
Type string `json:"type"` // delta, tool_use, tool_result, done, error
Data any `json:"data"`
}
StreamEvent is a typed SSE event sent to the frontend.
type ToolGuardStatus ¶
type ToolGuardStatus struct {
Enabled bool `json:"enabled"`
AllowDestructive bool `json:"allow_destructive"`
AllowSudo bool `json:"allow_sudo"`
AllowReboot bool `json:"allow_reboot"`
AutoApprove []string `json:"auto_approve"`
RequireConfirmation []string `json:"require_confirmation"`
ProtectedPaths []string `json:"protected_paths"`
SSHAllowedHosts []string `json:"ssh_allowed_hosts"`
DangerousCommands []string `json:"dangerous_commands"`
ToolPermissions map[string]string `json:"tool_permissions"`
}
ToolGuardStatus represents the tool guard configuration for the UI.
type ToolProfileDef ¶ added in v1.12.0
type ToolProfileDef struct {
Name string `json:"name"`
Description string `json:"description"`
Allow []string `json:"allow"`
Deny []string `json:"deny"`
}
ToolProfileDef defines a tool profile for creation/update.
type ToolProfileInfo ¶ added in v1.12.0
type ToolProfileInfo struct {
Name string `json:"name"`
Description string `json:"description"`
Allow []string `json:"allow"`
Deny []string `json:"deny"`
Builtin bool `json:"builtin"`
}
ToolProfileInfo contains profile info for API responses.
type UpdateChecker ¶ added in v1.13.0
type UpdateChecker interface {
LastCheck() updater.UpdateInfo
CheckNow() (updater.UpdateInfo, error)
}
UpdateChecker is the interface used by the web UI to query update status.
type UsageInfo ¶
type UsageInfo struct {
TotalInputTokens int64 `json:"total_input_tokens"`
TotalOutputTokens int64 `json:"total_output_tokens"`
TotalCost float64 `json:"total_cost"`
RequestCount int64 `json:"request_count"`
}
UsageInfo contains token usage statistics.
type VaultStatus ¶
type VaultStatus struct {
Exists bool `json:"exists"`
Unlocked bool `json:"unlocked"`
Keys []string `json:"keys"`
}
VaultStatus represents the vault state for the UI (no secret values).
type WebhookInfo ¶
type WebhookInfo struct {
ID string `json:"id"`
URL string `json:"url"`
Events []string `json:"events"`
Active bool `json:"active"`
CreatedAt time.Time `json:"created_at"`
}
WebhookInfo contains webhook metadata for the UI.
type WhatsAppAccessConfig ¶ added in v1.13.0
type WhatsAppAccessConfig struct {
DefaultPolicy string `json:"default_policy"`
Owners []string `json:"owners"`
Admins []string `json:"admins"`
AllowedUsers []string `json:"allowed_users"`
BlockedUsers []string `json:"blocked_users"`
AllowedGroups []string `json:"allowed_groups"`
BlockedGroups []string `json:"blocked_groups"`
PendingMessage string `json:"pending_message"`
}
WhatsAppAccessConfig holds the WhatsApp access control configuration.
type WhatsAppGroupPolicies ¶ added in v1.13.0
type WhatsAppGroupPolicies struct {
DefaultPolicy string `json:"default_policy"`
Groups []WhatsAppGroupPolicy `json:"groups"`
}
WhatsAppGroupPolicies holds all group policies.
type WhatsAppGroupPolicy ¶ added in v1.13.0
type WhatsAppGroupPolicy struct {
ID string `json:"id"`
Name string `json:"name"`
Policy string `json:"policy"`
Policies []string `json:"policies,omitempty"`
Keywords []string `json:"keywords,omitempty"`
AllowedUsers []string `json:"allowed_users,omitempty"`
Workspace string `json:"workspace,omitempty"`
}
WhatsAppGroupPolicy holds a single group's policy configuration.
type WhatsAppJoinedGroup ¶ added in v1.13.0
WhatsAppJoinedGroup represents a WhatsApp group the bot is part of.
type WhatsAppQREvent ¶
type WhatsAppQREvent struct {
Type string `json:"type"` // "code", "success", "timeout", "error", "refresh"
Code string `json:"code,omitempty"`
Message string `json:"message"`
ExpiresAt string `json:"expires_at,omitempty"` // ISO timestamp
SecondsLeft int `json:"seconds_left,omitempty"` // Seconds until QR expires
}
WhatsAppQREvent mirrors whatsapp.QREvent without importing the channel package.
type WhatsAppStatus ¶
type WhatsAppStatus struct {
Connected bool `json:"connected"`
State string `json:"state"` // "disconnected", "connecting", "connected", "waiting_qr", etc.
NeedsQR bool `json:"needs_qr"`
Phone string `json:"phone,omitempty"`
Platform string `json:"platform,omitempty"`
ErrorCount int `json:"error_count"`
ReconnectAttempts int `json:"reconnect_attempts"`
Message string `json:"message,omitempty"` // Human-readable status message
}
WhatsAppStatus holds the current WhatsApp connection state for the UI.