import { isElectron } from "~/env";import { isMacPlatform, isWindowsPlatform, normalizeSearchText } from "~/lib/utils"; export type SettingsPath = | "/settings/projects" | "/settings/general" | "/settings/appearance" | "/settings/keybindings" | "/settings/snap-shot" | "/settings/providers" | "/settings/integrations" | "/settings/source-control" | "/settings/connections" | "/settings/archived"; export interface SettingsSearchItem { readonly id: string; readonly title: string; readonly to: SettingsPath; readonly targetId?: string; /** Descriptions, option labels, and aliases people may remember instead of the title. */ readonly searchTerms?: ReadonlyArray<string>; // Its row only renders in the desktop app, so a browser result would land on // an anchor that isn't there. readonly desktopOnly?: boolean; readonly macOnly?: boolean; // Its row only renders on Windows desktop, so other desktop platforms must // not expose a result that points to a missing anchor. readonly windowsOnly?: boolean; readonly cloudOnly?: boolean; readonly primaryOnly?: boolean; readonly providerSettingsOnly?: boolean; readonly localBackendManagementOnly?: boolean; readonly wslAvailableOnly?: boolean; readonly requiresThreadAutoSettlement?: boolean;} export interface SettingsSearchAvailability { readonly hasCloudPublicConfig: boolean; readonly hasPrimaryEnvironment: boolean; readonly hasProviderSettingsEnvironment: boolean; readonly canManageLocalBackend: boolean; readonly isWslSettingsRowVisible: boolean; readonly hasThreadAutoSettlement: boolean;} /** * Section labels in sidebar order. The sidebar nav and the search-result * subtitles both render from this record, so each label exists once. */export const SETTINGS_SECTION_LABELS: Readonly<Record<SettingsPath, string>> = { "/settings/general": "General", "/settings/appearance": "Appearance", "/settings/projects": "Projects", "/settings/keybindings": "Keybindings", "/settings/snap-shot": "SnapShots", "/settings/providers": "Providers", "/settings/integrations": "Integrations", "/settings/source-control": "Source Control", "/settings/connections": "Connections", "/settings/archived": "Archive",}; /** * Searchable settings and stable destinations, in result order. Rows with a * dedicated anchor render their id and title via `searchableSetting`; items * that may not be mounted point at their nearest stable section instead. */export const SETTINGS_SEARCH_ITEMS = [ { id: "project-defaults", title: "Project defaults and overrides", to: "/settings/projects", searchTerms: [ "model workspace browser machines projects inheritance automatic pull checkout grouping actions scripts", ], }, { id: "color-scheme", title: "Color scheme", to: "/settings/appearance", searchTerms: ["appearance light dark system mode"], // The scheme tiles sit at the top of the Appearance section. targetId: "appearance", }, { id: "theme", title: "Themes", to: "/settings/appearance", searchTerms: ["appearance colors palette custom import"], // Theme cards live directly under the scheme tiles; the section is the // stable scroll destination for both. targetId: "appearance", }, { // Prefixed because the slider control already owns the `appearance-contrast` id. id: "setting-appearance-contrast", title: "Contrast", to: "/settings/appearance", searchTerms: ["colors borders interface"], }, { // Prefixed because the slider control already owns the `glass-opacity` id. id: "setting-glass-opacity", title: "Glass opacity", to: "/settings/appearance", searchTerms: ["transparent transparency solid menus dialogs composer"], }, { id: "diff-color-scheme", title: "Diff colors", to: "/settings/appearance", searchTerms: ["red green blue orange additions deletions changes counts palette colorblind"], }, { id: "panel-animations", title: "Panel animations", to: "/settings/appearance", }, { id: "environment-identification", title: "Environment identification", to: "/settings/appearance", searchTerms: ["dev nightly artwork pill label hide none"], // The setting is stage-dependent, so its parent section is the stable destination. targetId: "appearance-interface", }, { id: "interface-font", title: "Interface font", to: "/settings/appearance", searchTerms: ["typography family size system sans"], }, { id: "prompt-font", title: "Prompt font", to: "/settings/appearance", searchTerms: ["typography family size composer input"], }, { id: "code-font", title: "Code font", to: "/settings/appearance", searchTerms: ["typography family size monospace code blocks diffs file previews"], }, { id: "terminal-font", title: "Terminal font", to: "/settings/appearance", searchTerms: ["typography family size monospace output"], }, { id: "font-smoothing", title: "Font smoothing", to: "/settings/appearance", searchTerms: ["typography text grayscale anti aliasing macos thin"], macOnly: true, }, { id: "word-wrap", title: "Word wrap", to: "/settings/appearance", searchTerms: ["long lines code blocks tables diffs file previews"], }, { id: "project-grouping", title: "Project grouping", to: "/settings/general", searchTerms: ["combine matching repositories environments sidebar"], }, { id: "auto-settle-inactive-threads", title: "Auto-settle inactive threads", to: "/settings/general", searchTerms: ["sidebar inactivity days no activity automatically"], requiresThreadAutoSettlement: true, }, { id: "auto-settle-merged-threads", title: "Auto-settle merged threads", to: "/settings/general", searchTerms: ["pull request merge closed automatically sidebar"], requiresThreadAutoSettlement: true, }, { id: "days-before-auto-settle", title: "Days of inactivity before auto-settle", to: "/settings/general", targetId: "auto-settle-inactive-threads", searchTerms: ["thread timeout activity sidebar"], requiresThreadAutoSettlement: true, }, { id: "time-format", title: "Time format", to: "/settings/general", searchTerms: ["timestamp clock locale system browser os 12 hour 24 hour"], }, { id: "hide-whitespace-changes", title: "Hide whitespace changes", to: "/settings/general", searchTerms: ["diff ignore spaces edits default"], }, { id: "diff-layout", title: "Diff layout", to: "/settings/general", searchTerms: ["stacked split side by side unified inline view"], }, { id: "proactive-panels", title: "Proactive panels", to: "/settings/general", searchTerms: ["automatically open diff pull request pr right panel agent completion"], }, { id: "skills-in-slash-menu", title: "Show skills in slash menu", to: "/settings/general", searchTerms: ["command menu dollar $ slash /"], }, { id: "composer-collapse", title: "Collapse composer on scroll", to: "/settings/general", searchTerms: ["composer rest resting scroll wheel conversation timeline shrink minimize"], }, { id: "provider-update-checks", title: "Provider update checks", to: "/settings/general", searchTerms: ["installed cli versions newer available codex claude cursor grok opencode"], }, { id: "continue-threads-after-server-update", title: "Continue threads after restarts", to: "/settings/general", searchTerms: [ "resume running active interrupted work restart reboot machine crash desktop update automatically", ], }, { id: "background-activity", title: "Background activity", to: "/settings/general", searchTerms: [ "balanced performance battery saver advanced git fetch provider health refresh host power monitor idle policy", ], }, { id: "new-threads", title: "New threads", to: "/settings/projects", searchTerms: ["default workspace mode draft local worktree"], }, { id: "start-from-origin", title: "Start from origin", to: "/settings/general", searchTerms: ["new worktrees latest matching remote branch local"], }, { id: "add-project-starts-in", title: "Add project starts in", to: "/settings/general", searchTerms: ["base directory folder browser path home"], }, { id: "unpin-confirmation", title: "Unpin confirmation", to: "/settings/general", searchTerms: ["ask before thread pinned section"], }, { id: "archive-confirmation", title: "Archive confirmation", to: "/settings/general", searchTerms: ["ask before thread second click inline action"], }, { id: "delete-confirmation", title: "Delete confirmation", to: "/settings/general", searchTerms: ["ask before thread chat history"], }, { id: "quit-confirmation", title: "Quit shortcut", to: "/settings/general", searchTerms: ["confirmation desktop app exit direct hold double click press twice"], desktopOnly: true, }, { id: "text-generation-model", title: "Text generation model", to: "/settings/general", searchTerms: ["generated thread titles source control content default provider"], }, { id: "diagnostics", title: "Diagnostics", to: "/settings/general", searchTerms: ["logs traces processes resource history failures spans cpu memory"], }, { id: "legacy-plan-mode", title: "Plan mode (legacy)", to: "/settings/general", searchTerms: ["build plan composer old"], }, { id: "legacy-context-window-indicator", title: "Context window indicator (legacy)", to: "/settings/general", searchTerms: ["composer meter usage tokens circle old"], }, { id: "legacy-token-streaming", title: "Stream token by token (legacy)", to: "/settings/general", searchTerms: ["response output old compatibility"], }, { id: "legacy-sidebar", title: "Sidebar (legacy)", to: "/settings/general", searchTerms: ["project thread tree old flat list"], }, { id: "keybindings", title: "Keybindings", to: "/settings/keybindings", searchTerms: ["keyboard shortcuts hotkeys commands bindings json"], }, { id: "snap-shot-enabled", title: "SnapShots", searchTerms: ["window capture screenshot"], to: "/settings/snap-shot", }, { id: "snap-shot-accessibility", title: "Include app text", to: "/settings/snap-shot", targetId: "snap-shot-enabled", searchTerms: [ "capture accessibility data text UI structure elements privacy omit agent context", ], }, { id: "snap-shot-shortcut", title: "Capture shortcut", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "snap-shot-sound", title: "Capture sound", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "snap-shot-flash", title: "Capture flash", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "snap-shot-animations", title: "Capture animations", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "providers", title: "Providers", to: "/settings/providers", searchTerms: [ "agents cli codex claude cursor grok opencode antigravity google sign in sign out install subscription instances authentication api key models configuration binary path config directory endpoint arguments environment variables display name accent color custom favorite hidden auto compact", ], }, { id: "usage-providers", title: "Usage providers", to: "/settings/providers", searchTerms: [ "usage sources CLIProxyAPI CLI proxy hub quota subscription limits management key add remove", ], providerSettingsOnly: true, }, { id: "provider-health-check-interval", title: "Health check interval", to: "/settings/providers", searchTerms: ["refresh availability versions auth state models background probes seconds off"], providerSettingsOnly: true, }, { id: "agent-browser-access", title: "Agent browser access", to: "/settings/projects", searchTerms: ["allow open drive preview tools sessions"], }, { id: "device-hosts", title: "Device hosts", to: "/settings/integrations", searchTerms: ["ssh remote simulator emulator ios android mac mini identity key connection"], }, { id: "agent-device-access", title: "Agent device access", to: "/settings/integrations", targetId: "devices", searchTerms: ["allow simulator emulator ios android drive tools sessions"], }, { id: "device-hub", title: "Device hub", to: "/settings/integrations", targetId: "devices", searchTerms: ["simulator emulator ios android install start"], }, { id: "device-platform-support", title: "Simulator support", to: "/settings/integrations", targetId: "devices", searchTerms: ["xcode android studio sdk avd runtime"], }, { id: "browser-profiles", title: "Browser profiles", to: "/settings/integrations", targetId: "browser", }, { id: "browser-default-profile", title: "Default browser profile", to: "/settings/integrations", targetId: "browser-profiles", }, { id: "browser-default-viewport", title: "Default browser viewport", to: "/settings/integrations", searchTerms: ["preview size width height device desktop mobile rotate"], }, { id: "browser-default-zoom", title: "Default browser zoom", to: "/settings/integrations", searchTerms: ["preview page scale tabs percent"], }, { id: "browser-default-appearance", title: "Default browser appearance", to: "/settings/integrations", searchTerms: ["preview color scheme light dark system os"], }, { id: "browser-recording-frame-rate", title: "Browser recording frame rate", to: "/settings/integrations", }, { id: "browser-link-target", title: "Open links in", to: "/settings/integrations", searchTerms: ["links default browser in-app browser external open"], }, { id: "browser-auto-show-floating-preview", title: "Auto-show floating preview", to: "/settings/integrations", searchTerms: ["agent opens browser pop into view hide"], }, { id: "source-control", title: "Source control", to: "/settings/source-control", searchTerms: [ "version control git github gitlab bitbucket azure devops hosting integrations credentials scan server environment", ], }, { id: "git-fetch-interval", title: "Git fetch interval", to: "/settings/source-control", searchTerms: [ "automatic remote branch refresh background credentials security keys seconds off", ], primaryOnly: true, }, { id: "source-control-writing-style", title: "Source control writing style", to: "/settings/source-control", searchTerms: [Lines 1–500 of 677. Load more
import { isElectron } from "~/env"; import { isMacPlatform, isWindowsPlatform, normalizeSearchText } from "~/lib/utils"; export type SettingsPath = | "/settings/projects" | "/settings/general" | "/settings/appearance" | "/settings/keybindings" | "/settings/snap-shot" | "/settings/providers" | "/settings/integrations" | "/settings/source-control" | "/settings/connections" | "/settings/archived"; export interface SettingsSearchItem { readonly id: string; readonly title: string; readonly to: SettingsPath; readonly targetId?: string; /** Descriptions, option labels, and aliases people may remember instead of the title. */ readonly searchTerms?: ReadonlyArray<string>; // Its row only renders in the desktop app, so a browser result would land on // an anchor that isn't there. readonly desktopOnly?: boolean; readonly macOnly?: boolean; // Its row only renders on Windows desktop, so other desktop platforms must // not expose a result that points to a missing anchor. readonly windowsOnly?: boolean; readonly cloudOnly?: boolean; readonly primaryOnly?: boolean; readonly providerSettingsOnly?: boolean; readonly localBackendManagementOnly?: boolean; readonly wslAvailableOnly?: boolean; readonly requiresThreadAutoSettlement?: boolean; } export interface SettingsSearchAvailability { readonly hasCloudPublicConfig: boolean; readonly hasPrimaryEnvironment: boolean; readonly hasProviderSettingsEnvironment: boolean; readonly canManageLocalBackend: boolean; readonly isWslSettingsRowVisible: boolean; readonly hasThreadAutoSettlement: boolean; } /** * Section labels in sidebar order. The sidebar nav and the search-result * subtitles both render from this record, so each label exists once. */ export const SETTINGS_SECTION_LABELS: Readonly<Record<SettingsPath, string>> = { "/settings/general": "General", "/settings/appearance": "Appearance", "/settings/projects": "Projects", "/settings/keybindings": "Keybindings", "/settings/snap-shot": "SnapShots", "/settings/providers": "Providers", "/settings/integrations": "Integrations", "/settings/source-control": "Source Control", "/settings/connections": "Connections", "/settings/archived": "Archive", }; /** * Searchable settings and stable destinations, in result order. Rows with a * dedicated anchor render their id and title via `searchableSetting`; items * that may not be mounted point at their nearest stable section instead. */ export const SETTINGS_SEARCH_ITEMS = [ { id: "project-defaults", title: "Project defaults and overrides", to: "/settings/projects", searchTerms: [ "model workspace browser machines projects inheritance automatic pull checkout grouping actions scripts", ], }, { id: "color-scheme", title: "Color scheme", to: "/settings/appearance", searchTerms: ["appearance light dark system mode"], // The scheme tiles sit at the top of the Appearance section. targetId: "appearance", }, { id: "theme", title: "Themes", to: "/settings/appearance", searchTerms: ["appearance colors palette custom import"], // Theme cards live directly under the scheme tiles; the section is the // stable scroll destination for both. targetId: "appearance", }, { // Prefixed because the slider control already owns the `appearance-contrast` id. id: "setting-appearance-contrast", title: "Contrast", to: "/settings/appearance", searchTerms: ["colors borders interface"], }, { // Prefixed because the slider control already owns the `glass-opacity` id. id: "setting-glass-opacity", title: "Glass opacity", to: "/settings/appearance", searchTerms: ["transparent transparency solid menus dialogs composer"], }, { id: "diff-color-scheme", title: "Diff colors", to: "/settings/appearance", searchTerms: ["red green blue orange additions deletions changes counts palette colorblind"], }, { id: "panel-animations", title: "Panel animations", to: "/settings/appearance", }, { id: "environment-identification", title: "Environment identification", to: "/settings/appearance", searchTerms: ["dev nightly artwork pill label hide none"], // The setting is stage-dependent, so its parent section is the stable destination. targetId: "appearance-interface", }, { id: "interface-font", title: "Interface font", to: "/settings/appearance", searchTerms: ["typography family size system sans"], }, { id: "prompt-font", title: "Prompt font", to: "/settings/appearance", searchTerms: ["typography family size composer input"], }, { id: "code-font", title: "Code font", to: "/settings/appearance", searchTerms: ["typography family size monospace code blocks diffs file previews"], }, { id: "terminal-font", title: "Terminal font", to: "/settings/appearance", searchTerms: ["typography family size monospace output"], }, { id: "font-smoothing", title: "Font smoothing", to: "/settings/appearance", searchTerms: ["typography text grayscale anti aliasing macos thin"], macOnly: true, }, { id: "word-wrap", title: "Word wrap", to: "/settings/appearance", searchTerms: ["long lines code blocks tables diffs file previews"], }, { id: "project-grouping", title: "Project grouping", to: "/settings/general", searchTerms: ["combine matching repositories environments sidebar"], }, { id: "auto-settle-inactive-threads", title: "Auto-settle inactive threads", to: "/settings/general", searchTerms: ["sidebar inactivity days no activity automatically"], requiresThreadAutoSettlement: true, }, { id: "auto-settle-merged-threads", title: "Auto-settle merged threads", to: "/settings/general", searchTerms: ["pull request merge closed automatically sidebar"], requiresThreadAutoSettlement: true, }, { id: "days-before-auto-settle", title: "Days of inactivity before auto-settle", to: "/settings/general", targetId: "auto-settle-inactive-threads", searchTerms: ["thread timeout activity sidebar"], requiresThreadAutoSettlement: true, }, { id: "time-format", title: "Time format", to: "/settings/general", searchTerms: ["timestamp clock locale system browser os 12 hour 24 hour"], }, { id: "hide-whitespace-changes", title: "Hide whitespace changes", to: "/settings/general", searchTerms: ["diff ignore spaces edits default"], }, { id: "diff-layout", title: "Diff layout", to: "/settings/general", searchTerms: ["stacked split side by side unified inline view"], }, { id: "proactive-panels", title: "Proactive panels", to: "/settings/general", searchTerms: ["automatically open diff pull request pr right panel agent completion"], }, { id: "skills-in-slash-menu", title: "Show skills in slash menu", to: "/settings/general", searchTerms: ["command menu dollar $ slash /"], }, { id: "composer-collapse", title: "Collapse composer on scroll", to: "/settings/general", searchTerms: ["composer rest resting scroll wheel conversation timeline shrink minimize"], }, { id: "provider-update-checks", title: "Provider update checks", to: "/settings/general", searchTerms: ["installed cli versions newer available codex claude cursor grok opencode"], }, { id: "continue-threads-after-server-update", title: "Continue threads after restarts", to: "/settings/general", searchTerms: [ "resume running active interrupted work restart reboot machine crash desktop update automatically", ], }, { id: "background-activity", title: "Background activity", to: "/settings/general", searchTerms: [ "balanced performance battery saver advanced git fetch provider health refresh host power monitor idle policy", ], }, { id: "new-threads", title: "New threads", to: "/settings/projects", searchTerms: ["default workspace mode draft local worktree"], }, { id: "start-from-origin", title: "Start from origin", to: "/settings/general", searchTerms: ["new worktrees latest matching remote branch local"], }, { id: "add-project-starts-in", title: "Add project starts in", to: "/settings/general", searchTerms: ["base directory folder browser path home"], }, { id: "unpin-confirmation", title: "Unpin confirmation", to: "/settings/general", searchTerms: ["ask before thread pinned section"], }, { id: "archive-confirmation", title: "Archive confirmation", to: "/settings/general", searchTerms: ["ask before thread second click inline action"], }, { id: "delete-confirmation", title: "Delete confirmation", to: "/settings/general", searchTerms: ["ask before thread chat history"], }, { id: "quit-confirmation", title: "Quit shortcut", to: "/settings/general", searchTerms: ["confirmation desktop app exit direct hold double click press twice"], desktopOnly: true, }, { id: "text-generation-model", title: "Text generation model", to: "/settings/general", searchTerms: ["generated thread titles source control content default provider"], }, { id: "diagnostics", title: "Diagnostics", to: "/settings/general", searchTerms: ["logs traces processes resource history failures spans cpu memory"], }, { id: "legacy-plan-mode", title: "Plan mode (legacy)", to: "/settings/general", searchTerms: ["build plan composer old"], }, { id: "legacy-context-window-indicator", title: "Context window indicator (legacy)", to: "/settings/general", searchTerms: ["composer meter usage tokens circle old"], }, { id: "legacy-token-streaming", title: "Stream token by token (legacy)", to: "/settings/general", searchTerms: ["response output old compatibility"], }, { id: "legacy-sidebar", title: "Sidebar (legacy)", to: "/settings/general", searchTerms: ["project thread tree old flat list"], }, { id: "keybindings", title: "Keybindings", to: "/settings/keybindings", searchTerms: ["keyboard shortcuts hotkeys commands bindings json"], }, { id: "snap-shot-enabled", title: "SnapShots", searchTerms: ["window capture screenshot"], to: "/settings/snap-shot", }, { id: "snap-shot-accessibility", title: "Include app text", to: "/settings/snap-shot", targetId: "snap-shot-enabled", searchTerms: [ "capture accessibility data text UI structure elements privacy omit agent context", ], }, { id: "snap-shot-shortcut", title: "Capture shortcut", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "snap-shot-sound", title: "Capture sound", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "snap-shot-flash", title: "Capture flash", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "snap-shot-animations", title: "Capture animations", to: "/settings/snap-shot", targetId: "snap-shot-enabled", }, { id: "providers", title: "Providers", to: "/settings/providers", searchTerms: [ "agents cli codex claude cursor grok opencode antigravity google sign in sign out install subscription instances authentication api key models configuration binary path config directory endpoint arguments environment variables display name accent color custom favorite hidden auto compact", ], }, { id: "usage-providers", title: "Usage providers", to: "/settings/providers", searchTerms: [ "usage sources CLIProxyAPI CLI proxy hub quota subscription limits management key add remove", ], providerSettingsOnly: true, }, { id: "provider-health-check-interval", title: "Health check interval", to: "/settings/providers", searchTerms: ["refresh availability versions auth state models background probes seconds off"], providerSettingsOnly: true, }, { id: "agent-browser-access", title: "Agent browser access", to: "/settings/projects", searchTerms: ["allow open drive preview tools sessions"], }, { id: "device-hosts", title: "Device hosts", to: "/settings/integrations", searchTerms: ["ssh remote simulator emulator ios android mac mini identity key connection"], }, { id: "agent-device-access", title: "Agent device access", to: "/settings/integrations", targetId: "devices", searchTerms: ["allow simulator emulator ios android drive tools sessions"], }, { id: "device-hub", title: "Device hub", to: "/settings/integrations", targetId: "devices", searchTerms: ["simulator emulator ios android install start"], }, { id: "device-platform-support", title: "Simulator support", to: "/settings/integrations", targetId: "devices", searchTerms: ["xcode android studio sdk avd runtime"], }, { id: "browser-profiles", title: "Browser profiles", to: "/settings/integrations", targetId: "browser", }, { id: "browser-default-profile", title: "Default browser profile", to: "/settings/integrations", targetId: "browser-profiles", }, { id: "browser-default-viewport", title: "Default browser viewport", to: "/settings/integrations", searchTerms: ["preview size width height device desktop mobile rotate"], }, { id: "browser-default-zoom", title: "Default browser zoom", to: "/settings/integrations", searchTerms: ["preview page scale tabs percent"], }, { id: "browser-default-appearance", title: "Default browser appearance", to: "/settings/integrations", searchTerms: ["preview color scheme light dark system os"], }, { id: "browser-recording-frame-rate", title: "Browser recording frame rate", to: "/settings/integrations", }, { id: "browser-link-target", title: "Open links in", to: "/settings/integrations", searchTerms: ["links default browser in-app browser external open"], }, { id: "browser-auto-show-floating-preview", title: "Auto-show floating preview", to: "/settings/integrations", searchTerms: ["agent opens browser pop into view hide"], }, { id: "source-control", title: "Source control", to: "/settings/source-control", searchTerms: [ "version control git github gitlab bitbucket azure devops hosting integrations credentials scan server environment", ], }, { id: "git-fetch-interval", title: "Git fetch interval", to: "/settings/source-control", searchTerms: [ "automatic remote branch refresh background credentials security keys seconds off", ], primaryOnly: true, }, { id: "source-control-writing-style", title: "Source control writing style", to: "/settings/source-control", searchTerms: [