9c16d337a2
* feat(web): add app status bar * feat(web): add app status bar visibility toggle * feat(web): persist status bar item order * fix(web): refine app status bar behavior * fix(web): polish app status bar presentation * test(web): split plugin slot coverage groups * fix(web): address status surface review feedback * fix(web): stabilize status bar overlay tests
159 lines
8.0 KiB
Go
159 lines
8.0 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
MCPTaskAgentProfileDefaultCurrentTask = "current_task"
|
|
MCPTaskAgentProfileDefaultWorkspaceDefault = "workspace_default"
|
|
)
|
|
|
|
func NormalizeMCPTaskAgentProfileDefault(value string) string {
|
|
if value == MCPTaskAgentProfileDefaultWorkspaceDefault {
|
|
return value
|
|
}
|
|
return MCPTaskAgentProfileDefaultCurrentTask
|
|
}
|
|
|
|
type User struct {
|
|
ID string `json:"id"`
|
|
Email string `json:"email"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type UserSettings struct {
|
|
UserID string `json:"user_id"`
|
|
WorkspaceID string `json:"workspace_id"`
|
|
KanbanViewMode string `json:"kanban_view_mode"`
|
|
WorkflowFilterID string `json:"workflow_filter_id"`
|
|
RepositoryIDs []string `json:"repository_ids"`
|
|
TasksListSort string `json:"tasks_list_sort"`
|
|
TasksListGroup string `json:"tasks_list_group"`
|
|
InitialSetupComplete bool `json:"initial_setup_complete"`
|
|
PreferredShell string `json:"preferred_shell"`
|
|
DefaultEditorID string `json:"default_editor_id"`
|
|
EnablePreviewOnClick bool `json:"enable_preview_on_click"`
|
|
ChatSubmitKey string `json:"chat_submit_key"` // "enter" | "cmd_enter"
|
|
ReviewAutoMarkOnScroll bool `json:"review_auto_mark_on_scroll"`
|
|
ConfirmTaskArchive bool `json:"confirm_task_archive"`
|
|
MCPTaskAgentProfileDefault string `json:"mcp_task_agent_profile_default"`
|
|
ShowReleaseNotification bool `json:"show_release_notification"`
|
|
ReleaseNotesLastSeenVersion string `json:"release_notes_last_seen_version"`
|
|
LspAutoStartLanguages []string `json:"lsp_auto_start_languages"`
|
|
LspAutoInstallLanguages []string `json:"lsp_auto_install_languages"`
|
|
LspServerConfigs map[string]map[string]interface{} `json:"lsp_server_configs"`
|
|
SavedLayouts []SavedLayout `json:"saved_layouts"`
|
|
SidebarViews []SidebarView `json:"sidebar_views"`
|
|
SidebarActiveViewID string `json:"sidebar_active_view_id"`
|
|
SidebarDraft *SidebarViewDraft `json:"sidebar_draft"`
|
|
SidebarTaskPrefs SidebarTaskPrefs `json:"sidebar_task_prefs"`
|
|
TaskCreateLastUsed TaskCreateLastUsed `json:"task_create_last_used"`
|
|
JiraSavedViews json.RawMessage `json:"jira_saved_views"`
|
|
JiraTaskPresets json.RawMessage `json:"jira_task_presets"`
|
|
GitHubSavedPresets json.RawMessage `json:"github_saved_presets"`
|
|
GitHubDefaultQueryPresets json.RawMessage `json:"github_default_query_presets"`
|
|
GitLabSavedPresets json.RawMessage `json:"gitlab_saved_presets"`
|
|
DefaultUtilityAgentID string `json:"default_utility_agent_id"` // Default inference agent for utility agents
|
|
DefaultUtilityModel string `json:"default_utility_model"` // Default model for utility agents
|
|
KeyboardShortcuts map[string]interface{} `json:"keyboard_shortcuts"` // User-configured keyboard shortcut overrides
|
|
TerminalLinkBehavior string `json:"terminal_link_behavior"` // "new_tab" | "browser_panel"
|
|
TerminalFontFamily string `json:"terminal_font_family"`
|
|
TerminalFontSize int `json:"terminal_font_size"`
|
|
ChangesPanelLayout string `json:"changes_panel_layout"` // "flat" | "tree"
|
|
SystemMetricsDisplay SystemMetricsDisplaySettings `json:"system_metrics_display"`
|
|
AppStatusBarOrder AppStatusBarOrder `json:"app_status_bar_order"`
|
|
VoiceMode VoiceModeSettings `json:"voice_mode"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type SystemMetricsDisplaySettings struct {
|
|
ShowInTopbar bool `json:"show_in_topbar"`
|
|
}
|
|
|
|
type AppStatusBarOrder struct {
|
|
LeftItemIDs []string `json:"left_item_ids"`
|
|
RightItemIDs []string `json:"right_item_ids"`
|
|
}
|
|
|
|
// VoiceModeSettings is the per-user configuration surface for the chat
|
|
// voice-input feature. Stored as a nested JSON object inside the `users.settings`
|
|
// blob — adding fields here does not require a schema migration.
|
|
type VoiceModeSettings struct {
|
|
// Enabled gates the whole feature. When false, the mic button is hidden
|
|
// entirely and no voice-related hooks run on the chat input. Defaults to
|
|
// true for new users; pre-existing user rows that have no `enabled` field
|
|
// in their stored JSON are also treated as enabled (see store layer).
|
|
Enabled bool `json:"enabled"`
|
|
// Engine is the user's preferred transcription engine.
|
|
// "auto" | "webSpeech" | "whisperWeb" | "whisperServer". Default "auto".
|
|
Engine string `json:"engine"`
|
|
// Language is the BCP-47 tag or "auto" to use the browser's language.
|
|
// Examples: "en-US", "pt-PT", "ja-JP". Default "auto".
|
|
Language string `json:"language"`
|
|
// Mode controls how the mic button is activated: "toggle" (click to start/stop)
|
|
// or "hold" (push-to-talk). Default "toggle".
|
|
Mode string `json:"mode"`
|
|
// AutoSend submits the chat message immediately after the transcript is inserted.
|
|
AutoSend bool `json:"auto_send"`
|
|
// WhisperWebModel selects the in-browser Whisper model when engine = whisperWeb.
|
|
// "tiny" | "base" | "small". Default "base".
|
|
WhisperWebModel string `json:"whisper_web_model"`
|
|
}
|
|
|
|
// SavedLayout represents a user-saved dockview layout configuration.
|
|
type SavedLayout struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
IsDefault bool `json:"is_default"`
|
|
Layout json.RawMessage `json:"layout"`
|
|
CreatedAt string `json:"created_at"`
|
|
}
|
|
|
|
// SidebarView represents a user-saved sidebar filter/sort/group preset.
|
|
// The payload is stored and returned as-is; the server does not interpret
|
|
// clause values beyond passing them through.
|
|
type SidebarView struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Filters []SidebarViewClause `json:"filters"`
|
|
Sort SidebarViewSort `json:"sort"`
|
|
Group string `json:"group"`
|
|
CollapsedGroups []string `json:"collapsed_groups"`
|
|
}
|
|
|
|
type SidebarViewClause struct {
|
|
ID string `json:"id"`
|
|
Dimension string `json:"dimension"`
|
|
Op string `json:"op"`
|
|
Value json.RawMessage `json:"value"`
|
|
}
|
|
|
|
type SidebarViewSort struct {
|
|
Key string `json:"key"`
|
|
Direction string `json:"direction"`
|
|
}
|
|
|
|
type SidebarViewDraft struct {
|
|
BaseViewID string `json:"base_view_id"`
|
|
Filters []SidebarViewClause `json:"filters"`
|
|
Sort SidebarViewSort `json:"sort"`
|
|
Group string `json:"group"`
|
|
}
|
|
|
|
type SidebarTaskPrefs struct {
|
|
PinnedTaskIDs []string `json:"pinned_task_ids"`
|
|
OrderedTaskIDs []string `json:"ordered_task_ids"`
|
|
SubtaskOrderByParentID map[string][]string `json:"subtask_order_by_parent_id"`
|
|
}
|
|
|
|
type TaskCreateLastUsed struct {
|
|
RepositoryID string `json:"repository_id"`
|
|
Branch string `json:"branch"`
|
|
AgentProfileID string `json:"agent_profile_id"`
|
|
ExecutorProfileID string `json:"executor_profile_id"`
|
|
}
|