{
    "app.debug": {
        "category": "app_interface",
        "description": "Produces more informative errors when something goes wrong, but may expose sensitive data. Configured via LDR_APP_DEBUG environment variable. Requires server restart.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Debug Mode",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": false
    },
    "app.lock_settings": {
        "category": "app_interface",
        "description": "When enabled, prevents any modifications to settings through the UI. Useful for locking configuration in production environments. Must be changed directly in the database to re-enable editing.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Lock Settings",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": false
    },
    "app.enable_notifications": {
        "category": "app_interface",
        "description": "Enable browser push notifications to alert you when research completes or encounters errors. Requires browser permission to display notifications.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable Notifications",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "app.enable_web": {
        "category": "app_interface",
        "description": "Enable the web interface. When disabled, the application runs in CLI-only mode. Requires server restart to take effect.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable Web Server",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "app.enable_file_logging": {
        "category": "app_interface",
        "description": "Enable logging to files (WARNING: Log files are unencrypted and may contain sensitive data)",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable File Logging",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "app.timezone": {
        "category": "app_interface",
        "description": "Timezone for date calculations (e.g., news subscription YYYY-MM-DD placeholder). Use 'UTC' for server time or specify your local timezone.",
        "editable": true,
        "env_var": "TZ",
        "max_value": null,
        "min_value": null,
        "name": "Timezone",
        "options": [
            "UTC",
            "America/New_York",
            "America/Chicago",
            "America/Denver",
            "America/Los_Angeles",
            "America/Anchorage",
            "America/Toronto",
            "America/Vancouver",
            "America/Mexico_City",
            "America/Sao_Paulo",
            "Europe/London",
            "Europe/Paris",
            "Europe/Berlin",
            "Europe/Amsterdam",
            "Europe/Madrid",
            "Europe/Rome",
            "Europe/Moscow",
            "Asia/Dubai",
            "Asia/Kolkata",
            "Asia/Bangkok",
            "Asia/Singapore",
            "Asia/Hong_Kong",
            "Asia/Shanghai",
            "Asia/Tokyo",
            "Asia/Seoul",
            "Australia/Sydney",
            "Australia/Melbourne",
            "Australia/Perth",
            "Pacific/Auckland",
            "Pacific/Honolulu"
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "UTC",
        "visible": true
    },
    "app.max_concurrent_researches": {
        "category": "app_interface",
        "description": "Maximum number of concurrent research processes allowed per user",
        "editable": true,
        "env_var": "LDR_MAX_CONCURRENT",
        "max_value": null,
        "min_value": 1,
        "name": "Max Concurrent Researches",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "app.max_global_concurrent_researches": {
        "category": "app_interface",
        "description": "Maximum number of concurrent research processes allowed across all users (server-wide). Set via env var LDR_SERVER_MAX_CONCURRENT_RESEARCH. Requires server restart.",
        "editable": false,
        "env_var": "LDR_SERVER_MAX_CONCURRENT_RESEARCH",
        "max_value": 1000,
        "min_value": 1,
        "name": "Max Global Concurrent Researches",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 10,
        "visible": false
    },
    "app.queue_mode": {
        "category": "app_interface",
        "description": "How new research requests are handled. 'Direct' starts research immediately if a concurrent slot is available. 'Queue' always adds to a background queue for sequential processing in order.",
        "editable": true,
        "env_var": "LDR_QUEUE_MODE",
        "max_value": null,
        "min_value": null,
        "name": "Queue Mode",
        "options": [
            {
                "label": "Direct (Immediate)",
                "value": "direct"
            },
            {
                "label": "Queue (Background)",
                "value": "queue"
            }
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "direct",
        "visible": true
    },
    "app.host": {
        "category": "app_interface",
        "description": "IP address or hostname for the web server to bind to. Use '0.0.0.0' to accept connections from any network interface, '127.0.0.1' for localhost only, or a specific IP for targeted access. Requires server restart.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Web Host",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "text",
        "value": "0.0.0.0",
        "visible": true
    },
    "app.port": {
        "category": "app_interface",
        "description": "TCP port for the web server (1-65535). Requires server restart to take effect.",
        "editable": true,
        "max_value": 65535.0,
        "min_value": 1.0,
        "name": "Web Port",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "number",
        "value": 5000,
        "visible": true
    },
    "app.external_url": {
        "category": "app_interface",
        "description": "Public URL where this application is accessible (e.g., http://localhost:5000, https://myapp.example.com). Used for generating links in notifications. Leave empty to auto-detect from request context.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "External URL",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "text",
        "value": "",
        "visible": true
    },
    "app.theme": {
        "category": "app_interface",
        "description": "User interface color theme. Choose from 20 themes including popular developer themes.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "UI Theme",
        "options": [
            {
                "label": "Dark (Default)",
                "value": "dark"
            },
            {
                "label": "Light",
                "value": "light"
            },
            {
                "label": "Sepia (Reading)",
                "value": "sepia"
            },
            {
                "label": "High Contrast",
                "value": "high-contrast"
            },
            {
                "label": "Midnight Blue",
                "value": "midnight"
            },
            {
                "label": "Ocean",
                "value": "ocean"
            },
            {
                "label": "Forest",
                "value": "forest"
            },
            {
                "label": "Sunset",
                "value": "sunset"
            },
            {
                "label": "Rose",
                "value": "rose"
            },
            {
                "label": "Lavender",
                "value": "lavender"
            },
            {
                "label": "Nord",
                "value": "nord"
            },
            {
                "label": "Dracula",
                "value": "dracula"
            },
            {
                "label": "Monokai",
                "value": "monokai"
            },
            {
                "label": "Solarized Dark",
                "value": "solarized-dark"
            },
            {
                "label": "Solarized Light",
                "value": "solarized-light"
            },
            {
                "label": "Gruvbox Dark",
                "value": "gruvbox-dark"
            },
            {
                "label": "Gruvbox Light",
                "value": "gruvbox-light"
            },
            {
                "label": "Tokyo Night",
                "value": "tokyo-night"
            },
            {
                "label": "Catppuccin",
                "value": "catppuccin"
            },
            {
                "label": "One Dark",
                "value": "one-dark"
            },
            {
                "label": "System Default",
                "value": "system"
            }
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "dark",
        "visible": true
    },
    "app.web_interface": {
        "category": "app_interface",
        "description": "Enable the web interface for the application. When disabled, only CLI and API access is available. Requires server restart to take effect.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Web Interface",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "app.allow_registrations": {
        "category": "app_interface",
        "description": "Allow new user registrations through the web interface. Configured via LDR_APP_ALLOW_REGISTRATIONS environment variable. Set to 'false' to disable on public-facing deployments. Enabled by default so initial account creation works out of the box. Requires server restart.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Allow Registrations",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": false
    },
    "llm.llamacpp_f16_kv": {
        "category": null,
        "description": "Use 16-bit floating point for LlamaCpp's key-value cache. Reduces memory usage compared to 32-bit; disable only if you need higher precision and have enough VRAM.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Llamacpp F16 Kv",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "llm.llamacpp_model_path": {
        "category": null,
        "description": "Path to GGUF model file relative to models directory (~/.local/share/llm_models/). For llama.cpp server connections, use 'openai_endpoint' provider instead with the server's /v1 URL.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Llamacpp Model Path",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "text",
        "value": "",
        "visible": true
    },
    "llm.llamacpp_n_batch": {
        "category": null,
        "description": "Batch size for LlamaCpp token processing. Higher values improve inference speed but increase memory usage. Reduce if experiencing out-of-memory errors.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Llamacpp N Batch",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "number",
        "value": 512,
        "visible": true
    },
    "llm.llamacpp_n_gpu_layers": {
        "category": null,
        "description": "Number of model layers to offload to GPU for acceleration in LlamaCpp. 0 = CPU only, higher values = more GPU usage and faster inference. Set based on your available VRAM.",
        "editable": true,
        "max_value": null,
        "min_value": 0,
        "name": "Llamacpp N Gpu Layers",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "number",
        "value": 1,
        "visible": true
    },
    "llm.lmstudio.url": {
        "category": null,
        "description": "HTTP endpoint URL where LM Studio is running locally. Include the full path (e.g., http://localhost:1234/v1 for OpenAI-compatible API format).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Lmstudio Url",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "text",
        "value": "http://localhost:1234/v1",
        "visible": true
    },
    "llm.max_tokens": {
        "category": "llm_parameters",
        "description": "Maximum tokens in model responses. Automatically capped at 80% of the context window size to leave room for prompt tokens.",
        "editable": true,
        "max_value": 100000,
        "min_value": 100.0,
        "name": "Max Tokens",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "number",
        "value": 30000,
        "visible": true
    },
    "llm.context_window_unrestricted": {
        "category": "llm_parameters",
        "description": "Let cloud provider APIs manage their own token limits without a hard cap (recommended). Uncheck to enforce a specific limit via the Context Window Size setting.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Use Unrestricted Cloud Context Window",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "llm.context_window_size": {
        "category": "llm_parameters",
        "description": "Maximum context window size in tokens for cloud LLMs. Only used when unrestricted context is disabled.",
        "editable": true,
        "max_value": 20000000.0,
        "min_value": 512.0,
        "name": "Cloud Provider Context Window Limit",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "number",
        "value": 128000,
        "visible": true
    },
    "llm.local_context_window_size": {
        "category": "llm_parameters",
        "description": "Context window size in tokens for local LLMs (Ollama, LlamaCpp, LM Studio). Default is conservative (4096 tokens). Increase if your model and hardware support larger contexts.",
        "editable": true,
        "max_value": 131072.0,
        "min_value": 512.0,
        "name": "Local Provider Context Window Size",
        "options": null,
        "step": 512.0,
        "type": "LLM",
        "ui_element": "number",
        "value": 10000,
        "visible": true
    },
    "llm.supports_max_tokens": {
        "category": "llm_parameters",
        "description": "Feature flag for max_tokens parameter. Disable if your LLM API returns errors when max_tokens is set. When disabled, the parameter is not passed to the API.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports 'Max Tokens'",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "llm.model": {
        "category": "llm_general",
        "description": "The language model to use. Available models depend on the selected provider (e.g., 'gpt-4o' for OpenAI, 'gemma:7b' for Ollama). You can type any model name supported by your provider.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "LLM Model",
        "options": [
            {
                "label": "GPT-4o (OpenAI)",
                "value": "gpt-4o"
            },
            {
                "label": "GPT-3.5 Turbo (OpenAI)",
                "value": "gpt-3.5-turbo"
            },
            {
                "label": "Claude 3.5 Sonnet (Anthropic)",
                "value": "claude-3-5-sonnet-latest"
            },
            {
                "label": "Claude 3 Opus (Anthropic)",
                "value": "claude-3-opus-20240229"
            },
            {
                "label": "Llama 3 (Meta)",
                "value": "llama3"
            },
            {
                "label": "Mistral (Mistral AI)",
                "value": "mistral"
            },
            {
                "label": "Mixtral (Mistral AI)",
                "value": "mixtral"
            }
        ],
        "step": null,
        "type": "LLM",
        "ui_element": "select",
        "value": "gemma3:12b",
        "visible": true
    },
    "llm.openai_endpoint.url": {
        "category": null,
        "description": "URL of a custom OpenAI-compatible API endpoint. Use for llama.cpp server, vLLM, Ollama, OpenRouter, Groq, Together, or any service that implements the OpenAI API format. Example for local llama.cpp: http://localhost:8000/v1",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Openai Endpoint Url",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "text",
        "value": "https://openrouter.ai/api/v1",
        "visible": true
    },
    "llm.ollama.url": {
        "category": null,
        "description": "HTTP endpoint URL where Ollama is running. Used to connect to local or remote Ollama instances for model inference.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Ollama Endpoint Url",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "text",
        "value": "http://localhost:11434",
        "visible": true
    },
    "llm.ollama.enable_thinking": {
        "category": "llm",
        "description": "Enable thinking/reasoning mode for models like deepseek-r1 and qwen2.5. When enabled (recommended), the model performs internal reasoning for more accurate answers, but the reasoning content is automatically separated and excluded from the final response. When disabled, the model gives faster but potentially less accurate direct answers without reasoning.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Ollama Enable Thinking",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "llm.provider": {
        "category": "llm_general",
        "description": "The LLM service provider. Choose local providers (Ollama, LM Studio, LlamaCpp) for free on-device inference, or cloud APIs (OpenAI, Anthropic, Google, OpenRouter) for hosted models.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "LLM Provider",
        "options": [
            {
                "label": "OpenAI API",
                "value": "openai"
            },
            {
                "label": "Anthropic API",
                "value": "anthropic"
            },
            {
                "label": "Ollama (Local)",
                "value": "ollama"
            },
            {
                "label": "LM Studio (Local)",
                "value": "lmstudio"
            },
            {
                "label": "OpenAI-Compatible Endpoint (llama.cpp, vLLM, etc.)",
                "value": "openai_endpoint"
            },
            {
                "label": "Google Gemini API",
                "value": "google"
            },
            {
                "label": "OpenRouter API",
                "value": "openrouter"
            }
        ],
        "step": null,
        "type": "LLM",
        "ui_element": "select",
        "value": "OLLAMA",
        "visible": true
    },
    "llm.temperature": {
        "category": "llm_parameters",
        "description": "Controls randomness in model outputs. Lower values (0.0-0.3) produce deterministic, factual responses; higher values (0.7-1.0) produce more creative and varied outputs.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Temperature",
        "options": null,
        "step": 0.05,
        "type": "LLM",
        "ui_element": "range",
        "value": 0.7,
        "visible": true
    },
    "llm.anthropic.api_key": {
        "category": "llm_general",
        "description": "Your Anthropic API key for Claude models. Get one at console.anthropic.com. Required when using the Anthropic provider.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Anthropic API Key",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "llm.openai.api_key": {
        "category": "llm_general",
        "description": "Your OpenAI API key for GPT models. Get one at platform.openai.com. Required when using the OpenAI provider.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "OpenAI API Key",
        "options": null,
        "step": null,
        "type": "LLM",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "llm.openai_endpoint.api_key": {
        "category": "llm_general",
        "description": "API key for your custom OpenAI-compatible endpoint. For cloud services (OpenRouter, Groq), use your actual API key. For local servers (llama.cpp, vLLM), use any non-empty value like 'not-needed'.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "OpenAI Endpoint API Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "report.searches_per_section": {
        "category": "report_parameters",
        "description": "Number of web searches to perform per report section. Higher values increase research depth for each section but also increase search engine queries and processing time. Default is 2.",
        "editable": true,
        "max_value": 5.0,
        "min_value": 1.0,
        "name": "Searches Per Section",
        "options": null,
        "step": null,
        "type": "REPORT",
        "ui_element": "number",
        "value": 2,
        "visible": true
    },
    "report.citation_format": {
        "category": "report_parameters",
        "description": "Citation formatting style for reports. Options include numbered hyperlinks [1], domain-based hyperlinks [arxiv.org], smart domain numbering [arxiv.org-1], and plain numbered references without links.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Citation Format",
        "options": [
            {
                "value": "number_hyperlinks",
                "label": "Numbers with hyperlinks [1]"
            },
            {
                "value": "domain_hyperlinks",
                "label": "Domain names with hyperlinks [arxiv.org]"
            },
            {
                "value": "domain_id_hyperlinks",
                "label": "Domain with smart numbering [arxiv.org] or [arxiv.org-1]"
            },
            {
                "value": "domain_id_always_hyperlinks",
                "label": "Domain with consistent numbering [arxiv.org-1]"
            },
            {
                "value": "no_hyperlinks",
                "label": "Numbers without hyperlinks [1]"
            }
        ],
        "step": null,
        "type": "REPORT",
        "ui_element": "select",
        "value": "number_hyperlinks",
        "visible": true
    },
    "report.export_formats": {
        "category": "report_parameters",
        "description": "Available export format options displayed in the user interface. Supported formats include Markdown (.md), LaTeX (.tex), Quarto (.qmd), and RIS bibliographic format.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Export Formats",
        "options": [
            {
                "value": "markdown",
                "label": "Markdown (.md)"
            },
            {
                "value": "latex",
                "label": "LaTeX (.tex)"
            },
            {
                "value": "quarto",
                "label": "Quarto (.qmd)"
            }
        ],
        "step": null,
        "type": "REPORT",
        "ui_element": "multiselect",
        "value": [
            "markdown",
            "latex",
            "quarto",
            "ris"
        ],
        "visible": true
    },
    "report.enable_file_backup": {
        "category": "report_parameters",
        "description": "Also save reports as files on disk for external access (reports are always stored in the database regardless). Enable this if you need to access reports from outside the web interface.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable File Backup",
        "options": null,
        "step": null,
        "type": "REPORT",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "report.max_context_sections": {
        "category": "report_parameters",
        "description": "Number of previously generated report sections to include as context when writing new sections. Helps the LLM avoid repeating content. Higher values increase context size but may exceed smaller model limits. Default is 3.",
        "editable": true,
        "max_value": 10,
        "min_value": 1,
        "name": "Max Context Sections",
        "options": null,
        "step": 1,
        "type": "REPORT",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "report.max_context_chars": {
        "category": "report_parameters",
        "description": "Maximum character limit for previous section context when generating report sections. If accumulated context exceeds this, it is truncated at sentence boundaries. Lower values are safer for smaller local models. Default is 4000.",
        "editable": true,
        "max_value": 50000,
        "min_value": 1000,
        "name": "Max Context Characters",
        "options": null,
        "step": 500,
        "type": "REPORT",
        "ui_element": "number",
        "value": 4000,
        "visible": true
    },
    "search.iterations": {
        "category": null,
        "description": "Number of search-and-refine cycles to run. Each iteration generates follow-up questions based on previous results to progressively deepen the research. More iterations yield better coverage but increase search and LLM API usage.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Search Iterations",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "search.max_filtered_results": {
        "category": "search_parameters",
        "description": "Per-query limit on results kept after LLM relevance filtering. Raw results (controlled by 'Max Results') are filtered for relevance, then this setting caps how many are kept. Only applies when relevance filtering is active for the search engine.",
        "editable": true,
        "max_value": 100,
        "min_value": 1,
        "name": "Max Filtered Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 20,
        "visible": true
    },
    "search.max_results": {
        "category": "search_parameters",
        "description": "Maximum raw search results to retrieve from the search engine per query, before any relevance filtering is applied.",
        "editable": true,
        "max_value": 50.0,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 50,
        "visible": true
    },
    "search.final_max_results": {
        "category": "search_parameters",
        "description": "Maximum unique sources to include in the final research output. Applied once after all search iterations complete, deduplicating and filtering across all accumulated results.",
        "editable": true,
        "max_value": 200.0,
        "min_value": 1,
        "name": "Final Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 100,
        "visible": true
    },
    "search.quality_check_urls": {
        "category": null,
        "description": "Validate that fetched webpage content matches the search result's title and snippet. Helps filter out broken links or mismatched content.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Quality Check Urls",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.questions_per_iteration": {
        "category": "search_parameters",
        "description": "Number of search queries to generate and execute per iteration. More questions increase coverage but also increase API calls and processing time.",
        "editable": true,
        "max_value": 10.0,
        "min_value": 1.0,
        "name": "Questions Per Iteration",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 1,
        "visible": true
    },
    "search.question_context_limit": {
        "category": "search_parameters",
        "description": "Maximum number of previous search results provided as context when generating follow-up questions in subsequent iterations. Lower values reduce context size and focus on top results. Set to 0 for unlimited.",
        "editable": true,
        "max_value": 100,
        "min_value": 0,
        "name": "Question Context Limit",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 30,
        "visible": true
    },
    "focused_iteration.adaptive_questions": {
        "category": "focused_iteration",
        "description": "When enabled (1), the system monitors recent search success and warns the LLM to broaden queries if 3+ searches in a recent window returned no results. When disabled (0), queries are generated without feedback from previous result counts.",
        "editable": true,
        "max_value": 1,
        "min_value": 0,
        "name": "Adaptive Question Generation",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "focused_iteration.knowledge_summary_limit": {
        "category": "focused_iteration",
        "description": "Limits the number of top search results included in the knowledge summary shown to the LLM during question generation. Set to 10 to show only the top 10 results, reducing token usage. Set to 0 for unlimited. Note: This only affects question generation prompts — final answer synthesis always uses all results.",
        "editable": true,
        "max_value": 100,
        "min_value": 0,
        "name": "Results Shown for Question Generation",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 10,
        "visible": true
    },
    "focused_iteration.snippet_truncate": {
        "category": "focused_iteration",
        "description": "Maximum characters per snippet when showing search results to LLM for question generation. Shorter snippets (e.g., 200) reduce token usage and keep context focused. Set to 0 for full snippets. NOTE: This only affects question generation - the final answer synthesis sees full snippets.",
        "editable": true,
        "max_value": 1000,
        "min_value": 0,
        "name": "Snippet Length for Question Generation",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 200,
        "visible": true
    },
    "focused_iteration.question_generator": {
        "category": "focused_iteration",
        "description": "Algorithm for generating follow-up search queries. 'browsecomp' (default): Systematically extracts and combines entities (names, dates, locations) for predictable, focused searches. 'flexible': Allows the LLM more freedom to explore diverse search strategies — less rigid but may be less consistent.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Question Generation Algorithm",
        "options": [
            "browsecomp",
            "flexible"
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "browsecomp",
        "visible": true
    },
    "focused_iteration.prompt_knowledge_truncate": {
        "category": "focused_iteration",
        "description": "Maximum characters of accumulated knowledge to include in the LLM prompt for follow-up question generation. Applied after 'Results Shown for Question Generation' selects the top N results — this further truncates that combined text to a character limit. Set to 0 for unlimited.",
        "editable": true,
        "max_value": 10000,
        "min_value": 0,
        "name": "Prompt Knowledge Truncation",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 1500,
        "visible": true
    },
    "focused_iteration.previous_searches_limit": {
        "category": "focused_iteration",
        "description": "Maximum number of recent search iterations to show the LLM when generating follow-up questions. Helps the LLM avoid duplicate queries and reduces token usage. Set to 0 for unlimited (show all previous searches). When active, also caps displayed queries per iteration to 3.",
        "editable": true,
        "max_value": 100,
        "min_value": 0,
        "name": "Previous Searches Shown",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 10,
        "visible": true
    },
    "search.show_all_strategies": {
        "category": "search_parameters",
        "description": "When enabled, all available search strategies (including advanced and experimental ones) are shown in strategy dropdowns. When disabled, only the recommended strategies are shown.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Show All Strategies",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.search_strategy": {
        "category": "search_parameters",
        "description": "Research methodology. 'source-based': Finds and extracts from sources (good for comprehensive research). 'focused-iteration': Uses entity-based progressive exploration (optimized for factual Q&A, ~95% SimpleQA accuracy, requires larger context windows). 'focused-iteration-standard': Comprehensive variant of focused-iteration with broader exploration. 'iterative-refinement': LLM-guided progressive refinement with gap analysis. 'topic-organization': Organizes research around discovered topic clusters. 'mcp': Agentic ReAct-pattern research using MCP tools.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Strategy",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "langgraph-agent",
        "visible": true
    },
    "search.region": {
        "category": "search_parameters",
        "description": "Geographic region for search results localization. Affects which results are prioritized based on regional relevance.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Region",
        "options": [
            {
                "label": "United States",
                "value": "us"
            },
            {
                "label": "United Kingdom",
                "value": "uk"
            },
            {
                "label": "France",
                "value": "fr"
            },
            {
                "label": "Germany",
                "value": "de"
            },
            {
                "label": "Japan",
                "value": "jp"
            },
            {
                "label": "No Region (Worldwide)",
                "value": "wt-wt"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "us",
        "visible": true
    },
    "search.safe_search": {
        "category": "search_parameters",
        "description": "Filter out adult and inappropriate content from search results. Passed to search engines that support content filtering.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Safe Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.search_language": {
        "category": "search_parameters",
        "description": "Preferred language for search results. Search engines will attempt to return and prioritize results in this language when available.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Language",
        "options": [
            {
                "label": "English",
                "value": "English"
            },
            {
                "label": "French",
                "value": "French"
            },
            {
                "label": "German",
                "value": "German"
            },
            {
                "label": "Spanish",
                "value": "Spanish"
            },
            {
                "label": "Italian",
                "value": "Italian"
            },
            {
                "label": "Japanese",
                "value": "Japanese"
            },
            {
                "label": "Chinese",
                "value": "Chinese"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "English",
        "visible": true
    },
    "search.searches_per_section": {
        "category": "search_parameters",
        "description": "Number of independent searches per report section when generating structured reports. Increases coverage but also increases API usage.",
        "editable": true,
        "max_value": 5.0,
        "min_value": 1.0,
        "name": "Searches Per Section",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 2,
        "visible": true
    },
    "search.skip_relevance_filter": {
        "category": "search_parameters",
        "description": "When ON, LLM relevance filtering is disabled for all search engines. When OFF, each engine decides automatically: academic engines (arXiv, PubMed) enable filtering since they use keyword matching, while generic engines (Google, Brave) skip it since they already rank by relevance.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Skip Relevance Filter",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.journal_reputation.threshold": {
        "category": "journal_quality_filter_parameters",
        "description": "Minimum journal quality score (1-10 scale) required for academic results. Sources from journals below this threshold are excluded when the filter is enabled.",
        "editable": true,
        "max_value": 10,
        "min_value": 1,
        "name": "Journal Quality Threshold",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 4,
        "visible": true
    },
    "search.journal_reputation.max_context": {
        "category": "journal_quality_filter_parameters",
        "description": "Maximum characters of source content to include when the LLM evaluates journal quality. Larger values provide more context but use more tokens.",
        "editable": true,
        "max_value": 1000000,
        "min_value": 500,
        "name": "Journal Quality Context Size",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3000,
        "visible": true
    },
    "search.journal_reputation.exclude_non_published": {
        "category": "journal_quality_filter_parameters",
        "description": "When enabled, excludes results without a formal journal publication reference. This ensures only sources with documented journal publications are included in analysis.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Exclude Non-Published Results",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.journal_reputation.reanalysis_period": {
        "category": "journal_quality_filter_parameters",
        "description": "How often to refresh cached journal quality assessments. After this period, the LLM will re-evaluate the journal's reputation.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Quality Reanalysis Period",
        "options": [
            {
                "label": "Yearly",
                "value": "365"
            },
            {
                "label": "Every 6 Months",
                "value": "182"
            },
            {
                "label": "Every Month",
                "value": "30"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "365",
        "visible": true
    },
    "search.snippets_only": {
        "category": "search_parameters",
        "description": "Only retrieve search snippets instead of full webpage content. Reduces API usage and processing time, but provides less context for analysis.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Snippets Only",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.time_period": {
        "category": "search_parameters",
        "description": "Time range filter for search results. Limits results to content published within the specified period (day, week, month, year, or all time).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Time Period",
        "options": [
            {
                "label": "Past 24 hours",
                "value": "d"
            },
            {
                "label": "Past week",
                "value": "w"
            },
            {
                "label": "Past month",
                "value": "m"
            },
            {
                "label": "Past year",
                "value": "y"
            },
            {
                "label": "All time",
                "value": "all"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "y",
        "visible": true
    },
    "search.tool": {
        "category": "search_general",
        "description": "Search engine to use for research queries. 'Auto' intelligently selects the best engine for each query type. Each engine may require its own API key or service to be configured separately.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Engine",
        "options": [
            {
                "label": "Auto (Default)",
                "value": "auto"
            },
            {
                "label": "Arxiv",
                "value": "arxiv"
            },
            {
                "label": "Wikipedia",
                "value": "wikipedia"
            },
            {
                "label": "Wikinews",
                "value": "wikinews"
            },
            {
                "label": "Pubmed",
                "value": "pubmed"
            },
            {
                "label": "OpenAlex",
                "value": "openalex"
            },
            {
                "label": "Semantic Scholar",
                "value": "semantic_scholar"
            },
            {
                "label": "Github",
                "value": "github"
            },
            {
                "label": "SerpAPI (Google)",
                "value": "serpapi"
            },
            {
                "label": "ScaleSerp (Google + Caching)",
                "value": "scaleserp"
            },
            {
                "label": "Serper (Google)",
                "value": "serper"
            },
            {
                "label": "SearXNG (Self-hosted)",
                "value": "searxng"
            },
            {
                "label": "Google Programmable Search Engine",
                "value": "google_pse"
            },
            {
                "label": "DuckDuckGo",
                "value": "duckduckgo"
            },
            {
                "label": "Brave",
                "value": "brave"
            },
            {
                "label": "Mojeek",
                "value": "mojeek"
            },
            {
                "label": "Wayback",
                "value": "wayback"
            },
            {
                "label": "Local All",
                "value": "local_all"
            },
            {
                "label": "Multi-Engine Search",
                "value": "parallel"
            },
            {
                "label": "Scientific Search (Academic Focus)",
                "value": "parallel_scientific"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "searxng",
        "visible": true
    },
    "search.engine.web.arxiv.display_name": {
        "category": "arxiv",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "ArXiv",
        "visible": false
    },
    "search.engine.web.arxiv.description": {
        "category": "arxiv",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search papers uploaded to ArXiv.",
        "visible": false
    },
    "search.engine.web.arxiv.journal_reputation.enabled": {
        "category": "arxiv",
        "description": "Enable journal quality filtering for this search engine.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Filter Low-Quality Journals",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.arxiv.default_params.max_results": {
        "category": "arxiv",
        "description": "Maximum number of papers to retrieve from arXiv per search query.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 20,
        "visible": true
    },
    "search.engine.web.arxiv.default_params.sort_by": {
        "category": "arxiv",
        "description": "How to sort arXiv results: 'relevance' for best match, 'lastUpdatedDate' for recently updated, 'submittedDate' for newest submissions.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Sort By",
        "options": [
            {
                "label": "Relevance",
                "value": "relevance"
            },
            {
                "label": "Last Updated Date",
                "value": "lastUpdatedDate"
            },
            {
                "label": "Submitted Date",
                "value": "submittedDate"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "relevance",
        "visible": true
    },
    "search.engine.web.arxiv.default_params.sort_order": {
        "category": "arxiv",
        "description": "Sort order for arXiv results: 'descending' (newest/most relevant first) or 'ascending' (oldest/least relevant first).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Sort Order",
        "options": [
            {
                "label": "Ascending",
                "value": "ascending"
            },
            {
                "label": "Descending",
                "value": "descending"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "descending",
        "visible": true
    },
    "search.engine.web.arxiv.reliability": {
        "category": "arxiv",
        "description": "Reliability rating (0-1) for arXiv as a source. Higher values indicate more trustworthy academic content.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.9,
        "visible": true
    },
    "search.engine.web.arxiv.requires_api_key": {
        "category": "arxiv",
        "description": "Whether arXiv requires an API key. arXiv is free and open access, so this is false.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.arxiv.strengths": {
        "category": "arxiv",
        "description": "Key advantages of arXiv: Free access to preprints, covers physics/math/CS/biology, fast publication of cutting-edge research.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "scientific papers",
            "academic research",
            "physics",
            "computer science",
            "mathematics",
            "statistics",
            "machine learning",
            "preprints"
        ],
        "visible": true
    },
    "search.engine.web.arxiv.weaknesses": {
        "category": "arxiv",
        "description": "Limitations of arXiv: Preprints aren't peer-reviewed, limited to STEM fields, keyword-based search may miss semantic matches.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "non-academic topics",
            "consumer products",
            "news",
            "general information"
        ],
        "visible": true
    },
    "search.engine.auto.display_name": {
        "category": "auto",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Auto",
        "visible": false
    },
    "search.engine.auto.description": {
        "category": "auto",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Attempt to choose the best combination of search engines automatically.",
        "visible": false
    },
    "search.engine.auto.default_params.max_engines_to_try": {
        "category": "auto",
        "description": "Maximum number of search engines to try before returning results. Auto mode selects the best engine(s) based on your query type.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Engines To Try",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "search.engine.auto.default_params.use_api_key_services": {
        "category": "auto",
        "description": "Whether to include paid API services (Brave, SerpAPI, etc.) in auto-selection. Disable to only use free search engines.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Use Api Key Services",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.auto.reliability": {
        "category": "auto",
        "description": "Reliability rating for auto mode. Varies based on which underlying engine is selected.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.85,
        "visible": true
    },
    "search.engine.auto.requires_api_key": {
        "category": "auto",
        "description": "Whether auto mode requires API keys. False because it can fall back to free engines like Wikipedia.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.auto.requires_llm": {
        "category": "auto",
        "description": "Whether auto mode uses LLM to select the best engine. When disabled, falls back to rule-based selection.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Llm",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.auto.strengths": {
        "category": "auto",
        "description": "Key advantages of auto mode: Intelligently selects the best engine for each query type, tries multiple sources if needed.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "intelligent engine selection",
            "adaptable to query type",
            "fallback capabilities"
        ],
        "visible": true
    },
    "search.engine.auto.weaknesses": {
        "category": "auto",
        "description": "Limitations of auto mode: May use more API calls trying multiple engines, selection heuristics may not always be optimal.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "slightly slower due to LLM analysis"
        ],
        "visible": true
    },
    "search.engine.web.brave.display_name": {
        "category": "brave",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Brave",
        "visible": false
    },
    "search.engine.web.brave.description": {
        "category": "brave",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search the web using the Brave search engine.",
        "visible": false
    },
    "search.engine.web.brave.api_key": {
        "category": "brave",
        "description": "The Brave API key to use.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.brave.default_params.region": {
        "category": "brave",
        "description": "Geographic region code for Brave search results (e.g., 'US', 'UK', 'DE').",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Region",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "US",
        "visible": true
    },
    "search.engine.web.brave.default_params.safe_search": {
        "category": "brave",
        "description": "Enable safe search filtering for Brave to exclude adult content.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Safe Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.brave.default_params.search_language": {
        "category": "brave",
        "description": "Preferred language for Brave search results.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Language",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "English",
        "visible": true
    },
    "search.engine.web.brave.default_params.time_period": {
        "category": "brave",
        "description": "Time range filter for Brave results (e.g., 'd' for day, 'w' for week, 'm' for month, 'y' for year).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Time Period",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "y",
        "visible": true
    },
    "search.engine.web.brave.reliability": {
        "category": "brave",
        "description": "Reliability rating (0-1) for Brave Search. Good general-purpose search with privacy focus.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.7,
        "visible": true
    },
    "search.engine.web.brave.requires_api_key": {
        "category": "brave",
        "description": "Whether Brave Search requires an API key. Yes - get one at brave.com/search/api.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.brave.strengths": {
        "category": "brave",
        "description": "Key advantages of Brave: Privacy-focused, good semantic search, reasonable pricing, full-text retrieval available.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "privacy-focused web search",
            "product information",
            "reviews",
            "recent content",
            "news",
            "broad coverage"
        ],
        "visible": true
    },
    "search.engine.web.brave.supports_full_search": {
        "category": "brave",
        "description": "Whether Brave supports fetching full webpage content beyond snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.brave.weaknesses": {
        "category": "brave",
        "description": "Limitations of Brave: Smaller index than Google, requires paid API for production use.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "requires API key with usage limits",
            "smaller index than Google"
        ],
        "visible": true
    },
    "general.enable_fact_checking": {
        "category": null,
        "description": "Enable LLM-based fact verification for research findings. Adds additional validation pass to check claims against sources.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable Fact Checking",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "general.knowledge_accumulation": {
        "category": null,
        "description": "How to compress accumulated knowledge between search iterations. 'ITERATION': Compress and carry forward knowledge after each iteration completes (default). 'QUESTION': Compress after every individual question within an iteration (more aggressive, saves tokens). 'NO_KNOWLEDGE': Start fresh each iteration with no carried-forward context.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Knowledge Accumulation",
        "options": [
            {
                "label": "Per Iteration",
                "value": "ITERATION"
            },
            {
                "label": "Per Question",
                "value": "QUESTION"
            },
            {
                "label": "No Knowledge Accumulation",
                "value": "NO_KNOWLEDGE"
            }
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "ITERATION",
        "visible": true
    },
    "general.knowledge_accumulation_context_limit": {
        "category": null,
        "description": "Maximum character count for accumulated knowledge context. Reserved for future use — not currently enforced at runtime.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Knowledge Accumulation Context Limit",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "number",
        "value": 2000000,
        "visible": false
    },
    "general.output_instructions": {
        "category": "general",
        "description": "Customize how research outputs are formatted: language, tone, style, formatting preferences, audience level, etc. Examples: 'Respond in Spanish with formal tone' | 'Use simple language for beginners' | 'Be concise with bullet points'. Leave empty for default English output.",
        "editable": true,
        "max_value": 1500,
        "min_value": null,
        "name": "Output Instructions",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "textarea",
        "value": "",
        "visible": true
    },
    "search.engine.web.github.display_name": {
        "category": "github",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Github",
        "visible": false
    },
    "search.engine.web.github.description": {
        "category": "github",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search projects on Github.",
        "visible": false
    },
    "search.engine.web.github.default_params.include_issues": {
        "category": "github",
        "description": "Include recent GitHub issues in repository search results.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Issues",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.github.default_params.include_readme": {
        "category": "github",
        "description": "Fetch and include README content when searching repositories.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Readme",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.github.default_params.max_results": {
        "category": "github",
        "description": "Maximum number of GitHub results to retrieve per search.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 15,
        "visible": true
    },
    "search.engine.web.github.default_params.search_type": {
        "category": "github",
        "description": "What to search on GitHub: 'repositories', 'code', 'issues', or 'users'.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Type",
        "options": [
            {
                "label": "Repositories",
                "value": "repositories"
            },
            {
                "label": "Code",
                "value": "code"
            },
            {
                "label": "Issues",
                "value": "issues"
            },
            {
                "label": "Users",
                "value": "users"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "repositories",
        "visible": true
    },
    "search.engine.web.github.reliability": {
        "category": "github",
        "description": "Reliability rating (0-1) for GitHub as a source. Great for code and technical projects.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.99,
        "visible": true
    },
    "search.engine.web.github.requires_api_key": {
        "category": "github",
        "description": "Whether GitHub requires a personal access token. Optional but recommended for higher rate limits (10→30 req/min).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.github.api_key": {
        "category": "github",
        "description": "GitHub Personal Access Token for API authentication. Without this, you're limited to 10 requests/minute for search API. With authentication, you get 30 requests/minute for search API.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "GitHub API Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.github.strengths": {
        "category": "github",
        "description": "Key advantages of GitHub: Excellent for code/technical queries, includes README content, issue discussions, works without API key.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "code repositories",
            "software documentation",
            "open source projects",
            "programming issues",
            "developer information",
            "technical documentation"
        ],
        "visible": true
    },
    "search.engine.web.github.supports_full_search": {
        "category": "github",
        "description": "Whether GitHub supports fetching full content (README, code files) beyond basic search results.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.github.weaknesses": {
        "category": "github",
        "description": "Limitations of GitHub: Limited to code/technical content, strict rate limits without authentication.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "non-technical content",
            "content outside GitHub",
            "rate limits without API key"
        ],
        "visible": true
    },
    "search.engine.web.google_pse.display_name": {
        "category": "google_pse",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Google PSE",
        "visible": false
    },
    "search.engine.web.google_pse.description": {
        "category": "google_pse",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search the web using Google's Programmable Search Engine API.",
        "visible": false
    },
    "search.engine.web.google_pse.api_key": {
        "category": "google_pse",
        "description": "The Google PSE API key to use.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.google_pse.default_params.region": {
        "category": "google_pse",
        "description": "Geographic region for search results (e.g., 'us', 'uk', 'de'). Results prioritized from this region.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Region",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "us",
        "visible": true
    },
    "search.engine.web.google_pse.default_params.safe_search": {
        "category": "google_pse",
        "description": "Enable Google SafeSearch to filter explicit content from results.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Safe Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.google_pse.default_params.search_language": {
        "category": "google_pse",
        "description": "Language for search queries and results (e.g., 'English', 'German'). Filters results by language.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Language",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "English",
        "visible": true
    },
    "search.engine.web.google_pse.reliability": {
        "category": "google_pse",
        "description": "Reliability score (0-1) indicating result quality. Google PSE is highly reliable (0.9) due to Google's indexing quality.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.9,
        "visible": true
    },
    "search.engine.web.google_pse.requires_api_key": {
        "category": "google_pse",
        "description": "Indicates this engine requires a Google API key and Custom Search Engine ID. Get credentials from Google Cloud Console.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.google_pse.strengths": {
        "category": "google_pse",
        "description": "Advantages of Google PSE: Custom search scope, high-quality results, domain-specific filtering, configurable search experience.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "custom search scope",
            "high-quality results",
            "domain-specific search",
            "configurable search experience",
            "control over search index"
        ],
        "visible": true
    },
    "search.engine.web.google_pse.supports_full_search": {
        "category": "google_pse",
        "description": "Indicates this engine can fetch full page content after initial search, not just snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.google_pse.weaknesses": {
        "category": "google_pse",
        "description": "Limitations: Requires API key, limited to 10,000 queries/day on free tier, requires search engine configuration in Google Control Panel.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "requires API key with usage limits",
            "limited to 10,000 queries/day on free tier",
            "requires search engine configuration in Google Control Panel"
        ],
        "visible": true
    },
    "search.engine.DEFAULT_SEARCH_ENGINE": {
        "category": "local_all",
        "description": "Fallback search engine used when the configured engine is unavailable or has errors.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Default Search Engine",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "wikipedia",
        "visible": true
    },
    "search.engine.web.pubmed.display_name": {
        "category": "pubmed",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "PubMed",
        "visible": false
    },
    "search.engine.web.pubmed.description": {
        "category": "pubmed",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search papers indexed by PubMed.",
        "visible": false
    },
    "search.engine.web.pubmed.api_key": {
        "category": "pubmed",
        "description": "The PubMed API key to use.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.pubmed.default_params.days_limit": {
        "category": "pubmed",
        "description": "Restrict results to articles published within the last N days. Leave empty for no time restriction.",
        "editable": true,
        "max_value": null,
        "min_value": 0,
        "name": "Days Limit",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 0,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.full_text_limit": {
        "category": "pubmed",
        "description": "Maximum number of full-text articles to download from PubMed Central when get_full_text is enabled.",
        "editable": true,
        "max_value": null,
        "min_value": 0,
        "name": "Full Text Limit",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.get_abstracts": {
        "category": "pubmed",
        "description": "Fetch article abstracts for search results. Recommended for understanding paper content.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Get Abstracts",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.get_full_text": {
        "category": "pubmed",
        "description": "Attempt to retrieve full-text articles from PubMed Central (PMC). Only works for open-access papers.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Get Full Text",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.max_results": {
        "category": "pubmed",
        "description": "Maximum number of PubMed articles to retrieve per search query.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 20,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.optimize_queries": {
        "category": "pubmed",
        "description": "Automatically optimize natural language queries for PubMed's specialized syntax (MeSH terms, Boolean operators).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Optimize Queries",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.max_mesh_terms": {
        "category": "pubmed",
        "description": "Maximum number of MeSH terms to show (0 = all)",
        "editable": true,
        "max_value": 10,
        "min_value": 0,
        "name": "Max MeSH Terms",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.max_keywords": {
        "category": "pubmed",
        "description": "Maximum number of keywords to show (0 = all)",
        "editable": true,
        "max_value": 10,
        "min_value": 0,
        "name": "Max Keywords",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "search.engine.web.pubmed.reliability": {
        "category": "pubmed",
        "description": "Reliability rating (0-1) for PubMed. Peer-reviewed biomedical literature is highly reliable.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.98,
        "visible": true
    },
    "search.engine.web.pubmed.requires_api_key": {
        "category": "pubmed",
        "description": "Whether PubMed requires an NCBI API key. Optional but recommended for higher rate limits.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.requires_llm": {
        "category": "pubmed",
        "description": "Whether PubMed query optimization uses LLM. Helps convert natural language to effective PubMed queries.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Llm",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.strengths": {
        "category": "pubmed",
        "description": "Key advantages of PubMed: Peer-reviewed biomedical literature, MeSH indexing, abstracts, citation data, free access.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "biomedical literature",
            "medical research",
            "clinical studies",
            "life sciences",
            "health information",
            "scientific papers"
        ],
        "visible": true
    },
    "search.engine.web.pubmed.weaknesses": {
        "category": "pubmed",
        "description": "Limitations of PubMed: Limited to biomedical literature, keyword-based search, full-text only for open-access papers.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "non-medical topics",
            "very recent papers may be missing",
            "limited to published research"
        ],
        "visible": true
    },
    "search.engine.web.searxng.display_name": {
        "category": "searxng",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "SearXNG (Locally-hosted)",
        "visible": false
    },
    "search.engine.web.searxng.description": {
        "category": "searxng",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "A locally-hosted meta-search engine.",
        "visible": false
    },
    "search.engine.web.searxng.default_params.instance_url": {
        "category": "searxng",
        "description": "The SearXNG API endpoint URL.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Endpoint URL",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "http://localhost:8080",
        "visible": true
    },
    "search.engine.web.searxng.default_params.categories": {
        "category": "searxng",
        "description": "SearXNG search categories to use (general, images, videos, news, music, files, etc.).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Categories",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "general"
        ],
        "visible": true
    },
    "search.engine.web.searxng.default_params.delay_between_requests": {
        "category": "searxng",
        "description": "Seconds to wait between SearXNG requests. Set higher values to avoid rate limiting on public instances.",
        "editable": true,
        "env_var": "SEARXNG_DELAY",
        "max_value": null,
        "min_value": 0,
        "name": "Delay Between Requests",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 0,
        "visible": true
    },
    "search.engine.web.searxng.default_params.include_full_content": {
        "category": "searxng",
        "description": "Fetch full webpage content for SearXNG results, not just snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Full Content",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.searxng.default_params.language": {
        "category": "searxng",
        "description": "Language code for SearXNG results (e.g., 'en', 'de', 'fr').",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Language",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "en",
        "visible": true
    },
    "search.engine.web.searxng.default_params.max_results": {
        "category": "searxng",
        "description": "Maximum number of results to retrieve from SearXNG per search.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 15,
        "visible": true
    },
    "search.engine.web.searxng.default_params.safe_search": {
        "category": "searxng",
        "description": "Configure the safe search level",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Safe Search",
        "options": [
            {
                "label": "Off",
                "value": "OFF"
            },
            {
                "label": "Moderate",
                "value": "MODERATE"
            },
            {
                "label": "Strict",
                "value": "STRICT"
            }
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "OFF",
        "visible": true
    },
    "search.engine.web.searxng.reliability": {
        "category": "searxng",
        "description": "Reliability rating (0-1) for SearXNG. Aggregates multiple search engines for broad coverage.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 1.0,
        "visible": true
    },
    "search.engine.web.searxng.requires_api_key": {
        "category": "searxng",
        "description": "Whether SearXNG requires an API key. No - SearXNG is self-hosted and free.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.searxng.strengths": {
        "category": "searxng",
        "description": "Key advantages of SearXNG: Free, self-hosted, privacy-respecting, aggregates multiple engines, no API limits.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "comprehensive general information",
            "current events and news",
            "technical documentation",
            "factual queries",
            "historical information",
            "consumer products",
            "educational content",
            "multi-source aggregation",
            "real-time results",
            "combined results from major search engines"
        ],
        "visible": true
    },
    "search.engine.web.searxng.supports_full_search": {
        "category": "searxng",
        "description": "Whether SearXNG supports fetching full webpage content beyond snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.searxng.weaknesses": {
        "category": "searxng",
        "description": "Limitations of SearXNG: Requires self-hosting, public instances may have rate limits, result quality varies.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "requires self-hosting",
            "depends on other search engines",
            "may be rate limited by underlying engines"
        ],
        "visible": true
    },
    "search.engine.web.serpapi.display_name": {
        "category": "serpapi",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "SerpApi",
        "visible": false
    },
    "search.engine.web.serpapi.description": {
        "category": "serpapi",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search the web with Google's search API.",
        "visible": false
    },
    "search.engine.web.serpapi.api_key": {
        "category": "serpapi",
        "description": "The Serp API key to use.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "API Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.serpapi.default_params.region": {
        "category": "serpapi",
        "description": "Geographic region for search results (e.g., 'us', 'uk'). Results prioritized from this region.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Region",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "us",
        "visible": true
    },
    "search.engine.web.serpapi.default_params.safe_search": {
        "category": "serpapi",
        "description": "Enable safe search to filter explicit content from results.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Safe Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.serpapi.default_params.search_language": {
        "category": "serpapi",
        "description": "Language for search queries and results. Filters results by language.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Language",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "English",
        "visible": true
    },
    "search.engine.web.serpapi.default_params.time_period": {
        "category": "serpapi",
        "description": "Time filter for results: 'd' (day), 'w' (week), 'm' (month), 'y' (year), or empty for all time.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Time Period",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "y",
        "visible": true
    },
    "search.engine.web.serpapi.reliability": {
        "category": "serpapi",
        "description": "Reliability score (0-1). SerpAPI rated moderate (0.6) - good for general search but less authoritative than specialized sources.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.6,
        "visible": true
    },
    "search.engine.web.serpapi.requires_api_key": {
        "category": "serpapi",
        "description": "Indicates this engine requires a SerpAPI key. Get one at serpapi.com.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.serpapi.strengths": {
        "category": "serpapi",
        "description": "Advantages: Comprehensive web search via Google SERP, good for products, reviews, news, and broad coverage.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "comprehensive web search",
            "product information",
            "reviews",
            "recent content",
            "news",
            "broad coverage"
        ],
        "visible": true
    },
    "search.engine.web.serpapi.supports_full_search": {
        "category": "serpapi",
        "description": "Indicates this engine can fetch full page content after initial search, not just snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.serpapi.weaknesses": {
        "category": "serpapi",
        "description": "Limitations: Requires paid API key with usage limits, not specialized for academic or technical content.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "requires API key with usage limits",
            "not specialized for academic content"
        ],
        "visible": true
    },
    "search.engine.web.wayback.display_name": {
        "category": "wayback",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Wayback",
        "visible": false
    },
    "search.engine.web.wayback.description": {
        "category": "wayback",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search the Internet Archive's Wayback Machine.",
        "visible": false
    },
    "search.engine.web.wayback.default_params.closest_only": {
        "category": "wayback",
        "description": "When enabled, only return the snapshot closest to the target date instead of all available snapshots.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Closest Only",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.wayback.default_params.language": {
        "category": "wayback",
        "description": "Preferred language for archived content when multiple versions are available.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Language",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "English",
        "visible": true
    },
    "search.engine.web.wayback.default_params.max_results": {
        "category": "wayback",
        "description": "Maximum number of archived snapshots to return per search query.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 15,
        "visible": true
    },
    "search.engine.web.wayback.default_params.max_snapshots_per_url": {
        "category": "wayback",
        "description": "Maximum historical snapshots to retrieve for each URL. Lower values are faster; higher shows more history.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Snapshots Per Url",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 3,
        "visible": true
    },
    "search.engine.web.wayback.reliability": {
        "category": "wayback",
        "description": "Reliability score (0-1). Wayback rated moderate (0.5) - great for historical content but archives may be incomplete.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.5,
        "visible": true
    },
    "search.engine.web.wayback.requires_api_key": {
        "category": "wayback",
        "description": "Wayback Machine is free and does not require an API key.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.wayback.strengths": {
        "category": "wayback",
        "description": "Advantages: Access to historical web content, archived/deleted pages, content verification, and website evolution.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "historical web content",
            "archived websites",
            "content verification",
            "deleted or changed web pages",
            "website evolution tracking"
        ],
        "visible": true
    },
    "search.engine.web.wayback.supports_full_search": {
        "category": "wayback",
        "description": "Indicates this engine can fetch full archived page content, not just metadata.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.wayback.weaknesses": {
        "category": "wayback",
        "description": "Limitations: Only finds previously archived content, may miss recent changes, archive quality varies by site.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "limited to previously archived content",
            "may miss recent changes",
            "archiving quality varies"
        ],
        "visible": true
    },
    "web.host": {
        "category": null,
        "description": "The host address to listen on. Configured via LDR_WEB_HOST environment variable. Requires server restart.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Host",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "text",
        "value": "0.0.0.0",
        "visible": false
    },
    "web.port": {
        "category": null,
        "description": "The port to listen on. Configured via LDR_WEB_PORT environment variable. Requires server restart.",
        "editable": false,
        "max_value": 65535,
        "min_value": 1,
        "name": "Port",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "number",
        "value": 5000,
        "visible": false
    },
    "web.use_https": {
        "category": null,
        "description": "Whether to enable HTTPS for the web interface. Configured via LDR_WEB_USE_HTTPS environment variable. Requires server restart.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Use HTTPS",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": false
    },
    "search.engine.web.wikipedia.display_name": {
        "category": "wikipedia",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Wikipedia",
        "visible": false
    },
    "search.engine.web.wikipedia.description": {
        "category": "wikipedia",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search Wikipedia articles",
        "visible": false
    },
    "search.engine.web.wikipedia.default_params.include_content": {
        "category": "wikipedia",
        "description": "Include full article content in results, not just titles and summaries.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Content",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.wikipedia.default_params.max_results": {
        "category": "wikipedia",
        "description": "Maximum number of Wikipedia articles to return per search query.",
        "editable": true,
        "max_value": null,
        "min_value": 1,
        "name": "Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 20,
        "visible": true
    },
    "search.engine.web.wikipedia.reliability": {
        "category": "wikipedia",
        "description": "Reliability score (0-1). Wikipedia rated very high (0.95) - well-curated, cited content with editorial review.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.95,
        "visible": true
    },
    "search.engine.web.wikipedia.requires_api_key": {
        "category": "wikipedia",
        "description": "Wikipedia is free and does not require an API key.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.wikipedia.strengths": {
        "category": "wikipedia",
        "description": "Advantages: Factual information, general knowledge, definitions, historical facts, biographies, and overviews.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "factual information",
            "general knowledge",
            "definitions",
            "historical facts",
            "biographies",
            "overview information"
        ],
        "visible": true
    },
    "search.engine.web.wikipedia.weaknesses": {
        "category": "wikipedia",
        "description": "Limitations: May lag on recent events, less depth on specialized academic topics, no product comparisons.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "recent events",
            "specialized academic topics",
            "product comparisons"
        ],
        "visible": true
    },
    "search.engine.web.wikinews.display_name": {
        "category": "wikinews",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Wikinews",
        "visible": false
    },
    "search.engine.web.wikinews.description": {
        "category": "wikinews",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Search news articles written by volunteers with verified sources",
        "visible": false
    },
    "search.engine.web.wikinews.adaptive_search": {
        "category": "wikinews",
        "description": "Automatically adjust the search period based on the query type (recent or historical) to improve news search relevance",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Adaptive Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.wikinews.reliability": {
        "category": "wikinews",
        "description": "Reliability score (0-1). Wikinews rated moderately high (0.85) - volunteer-written but with verified sources.",
        "editable": false,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.85,
        "visible": false
    },
    "search.engine.web.wikinews.requires_api_key": {
        "category": "wikinews",
        "description": "Wikinews is free and does not require an API key.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": false
    },
    "search.engine.web.wikinews.strengths": {
        "category": "wikinews",
        "description": "Advantages: Recent and historical news coverage, verified sources, general topic coverage, quick overviews.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "recent and historical news",
            "verified sources",
            "general coverage",
            "quick overviews"
        ],
        "visible": true
    },
    "search.engine.web.wikinews.weaknesses": {
        "category": "wikinews",
        "description": "Limitations: Less coverage of specialized topics, variable article quality, not ideal for breaking news.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "less coverage of specialized topics",
            "limited editorial oversight",
            "variable article quality",
            "not ideal for breaking news"
        ],
        "visible": true
    },
    "search.cross_engine_max_results": {
        "category": "search_parameters",
        "description": "Maximum number of search results to keep after cross-engine filtering. When results from multiple search engines are combined, this limits how many total results are displayed. Higher values show more comprehensive results.",
        "editable": true,
        "max_value": 1000,
        "min_value": 1,
        "name": "Cross-Engine Max Results",
        "options": null,
        "step": 1,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 100,
        "visible": true
    },
    "search.cross_engine_max_context_items": {
        "category": "search_parameters",
        "description": "Maximum number of search result previews sent to the LLM for relevance ranking during cross-engine filtering. Higher values let the model evaluate more candidates, improving recall at the cost of increased prompt size and latency.",
        "editable": true,
        "max_value": 200,
        "min_value": 10,
        "name": "Cross-Engine Max Context Items",
        "options": null,
        "step": 5,
        "type": "SEARCH",
        "ui_element": "number",
        "value": 30,
        "visible": true
    },
    "search.engine.web.pubmed.use_in_auto_search": {
        "category": "pubmed",
        "description": "Include PubMed in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.arxiv.use_in_auto_search": {
        "category": "arxiv",
        "description": "Include ArXiv in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.searxng.use_in_auto_search": {
        "category": "searxng",
        "description": "Include SearXNG in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.github.use_in_auto_search": {
        "category": "github",
        "description": "Include GitHub in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.wikipedia.use_in_auto_search": {
        "category": "wikipedia",
        "description": "Include Wikipedia in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.wikinews.use_in_auto_search": {
        "category": "wikinews",
        "description": "Include Wikinews in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.brave.use_in_auto_search": {
        "category": "brave",
        "description": "Include Brave search in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.google_pse.use_in_auto_search": {
        "category": "google_pse",
        "description": "Include Google PSE in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.serpapi.use_in_auto_search": {
        "category": "serpapi",
        "description": "Include SerpAPI in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.wayback.use_in_auto_search": {
        "category": "wayback",
        "description": "Include Wayback in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.tavily.display_name": {
        "category": "tavily",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Tavily",
        "visible": false
    },
    "search.engine.web.tavily.description": {
        "category": "tavily",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "AI-powered search engine optimized for research with built-in answer extraction.",
        "visible": false
    },
    "search.engine.web.tavily.api_key": {
        "category": "tavily",
        "description": "The Tavily API key to use.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.tavily.default_params.search_depth": {
        "category": "tavily",
        "description": "Search depth - basic for speed, advanced for quality",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Depth",
        "options": [
            "basic",
            "advanced"
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "basic",
        "visible": true
    },
    "search.engine.web.tavily.default_params.include_full_content": {
        "category": "tavily",
        "description": "Include full webpage content in results",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Full Content",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.tavily.requires_api_key": {
        "category": "tavily",
        "description": "Indicates this engine requires a Tavily API key. Get one at tavily.com.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.tavily.reliability": {
        "category": "tavily",
        "description": "Reliability score (0-1). Tavily rated high (0.8) - AI-optimized search designed for research applications.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.8,
        "visible": true
    },
    "search.engine.web.tavily.strengths": {
        "category": "tavily",
        "description": "Advantages: AI-powered search optimization, built-in answer extraction, research-focused results, fast responses.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "AI-powered search optimization",
            "built-in answer extraction",
            "research-focused results",
            "high-quality content filtering",
            "fast response times"
        ],
        "visible": true
    },
    "search.engine.web.tavily.supports_full_search": {
        "category": "tavily",
        "description": "Indicates this engine can fetch full page content after initial search, not just snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.tavily.weaknesses": {
        "category": "tavily",
        "description": "Limitations: Requires paid API key with usage limits, newer service with less historical data coverage.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "requires API key with usage limits",
            "newer service with smaller historical data"
        ],
        "visible": true
    },
    "search.engine.web.tavily.use_in_auto_search": {
        "category": "tavily",
        "description": "Include Tavily in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.mojeek.display_name": {
        "category": "mojeek",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Mojeek",
        "visible": false
    },
    "search.engine.web.mojeek.description": {
        "category": "mojeek",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Privacy-focused search engine with its own independent web index.",
        "visible": false
    },
    "search.engine.web.mojeek.api_key": {
        "category": "mojeek",
        "description": "The Mojeek API key to use. Get one at mojeek.com/services/api.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.mojeek.requires_api_key": {
        "category": "mojeek",
        "description": "Whether Mojeek requires an API key. Yes - get one at mojeek.com/services/api.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.mojeek.supports_full_search": {
        "category": "mojeek",
        "description": "Whether Mojeek supports fetching full webpage content beyond snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.mojeek.reliability": {
        "category": "mojeek",
        "description": "Reliability rating (0-1) for Mojeek. Independent index, smaller than Google/Bing.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.65,
        "visible": true
    },
    "search.engine.web.mojeek.strengths": {
        "category": "mojeek",
        "description": "Key advantages of Mojeek: Privacy-focused with own independent web index, no tracking.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "privacy-focused with own index",
            "no tracking or profiling",
            "independent results",
            "European-based"
        ],
        "visible": true
    },
    "search.engine.web.mojeek.weaknesses": {
        "category": "mojeek",
        "description": "Limitations of Mojeek: Smaller index than Google/Bing, requires paid API key.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "smaller index than Google/Bing",
            "requires paid API key"
        ],
        "visible": true
    },
    "search.engine.web.mojeek.default_params.language": {
        "category": "mojeek",
        "description": "Language code in ISO 639-1 format for Mojeek language boost (e.g., 'en', 'fr').",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Language",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "en",
        "visible": true
    },
    "search.engine.web.mojeek.default_params.region": {
        "category": "mojeek",
        "description": "Country code in ISO 3166-1 alpha-2 format for Mojeek region boost (e.g., 'GB', 'US').",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Region",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "",
        "visible": true
    },
    "search.engine.web.mojeek.default_params.safe_search": {
        "category": "mojeek",
        "description": "Enable safe search filtering for Mojeek to exclude adult content.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Safe Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.mojeek.use_in_auto_search": {
        "category": "mojeek",
        "description": "Include Mojeek in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "app.warnings.dismiss_high_context": {
        "category": "warnings",
        "description": "Permanently hide the warning shown when your local LLM context window is set above 8,192 tokens, which may cause memory issues on some hardware.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Dismiss High Context Warnings",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "app.warnings.dismiss_legacy_config": {
        "category": "warnings",
        "description": "Dismiss warnings about the deprecated server_config.json file",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Dismiss Legacy Config Warnings",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "app.warnings.dismiss_model_mismatch": {
        "category": "warnings",
        "description": "Permanently hide the warning shown when using a large model (70B+ parameters) with a local provider and high context window, which may exceed available GPU memory.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Dismiss Model Mismatch Warnings",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "app.warnings.dismiss_searxng_recommendation": {
        "category": "warnings",
        "description": "Dismiss recommendations about using more questions instead of iterations with SearXNG",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Dismiss SearXNG Optimization Tips",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "app.warnings.dismiss_context_reduced": {
        "category": "warnings",
        "description": "Dismiss warnings based on historical context usage and truncation",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Dismiss Context Reduced Warnings",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "rate_limiting.enabled": {
        "category": "rate_limiting",
        "description": "Enable adaptive rate limiting that learns optimal wait times for each search engine to avoid hitting API rate limits. When disabled, requests are sent with minimal delay (0.1s), which may trigger rate limit errors from some APIs.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable Rate Limiting",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "rate_limiting.exploration_rate": {
        "category": "rate_limiting",
        "description": "Fraction of requests that test shorter wait times to check if the API allows faster access (0.0-1.0). Higher values adapt faster to relaxed limits but risk more rate limit errors.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Exploration Rate",
        "options": null,
        "step": 0.05,
        "type": "APP",
        "ui_element": "range",
        "value": 0.1,
        "visible": true
    },
    "rate_limiting.learning_rate": {
        "category": "rate_limiting",
        "description": "How much weight to give new timing data vs. existing estimates (0.0-1.0). Higher values react faster to changes in API rate limits but produce less stable wait times.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.05,
        "name": "Learning Rate",
        "options": null,
        "step": 0.05,
        "type": "APP",
        "ui_element": "range",
        "value": 0.45,
        "visible": true
    },
    "rate_limiting.memory_window": {
        "category": "rate_limiting",
        "description": "Number of recent requests to remember per search engine for calculating optimal wait times. At least 3 successful requests are needed before wait time estimates start updating.",
        "editable": true,
        "max_value": 1000,
        "min_value": 10,
        "name": "Memory Window",
        "options": null,
        "step": 10,
        "type": "APP",
        "ui_element": "number",
        "value": 100,
        "visible": true
    },
    "rate_limiting.profile": {
        "category": "rate_limiting",
        "description": "Overall rate limiting behavior. 'Conservative' uses longer waits and adapts slowly (fewer errors). 'Balanced' is the default. 'Aggressive' uses shorter waits and adapts quickly (faster but riskier).",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Rate Limiting Profile",
        "options": [
            {
                "label": "Conservative (slower, more reliable)",
                "value": "conservative"
            },
            {
                "label": "Balanced (default)",
                "value": "balanced"
            },
            {
                "label": "Aggressive (faster, higher risk)",
                "value": "aggressive"
            }
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "balanced",
        "visible": true
    },
    "rate_limiting.decay_per_day": {
        "category": "rate_limiting",
        "description": "How much to trust old rate limit data as it ages (0.5-0.99). At 0.95, data retains 95% reliability per day. Lower values discard old data faster, forcing the system to re-learn optimal wait times.",
        "editable": true,
        "max_value": 0.99,
        "min_value": 0.5,
        "name": "Decay Factor Per Day",
        "options": null,
        "step": 0.01,
        "type": "APP",
        "ui_element": "range",
        "value": 0.95,
        "visible": true
    },
    "rate_limiting.llm_enabled": {
        "category": "rate_limiting",
        "description": "Enable adaptive rate limiting for LLM API calls, separate from search engine rate limiting. Useful for free-tier or rate-limited LLM APIs that impose request quotas.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable LLM Rate Limiting",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "benchmark.evaluation.provider": {
        "category": "benchmark",
        "description": "LLM provider used to grade benchmark answers by comparing research outputs against reference answers. This is separate from the research LLM being tested. Options: openai_endpoint (recommended, supports OpenRouter), openai, anthropic, ollama.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Evaluation Provider",
        "options": [
            {
                "label": "OpenRouter (Recommended)",
                "value": "openai_endpoint"
            },
            {
                "label": "OpenAI API",
                "value": "openai"
            },
            {
                "label": "Anthropic API",
                "value": "anthropic"
            },
            {
                "label": "Ollama (Local)",
                "value": "ollama"
            }
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "openai_endpoint",
        "visible": true
    },
    "benchmark.evaluation.model": {
        "category": "benchmark",
        "description": "LLM model used as a judge to score benchmark answers against reference answers (e.g., 'anthropic/claude-3.7-sonnet' for OpenRouter, 'gpt-4o' for OpenAI). Must be compatible with the selected evaluation provider.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Evaluation Model",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "text",
        "value": "anthropic/claude-3.7-sonnet",
        "visible": true
    },
    "benchmark.evaluation.endpoint_url": {
        "category": "benchmark",
        "description": "Endpoint URL for evaluation model (when using OpenAI-compatible APIs)",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Evaluation Endpoint URL",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "text",
        "value": "https://openrouter.ai/api/v1",
        "visible": true
    },
    "benchmark.evaluation.temperature": {
        "category": "benchmark",
        "description": "Sampling temperature for the benchmark judge model (0.0-1.0). Use 0 for deterministic, reproducible grading results. Higher values introduce randomness in evaluation scores.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Evaluation Temperature",
        "options": null,
        "step": 0.1,
        "type": "APP",
        "ui_element": "range",
        "value": 0,
        "visible": true
    },
    "news.feed.default_limit": {
        "category": "news",
        "description": "Default number of news items returned per feed page. Applied when user does not specify a limit in the request. Also used as the default limit for subscription history.",
        "editable": true,
        "max_value": 100,
        "min_value": 5,
        "name": "Default Feed Limit",
        "options": null,
        "step": 5,
        "type": "APP",
        "ui_element": "number",
        "value": 20,
        "visible": true
    },
    "news.storage.default_limit": {
        "category": "news",
        "description": "Default limit for storing news items",
        "editable": true,
        "max_value": 500,
        "min_value": 10,
        "name": "Default Storage Limit",
        "options": null,
        "step": 10,
        "type": "APP",
        "ui_element": "number",
        "value": 100,
        "visible": true
    },
    "news.preferences.max_stored": {
        "category": "news",
        "description": "Maximum number of stored preferences per user",
        "editable": true,
        "max_value": 500,
        "min_value": 10,
        "name": "Max Stored Preferences",
        "options": null,
        "step": 10,
        "type": "APP",
        "ui_element": "number",
        "value": 100,
        "visible": true
    },
    "news.refresh.default_hours": {
        "category": "news",
        "description": "Default refresh interval in hours",
        "editable": true,
        "max_value": 24,
        "min_value": 1,
        "name": "Default Refresh Hours",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 4,
        "visible": true
    },
    "news.subscription.refresh_minutes": {
        "category": "news",
        "description": "Default interval (in minutes) for how often new subscriptions check for updates. Users can override this per subscription. Default is 240 minutes (4 hours). Range: 60-2880 minutes.",
        "editable": true,
        "max_value": 2880,
        "min_value": 60,
        "name": "Subscription Refresh Minutes",
        "options": null,
        "step": 60,
        "type": "APP",
        "ui_element": "number",
        "value": 360,
        "visible": true
    },
    "news.trending.lookback_hours": {
        "category": "news",
        "description": "Hours to look back for trending analysis",
        "editable": true,
        "max_value": 168,
        "min_value": 1,
        "name": "Trending Lookback Hours",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 24,
        "visible": true
    },
    "news.progress.generating_searches": {
        "category": "news",
        "description": "Progress percentage when generating searches",
        "editable": false,
        "max_value": 100,
        "min_value": 0,
        "name": "Progress Generating Searches",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 50,
        "visible": false
    },
    "news.progress.complete": {
        "category": "news",
        "description": "Progress percentage when complete",
        "editable": false,
        "max_value": 100,
        "min_value": 0,
        "name": "Progress Complete",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 100,
        "visible": false
    },
    "news.display.max_query_length": {
        "category": "news",
        "description": "Maximum query display length in UI",
        "editable": true,
        "max_value": 200,
        "min_value": 20,
        "name": "Max Query Display Length",
        "options": null,
        "step": 10,
        "type": "APP",
        "ui_element": "number",
        "value": 50,
        "visible": true
    },
    "news.display.default_headline_max_length": {
        "category": "news",
        "description": "Default maximum headline length",
        "editable": true,
        "max_value": 300,
        "min_value": 50,
        "name": "Default Headline Max Length",
        "options": null,
        "step": 10,
        "type": "APP",
        "ui_element": "number",
        "value": 100,
        "visible": true
    },
    "news.subscription.default_type": {
        "category": "news",
        "description": "Default subscription type",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Default Subscription Type",
        "options": [
            {
                "label": "Search",
                "value": "search"
            },
            {
                "label": "Topic",
                "value": "topic"
            }
        ],
        "step": null,
        "type": "APP",
        "ui_element": "select",
        "value": "search",
        "visible": true
    },
    "news.scheduler.enabled": {
        "category": "news_scheduler",
        "description": "Enable the background scheduler that automatically runs news subscriptions on their configured intervals. When disabled, no automatic subscription processing occurs — subscriptions must be refreshed manually.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable News Scheduler",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "news.scheduler.allow_api_control": {
        "category": "news_scheduler",
        "description": "Allow authenticated users to start, stop, and trigger the global news scheduler via API. This setting cannot be changed from the UI for security reasons. Disable in multi-user deployments by setting the environment variable LDR_NEWS_SCHEDULER_ALLOW_API_CONTROL=false.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Allow Scheduler API Control",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "news.scheduler.retention_hours": {
        "category": "news_scheduler",
        "description": "Hours to keep a user's session active in the scheduler after their last interaction. After this period, the scheduler stops processing that user's subscriptions until they log in again. Range: 1-168 hours.",
        "editable": true,
        "max_value": 168,
        "min_value": 1,
        "name": "User Retention Period (hours)",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 48,
        "visible": true
    },
    "news.scheduler.cleanup_interval_hours": {
        "category": "news_scheduler",
        "description": "How often (in hours) the scheduler checks for and removes expired user sessions. Shorter intervals reduce memory usage but add slight overhead. Range: 0.25-24 hours.",
        "editable": true,
        "max_value": 24,
        "min_value": 0.25,
        "name": "Cleanup Interval (hours)",
        "options": null,
        "step": 0.25,
        "type": "APP",
        "ui_element": "number",
        "value": 1,
        "visible": true
    },
    "news.scheduler.max_jitter_seconds": {
        "category": "news_scheduler",
        "description": "Maximum random delay (in seconds) added to each subscription's next refresh time. Prevents all subscriptions from running simultaneously, reducing server load spikes. Range: 0-3600 seconds.",
        "editable": true,
        "max_value": 3600,
        "min_value": 0,
        "name": "Maximum Jitter (seconds)",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 300,
        "visible": true
    },
    "news.scheduler.max_concurrent_jobs": {
        "category": "news_scheduler",
        "description": "Maximum number of subscription refresh tasks that can run simultaneously across all users. Lower values reduce server load; higher values process subscriptions faster. Range: 1-50.",
        "editable": true,
        "max_value": 50,
        "min_value": 1,
        "name": "Max Concurrent Jobs",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 10,
        "visible": true
    },
    "news.scheduler.batch_size": {
        "category": "news_scheduler",
        "description": "Number of due subscriptions to pick up and schedule in each check cycle. Larger batches are more efficient but use more memory. Range: 1-20.",
        "editable": true,
        "max_value": 20,
        "min_value": 1,
        "name": "Subscription Batch Size",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 5,
        "visible": true
    },
    "news.scheduler.activity_check_interval": {
        "category": "news_scheduler",
        "description": "How often (in minutes) the scheduler scans for subscriptions that are due to run. More frequent checks ensure timely updates but increase CPU usage. Range: 1-60 minutes.",
        "editable": true,
        "max_value": 60,
        "min_value": 1,
        "name": "Activity Check Interval (minutes)",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 5,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_publication_type_in_context": {
        "category": "pubmed",
        "description": "Include publication type (e.g., Clinical Trial, Meta-Analysis) in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Publication Type in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_journal_in_context": {
        "category": "pubmed",
        "description": "Include journal name in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Journal in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_year_in_context": {
        "category": "pubmed",
        "description": "Include publication year in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Year in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_authors_in_context": {
        "category": "pubmed",
        "description": "Include author names in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Authors in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_full_date_in_context": {
        "category": "pubmed",
        "description": "Include full publication date in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Full Date in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_mesh_terms_in_context": {
        "category": "pubmed",
        "description": "Include MeSH terms (medical subject headings) in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include MeSH Terms in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_keywords_in_context": {
        "category": "pubmed",
        "description": "Include article keywords in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Keywords in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_doi_in_context": {
        "category": "pubmed",
        "description": "Include DOI (Digital Object Identifier) in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include DOI in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_pmid_in_context": {
        "category": "pubmed",
        "description": "Include PubMed ID in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include PMID in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_pmc_availability_in_context": {
        "category": "pubmed",
        "description": "Include PMC free full text availability in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include PMC Availability in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_citation_in_context": {
        "category": "pubmed",
        "description": "Include volume, issue, and pages in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Citation Details in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.pubmed.default_params.include_language_in_context": {
        "category": "pubmed",
        "description": "Include language indicator in context for analysis",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Language in Context",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "research_library.storage_path": {
        "category": "research_library",
        "description": "Base path for storing research library documents. Each user will have their own subdirectory unless shared library is enabled.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Library Storage Path",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "text",
        "value": "~/Documents/LocalDeepResearch/Library",
        "visible": true
    },
    "research_library.shared_library": {
        "category": "research_library",
        "description": "⚠️ WARNING: When enabled, all users share the same library directory. Documents from all users will be visible to each other. Only enable in trusted environments.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Shared Library Mode",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "research_library.auto_index_enabled": {
        "category": "research_library",
        "description": "Automatically index documents for RAG search when they are added to collections (via upload or download). Indexing runs in the background without blocking uploads. Disable to defer indexing and improve upload speed for large batches.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Auto-Index New Documents",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "notifications.enabled": {
        "category": "notifications",
        "description": "Enable external notifications for research events (email, Discord, Slack, etc.). When disabled, no notifications are sent regardless of individual event settings below. Requires service URL to be configured.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable Notifications",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "notifications.service_url": {
        "category": "notifications",
        "description": "Notification service URL(s). Supports multiple comma-separated URLs to send notifications to multiple destinations (e.g., discord://YOUR_WEBHOOK_ID/YOUR_TOKEN, mailto://YOUR_USER:YOUR_PASS@smtp.example.com?to=recipient@example.com). See <a href=\"https://github.com/LearningCircuit/local-deep-research/blob/main/docs/NOTIFICATIONS.md\" target=\"_blank\">documentation</a> for supported services.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Service URL(s)",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "textarea",
        "value": "",
        "visible": true
    },
    "notifications.rate_limit_per_hour": {
        "category": "notifications",
        "description": "Maximum number of notifications per hour per user. Prevents notification spam during burst activity. Default of 10 allows important notifications through while limiting noise.",
        "editable": true,
        "max_value": 100,
        "min_value": 1,
        "name": "Rate Limit (Hourly)",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 10,
        "visible": true
    },
    "notifications.rate_limit_per_day": {
        "category": "notifications",
        "description": "Maximum number of notifications per day per user. Daily cap prevents notification fatigue. Default of 50 balances staying informed with avoiding excessive alerts.",
        "editable": true,
        "max_value": 500,
        "min_value": 1,
        "name": "Rate Limit (Daily)",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 50,
        "visible": true
    },
    "notifications.on_research_completed": {
        "category": "notifications",
        "description": "Send notification when a research task completes successfully. This is the primary completion alert for tracking long-running research.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Research Completed",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "notifications.on_research_failed": {
        "category": "notifications",
        "description": "Send notification when a research task fails or encounters an error. Enables rapid problem detection without monitoring the web interface.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Research Failed",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "notifications.on_subscription_update": {
        "category": "notifications",
        "description": "Send notification when news subscriptions detect new content matching your configured topics.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Subscription Updates",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "notifications.on_subscription_error": {
        "category": "notifications",
        "description": "Send notification when a subscription refresh fails or encounters errors. Helps identify broken subscriptions that need attention.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Subscription Errors",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "notifications.on_research_queued": {
        "category": "notifications",
        "description": "Send notification when research is added to the processing queue. Useful in queue mode to confirm your request was accepted and is waiting to be processed.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Research Queued",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "notifications.on_api_quota_warning": {
        "category": "notifications",
        "description": "Send notification when API quota or rate limits are approaching or exceeded. Helps prevent service interruptions from unexpected API usage limits.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "API Quota Warnings",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "notifications.on_auth_issue": {
        "category": "notifications",
        "description": "Send notification when authentication fails for external API services (e.g., invalid or expired API keys). Alerts you to broken integrations that need attention.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Authentication Issues",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "search.engine.web.exa.display_name": {
        "category": "exa",
        "description": "Display name to use in the U.I. for this search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Display Name",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Exa",
        "visible": false
    },
    "search.engine.web.exa.description": {
        "category": "exa",
        "description": "Human-readable description of the search engine.",
        "editable": false,
        "max_value": null,
        "min_value": null,
        "name": "Description",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "text",
        "value": "Neural search engine built for AI with semantic understanding and high-quality results optimized for LLM consumption.",
        "visible": false
    },
    "search.engine.web.exa.api_key": {
        "category": "exa",
        "description": "The Exa API key to use. Get one at exa.ai.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "password",
        "value": "",
        "visible": true
    },
    "search.engine.web.exa.default_params.search_type": {
        "category": "exa",
        "description": "Search type - auto (default), neural (semantic), fast, or deep (comprehensive multi-query)",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Search Type",
        "options": [
            "auto",
            "neural",
            "fast",
            "deep"
        ],
        "step": null,
        "type": "SEARCH",
        "ui_element": "select",
        "value": "auto",
        "visible": true
    },
    "search.engine.web.exa.default_params.include_full_content": {
        "category": "exa",
        "description": "Include full webpage content in results",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include Full Content",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.exa.requires_api_key": {
        "category": "exa",
        "description": "Indicates this engine requires an Exa API key. Get one at exa.ai.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Requires Api Key",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.exa.reliability": {
        "category": "exa",
        "description": "Reliability score (0-1). Exa rated high (0.85) - neural search with semantic understanding designed for AI applications.",
        "editable": true,
        "max_value": 1.0,
        "min_value": 0.0,
        "name": "Reliability",
        "options": null,
        "step": 0.05,
        "type": "SEARCH",
        "ui_element": "range",
        "value": 0.85,
        "visible": true
    },
    "search.engine.web.exa.strengths": {
        "category": "exa",
        "description": "Advantages: Neural search with semantic understanding, results optimized for LLM consumption, high-quality content, supports deep search mode.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Strengths",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "neural search with semantic understanding",
            "results optimized for LLM consumption",
            "high-quality, clean content",
            "supports deep search for comprehensive results",
            "built-in highlights and summaries",
            "date filtering and domain controls"
        ],
        "visible": true
    },
    "search.engine.web.exa.supports_full_search": {
        "category": "exa",
        "description": "Indicates this engine can fetch full page content after initial search, not just snippets.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Supports Full Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "search.engine.web.exa.weaknesses": {
        "category": "exa",
        "description": "Limitations: Requires paid API key with usage limits, newer service with evolving features.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Weaknesses",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "json",
        "value": [
            "requires API key with usage limits",
            "newer service still evolving",
            "costs scale with usage"
        ],
        "visible": true
    },
    "search.engine.web.exa.use_in_auto_search": {
        "category": "exa",
        "description": "Include Exa in auto search mode",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Include in Auto Search",
        "options": null,
        "step": null,
        "type": "SEARCH",
        "ui_element": "checkbox",
        "value": false,
        "visible": true
    },
    "backup.enabled": {
        "category": "backup",
        "description": "Automatically backup database after successful login. Each backup uses disk space proportional to your database size. Disable this if disk space is limited.",
        "editable": true,
        "max_value": null,
        "min_value": null,
        "name": "Enable Auto-Backup",
        "options": null,
        "step": null,
        "type": "APP",
        "ui_element": "checkbox",
        "value": true,
        "visible": true
    },
    "backup.max_count": {
        "category": "backup",
        "description": "Maximum number of backup files to keep per user",
        "editable": true,
        "max_value": 30,
        "min_value": 1,
        "name": "Max Backups",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 1,
        "visible": true
    },
    "backup.max_age_days": {
        "category": "backup",
        "description": "Delete backups older than this many days",
        "editable": true,
        "max_value": 90,
        "min_value": 1,
        "name": "Backup Retention (days)",
        "options": null,
        "step": 1,
        "type": "APP",
        "ui_element": "number",
        "value": 7,
        "visible": true
    }
}
