Page - Settings

abstract

System configuration hub — configure LLM provider API keys, assign models to tasks, set maintenance intervals, toggle agent pipeline, manage risk rules, and configure Telegram alerts.

Route

PropertyValue
Path/settings
Filefrontend/src/app/settings/page.tsx
Auth RequiredNo
LayoutRoot layout with sidebar
Dynamic SegmentNone

Component Tree

SettingsPage (page.tsx)
├── AppHeader (title="Settings")
└── div (max-w-6xl layout)
    ├── ThemeSection (light/dark/system toggle)
    ├── DisplaySection (UI display preferences)
    ├── Section: "LLM Providers"
    │   └── ProviderCard[] × 5 (openai, gemini, anthropic, openrouter, ollama)
    │       └── Input (API key) + Save + Test buttons per provider
    ├── MaintenanceSection
    │   └── Interval slider + enabled toggle
    ├── AgentPipelineSection
    │   └── enable_agent_pipeline toggle
    │   └── enable_indicator/pattern/trend_agent toggles
    ├── Card: "Risk Manager"
    │   └── RiskManagerSection (drawdown, position limit, rate limit, hedging toggles)
    ├── TelegramSection
    │   └── bot_token input + chat_id + is_enabled toggle
    └── TaskAssignmentsSection
        └── Task→Provider→Model dropdowns (9 tasks)

Data Layer

Server State — Direct fetch

CallAPIEndpointTriggered When
Fetch providerssettingsApi.listProviders()GET /api/v1/settings/providersOn mount + after providerRefresh counter increments
Save provider keyProviderCard savePOST /api/v1/settings/providers/{provider}Per-provider save button
Test providerProviderCard testPOST /api/v1/settings/providers/{provider}/testPer-provider test button
Save task assignmentsTaskAssignmentsSectionPOST /api/v1/settings/task-assignmentsSave assignments button
Save maintenanceMaintenanceSectionPUT /api/v1/settings/globalToggle/slider change
Save risk rulesRiskManagerSectionPUT /api/v1/settings/riskPer-rule toggle
Save TelegramTelegramSectionPUT /api/v1/settings/telegramSave button

Global State — Zustand

None — settings page does not read from useTradingStore.

Local State — useState

VariableTypeInitialPurpose
providersProviderStatus[][]Status of all 5 LLM providers
providerRefreshnumber0Counter — incrementing triggers re-fetch

Page Lifecycle

Validation & Conditions

Render Conditions

ConditionWhat Shows
providers.length === 0Skeleton cards (inferred from ProviderCard)
provider.is_configuredGreen checkmark badge on ProviderCard
provider.key_hintMasked key display (e.g., sk-...abcd)

Form Validation

SectionFieldRules
ProviderCardAPI keyValidated server-side — test call returns success/failure
TelegramSectionchat_idMust start with -100 for groups/channels
MaintenanceSectioninterval_minutesValidated as positive integer server-side