@xopcai/xopc 0.0.66 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-JiJR38n1.js → agents-CmhOU0fB.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-JiJR38n1.js.map → agents-CmhOU0fB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js → apps-page-CzS9A_6L.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js.map → apps-page-CzS9A_6L.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js → channels-settings-Bn0YSztA.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js.map → channels-settings-Bn0YSztA.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js → cron-dreaming-jobs-bAYsiHdF.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js.map → cron-dreaming-jobs-bAYsiHdF.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js → cron-page-CKqDtScu.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js.map → cron-page-CKqDtScu.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js → dist-CUMhnSuX.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js.map → dist-CUMhnSuX.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js → extension-debug-page-BDls5xp3.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js.map → extension-debug-page-BDls5xp3.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js → extension-page-BSfv53OO.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js.map → extension-page-BSfv53OO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js → extension-settings-page-B0nkVsLi.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js.map → extension-settings-page-B0nkVsLi.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js → heartbeat-config-api-P5zdbIBw.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js.map → heartbeat-config-api-P5zdbIBw.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-Cc57jhuG.js → index-DAglRwh4.js} +5 -5
- package/dist/gateway/static/root/assets/{index-Cc57jhuG.js.map → index-DAglRwh4.js.map} +1 -1
- package/dist/gateway/static/root/assets/index-DHj3Cf9B.css +1 -0
- package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js → logs-page-CfGDv4k7.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js.map → logs-page-CfGDv4k7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js → sessions-page-DoGE8N-O.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js.map → sessions-page-DoGE8N-O.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js +3 -0
- package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js.map +1 -0
- package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js → skills-page-ADUi69Fa.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js.map → skills-page-ADUi69Fa.js.map} +1 -1
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js → use-image-provider-credentials-C4x4dNv2.js} +2 -2
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js.map → use-image-provider-credentials-C4x4dNv2.js.map} +1 -1
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/package.js +1 -1
- package/dist/src/cli/commands/tunnel.js +69 -8
- package/dist/src/cli/commands/tunnel.js.map +1 -1
- package/dist/src/config/schema.d.ts +2 -0
- package/dist/src/config/schema.js +2 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -5
- package/dist/src/gateway/hono/lib/config-payload.js +3 -5
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +12 -10
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/tunnel/acme-client.d.ts +11 -0
- package/dist/src/tunnel/acme-client.js +54 -10
- package/dist/src/tunnel/acme-client.js.map +1 -1
- package/dist/src/tunnel/env.d.ts +14 -3
- package/dist/src/tunnel/env.js +34 -5
- package/dist/src/tunnel/env.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.d.ts +6 -1
- package/dist/src/tunnel/frpc-binary.js +66 -40
- package/dist/src/tunnel/frpc-binary.js.map +1 -1
- package/dist/src/tunnel/frpc-extract.d.ts +10 -0
- package/dist/src/tunnel/frpc-extract.js +129 -0
- package/dist/src/tunnel/frpc-extract.js.map +1 -0
- package/dist/src/tunnel/gateway-lifecycle.d.ts +3 -1
- package/dist/src/tunnel/gateway-lifecycle.js +6 -4
- package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +3 -1
- package/dist/src/tunnel/index.js +2 -2
- package/dist/src/tunnel/tls-server.js +5 -0
- package/dist/src/tunnel/tls-server.js.map +1 -1
- package/dist/src/tunnel/tunnel-config.js +11 -1
- package/dist/src/tunnel/tunnel-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-e2e-config.d.ts +4 -1
- package/dist/src/tunnel/tunnel-e2e-config.js +10 -3
- package/dist/src/tunnel/tunnel-e2e-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.d.ts +4 -0
- package/dist/src/tunnel/tunnel-service.js +66 -5
- package/dist/src/tunnel/tunnel-service.js.map +1 -1
- package/dist/src/tunnel/tunnel-types.d.ts +16 -0
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/index-B5gp15_q.css +0 -1
- package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js +0 -3
- package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-page-C5VrwDoO.js","names":["PreferenceSelectFields","messages","cn","useLocaleStore","ColorScheme","useThemeStore","preferenceCardClassName","SCHEME_PREVIEW","Record","light","canvas","panel","accent","fg","muted","dark","default","emerald","mono","clay","SchemePreviewHalf","t0","$","_c","t1","backgroundColor","t2","borderColor","t3","t4","opacity","t5","t6","t7","t8","t9","SchemePreviewSwatch","scheme","Symbol","for","COLOR_SCHEME_OPTIONS","value","labelKey","ColorSchemeSelector","language","_temp","m","a","appearanceSettings","colorScheme","_temp2","setColorScheme","_temp3","colorSchemeTitle","colorSchemeDescription","map","isSelected","s_1","s","s_0","AppearanceSettingsPanel","_temp4","pageTitle","subtitle","languageTitle","themeTitle","t10","t11","t12","t13","revalidateGatewayConfig","fetchJson","apiUrl","isRecord","v","Record","Array","isArray","DreamingLightConfigState","enabled","cron","lookbackDays","limit","dedupeSimilarity","DreamingDeepConfigState","minScore","minRecallCount","recencyHalfLifeDays","maxAgeDays","DreamingRemConfigState","minPatternStrength","DreamingConfigState","frequency","timezone","deepEnabled","light","deep","rem","LIGHT_DEFAULTS","DEEP_DEFAULTS","REM_DEFAULTS","DEFAULTS","clamp01","n","fallback","Number","isFinite","Math","max","min","toInt","x","floor","toNum","value","num","normalizeDreamingFromConfig","config","c","agents","defaults","memory","dreaming","phases","lightRaw","deepRaw","remRaw","trim","patchDreamingConfig","state","Promise","freq","tz","method","body","JSON","stringify","Boolean","useMemo","useRef","useState","HEARTBEAT_INTERVAL_PRESET_MS_ORDER","IntervalPresetLabels","cn","formControlBorderFocusClass","selectControlBaseClass","IntervalSchedulePickerLabels","secondsLabel","presets","numberInputClass","presetSelectClass","presetOptionLabel","ms","every30s","every1min","every5min","every10min","every15min","every30min","every1h","every2h","String","IntervalSchedulePickerProps","valueMs","onChangeMs","labels","disabled","minSeconds","IntervalSchedulePicker","presetSet","Set","intervalPresetSelectValue","has","secondsDraft","setSecondsDraft","trackedValueMsRef","current","secondsCommitted","Math","max","round","secondsInputValue","e","next","target","value","raw","parseInt","Number","isFinite","v","custom","map","Button","cn","formControlBorderFocusClass","ActiveHoursValue","start","end","timezone","ActiveHoursPickerLabels","add","clear","timeInputClass","defaultActiveHours","ActiveHoursPickerProps","value","onChange","labels","disabled","ActiveHoursPicker","t0","$","_c","t1","t2","e","target","t3","t4","t5","t6","e_0","t7","t8","t9","t10","e_1","t11","t12","t13","t14","t15","t16","CronSchedulePickerLabels","CronSchedulePicker","IntervalSchedulePicker","IntervalSchedulePickerLabels","HEARTBEAT_INTERVAL_PRESET_MS_ORDER","ActiveHoursPicker","ActiveHoursPickerLabels","ActiveHoursValue","cn","ScheduleFieldShellProps","disabled","label","hint","className","CronScheduleFieldProps","kind","value","onChange","cron","labels","IntervalScheduleFieldProps","valueMs","onChangeMs","ms","presets","minSeconds","ActiveHoursScheduleFieldProps","ScheduleFieldProps","ScheduleField","props","$","_c","t0","t1","t2","t3","t4","t5","t6","ReactNode","DreamingGatewayStatus","DreamingLastRunRecord","PhaseLastRun","CronSchedulePickerLabels","ScheduleField","MessageBundle","cn","formControlBorderFocusClass","sectionTightClass","sectionHeaderTightClass","phasePanelClass","numInputClass","DreamingSettingsI18n","rowLabelClass","rowValueClass","FieldCell","t0","$","_c","label","children","className","t1","t2","StatCell","t3","Symbol","for","t4","t5","PanelHeading","isoShort","v","replace","formatDurationMs","ms","undefined","Number","isFinite","Math","round","toFixed","lockStatusLabel","s","labels","Pick","text","locked","lockValueLocked","lockValueUnlocked","PhaseConfigPanel","icon","title","hint","enabled","onEnabledChange","cron","onCronChange","scheduleLabels","disabled","onLabel","offLabel","cronLabel","t6","e","target","checked","t7","t8","t9","t10","t11","t12","t13","t14","PhaseStatusCard","scheduleSummary","details","t","on","off","PhaseLastRunBlock","lastRun","lastRunRaw","phaseLastRunEmpty","exists","JSON","stringify","raw","LastRunStructuredView","r","deep","skipped","ok","lastRunSuccess","lastRunFailure","lastRunStatus","lastRunDuration","durationMs","lastRunRanked","String","candidatesRanked","lastRunApplied","applied","reason","t15","errorMessage","lastRunError","t16","lastRunReason","t17","lastRunSkipContaminated","lastRunSkipHash","lastRunSkipKey","lastRunSkipRehydrate","alreadyPromotedKey","rehydrateFailed","contaminated","hashDuplicate","t18","Loader2","Moon","Settings2","Sparkles","Sun","Button","DreamingConfigState","FieldCell","PhaseConfigPanel","numInputClass","phasePanelClass","sectionHeaderTightClass","sectionTightClass","DreamingSettingsI18n","SettingsFormSection","SettingsFormSectionHeader","CronSchedulePickerLabels","ScheduleField","cn","Props","t","schedulePickerLabels","hasToken","cfgForm","cfgBaseline","cfgSaving","cfgDirty","setCfgForm","next","prev","setCfgOk","v","setCfgError","saveConfig","Promise","DreamingConfigSection","t0","$","_c","t1","Symbol","for","t2","t3","t4","t5","t6","t7","t8","resetConfig","t9","t10","configHint","configTitle","t11","configDeepHalfLife","configDeepLimit","configDeepMaxAge","configDeepMinRecallCount","configDeepMinScore","configFrequency","configLightDedupe","configLightLimit","configLightLookbackDays","configLoading","configPhaseCron","configPhaseDeep","configPhaseDeepHint","configPhaseLight","configPhaseLightHint","configPhaseRem","configPhaseRemHint","configRemLimit","configRemLookbackDays","configRemMinStrength","configTimezone","off","on","frequency","timezone","e","prev_0","target","value","light","enabled","prev_1","cron","prev_2","lookbackDays","e_0","prev_3","Number","limit","e_1","prev_4","dedupeSimilarity","e_2","prev_5","deep","enabled_0","prev_6","cron_0","prev_7","minScore","e_3","prev_8","minRecallCount","e_4","prev_9","e_5","prev_10","recencyHalfLifeDays","e_6","prev_11","maxAgeDays","e_7","prev_12","rem","enabled_1","prev_13","cron_1","prev_14","e_8","prev_15","e_9","prev_16","minPatternStrength","e_10","prev_17","t12","Activity","Loader2","Button","DreamingEvent","formatDurationMs","isoShort","sectionHeaderTightClass","sectionTightClass","DreamingSettingsI18n","SettingsFormSection","SettingsFormSectionHeader","cn","Props","t","hasToken","eventsLoading","events","loadEvents","Promise","DreamingEventsSection","t0","$","_c","t1","t2","t3","t4","eventsLoad","t5","eventsHint","eventsTitle","t6","eventsEmpty","eventsNotLoaded","length","map","_temp","t7","ev","phaseIcon","phase","metrics","scannedEntries","newSignals","deduped","patternsDiscovered","entriesAnalyzed","candidates","applied","timestamp","ok","durationMs","Loader2","Play","RefreshCw","Button","DreamingPhaseId","DreamingConfigState","DreamingSettingsI18n","cn","Props","t","cfgForm","dreamingEnabled","hasToken","cfgSaving","enableSaving","runPhase","setRunPhase","p","runBusy","doRunNow","phase","Promise","doRefresh","setDreamingEnabled","enabled","DreamingHeader","t0","$","_c","t1","title","t2","subtitle","t3","t4","configEnabled","off","on","e","target","checked","t5","runNow","runNowHint","e_0","value","t6","t7","t8","Symbol","for","t9","refresh","t10","t11","Loader2","Trash2","Unlock","Wrench","Button","sectionHeaderTightClass","sectionTightClass","DreamingSettingsI18n","SettingsFormSection","SettingsFormSectionHeader","cn","Props","t","disabled","actionBusy","doAction","action","Promise","DreamingMaintenanceSection","t0","$","_c","t1","Symbol","for","t2","maintenanceHint","maintenanceTitle","t3","confirmResetStore","confirm","t4","t5","resetStore","t6","confirmClearLock","t7","t8","clearLock","t9","t10","Loader2","ScanLine","Button","DreamingPreviewItem","sectionHeaderTightClass","sectionTightClass","DreamingSettingsI18n","SettingsFormSection","SettingsFormSectionHeader","Props","t","hasToken","previewLoading","previewItems","loadPreview","Promise","DreamingPreviewSection","t0","$","_c","t1","t2","t3","t4","previewLoad","t5","previewHint","previewTitle","t6","previewEligible","previewEmpty","previewNotLoaded","length","map","it","src","path","startLine","endLine","skipped","skippedReason","key","hash","score","toFixed","recallCount","avgScore","recencyDecay","snippet","t7","Activity","Loader2","Moon","Sparkles","Sun","DreamingGatewayStatus","PanelHeading","PhaseLastRunBlock","PhaseStatusCard","StatCell","isoShort","lockStatusLabel","phasePanelClass","sectionHeaderTightClass","sectionTightClass","DreamingSettingsI18n","LastRunStructuredView","SettingsFormSection","SettingsFormSectionHeader","formatCronExpressionLabel","ScheduleBadgeLabels","ScheduleSummary","cn","Props","t","data","isLoading","localeTag","scheduleBadgeLabels","DreamingRuntimeSection","t0","$","_c","t1","lock","lockLabel","t2","Symbol","for","t3","t4","runtimeHint","runtimeTitle","t5","subsectionSchedule","t6","config","enabled","on","off","t7","t8","className","t9","text","t10","t11","t12","timezone","t13","t14","frequency","undefined","t15","t16","schedule","t17","t18","t19","subsectionStore","t20","String","store","entryCount","t21","storeEntries","t22","promotedCount","t23","storePromoted","t24","updatedAt","t25","storeUpdatedAt","t26","lastPromotedAt","t27","storeLastPromotedAt","t28","t29","t30","phases","subsectionPhases","light","cron","lookbackDays","limit","dedupeSimilarity","deep","minScore","minRecallCount","recencyHalfLifeDays","rem","minPatternStrength","t31","subsectionLastRun","t32","lastRunBlockHint","t33","lastRun","exists","parseError","lastRunParseError","record","raw","lastRunRaw","JSON","stringify","lastRunEmpty","t34","t35","lightLastRun","t36","subsectionLightLastRun","t37","remLastRun","t38","subsectionRemLastRun","t39","t40","useCallback","useEffect","useMemo","useState","useSWR","useGatewayConfigSwr","dreamingSwrKey","fetchDreamingEvents","fetchDreamingPreview","fetchDreamingStatus","postDreamingAction","postDreamingRunNow","DreamingEvent","DreamingPhaseId","DreamingPreviewItem","normalizeDreamingFromConfig","patchDreamingConfig","DreamingConfigState","DreamingConfigSection","DreamingEventsSection","DreamingHeader","DreamingMaintenanceSection","DreamingPreviewSection","DreamingRuntimeSection","messages","useGatewayStore","useLocaleStore","DreamingSettingsPanel","language","s","m","t","dreamingSettings","schedulePickerLabels","cron","schedulePicker","scheduleBadgeLabels","scheduleBadge","localeTag","token","st","hasToken","Boolean","data","cfgData","actionBusy","setActionBusy","actionError","setActionError","actionOk","setActionOk","runBusy","setRunBusy","runOk","setRunOk","runError","setRunError","runPhase","setRunPhase","cfgForm","setCfgForm","cfgBaseline","setCfgBaseline","cfgSaving","setCfgSaving","enableSaving","setEnableSaving","cfgOk","setCfgOk","cfgError","setCfgError","previewLoading","setPreviewLoading","previewError","setPreviewError","previewItems","setPreviewItems","eventsLoading","setEventsLoading","eventsError","setEventsError","events","setEvents","error","isLoading","mutate","revalidateOnFocus","errorMessages","list","push","Error","message","String","successMessages","configSaved","runQueued","doRefresh","loadPreview","res","items","e","loadEvents","result","doRunNow","phase","doAction","action","disabled","cfgFromGateway","rawCfg","payload","config","nextJson","JSON","stringify","baseJson","cfgDirty","saveConfig","setDreamingEnabled","enabled","next","prev","dreamingEnabled","length","map","line","GatewayAuthMode","UpdatePackageChannel","GatewayAuthRateLimitState","enabled","maxAttempts","windowMs","blockDurationMs","GatewayChannelConnectDeferMode","GatewaySettingsState","host","port","auth","mode","token","password","rateLimit","corsOrigins","maxSseConnections","channelConnectDeferMode","channelConnectDeferIds","channelConnectDeferSkipIds","updateChannel","DEFAULT_GATEWAY_PORT","DEFAULT_MAX_SSE_CONNECTIONS","MAX_CHANNEL_DEFER_LIST_SIZE","DEFAULT_AUTH_RATE_LIMIT","revalidateGatewayConfig","fetchJson","apiUrl","DEFAULT_AUTH_RATE_LIMIT","DEFAULT_GATEWAY_PORT","DEFAULT_MAX_SSE_CONNECTIONS","MAX_CHANNEL_DEFER_LIST_SIZE","GatewayAuthMode","GatewayAuthRateLimitState","GatewayChannelConnectDeferMode","GatewaySettingsState","UpdatePackageChannel","isRecord","v","Record","Array","isArray","isMaskedGatewaySecret","value","normalizeAuthMode","raw","normalizeRateLimit","rl","enabled","maxAttempts","Number","isFinite","Math","max","floor","windowMs","blockDurationMs","normalizeDeferMode","normalizeStringIdList","filter","x","trim","length","map","slice","normalizeGatewayFromConfig","config","c","gw","gateway","auth","upd","update","ch","channel","updateChannel","corsOrigins","host","port","mode","token","password","rateLimit","maxSseConnections","channelConnectDeferMode","channelConnectDeferIds","channelConnectDeferSkipIds","buildAuthPatch","state","fetchGatewaySettings","Promise","res","ok","payload","patchGatewaySettings","method","body","JSON","stringify","AlertCircle","Check","Copy","ExternalLink","Eye","EyeOff","Loader2","Server","SlidersHorizontal","useCallback","useEffect","useMemo","useRef","useState","ReactNode","Button","useGatewayConfigSwr","normalizeGatewayFromConfig","patchGatewaySettings","GatewaySettingsState","MAX_CHANNEL_DEFER_LIST_SIZE","settingsInputFocusClass","cn","messages","GatewaySettingsMessages","docsGuidePageUrl","useGatewayStore","useLocaleStore","inputClassName","GatewaySettingsPanel","language","s","m","g","gatewaySettings","token","st","tokenExpired","openTokenDialog","hasToken","Boolean","form","setForm","baseline","setBaseline","saving","setSaving","error","setError","saveOk","setSaveOk","showAccessToken","setShowAccessToken","showPassword","setShowPassword","copied","setCopied","dirtyRef","data","swrError","isLoading","mutate","parsed","payload","config","undefined","structuredClone","current","loading","fetchError","Error","message","String","dirty","JSON","stringify","updateAuth","patch","Partial","f","auth","updateChannel","channel","updateCorsOrigins","corsOrigins","updateHost","host","updatePort","port","updateRateLimit","rateLimit","updateMaxSseConnections","maxSseConnections","updateChannelConnectDeferMode","channelConnectDeferMode","updateChannelConnectDeferIds","channelConnectDeferIds","updateChannelConnectDeferSkipIds","channelConnectDeferSkipIds","save","next","window","setTimeout","e","saveError","discard","copyAccessToken","t","navigator","clipboard","writeText","catch","settingsSections","gateway","needToken","loadError","retry","subtitle","docsLink","saved","updateToken","unsavedHint","restartHint","mode","authModeNone","listenHost","target","value","listenHostPlaceholder","listenPort","n","Number","isFinite","Math","max","min","floor","listenHint","authMode","authModeToken","authModePassword","authModeNoneLabel","accessToken","tokenHelp","tokenPlaceholder","changeToken","authPassword","authPasswordHelp","authPasswordPlaceholder","password","channelStable","channelBeta","channelDev","updateChannelHint","advancedSection","advancedSectionHint","GatewayAdvancedFields","t0","$","_c","onMaxSseConnectionsChange","onDeferModeChange","onDeferIdsChange","onSkipIdsChange","t1","t2","Symbol","for","t3","t4","t5","maxSseConnectionsHint","t6","t7","t8","t9","e_0","t10","t11","channelConnectDeferModeAuto","t12","channelConnectDeferModeOff","t13","channelConnectDeferModeExplicit","t14","t15","channelConnectDeferModeHint","t16","t17","channelConnectDeferIdsHint","channelIdListEmpty","channelIdListPlaceholder","t18","channelConnectDeferSkipIdsHint","t19","GatewayStringListField","title","hint","emptyText","placeholder","values","maxItems","onChange","children","raw","trim","includes","length","addValue","map","filter","x","key","preventDefault","HTMLInputElement","CorsOriginsField","origins","hasWildcard","corsOriginsWildcardWarning","corsOriginsEmpty","corsOriginsHint","corsOriginsPlaceholder","AuthRateLimitFields","rateLimitTitle","rateLimitHint","enabled","checked","rateLimitEnabled","rateLimitMaxAttempts","maxAttempts","rateLimitWindowMinutes","windowMs","round","e_1","n_0","t20","rateLimitBlockMinutes","t21","t22","blockDurationMs","t23","t24","e_2","n_1","t25","t26","t27","t28","SecretCredentialField","id","label","help","show","onToggleShow","onCopy","copy","hide","getChannels","apiUrl","channelsStatusSwrKey","fetchChannelsStatusSwr","ExternalLink","Heart","Loader2","Play","RefreshCw","useCallback","useEffect","useMemo","useState","useSWR","Button","getSessionChatIds","ChannelStatus","SessionChatId","formatRecipientOptionLabel","useGatewayConfigSwr","channelsStatusSwrKey","fetchChannelsStatusSwr","normalizeHeartbeatFromConfig","patchHeartbeatSettings","putHeartbeatMd","triggerHeartbeat","fetchHeartbeatMdSwr","heartbeatMdSwrKey","HeartbeatSettingsState","SettingsFormSection","nativeSelectMaxWidthClass","selectControlBaseClass","settingsInputFocusClass","cn","messages","HeartbeatSettingsMessages","ScheduleField","docsGuidePageUrl","useGatewayStore","useLocaleStore","inputClassName","selectClassName","CronMessages","ReturnType","workspacePathFromConfig","cfg","Array","isArray","agents","defaults","w","workspace","HeartbeatSettingsPanel","language","s","m","h","heartbeatSettings","token","st","hasToken","Boolean","form","setForm","baseline","setBaseline","doc","setDoc","docBaseline","setDocBaseline","savingConfig","setSavingConfig","savingDoc","setSavingDoc","error","setError","saveConfigOk","setSaveConfigOk","saveDocOk","setSaveDocOk","triggerLoading","setTriggerLoading","triggerOk","setTriggerOk","triggerError","setTriggerError","sessionChatIds","setSessionChatIds","data","cfgData","cfgErr","isLoading","cfgLoading","mutate","mutCfg","mdContent","mdErr","mdLoading","mutMd","revalidateOnFocus","channels","workspacePath","payload","config","heartbeatParsed","dirtyConfig","JSON","stringify","dirtyDoc","undefined","next","structuredClone","fetchError","Error","message","String","loading","t","target","trim","cancelled","then","ids","refreshSessionChatIds","runHeartbeatNow","window","setTimeout","e","update","patch","Partial","f","discardConfiguration","discardDocument","saveConfiguration","saveConfigError","saveDocument","saveDocError","settingsSections","heartbeat","needToken","loadError","retry","subtitle","docsLink","workspaceLabel","configSection","triggering","triggerNow","triggered","triggerHint","cron","savedConfig","discard","saveConfig","unsavedConfig","docSection","docHint","value","savedDoc","saveDoc","unsavedDoc","HeartbeatConfigFields","t0","$","_c","c","onRefreshChatIds","inputCn","selectCn","t1","Set","map","_temp","channelNames","t2","targetTrim","showCustomChannel","has","t3","enabled","checked","t4","t5","enable","t6","e_0","includeSystemPromptSection","t7","t8","includeSystemPromptSectionHint","t9","t10","t11","intervalMs","t12","intervalPresets","intervalSecondsLabel","secondsLabel","presets","t13","intervalHintPreset","intervalHint","t14","interval","t15","deliveryTitle","t16","channel","t17","t18","e_1","v","targetChatId","t19","channelNone","t20","customChannelSuffix","t21","_temp2","t22","t23","t24","enterManuallyOrSelect","lastActiveLabels","noRecentChats","noRecentChatsOption","recipient","recipientPlaceholder","refreshList","refreshRecipientHint","selectRecipient","e_2","e_3","v_0","length","item","chatId","t25","deliveryHint","t26","t27","prompt","t28","t29","e_4","t30","promptPlaceholder","t31","promptHint","t32","t33","ackMaxChars","t34","t35","t36","e_5","v_1","n","parseInt","Number","isFinite","t37","ackDefaultPlaceholder","t38","ackMaxCharsHint","t39","t40","e_6","isolatedSession","t41","t42","isolatedSessionHint","t43","t44","t45","activeHours","t46","activeEnd","activeStart","activeTimezone","addActiveHours","clearActiveHours","start","end","timezone","add","clear","t47","activeHoursHint","activeHoursTitle","t48","ch","name","x","Check","Copy","Smartphone","Button","SettingsFormSection","MobilePairQrState","settingsInputFocusClass","cn","messages","useLocaleStore","inputClassName","MobilePairQrSection","t0","$","_c","pairQr","language","_temp","t1","t","tunnelSettings","tunnelActive","tunnelStatus","tunnelQr","pairBaseUrl","setPairBaseUrl","baseOk","localhostWarn","deepLink","qrPayload","qrDataUrl","qrGenFailed","encoding","linkCopied","copyDeepLink","t2","Symbol","for","t3","pairTitle","t4","pairTunnelActive","pairSubtitle","t5","t6","pairBaseUrlHint","pairBaseUrlLabel","pairInvalidBaseUrl","pairLocalhostWarning","pairTunnelLanUrl","pairTunnelPublicUrl","publicUrl","lanUrl","e","target","value","t7","pairSecurityNote","t8","pairCopied","pairCopyLink","pairEncoding","pairImageError","t9","deeplinkTitle","t10","pairSchemeHint","t11","s","Dialog","useState","Button","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","TunnelConsentDialogProps","open","title","intro","bullets","checkboxLabel","confirmLabel","cancelLabel","onConfirm","onCancel","TunnelConsentDialog","t0","$","_c","checked","setChecked","t1","next","t2","Symbol","for","t3","t4","t5","t6","map","_temp2","t7","t8","e_0","e","target","t9","t10","t11","t12","t13","t14","t15","t16","_temp","t17","line","preventDefault","fetchJson","apiUrl","TunnelStatusResponse","enabled","state","subdomain","publicUrl","connectedSince","frpcPid","lastHeartbeatAt","lastError","frpcDownload","phase","bytesReceived","totalBytes","percent","startProgress","startedAt","acmeStep","consentRequired","canAutoStart","consent","currentVersion","acceptedVersion","acceptedAt","valid","registrationSecret","configured","source","config","autoStart","brokerUrl","e2e","tlsPort","staging","cert","status","domain","issuedAt","expiresAt","daysUntilExpiry","autoRenewal","renewalFailed","lastRenewalError","lastRenewalErrorAt","TunnelStartResponse","qrPayload","lanUrl","TunnelQrResponse","TunnelPairResponse","pairingSecret","fetchTunnelStatus","Promise","recordTunnelConsent","method","body","JSON","stringify","startTunnel","stopTunnel","opts","release","ok","released","fetchTunnelQr","createTunnelPair","patchTunnelConfig","patch","tunnel","QRCode","MOBILE_PAIR_QR_OPTIONS","width","margin","errorCorrectionLevel","const","color","dark","light","encodeMobilePairQr","payload","Promise","toDataURL","useCallback","useEffect","useMemo","useState","useSWR","useSWRConfig","createTunnelPair","fetchTunnelQr","fetchTunnelStatus","TunnelQrResponse","TunnelStatusResponse","encodeMobilePairQr","buildMobileGatewayPairDeepLink","getBaseUrl","isLoopbackHttpOrigin","MobilePairQrState","tunnelActive","tunnelStatus","tunnelQr","pairBaseUrl","setPairBaseUrl","value","baseOk","localhostWarn","deepLink","qrPayload","qrDataUrl","qrGenFailed","encoding","linkCopied","copyDeepLink","Promise","refreshQr","payload","useMobilePairQr","gatewayToken","hasToken","Boolean","mutate","globalMutate","data","refreshInterval","onTunnelStatus","window","addEventListener","removeEventListener","state","publicUrl","trim","mutTunnelQr","lanPair","mutLanPair","setQrDataUrl","setQrGenFailed","setLinkCopied","manualPayload","setManualPayload","trimmedBase","u","URL","protocol","pairingSecret","baseUrl","lanUrl","cancelled","then","url","catch","navigator","clipboard","writeText","setTimeout","Check","Circle","Loader2","useEffect","useState","TunnelStatusResponse","TunnelSettingsMessages","cn","StepId","formatByteCount","bytes","toFixed","STEP_ORDER","phaseIndex","phase","indexOf","stepState","stepId","status","state","current","startProgress","idx","currentIdx","stepDetail","t","progress","frpcDownload","frpcExtracting","percent","frpcDownloadingPercent","replace","String","frpcDownloading","publicUrl","stepRegisterDetail","acmeStep","stepTlsChecking","stepTlsDnsChallenge","stepTlsDnsPropagation","stepTlsCaValidation","stepTlsIssuing","stepTlsDetail","stepReconnectDetail","stepFrpcDetail","stepLabel","stepPrepareFrpc","stepRegister","stepTls","stepFrpcLogin","formatPhaseElapsed","startedAt","sec","Math","max","floor","Date","now","getTime","TunnelStartProgressPanel","t0","$","_c","setTick","t1","id","window","setInterval","_temp","clearInterval","t2","t3","showSteps","Boolean","e2eEnabled","config","e2e","enabled","showPendingUrlNotice","t4","t5","t6","t7","t8","id_0","steps","filter","elapsed","t9","startProgressTitle","t10","startProgressHint","t11","detail","width","undefined","bytesReceived","totalBytes","t12","map","startProgressElapsed","publicUrlPendingNotice","n","AlertTriangle","Check","Copy","Globe","Loader2","Power","RefreshCw","useCallback","useEffect","useMemo","useState","useSWR","Button","ConfirmDialog","useGatewayConfigSwr","revalidateGatewayConfig","isMaskedKey","SettingsFormSection","MobilePairQrSection","TunnelConsentDialog","fetchTunnelStatus","patchTunnelConfig","recordTunnelConsent","startTunnel","stopTunnel","TunnelStatusResponse","useMobilePairQr","TunnelStartProgressPanel","cn","messages","useGatewayStore","useLocaleStore","statusLabel","t","ReturnType","status","state","statusConnected","statusError","startProgress","phase","statusReconnecting","statusProvisioningTls","statusStartingFrpc","statusRegistering","frpcDownload","statusPreparingFrpc","statusConnecting","statusOff","statusDotClass","formatUptime","since","ms","Date","now","getTime","mins","Math","floor","hrs","rem","TunnelSettingsPanel","language","s","tunnelSettings","token","st","hasToken","Boolean","actionError","setActionError","starting","setStarting","stopping","setStopping","savingAutoStart","setSavingAutoStart","linkCopied","setLinkCopied","consentOpen","setConsentOpen","autoStartConfirmOpen","setAutoStartConfirmOpen","releaseConfirmOpen","setReleaseConfirmOpen","releasing","setReleasing","brokerSecretDraft","setBrokerSecretDraft","savingBrokerSecret","setSavingBrokerSecret","brokerSecretNotice","setBrokerSecretNotice","pairQr","data","cfgData","error","statusErr","isLoading","mutate","mutStatus","refreshInterval","latest","autoStartEnabled","c","payload","config","Array","isArray","tunnel","autoStart","brokerSecretFromConfig","secret","registrationSecret","brokerSecretConfiguredInConfig","brokerSecretFromEnv","source","brokerSecretMissing","onTunnelStatus","window","addEventListener","removeEventListener","consentBullets","consentBullet1","consentBullet2","consentBullet3","const","runStart","res","refreshQr","qrPayload","e","Error","message","String","handleStartClick","consentRequired","handleConsentConfirm","handleStop","applyAutoStart","next","toggleAutoStart","consentExpiredBanner","canAutoStart","autoStartHint","saveBrokerSecret","trimmed","trim","brokerSecretSaved","clearBrokerSecret","brokerSecretCleared","handleRelease","release","copyLink","publicUrl","navigator","clipboard","writeText","catch","setTimeout","needToken","enabled","subdomain","connectedSince","frpcPid","lastHeartbeatAt","lastError","brokerUrl","showConsentExpired","consent","acceptedAt","title","subtitle","riskBannerTitle","riskBannerBody","statusTitle","loading","uptime","lanHint","start","stop","copied","copyUrl","releaseHint","brokerSecretTitle","brokerSecretHint","brokerSecretEnvHint","brokerSecretMissingHint","brokerSecretPlaceholderKeep","brokerSecretPlaceholder","target","value","brokerSecretSave","brokerSecretClear","optionsTitle","brokerNote","consentTitle","consentIntro","consentCheckbox","consentReconfirm","consentConfirm","consentCancel","autoStartConfirmTitle","autoStartConfirmBody","autoStartConfirmLabel","releaseConfirmTitle","releaseConfirmBody","releaseConfirmLabel","Check","Clock","Copy","FileText","Loader2","Plus","RefreshCw","Trash2","useCallback","useMemo","useState","useSWR","Button","ConfirmDialog","SettingsFormSection","cleanExpiredShares","createShare","extendShare","fetchShares","revokeShare","CreateShareParams","ShareItem","ReachabilityHint","ShareLinkDialog","ShareUrlCopyRows","ShareLinkResult","cn","messages","useGatewayStore","useLocaleStore","formatFileSize","bytes","toFixed","formatRelativeTime","isoDate","language","diff","Date","getTime","now","absDiff","Math","abs","isPast","minutes","floor","label","hours","days","TTL_OPTIONS","value","key","const","SharesSettingsPanel","$","_c","_temp","t0","t","sharesSettings","token","_temp2","hasToken","Boolean","t1","Symbol","for","refreshInterval","data","error","isLoading","mutate","t2","payload","shares","showExpired","setShowExpired","t3","bb0","t4","filter","_temp3","filteredShares","_temp4","activeCount","length","t5","_temp5","expiredCount","t6","needToken","title","t7","subtitle","t8","t9","t10","t11","allSharesTitle","listTitle","t12","t13","t14","t15","t16","t17","t18","t19","hideExpired","_temp6","t20","t21","t22","loading","retry","emptyState","map","share","id","t23","t24","t25","v","s_2","s","expired","revoked","s_1","s_0","st","CreateShareSection","onCreated","ReturnType","expanded","setExpanded","path","setPath","ttlMs","setTtlMs","maxViews","setMaxViews","description","setDescription","creating","setCreating","result","setResult","errorMsg","setErrorMsg","resultDialogOpen","setResultDialogOpen","handleCreate","trim","params","undefined","res","err","Error","message","String","resetForm","createTitle","createHint","pathLabel","pathPlaceholder","e","target","ttlLabel","Number","opt","ttlOptions","maxViewsLabel","maxViewsUnlimited","descriptionLabel","descriptionPlaceholder","createButton","cancel","open","ShareRow","onRevoked","onExtended","revokeOpen","setRevokeOpen","revoking","setRevoking","linksOpen","setLinksOpen","extending","setExtending","isActive","statusLabel","statusRevoked","statusExpired","statusActive","statusColor","handleRevoke","handleCopy","handleExtend","fileName","workspaceRelativePath","fileSize","expiresAt","views","viewCount","viewsOf","copyUrl","extend","shareUrl","lanUrl","reachability","revokeConfirmTitle","revokeConfirmBody","revokeConfirmLabel","CleanExpiredButton","onCleaned","confirmOpen","setConfirmOpen","cleaning","setCleaning","handleClean","cleanExpired","cleanExpiredConfirmTitle","cleanExpiredConfirmBody","cleanExpiredConfirmLabel","Popover","Check","ChevronsUpDown","useCallback","useMemo","useState","useSWR","comboboxTriggerLayoutClass","formControlBorderFocusClass","selectComboboxTriggerFocusClass","cn","apiFetch","SETTINGS_SHELL_POPOVER_Z","interaction","apiUrl","ImageProviderSummary","id","defaultModel","models","configured","fetchImageGenerationProviders","Promise","res","ok","Error","status","data","json","payload","providers","modelIdsForProviders","providerList","seen","Set","out","p","length","m","has","add","push","buildConfiguredModelIds","currentValueTrimmed","configuredOnly","filter","fromRegistry","includes","idsMatchingQuery","ids","query","raw","trim","toLowerCase","tokens","split","Boolean","h","lower","every","t","SWR_KEY","ImageGenerationModelInput","t0","$","_c","value","disabled","placeholder","searchPlaceholder","noMatches","registryEmptyHint","outOfFilterNote","className","onChange","open","setOpen","setQuery","t1","Symbol","for","revalidateOnFocus","isLoading","error","t2","valueTrimmed","t3","_temp","configuredOnlyIds","t4","t5","allIds","t6","filtered","t7","showOutOfFilterNote","t8","label","t9","titleText","t10","next","handleOpenChange","t11","t12","t13","transition","t14","t15","t16","t17","t18","t19","t20","e_0","e","target","t21","_temp3","t22","message","t23","t24","t25","t26","map","t27","_temp2","t28","t29","t30","e_1","stopPropagation","preventDefault","Image","ImageIcon","Plus","Trash2","Button","ModelSelector","SettingsFormSection","SettingsFormSectionHeader","AgentDefaultsField","AgentDefaultsPanelProps","ImageGenerationModelInput","AgentDefaultsImageModelChainsSection","props","$","_c","a","chat","form","update","t0","cardModelsSubtitle","cardModelsTitle","t1","modelId","imageModel","t2","visionOutOfFilterNote","visionRegistryEmpty","modelNoMatches","modelPlaceholder","modelSearchPlaceholder","t3","desc","label","t4","imageModelFallbacks","t5","t6","removeModelFallback","map","fb","idx","modelId_0","next","filter","_","j","t7","t8","Symbol","for","t9","addModelFallback","t10","t11","t12","modelId_1","imageGenerationModel","t13","imageGenOutOfFilterNote","imageGenRegistryEmpty","t14","t15","imageGenerationModelFallbacks","t16","t17","fb_0","idx_0","modelId_2","next_0","__0","j_0","t18","t19","t20","t21","t22","t23","t24","Image","ImageIcon","Loader2","RefreshCw","Save","Server","useCallback","useEffect","useMemo","useState","useSWR","Button","useExtensions","useGatewayConfigSwr","fetchImageProvidersList","ImageProviderCredentialsPanel","ImageProviderCredentialsPanelMessages","IMAGE_PROVIDERS_SWR_KEY","AgentDefaultsImageModelChainsSection","fetchAgentDefaults","parseParamsJsonForSave","patchAgentDefaults","AgentDefaultsState","SettingsFormSection","SettingsFormSectionHeader","useImageProviderCredentials","settingsInputFocusClass","apiUrl","cn","messages","MessageBundle","useGatewayStore","useLocaleStore","inputClass","imageProvidersSwrKey","pickImageDefaultsSlice","s","imageModel","imageModelFallbacks","imageGenerationModel","imageGenerationModelFallbacks","imageGenerationModelTimeoutMs","imageGenerationModelAutoProviderFallback","panelMessagesFromBundle","t","credentialsIntro","regionHint","endpointPresetsHint","apiKeyLabel","optionalPlaceholder","regionLabel","baseUrlLabel","imageBaseUrlLabel","saveCredentials","savingCredentials","credentialsSaved","discardCredentials","credentialsNothingToSave","credentialsSaveError","regionPresetDefault","regionPresetCustom","baseUrlPresetDefault","baseUrlPresetCustom","openExtensionSettings","openImageModelsPage","extensionSettingsLinkTitle","imageModelsLinkTitle","configured","missingKey","defaultModel","modelsLabel","imageBaseUrlPresetHint","dashscopeRegion_beijing","dashscopeRegion_singapore","dashscopeRegion_us","apiKeyMaskedHelp","apiKeyCopy","apiKeyCopied","apiKeyShow","apiKeyHide","apiKeyNotInConfigFile","apiKeyRevealFailed","minimaxClusterLabel","minimaxClusterHint","falQueueBaseLabel","falQueueBaseHint","ImageModelsSettingsPanel","language","m","imageModelsSettings","token","st","hasToken","Boolean","state","setState","baseline","setBaseline","loading","setLoading","saving","setSaving","savedFlash","setSavedFlash","error","setError","undefined","extensions","extensionIds","Set","map","e","id","reload","fresh","snapshot","structuredClone","err","Error","message","String","patchAgentDefaultsLocal","patch","Partial","data","providers","mutate","refreshProviders","revalidateOnFocus","gwSwr","cred","dirty","JSON","stringify","anyDirty","credDirty","onBeforeUnload","BeforeUnloadEvent","preventDefault","returnValue","window","addEventListener","removeEventListener","onSave","paramsJson","SyntaxError","agentSettings","advanced","paramsInvalidJson","setTimeout","onDiscard","panelMsg","apiKeyLinkLabels","getApiKey","providersSettings","getApiKeyIntl","getApiKeyCn","title","subtitle","refresh","saved","discard","save","chat","crossLinkHint","timeoutLabel","raw","target","value","trim","next","Math","max","floor","Number","prev","timeoutHint","checked","autoFallbackLabel","autoFallbackHint","providersTitle","length","providersEmpty","credDraft","credSaving","credError","credSavedFlash","credNoopFlash","updateCredRow","onDiscardCredentials","apiFetch","apiUrl","ApiType","CustomModel","ModelsJsonConfig","ProviderConfig","ValidationResult","ModelsJsonStatus","config","path","exists","loadError","ApiKeyTestResult","type","resolved","error","API_TYPE_OPTIONS","value","label","gatewayErrorMessage","body","undefined","o","m","message","normalizeModelsJsonConfig","input","providers","Record","raw","Array","isArray","fetchModelsJson","Promise","res","data","json","catch","ok","payload","Error","status","validateModelsJson","method","JSON","stringify","saveModelsJson","saved","modelCount","reloadModelsJson","testApiKey","createCustomProvider","baseUrl","apiKey","api","models","createCustomModel","id","name","overrides","Partial","contextWindow","maxTokens","cost","output","cacheRead","cacheWrite","isShellCommand","startsWith","isEnvVar","test","getApiKeyType","maskApiKey","length","slice","Cpu","Plus","Trash2","Button","ModelSelector","SettingsFormSection","SettingsFormSectionHeader","AgentDefaultsPanelProps","AgentDefaultsChatModelFallbacksSection","props","$","_c","a","chat","form","update","t0","desc","modelFallbacks","label","t1","removeModelFallback","map","fb","idx","modelPlaceholder","modelSearchPlaceholder","modelNoMatches","modelId","next","filter","_","j","t2","t3","Symbol","for","t4","addModelFallback","t5","t6","nativeSelectMaxWidthClass","selectControlBaseClass","settingsInputFocusClass","cn","CustomModel","ModelsJsonConfig","ProviderConfig","PROVIDER_PRESETS","Record","Partial","ollama","baseUrl","api","apiKey","lmstudio","openrouter","zhipuCn","zaiGeneral","providerIdForPreset","presetKey","INPUT_OPTIONS","value","labelKey","const","inputClassName","selectClassName","parseInputSelect","model","i","input","includes","inputFromSelect","sel","updateProvider","config","providerId","updates","providers","removeProvider","addProviderEntry","prov","Dialog","X","useEffect","useState","Button","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","ModelsSettingsMessages","createCustomModel","CustomModel","inputClassName","INPUT_OPTIONS","inputFromSelect","parseInputSelect","selectClassName","ModelDialogProps","open","onOpenChange","o","providerId","model","isNew","onSave","m","ModelEditDialogContent","t0","$","_c","form","setForm","_temp","errors","setErrors","_temp2","t1","t2","Map","t3","Symbol","for","field","value","f","prev","next","delete","update","t4","contextWindow","id","maxTokens","modelIdRequired","mustBePositive","next_0","trim","set","undefined","size","validate","t5","id_0","result","name","reasoning","input","cost","output","cacheRead","cacheWrite","handleSave","t6","t7","inputSel","t8","t9","t10","addModelTitle","editModelTitle","t11","t12","modelProviderLabel","t13","t14","t15","close","t16","t17","t18","modelId","t19","has","t20","t21","e_0","e","target","t22","t23","t24","get","t25","t26","displayName","t27","t28","t29","e_1","t30","t31","t32","inputTypes","t33","t34","e_2","t35","map","opt","labelKey","t36","t37","t38","t39","e_3","checked","t40","t41","t42","t43","t44","t45","t46","e_4","parseInt","t47","t48","t49","t50","maxOutputTokens","t51","t52","t53","e_5","t54","t55","t56","t57","t58","costSection","t59","costInput","t60","t61","t62","e_6","parseFloat","t63","t64","t65","costOutput","t66","t67","t68","e_7","t69","t70","t71","t72","t73","t74","cancel","t75","addModelConfirm","saveModelConfirm","t76","t77","t78","_temp3","t79","preventDefault","Dialog","AlertCircle","X","useEffect","useState","Button","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","ModelsSettingsMessages","API_TYPE_OPTIONS","ApiType","ProviderConfig","inputClassName","PROVIDER_PRESETS","providerIdForPreset","selectClassName","ProviderDialogProps","open","onOpenChange","o","presetKey","onConfirm","providerId","prov","m","ProviderAddDialog","t0","$","_c","setProviderId","preset","setPreset","baseUrl","setBaseUrl","api","setApi","apiKey","setApiKey","error","setError","t1","t2","pk","p","t3","Symbol","for","key","p_0","applyPreset","t4","providerIdRequired","id","trim","undefined","models","handleSubmit","t5","t6","t7","addProviderTitle","t8","addProviderSubtitle","t9","t10","t11","close","t12","t13","presetLabel","t14","t15","e_0","e","target","value","t16","presetCustom","t17","presetOllama","t18","presetLmStudio","t19","presetOpenRouter","t20","presetZhipuCn","t21","presetZaiGeneral","t22","t23","t24","t25","providerIdLabel","t26","t27","e_1","t28","providerIdPlaceholder","t29","t30","t31","t32","e_2","t33","t34","t35","apiType","t36","t37","t38","e_3","map","_temp2","t39","t40","t41","t42","t43","t44","e_4","t45","apiKeyPlaceholder","t46","t47","t48","t49","cancel","t50","addProviderConfirm","t51","t52","_temp","t53","opt","label","preventDefault","Box","ChevronDown","ChevronRight","Cpu","Eye","EyeOff","Pencil","Plus","Trash2","Zap","Dispatch","SetStateAction","Button","cn","interaction","ModelsSettingsMessages","API_TYPE_OPTIONS","getApiKeyType","maskApiKey","ApiType","CustomModel","ModelsJsonConfig","inputClassName","selectClassName","updateProvider","ModelsTestResult","type","resolved","error","ModelsProvidersListProps","config","setConfig","expanded","Set","toggleExpand","id","showPw","toggleShowPw","testResults","Map","runTestKey","providerId","value","ms","removeProv","openModelDialog","model","isNew","setTestResults","ModelsProvidersList","t0","$","_c","t1","providers","t2","t3","prov","isEx","has","nModels","models","length","keyType","apiKey","testResult","get","pwVisible","badgeShell","badgeEnv","badgeLiteral","removeProvider","baseUrl","e","c","target","apiType","api","e_0","c_0","map","_temp2","e_1","v","c_1","prev","next","delete","apiKeyPlaceholder","hide","show","testKey","testError","testOk","apiKeyHint","authHeader","e_2","c_2","checked","modelsSection","addModel","modelsEmpty","mod","name","editModel","window","confirm","removeModelConfirm","replace","c_3","p","filter","mm","removeModel","Object","entries","sort","_temp","opt","label","a","b","localeCompare","ModelsSettingsEmptyStateProps","openAddProvider","preset","ModelsSettingsEmptyState","Symbol","for","emptyTitle","emptyDesc","t4","t5","t6","emptyCta","t7","transition","focusRingBase","t8","t9","t10","presetOllama","t11","t12","t13","t14","presetOpenRouter","t15","t16","t17","t18","presetLmStudio","t19","t20","t21","t22","presetZhipuCn","t23","t24","t25","t26","presetZaiGeneral","t27","t28","AlertCircle","ExternalLink","Loader2","Plus","RefreshCw","useCallback","useEffect","useMemo","useState","Button","cn","messages","docsGuidePageUrl","useGatewayStore","useLocaleStore","fetchModelsJson","normalizeModelsJsonConfig","reloadModelsJson","saveModelsJson","testApiKey","validateModelsJson","CustomModel","ModelsJsonConfig","ProviderConfig","ValidationResult","AgentDefaultsChatModelFallbacksSection","useAgentDefaultsForm","ModelEditDialogContent","ProviderAddDialog","ModelsProvidersList","ModelsSettingsEmptyState","ModelsTestResult","addProviderEntry","inputClassName","removeProvider","updateProvider","ModelsSettingsPanel","language","s","m","ms","modelsSettings","agentVm","agentSettings","token","st","hasToken","Boolean","config","setConfig","providers","baseline","setBaseline","path","setPath","loadMetaError","setLoadMetaError","loading","setLoading","saving","setSaving","validating","setValidating","reloading","setReloading","error","setError","saveOk","setSaveOk","validation","setValidation","expanded","setExpanded","Set","showRawJson","setShowRawJson","rawText","setRawText","rawError","setRawError","showPw","setShowPw","testResults","setTestResults","Map","providerDialogOpen","setProviderDialogOpen","providerPreset","setProviderPreset","modelDialogOpen","setModelDialogOpen","modelDialogCtx","setModelDialogCtx","providerId","model","isNew","load","opts","skipFullPageLoading","showFullPageLoading","norm","structuredClone","loadError","e","Error","message","dirty","JSON","stringify","agentPanelProps","form","update","a","chat","combinedDirty","stats","ids","Object","keys","models","p","values","length","toggleExpand","id","prev","next","has","delete","add","toggleShowPw","syncRawFromConfig","applyRawJson","parsed","parse","jsonParseError","runValidate","r","validateError","runSave","hadJsonDirty","hadAgentDirty","agentOk","save","saveError","runDiscard","discard","runReload","reloadError","runTestKey","value","set","type","openAddProvider","preset","onProviderAdded","prov","c","removeProv","window","confirm","removeProviderConfirm","replace","openModelDialog","onModelSaved","updated","map","mm","settingsSections","needToken","subtitle","docsLink","loadFileWarning","filePath","addProvider","validate","reload","v","hideJson","showJson","statsProviders","String","statsModels","unsavedHint","saved","errors","valid","validationWarnings","validationErrors","err","severity","target","jsonReset","jsonApply","o","apiFetch","apiUrl","OAuthStartResult","sessionId","provider","status","OAuthSessionStatus","authUrl","instructions","message","error","expiresAt","startAsyncOAuthLogin","Promise","res","method","body","JSON","stringify","ok","err","json","catch","Error","data","payload","fetchOAuthSessionStatus","encodeURIComponent","submitOAuthCode","code","cancelOAuth","cleanupOAuthSession","revokeOAuth","Popover","ExternalLink","Info","X","cn","SETTINGS_SHELL_POPOVER_Z","StoredLanguage","PROVIDER_ENRICHMENT","ProviderInfoPopoverProps","providerId","language","ProviderInfoPopover","t0","$","_c","enrichment","isZh","description","descriptionZh","t1","t2","Symbol","for","t3","t4","t5","t6","t7","t8","t9","t10","t11","bestFor","length","map","_temp","t12","freeTier","freeTierNote","undefined","t13","docsUrl","pricingUrl","t14","t15","t16","tag","ProviderActiveKeySource","ProviderCategory","ProviderRowModel","ProvidersSettingsMessages","CATEGORY_ORDER","groupByCategory","rows","Map","map","c","set","r","cat","category","list","get","push","interpolate","template","params","Record","replace","_","key","String","activeSourceLabel","labels","src","sourceAgent","sourceGateway","sourceOauth","sourceEnv","sourceModelsJson","sourceExtension","sourceNone","AlertCircle","CheckCircle2","ChevronDown","Copy","ExternalLink","Eye","EyeOff","Info","KeyRound","Loader2","LogIn","LogOut","Trash2","X","useEffect","useMemo","useState","Button","ConfirmDialog","ConfiguredModel","cancelOAuth","cleanupOAuthSession","fetchOAuthSessionStatus","revokeOAuth","startAsyncOAuthLogin","submitOAuthCode","deleteProviderApiKey","isMaskedKey","testProviderKeyResolution","ProviderRowModel","getOrderedApiKeyLinks","PROVIDER_ENRICHMENT","providerApiKeyLinkLabel","ProviderInfoPopover","activeSourceLabel","interpolate","settingsInputFocusClass","cn","interaction","StoredLanguage","ProvidersSettingsMessages","EnvVarCopyRow","t0","$","_c","envVar","labels","copied","setCopied","t1","navigator","clipboard","writeText","window","setTimeout","handleCopy","t2","t3","t4","copy","t5","t6","t7","t8","ProviderCredentialRow","row","value","rowDirty","language","onChange","onReload","justSaved","availableModels","id","v","expanded","setExpanded","showKey","setShowKey","revokeError","setRevokeError","removeLoading","setRemoveLoading","removeMessage","setRemoveMessage","removeConfirmOpen","setRemoveConfirmOpen","masked","inputValue","isOAuthConfigured","configured","Boolean","oauthLoading","setOauthLoading","sessionId","setSessionId","oauthStatus","setOauthStatus","oauthMessage","setOauthMessage","authUrl","setAuthUrl","instructions","setInstructions","codeInput","setCodeInput","testLoading","setTestLoading","testMessage","setTestMessage","testOk","setTestOk","activeSrc","activeKeySource","apiKeyLinks","catch","setInterval","st","message","status","clearInterval","error","startOAuth","oauthStarting","undefined","res","e","Error","cancelFlow","submitCode","trim","oauthProcessingCode","doRevoke","confirm","revokeConfirm","name","then","revokeFailed","doRemoveKey","removeKeySuccess","removeKeyFailed","canRemoveKey","copyKey","runTest","testFailed","type","testOkEnv","testOkCommand","testOkLiteral","secondaryLine","metaWillSave","metaMasked","runtimeLabelPrefix","metaNotConfigured","detailsId","category","expandRowDetails","supportsApiKey","placeholderOverride","placeholderKeep","placeholderKey","target","transition","press","focusRingPanel","hide","show","s","testingKey","testKey","supportsOAuth","revoke","oauth","removeKey","removeKeyConfirm","length","map","link","kind","href","openAuthPage","pasteRedirectUrl","key","envHint","maskedStoredHint","oauthHint","providerModels","filter","m","provider","savedNoModels","preview","slice","join","suffix","savedModelsAvailable","envVars","envVarAlt","CheckCircle2","ChevronDown","KeyRound","Search","useCallback","useEffect","useMemo","useRef","useState","Link","useSWR","Button","CONFIGURED_MODELS_SWR_KEY","fetchConfiguredModelsCached","useGatewayConfigSwr","isMaskedKey","mergeProviderRows","patchProviderApiKeys","providersKeysFromConfigRoot","ProviderMeta","ProviderRowModel","PROVIDER_ENRICHMENT","ProviderCredentialRow","CATEGORY_ORDER","groupByCategory","interpolate","fetchJson","apiUrl","settingsInputFocusClass","cn","messages","docsGuidePageUrl","useGatewayStore","useLocaleStore","ProvidersSettingsPanel","language","s","m","p","providersSettings","token","st","hasToken","Boolean","draft","setDraft","Record","baseline","setBaseline","saving","setSaving","error","setError","saveNotice","setSaveNotice","expandedCats","setExpandedCats","Set","searchQuery","setSearchQuery","unconfiguredOnly","setUnconfiguredOnly","savedProviderIds","setSavedProviderIds","prevSearchRef","metaUrl","fetchMetaList","url","data","ok","payload","providers","cfgData","cfgErr","isLoading","cfgLoading","mutate","mutCfg","metaList","metaErr","metaLoading","mutMeta","revalidateOnFocus","models","mutModels","mergedRows","undefined","keys","config","fetchError","Error","message","String","loading","dirty","JSON","stringify","onBeforeUnload","e","BeforeUnloadEvent","preventDefault","returnValue","window","addEventListener","removeEventListener","d","r","id","apiKey","metaRows","filteredRows","rows","q","trim","toLowerCase","filter","enrichment","aliases","includes","name","some","alias","configured","groups","prev","current","next","c","get","length","add","save","toPatch","Object","v","setTimeout","freshModels","nextCfg","nextMeta","Promise","all","list","Array","isArray","cfg","saveError","discard","toggleCat","cat","has","delete","refreshProviders","filtersActive","settingsSections","needToken","logs","loadError","empty","refresh","subtitle","rotateHint","saved","noChangesSaved","unsavedHint","intro","docsLink","modelsLink","target","value","searchPlaceholder","checked","clearFilters","noMatches","map","expanded","configuredCount","panelId","categories","count","row","ExternalLink","Shield","useCallback","useEffect","useState","SettingsFormSection","settingsFormSectionClassName","isElectron","StoredLanguage","messages","useLocaleStore","PrivacyPaneKind","ShellPermissionSnapshot","SystemSettingsBehavior","TccTriState","PERM_ROWS","key","pane","triStateFromMessages","lang","s","label","className","m","systemSettings","status","granted","denied","unknown","SystemSettingsPanel","$","_c","language","_temp","t0","t","behavior","setBehavior","perms","setPerms","loadError","setLoadError","api","window","electronAPI","system","undefined","t1","Symbol","for","b","getBehavior","getPermissions","t2","e","Error","message","String","load","t3","t4","title","t5","t6","desktopOnlyTitle","t7","desktopOnlyBody","t8","t9","patch","next","patchBehavior","kind","r","openPrivacy","ok","bb0","permissionsHint","platform","permissionsHintWin","permissionsHintLinux","permissionsHintDarwin","t10","behaviorGroup","t11","toggles","openAtLogin","t12","openAtLoginDesc","t13","t14","t15","Boolean","t16","e_2","target","checked","t17","t18","t19","keepAwake","t20","keepAwakeDesc","t21","t22","t23","keepAwakePreferred","t24","e_3","t25","t26","t27","notifyDesktop","t28","notifyDesktopDesc","t29","t30","t31","notifyEnabled","t32","e_4","t33","t34","t35","notifySound","t36","notifySoundDesc","t37","t38","t39","notifySoundEnabled","t40","e_5","t41","t42","t43","t44","t45","openSettings","perm","permissionsTitle","refresh","map","t46","st","permLabel","desc","requestMicrophone","t47","revalidateGatewayConfig","fetchJson","apiUrl","SttSettings","TtsSettings","VoiceModelsPayload","VoiceSettingsState","defaultStt","enabled","provider","alibaba","model","openai","fallback","order","defaultTts","trigger","maxTextLength","timeoutMs","voice","edge","minimax","command","outputFormat","isRecord","v","Record","Array","isArray","mergeStt","raw","d","baseFallback","const","filter","x","length","Boolean","normalizeTtsProvider","trim","mergeTts","localCliRaw","Number","isFinite","normalizeVoiceSettings","config","c","stt","tts","fetchVoiceSettings","Promise","res","ok","payload","patchVoiceSettings","state","method","body","JSON","stringify","fetchVoiceModels","models","Error","ExternalLink","Loader2","Mic","Volume2","useCallback","useEffect","useMemo","useState","ReactNode","useSWR","Button","useGatewayConfigSwr","fetchVoiceModels","normalizeVoiceSettings","patchVoiceSettings","VoiceModelsPayload","VoiceSettingsState","apiUrl","nativeSelectMaxWidthClass","selectControlBaseClass","settingsInputFocusClass","cn","messages","VoiceSettingsMessages","docsGuidePageUrl","useGatewayStore","useLocaleStore","inputClassName","selectClassName","STT_ALIBABA_FALLBACK","id","name","STT_OPENAI_FALLBACK","TTS_OPENAI_MODELS_FALLBACK","TTS_OPENAI_VOICES_FALLBACK","TTS_ALIBABA_MODELS_FALLBACK","TTS_ALIBABA_VOICES_FALLBACK","TTS_EDGE_VOICES_FALLBACK","TTS_MINIMAX_MODELS_FALLBACK","TTS_MINIMAX_VOICES_FALLBACK","VoiceSettingsPanel","language","s","m","v","voiceSettings","token","st","hasToken","Boolean","form","setForm","baseline","setBaseline","models","setModels","saving","setSaving","error","setError","saveOk","setSaveOk","data","cfgData","cfgErr","isLoading","cfgLoading","mutate","mutCfg","voiceModels","vmErr","vmLoading","mutVm","revalidateOnFocus","voiceParsed","payload","config","undefined","dirty","JSON","stringify","structuredClone","loading","fetchError","Error","message","String","updateStt","patch","Partial","f","stt","updateSttAlibaba","NonNullable","alibaba","updateSttOpenai","openai","updateSttFallback","cur","fallback","enabled","order","updateTts","tts","updateTtsAlibaba","updateTtsOpenai","updateTtsEdge","edge","updateTtsMinimax","minimax","updateTtsLocalCli","save","next","window","setTimeout","e","saveError","discard","settingsSections","voice","needToken","loadError","retry","subtitle","docsLink","saved","unsavedHint","notes","title","duration","envVars","SttSection","t0","$","_c","alibabaModels","length","openaiModels","t1","Symbol","for","t2","t3","description","t4","t5","enable","t6","enableDesc","t7","t8","target","checked","t9","t10","t11","apiKey","model","provider","apiKeyDesc","fallbackDesc","e_0","value","e_1","e_2","map","_temp","e_3","e_4","_temp2","e_5","t12","t13","m_0","TtsSection","triggerDescAlways","triggerDescInbound","triggerDescOff","triggerDescTagged","t","triggerDesc","ttsOpenai","ttsVoicesOpenai","ttsVoices","ttsAlibaba","ttsVoicesAlibaba","ttsVoicesEdge","ttsMinimax","ttsVoicesMinimax","edgeHint","localCli","providerEdge","providerLocalCli","providerOpenai","trigger","triggerAlways","triggerInbound","triggerOff","triggerTagged","_temp3","_temp4","e_6","_temp5","e_7","_temp6","e_8","e_9","_temp7","e_10","_temp8","e_11","_temp9","command","e_12","commandPlaceholder","commandDesc","cwd","e_13","cwdDesc","outputFormat","e_14","outputFormatDesc","timeoutMs","e_15","raw","trim","num","Number","isFinite","timeoutMsDesc","hint","t14","m_5","m_4","m_3","m_2","m_1","FieldLabel","children","revalidateGatewayConfig","fetchJson","apiUrl","SearchProviderRow","type","apiKey","url","disabled","WebSearchSettingsState","regionMode","maxResults","providers","normalizeWebSearchSettingsFromConfig","cfg","tools","undefined","web","region","search","s","Record","Number","isFinite","Math","floor","rawProviders","rows","Array","isArray","map","p","o","t","fetchWebSearchSettings","Promise","res","ok","payload","config","patchWebSearchSettings","state","row","trim","replace","method","body","JSON","stringify","ExternalLink","Loader2","Plus","Search","Trash2","useCallback","useEffect","useMemo","useRef","useState","ReactNode","Button","useGatewayConfigSwr","normalizeWebSearchSettingsFromConfig","patchWebSearchSettings","SearchProviderRow","WebSearchSettingsState","SettingsFormSection","SettingsFormSectionHeader","isMaskedKey","nativeSelectMaxWidthClass","selectControlBaseClass","settingsInputFocusClass","cn","messages","WebSearchSettingsMessages","docsGuidePageUrl","useGatewayStore","useLocaleStore","Field","t0","$","_c","label","description","children","t1","t2","t3","inputClassName","selectClassName","PROVIDER_TYPES","emptyProviderRow","type","apiKey","url","disabled","WebSearchSettingsPanel","language","s","m","w","webSearchSettings","logs","token","st","hasToken","Boolean","form","setForm","baseline","setBaseline","saving","setSaving","error","setError","saveOk","setSaveOk","dirtyRef","data","swrError","isLoading","mutate","parsed","payload","config","undefined","current","loading","fetchError","Error","message","String","dirty","JSON","stringify","update","patch","Partial","f","save","next","structuredClone","window","setTimeout","e","saveError","discard","title","needToken","loadError","refresh","subtitle","docsLink","saved","unsavedHint","sectionRegion","sectionRegionHint","regionLabel","regionDesc","regionMode","target","value","regionAuto","regionCn","regionGlobal","sectionSearch","sectionSearchHint","maxResultsLabel","maxResultsDesc","maxResults","Math","max","min","Number","providersTitle","providers","map","row","index","nextRows","filter","_","i","addProvider","footerHint","ProviderRowEditor","labels","onChange","onRemove","Symbol","for","t4","providerTypes","t","t5","t6","e_0","checked","t7","t8","t9","t10","t11","t12","t13","urlDesc","urlLabel","e_1","t14","apiKeyLabel","t15","apiKeyDesc","t16","t17","t18","keyPlaceholderMasked","keyPlaceholder","t19","e_2","t20","t21","t22","McpHeaderEntry","key","value","parseHeadersPaste","text","trimmed","trim","parsed","JSON","parse","Array","isArray","Object","entries","Record","map","String","rows","line","split","row","colon","indexOf","push","slice","eq","length","headersToRecord","headers","out","keys","undefined","recordToHeaders","record","revalidateGatewayConfig","headersToRecord","recordToHeaders","McpHeaderEntry","fetchJson","apiUrl","McpToolInfo","name","shortName","description","McpTransportKind","McpServerRow","id","transport","command","argsText","envJson","cwd","url","headers","connectionTimeoutMs","McpSettingsState","sessionIdleTtlMinutes","servers","parseArgsText","text","trimmed","trim","undefined","split","filter","Boolean","parseJsonObject","Record","parsed","JSON","parse","Array","isArray","Error","rowToServerConfig","row","config","args","length","env","Number","isFinite","serverConfigToRow","raw","hasUrl","transportRaw","toLowerCase","headersRaw","map","String","join","stringify","workingDirectory","emptyMcpServerRow","key","value","normalizeMcpSettingsFromConfig","cfg","mcp","root","serversRaw","Object","entries","v","sort","a","b","localeCompare","ttlMs","sessionIdleTtlMs","Math","round","buildMcpServerConfigFromRow","patchMcpSettings","state","Promise","method","body","McpServerTestResult","serverId","toolCount","tools","normalizeMcpTools","out","item","push","testMcpServer","server","res","ok","payload","error","encodeURIComponent","fetchMcpServerTools","connectionTimeoutSeconds","parseConnectionTimeoutSeconds","seconds","parseInt","mcpServerCardKey","index","ClipboardPaste","Trash2","Button","parseHeadersPaste","McpHeaderEntry","settingsInputFocusClass","cn","Props","label","optionalLabel","addLabel","removeHeaderAria","pasteLabel","pasteFailed","keyPlaceholder","valuePlaceholder","headers","onChange","inputClassName","McpHeadersEditor","updateRow","index","patch","Partial","map","row","i","addRow","key","value","removeRow","next","filter","_","length","pasteFromClipboard","text","navigator","clipboard","readText","parsed","window","alert","e","target","ChevronDown","Loader2","Plug","Trash2","Wrench","Zap","ReactNode","Button","McpHeadersEditor","connectionTimeoutSeconds","parseConnectionTimeoutSeconds","McpServerRow","McpToolInfo","McpTransportKind","McpSettingsMessages","settingsInputFocusClass","cn","TRANSPORTS","ServerToolsState","status","tools","message","Field","t0","$","_c","label","description","required","children","t1","t2","t3","t4","inputClassName","serverEndpointSummary","row","transport","command","trim","args","argsText","url","Props","expanded","onToggle","t","testing","toolState","onUpdate","patch","Partial","onRemove","onTest","onViewTools","McpServerCard","id","cardUntitled","title","summary","transportLabel","transportLabels","cardCollapseAria","cardExpandAria","t5","t6","t7","Symbol","for","t8","t9","t10","length","t11","t12","t13","t14","t15","t16","t17","e","stopPropagation","t18","t19","testConnection","t20","e_0","t21","t22","removeServer","t23","t24","t25","addHeader","argsHint","argsLabel","commandLabel","cwdLabel","envHint","envLabel","headerKeyPlaceholder","headerValuePlaceholder","headersLabel","optionalSuffix","pasteHeaders","pasteHeadersFailed","removeHeader","serverIdLabel","serverIdPlaceholder","timeoutHint","timeoutLabel","timeoutPlaceholder","toolsEmpty","toolsLoading","toolsTitle","urlLabel","viewAllTools","e_1","target","value","map","kind","e_2","e_3","e_4","cwd","e_5","envJson","e_6","e_7","headers","e_8","connectionTimeoutMs","replace","String","t26","McpToolInfo","displayToolName","fullName","stripPrefix","startsWith","slice","length","toolMatchesQuery","tool","query","q","trim","toLowerCase","shortName","name","haystack","description","filter","Boolean","join","includes","Dialog","Search","Wrench","X","useEffect","useMemo","useState","Button","McpToolInfo","toolMatchesQuery","cn","settingsInputFocusClass","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","open","onOpenChange","serverId","title","subtitle","searchPlaceholder","searchEmptyLabel","emptyLabel","closeLabel","tools","stripPrefix","displayToolName","fullName","startsWith","slice","length","McpToolsListDialog","t0","$","_c","query","setQuery","t1","t2","t3","t4","tool","filter","filteredTools","trim","hasQuery","t5","Symbol","for","t6","t7","t8","t9","replace","String","t10","t11","t12","t13","t14","t15","e","target","value","t16","map","tool_0","index","shortName","name","toolKey","description","t17","t18","t19","Cable","Loader2","Plus","Plug","useCallback","useEffect","useMemo","useRef","useState","Button","useGatewayConfigSwr","SettingsFormSection","SettingsFormSectionHeader","emptyMcpServerRow","buildMcpServerConfigFromRow","mcpServerCardKey","normalizeMcpSettingsFromConfig","patchMcpSettings","testMcpServer","McpSettingsState","McpToolInfo","McpServerCard","McpToolsListDialog","settingsInputFocusClass","cn","messages","useGatewayStore","useLocaleStore","inputClassName","ServerToolsState","status","tools","message","McpSettingsPanel","language","s","m","t","mcpSettings","token","st","hasToken","Boolean","form","setForm","baseline","setBaseline","saving","setSaving","error","setError","saveOk","setSaveOk","testingId","setTestingId","serverTools","setServerTools","Record","toolsDialog","setToolsDialog","serverId","expandedKeys","setExpandedKeys","Set","dirtyRef","data","swrError","isLoading","mutate","parsed","payload","config","undefined","current","loading","fetchError","Error","String","dirty","JSON","stringify","toggleExpanded","key","prev","next","has","delete","add","updateServer","index","patch","Partial","f","servers","id","prevKey","nextKey","keys","addServer","nextIndex","length","removeServer","removed","filter","_","i","save","structuredClone","e","runTest","row","trim","serverConfig","result","title","description","subtitle","saved","globalTitle","globalHint","idleTtlLabel","sessionIdleTtlMinutes","idleTtlPlaceholder","raw","target","value","Number","parseInt","idleTtlHint","serversTitle","serversHint","serversEmpty","map","cardKey","toolState","const","discard","disableHint","open","toolsDialogTitle","toolsDialogSubtitle","toolsDialogSearchPlaceholder","toolsDialogSearchEmpty","toolsEmpty","toolsDialogClose","Navigate","useParams","AgentBrowserDefaultsPage","AgentChatDefaultsPage","AgentRuntimeDefaultsPage","AgentSystemPromptDefaultsPage","AgentToolsDefaultsPage","AgentWorkspaceDefaultsPage","AppearanceSettingsPanel","DreamingSettingsPanel","GatewaySettingsPanel","HeartbeatSettingsPanel","TunnelSettingsPanel","SharesSettingsPanel","ImageModelsSettingsPanel","ModelsSettingsPanel","ProvidersSettingsPanel","SystemSettingsPanel","VoiceSettingsPanel","WebSearchSettingsPanel","McpSettingsPanel","messages","SettingsSectionId","useLocaleStore","SECTIONS","SettingsPage","$","_c","section","language","_temp","t0","m","t1","Symbol","for","includes","id","title","settingsSections","t2","t3","t4","s"],"sources":["../../../../../web/src/features/settings/appearance-settings.tsx","../../../../../web/src/features/settings/dreaming-config-api.ts","../../../../../web/src/features/scheduling/interval/interval-schedule-picker.tsx","../../../../../web/src/features/scheduling/window/active-hours-picker.tsx","../../../../../web/src/features/scheduling/schedule-field.tsx","../../../../../web/src/features/settings/dreaming-settings-shared.tsx","../../../../../web/src/features/settings/dreaming-settings-config-section.tsx","../../../../../web/src/features/settings/dreaming-settings-events-section.tsx","../../../../../web/src/features/settings/dreaming-settings-header.tsx","../../../../../web/src/features/settings/dreaming-settings-maintenance-section.tsx","../../../../../web/src/features/settings/dreaming-settings-preview-section.tsx","../../../../../web/src/features/settings/dreaming-settings-runtime-section.tsx","../../../../../web/src/features/settings/dreaming-settings.tsx","../../../../../web/src/features/settings/gateway-settings.types.ts","../../../../../web/src/features/settings/gateway-config-api.ts","../../../../../web/src/features/settings/gateway-settings.tsx","../../../../../web/src/features/settings/channels-status-swr.ts","../../../../../web/src/features/settings/heartbeat-settings.tsx","../../../../../web/src/features/tunnel/mobile-pair-qr-section.tsx","../../../../../web/src/features/tunnel/tunnel-consent-dialog.tsx","../../../../../web/src/features/tunnel/tunnel-api.ts","../../../../../web/src/features/tunnel/mobile-pair-qr.ts","../../../../../web/src/features/tunnel/use-mobile-pair-qr.ts","../../../../../web/src/features/tunnel/tunnel-start-progress.tsx","../../../../../web/src/features/tunnel/tunnel-settings.tsx","../../../../../web/src/features/shares/shares-settings.tsx","../../../../../web/src/features/settings/agents/image-generation-model-input.tsx","../../../../../web/src/features/settings/agents/agent-defaults-panels/image-model-chains-section.tsx","../../../../../web/src/features/settings/image-models-settings.tsx","../../../../../web/src/features/settings/models-json-api.ts","../../../../../web/src/features/settings/agents/agent-defaults-panels/chat-model-fallbacks-section.tsx","../../../../../web/src/features/settings/models/models-settings-lib.ts","../../../../../web/src/features/settings/models/models-model-edit-dialog.tsx","../../../../../web/src/features/settings/models/models-provider-add-dialog.tsx","../../../../../web/src/features/settings/models/models-providers-list.tsx","../../../../../web/src/features/settings/models/models-settings-panel.tsx","../../../../../web/src/features/settings/oauth-api.ts","../../../../../web/src/features/settings/provider-info-popover.tsx","../../../../../web/src/features/settings/providers/providers-settings-lib.ts","../../../../../web/src/features/settings/providers/provider-credential-row.tsx","../../../../../web/src/features/settings/providers/providers-settings-panel.tsx","../../../../../web/src/features/settings/system-settings-panel.tsx","../../../../../web/src/features/settings/voice-config-api.ts","../../../../../web/src/features/settings/voice-settings.tsx","../../../../../web/src/features/settings/web-search-config-api.ts","../../../../../web/src/features/settings/web-search-settings.tsx","../../../../../web/src/features/settings/mcp/mcp-headers-utils.ts","../../../../../web/src/features/settings/mcp/mcp-config-api.ts","../../../../../web/src/features/settings/mcp/mcp-headers-editor.tsx","../../../../../web/src/features/settings/mcp/mcp-server-card.tsx","../../../../../web/src/features/settings/mcp/mcp-tools-utils.ts","../../../../../web/src/features/settings/mcp/mcp-tools-list-dialog.tsx","../../../../../web/src/features/settings/mcp/mcp-settings.tsx","../../../../../web/src/pages/settings-page.tsx"],"sourcesContent":["import { PreferenceSelectFields } from '@/components/shell/preference-select-fields';\nimport { messages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { useLocaleStore } from '@/stores/locale-store';\nimport { type ColorScheme, useThemeStore } from '@/stores/theme-store';\n\nfunction preferenceCardClassName() {\n return cn('rounded-xl border border-edge-subtle bg-surface-base px-4 py-1 sm:px-5');\n}\n\n/**\n * Mini chrome preview per globals.css tokens — left: light, right: dark for the same palette.\n */\nconst SCHEME_PREVIEW: Record<\n ColorScheme,\n { light: { canvas: string; panel: string; accent: string; fg: string; muted: string }; dark: { canvas: string; panel: string; accent: string; fg: string; muted: string } }\n> = {\n default: {\n light: {\n canvas: '#f5f5f7',\n panel: '#ffffff',\n accent: '#2563eb',\n fg: '#1d1d1f',\n muted: '#d2d2d7',\n },\n dark: {\n canvas: '#1c1c1e',\n panel: '#2c2c2e',\n accent: '#3b82f6',\n fg: '#f5f5f7',\n muted: '#48484a',\n },\n },\n emerald: {\n light: {\n canvas: '#f0fdf4',\n panel: '#ffffff',\n accent: '#059669',\n fg: '#052e16',\n muted: '#86efac',\n },\n dark: {\n canvas: '#000000',\n panel: '#0a0a0a',\n accent: '#10b981',\n fg: '#d1fae5',\n muted: '#134e2a',\n },\n },\n mono: {\n light: {\n canvas: '#ffffff',\n panel: '#f5f5f5',\n accent: '#111111',\n fg: '#111111',\n muted: '#e5e7eb',\n },\n dark: {\n canvas: '#101010',\n panel: '#1a1a1a',\n accent: '#737373',\n fg: '#fafafa',\n muted: '#333333',\n },\n },\n clay: {\n light: {\n canvas: '#fffaf0',\n panel: '#ffffff',\n accent: '#1a3a3a',\n fg: '#0a0a0a',\n muted: '#e5e5e5',\n },\n dark: {\n canvas: '#0a1a1a',\n panel: '#1a2a2a',\n accent: '#ffb084',\n fg: '#fffaf0',\n muted: '#2a3a3a',\n },\n },\n};\n\nfunction SchemePreviewHalf({\n canvas,\n panel,\n accent,\n fg,\n muted,\n}: {\n canvas: string;\n panel: string;\n accent: string;\n fg: string;\n muted: string;\n}) {\n return (\n <div className=\"flex min-h-0 min-w-0 flex-1 flex-col justify-center gap-1 p-1.5\" style={{ backgroundColor: canvas }}>\n <div\n className=\"flex flex-col gap-0.5 rounded-sm border p-1\"\n style={{ backgroundColor: panel, borderColor: muted }}\n >\n <div className=\"flex items-center gap-1\">\n <div className=\"size-1 shrink-0 rounded-full\" style={{ backgroundColor: accent }} />\n <div className=\"h-1 min-w-0 flex-1 rounded-full\" style={{ backgroundColor: fg, opacity: 0.85 }} />\n </div>\n <div className=\"h-1 w-2/3 max-w-[70%] rounded-full\" style={{ backgroundColor: muted }} />\n <div className=\"size-1/2 max-w-[55%] rounded-full\" style={{ backgroundColor: muted }} />\n </div>\n </div>\n );\n}\n\n/** Side-by-side light (left) and dark (right) samples for one color scheme. */\nfunction SchemePreviewSwatch({ scheme }: { scheme: ColorScheme }) {\n const { light, dark } = SCHEME_PREVIEW[scheme];\n return (\n <div className=\"flex h-11 w-full overflow-hidden rounded-md border border-edge-subtle\">\n <SchemePreviewHalf {...light} />\n <div className=\"w-px shrink-0 bg-black/12 dark:bg-white/12\" aria-hidden />\n <SchemePreviewHalf {...dark} />\n </div>\n );\n}\n\nconst COLOR_SCHEME_OPTIONS: {\n value: ColorScheme;\n labelKey:\n | 'colorSchemeDefault'\n | 'colorSchemeLightGreen'\n | 'colorSchemeModernMono'\n | 'colorSchemeClay';\n}[] = [\n { value: 'default', labelKey: 'colorSchemeDefault' },\n { value: 'emerald', labelKey: 'colorSchemeLightGreen' },\n { value: 'mono', labelKey: 'colorSchemeModernMono' },\n { value: 'clay', labelKey: 'colorSchemeClay' },\n];\n\nfunction ColorSchemeSelector() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const a = m.appearanceSettings;\n const colorScheme = useThemeStore((s) => s.colorScheme);\n const setColorScheme = useThemeStore((s) => s.setColorScheme);\n\n return (\n <div className=\"flex flex-col gap-2 border-b border-edge-subtle py-3.5 last:border-b-0 sm:py-4\">\n <div className=\"min-w-0\">\n <div className=\"text-sm font-semibold text-fg\">{a.colorSchemeTitle}</div>\n <p className=\"mt-0.5 text-xs text-fg-muted\">{a.colorSchemeDescription}</p>\n </div>\n <div className=\"grid grid-cols-2 gap-3 lg:grid-cols-4\">\n {COLOR_SCHEME_OPTIONS.map(({ value, labelKey }) => {\n const isSelected = colorScheme === value;\n return (\n <button\n key={value}\n type=\"button\"\n aria-pressed={isSelected}\n onClick={() => setColorScheme(value)}\n className={cn(\n 'flex flex-col gap-2 rounded-xl border-2 p-2.5 text-left transition-[border-color,box-shadow] duration-150',\n isSelected\n ? 'border-accent shadow-[0_0_0_1px_var(--color-accent)]'\n : 'border-edge-subtle hover:border-edge',\n )}\n >\n <SchemePreviewSwatch scheme={value} />\n <span\n className={cn(\n 'text-xs font-medium leading-none',\n isSelected ? 'text-accent-fg' : 'text-fg-muted',\n )}\n >\n {a[labelKey]}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport function AppearanceSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const a = m.appearanceSettings;\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-1\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{a.pageTitle}</h1>\n <p className=\"text-sm text-fg-muted\">{a.subtitle}</p>\n </header>\n\n <section className={preferenceCardClassName()} aria-labelledby=\"pref-language-heading\">\n <h2 id=\"pref-language-heading\" className=\"sr-only\">\n {a.languageTitle}\n </h2>\n <PreferenceSelectFields variant=\"page\" sections={['language']} />\n </section>\n\n <section className={preferenceCardClassName()} aria-labelledby=\"pref-appearance-heading\">\n <h2 id=\"pref-appearance-heading\" className=\"sr-only\">\n {a.themeTitle}\n </h2>\n <PreferenceSelectFields variant=\"page\" sections={['theme', 'font']} />\n <ColorSchemeSelector />\n </section>\n </div>\n );\n}\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport type DreamingLightConfigState = {\n enabled: boolean;\n cron: string;\n lookbackDays: number;\n limit: number;\n dedupeSimilarity: number;\n};\n\nexport type DreamingDeepConfigState = {\n enabled: boolean;\n cron: string;\n minScore: number;\n minRecallCount: number;\n limit: number;\n recencyHalfLifeDays: number;\n maxAgeDays: number;\n};\n\nexport type DreamingRemConfigState = {\n enabled: boolean;\n cron: string;\n lookbackDays: number;\n limit: number;\n minPatternStrength: number;\n};\n\nexport type DreamingConfigState = {\n enabled: boolean;\n frequency: string;\n timezone: string;\n /** @deprecated Use phases.deep.enabled */\n deepEnabled: boolean;\n /** @deprecated Use phases.deep.minScore */\n minScore: number;\n /** @deprecated Use phases.deep.minRecallCount */\n minRecallCount: number;\n /** @deprecated Use phases.deep.limit */\n limit: number;\n light: DreamingLightConfigState;\n deep: DreamingDeepConfigState;\n rem: DreamingRemConfigState;\n};\n\nconst LIGHT_DEFAULTS: DreamingLightConfigState = {\n enabled: true,\n cron: '0 */6 * * *',\n lookbackDays: 1,\n limit: 50,\n dedupeSimilarity: 0.85,\n};\n\nconst DEEP_DEFAULTS: DreamingDeepConfigState = {\n enabled: true,\n cron: '0 3 * * *',\n minScore: 0.8,\n minRecallCount: 3,\n limit: 10,\n recencyHalfLifeDays: 14,\n maxAgeDays: 30,\n};\n\nconst REM_DEFAULTS: DreamingRemConfigState = {\n enabled: true,\n cron: '0 5 * * 0',\n lookbackDays: 7,\n limit: 20,\n minPatternStrength: 0.6,\n};\n\nconst DEFAULTS: DreamingConfigState = {\n enabled: false,\n frequency: '0 3 * * *',\n timezone: '',\n deepEnabled: true,\n minScore: 0.8,\n minRecallCount: 3,\n limit: 10,\n light: LIGHT_DEFAULTS,\n deep: DEEP_DEFAULTS,\n rem: REM_DEFAULTS,\n};\n\nfunction clamp01(n: number, fallback: number): number {\n if (!Number.isFinite(n)) return fallback;\n return Math.max(0, Math.min(1, n));\n}\n\nfunction toInt(n: unknown, fallback: number): number {\n const x = typeof n === 'string' ? Number(n) : (n as number);\n if (!Number.isFinite(x)) return fallback;\n return Math.max(0, Math.floor(x));\n}\n\nfunction toNum(value: unknown, fallback: number): number {\n const num = typeof value === 'string' ? Number(value) : (value as number);\n return Number.isFinite(num) ? num : fallback;\n}\n\nexport function normalizeDreamingFromConfig(config: unknown): DreamingConfigState {\n const c = isRecord(config) ? config : {};\n const agents = isRecord(c.agents) ? c.agents : {};\n const defaults = isRecord(agents.defaults) ? agents.defaults : {};\n const memory = isRecord(defaults.memory) ? defaults.memory : {};\n const dreaming = isRecord(memory.dreaming) ? memory.dreaming : {};\n const phases = isRecord(dreaming.phases) ? dreaming.phases : {};\n const lightRaw = isRecord(phases.light) ? phases.light : {};\n const deepRaw = isRecord(phases.deep) ? phases.deep : {};\n const remRaw = isRecord(phases.rem) ? phases.rem : {};\n\n return {\n enabled: dreaming.enabled === true,\n frequency: typeof dreaming.frequency === 'string' && dreaming.frequency.trim() ? dreaming.frequency.trim() : DEFAULTS.frequency,\n timezone: typeof dreaming.timezone === 'string' ? dreaming.timezone : '',\n deepEnabled: deepRaw.enabled !== false,\n minScore: clamp01(typeof deepRaw.minScore === 'number' ? deepRaw.minScore : Number(deepRaw.minScore), DEFAULTS.minScore),\n minRecallCount: Math.max(1, toInt(deepRaw.minRecallCount, DEFAULTS.minRecallCount)),\n limit: toInt(deepRaw.limit, DEFAULTS.limit),\n light: {\n enabled: lightRaw.enabled !== false,\n cron: typeof lightRaw.cron === 'string' && lightRaw.cron.trim() ? lightRaw.cron.trim() : LIGHT_DEFAULTS.cron,\n lookbackDays: Math.max(1, toInt(lightRaw.lookbackDays, LIGHT_DEFAULTS.lookbackDays)),\n limit: toInt(lightRaw.limit, LIGHT_DEFAULTS.limit),\n dedupeSimilarity: clamp01(toNum(lightRaw.dedupeSimilarity, LIGHT_DEFAULTS.dedupeSimilarity), LIGHT_DEFAULTS.dedupeSimilarity),\n },\n deep: {\n enabled: deepRaw.enabled !== false,\n cron: typeof deepRaw.cron === 'string' && deepRaw.cron.trim() ? deepRaw.cron.trim() : DEEP_DEFAULTS.cron,\n minScore: clamp01(toNum(deepRaw.minScore, DEEP_DEFAULTS.minScore), DEEP_DEFAULTS.minScore),\n minRecallCount: Math.max(1, toInt(deepRaw.minRecallCount, DEEP_DEFAULTS.minRecallCount)),\n limit: toInt(deepRaw.limit, DEEP_DEFAULTS.limit),\n recencyHalfLifeDays: Math.max(1, toNum(deepRaw.recencyHalfLifeDays, DEEP_DEFAULTS.recencyHalfLifeDays)),\n maxAgeDays: Math.max(1, toNum(deepRaw.maxAgeDays, DEEP_DEFAULTS.maxAgeDays)),\n },\n rem: {\n enabled: remRaw.enabled !== false,\n cron: typeof remRaw.cron === 'string' && remRaw.cron.trim() ? remRaw.cron.trim() : REM_DEFAULTS.cron,\n lookbackDays: Math.max(1, toInt(remRaw.lookbackDays, REM_DEFAULTS.lookbackDays)),\n limit: toInt(remRaw.limit, REM_DEFAULTS.limit),\n minPatternStrength: clamp01(toNum(remRaw.minPatternStrength, REM_DEFAULTS.minPatternStrength), REM_DEFAULTS.minPatternStrength),\n },\n };\n}\n\nexport async function patchDreamingConfig(state: DreamingConfigState): Promise<void> {\n const freq = state.frequency.trim();\n const tz = state.timezone.trim();\n\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({\n agents: {\n defaults: {\n memory: {\n dreaming: {\n enabled: Boolean(state.enabled),\n frequency: freq || null,\n timezone: tz || null,\n phases: {\n light: {\n enabled: Boolean(state.light.enabled),\n cron: state.light.cron.trim() || null,\n lookbackDays: Math.max(1, Math.floor(state.light.lookbackDays)),\n limit: Math.max(0, Math.floor(state.light.limit)),\n dedupeSimilarity: clamp01(state.light.dedupeSimilarity, LIGHT_DEFAULTS.dedupeSimilarity),\n },\n deep: {\n enabled: Boolean(state.deep.enabled),\n cron: state.deep.cron.trim() || null,\n minScore: clamp01(state.deep.minScore, DEEP_DEFAULTS.minScore),\n minRecallCount: Math.max(1, Math.floor(state.deep.minRecallCount)),\n limit: Math.max(0, Math.floor(state.deep.limit)),\n recencyHalfLifeDays: Math.max(1, state.deep.recencyHalfLifeDays),\n maxAgeDays: Math.max(1, state.deep.maxAgeDays),\n },\n rem: {\n enabled: Boolean(state.rem.enabled),\n cron: state.rem.cron.trim() || null,\n lookbackDays: Math.max(1, Math.floor(state.rem.lookbackDays)),\n limit: Math.max(0, Math.floor(state.rem.limit)),\n minPatternStrength: clamp01(state.rem.minPatternStrength, REM_DEFAULTS.minPatternStrength),\n },\n },\n },\n },\n },\n },\n }),\n });\n\n void revalidateGatewayConfig();\n}\n\n","import { useMemo, useRef, useState } from 'react';\n\nimport { HEARTBEAT_INTERVAL_PRESET_MS_ORDER } from '@/features/scheduling/interval/interval-presets';\nimport type { IntervalPresetLabels } from '@/features/scheduling/interval/format-interval-label';\nimport { cn } from '@/lib/cn';\nimport { formControlBorderFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\n\nexport type IntervalSchedulePickerLabels = {\n secondsLabel: string;\n presets: IntervalPresetLabels;\n};\n\nconst numberInputClass = cn(\n 'h-9 min-w-0 flex-1 rounded-lg border border-edge-subtle bg-surface-panel px-2.5 py-1.5 text-sm tabular-nums text-fg',\n formControlBorderFocusClass,\n);\n\nconst presetSelectClass = cn(\n selectControlBaseClass,\n 'h-9 max-w-[11rem] shrink-0 text-xs sm:max-w-[12rem]',\n);\n\nfunction presetOptionLabel(ms: number, presets: IntervalPresetLabels): string {\n switch (ms) {\n case 30_000:\n return presets.every30s;\n case 60_000:\n return presets.every1min;\n case 300_000:\n return presets.every5min;\n case 600_000:\n return presets.every10min;\n case 900_000:\n return presets.every15min;\n case 1_800_000:\n return presets.every30min;\n case 3_600_000:\n return presets.every1h;\n case 7_200_000:\n return presets.every2h;\n default:\n return String(ms);\n }\n}\n\ntype IntervalSchedulePickerProps = {\n valueMs: number;\n onChangeMs: (ms: number) => void;\n labels: IntervalSchedulePickerLabels;\n disabled?: boolean;\n presets?: readonly number[];\n minSeconds?: number;\n};\n\nexport function IntervalSchedulePicker({\n valueMs,\n onChangeMs,\n labels,\n disabled,\n presets = HEARTBEAT_INTERVAL_PRESET_MS_ORDER,\n minSeconds = 1,\n}: IntervalSchedulePickerProps) {\n const presetSet = useMemo(() => new Set(presets), [presets]);\n\n const intervalPresetSelectValue = useMemo(\n () => (presetSet.has(valueMs) ? String(valueMs) : ''),\n [presetSet, valueMs],\n );\n\n const [secondsDraft, setSecondsDraft] = useState<string | null>(null);\n const trackedValueMsRef = useRef(valueMs);\n if (trackedValueMsRef.current !== valueMs) {\n trackedValueMsRef.current = valueMs;\n setSecondsDraft(null);\n }\n const secondsCommitted = Math.max(minSeconds, Math.round(valueMs / 1000));\n const secondsInputValue = secondsDraft !== null ? secondsDraft : String(secondsCommitted);\n\n return (\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{labels.secondsLabel}</span>\n <div className=\"flex gap-2\">\n <input\n type=\"number\"\n min={minSeconds}\n step={1}\n disabled={disabled}\n className={numberInputClass}\n value={secondsInputValue}\n onChange={(e) => {\n const next = e.target.value;\n setSecondsDraft(next);\n const raw = parseInt(next, 10);\n if (Number.isFinite(raw) && raw >= minSeconds) {\n onChangeMs(raw * 1000);\n }\n }}\n onBlur={() => {\n if (secondsDraft === null) return;\n const raw = parseInt(secondsDraft, 10);\n if (!Number.isFinite(raw) || raw < minSeconds) {\n onChangeMs(minSeconds * 1000);\n } else {\n onChangeMs(raw * 1000);\n }\n setSecondsDraft(null);\n }}\n />\n <select\n className={presetSelectClass}\n disabled={disabled}\n value={intervalPresetSelectValue}\n onChange={(e) => {\n const v = e.target.value;\n if (v) {\n onChangeMs(parseInt(v, 10));\n setSecondsDraft(null);\n }\n }}\n >\n <option value=\"\">{labels.presets.custom}</option>\n {presets.map((ms) => (\n <option key={ms} value={String(ms)}>\n {presetOptionLabel(ms, labels.presets)}\n </option>\n ))}\n </select>\n </div>\n </div>\n );\n}\n","import { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { formControlBorderFocusClass } from '@/lib/form-field-width';\n\nexport type ActiveHoursValue = {\n start: string;\n end: string;\n timezone: string;\n};\n\nexport type ActiveHoursPickerLabels = {\n start: string;\n end: string;\n timezone: string;\n add: string;\n clear: string;\n};\n\nconst timeInputClass = cn(\n 'mt-1 w-full rounded-lg border border-edge-subtle bg-surface-panel px-2.5 py-1.5 text-sm text-fg',\n formControlBorderFocusClass,\n);\n\nconst defaultActiveHours = (): ActiveHoursValue => ({\n start: '09:00',\n end: '22:00',\n timezone: '',\n});\n\ntype ActiveHoursPickerProps = {\n value: ActiveHoursValue | null;\n onChange: (value: ActiveHoursValue | null) => void;\n labels: ActiveHoursPickerLabels;\n disabled?: boolean;\n};\n\nexport function ActiveHoursPicker({ value, onChange, labels, disabled }: ActiveHoursPickerProps) {\n if (!value) {\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"text-sm\"\n disabled={disabled}\n onClick={() => onChange(defaultActiveHours())}\n >\n {labels.add}\n </Button>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <label className=\"block min-w-0\">\n <span className=\"text-xs font-medium text-fg-muted\">{labels.start}</span>\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={value.start}\n onChange={(e) => onChange({ ...value, start: e.target.value })}\n />\n </label>\n <label className=\"block min-w-0\">\n <span className=\"text-xs font-medium text-fg-muted\">{labels.end}</span>\n <input\n type=\"time\"\n step={60}\n disabled={disabled}\n className={timeInputClass}\n value={value.end}\n onChange={(e) => onChange({ ...value, end: e.target.value })}\n />\n </label>\n <label className=\"block min-w-0\">\n <span className=\"text-xs font-medium text-fg-muted\">{labels.timezone}</span>\n <input\n type=\"text\"\n disabled={disabled}\n className={timeInputClass}\n value={value.timezone}\n onChange={(e) => onChange({ ...value, timezone: e.target.value })}\n placeholder=\"Asia/Shanghai\"\n autoComplete=\"off\"\n />\n </label>\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"text-xs\"\n disabled={disabled}\n onClick={() => onChange(null)}\n >\n {labels.clear}\n </Button>\n </div>\n );\n}\n","import type { CronSchedulePickerLabels } from '@/features/scheduling/cron/cron-schedule-picker';\nimport { CronSchedulePicker } from '@/features/scheduling/cron/cron-schedule-picker';\nimport { IntervalSchedulePicker, type IntervalSchedulePickerLabels } from '@/features/scheduling/interval/interval-schedule-picker';\nimport { HEARTBEAT_INTERVAL_PRESET_MS_ORDER } from '@/features/scheduling/interval/interval-presets';\nimport {\n ActiveHoursPicker,\n type ActiveHoursPickerLabels,\n type ActiveHoursValue,\n} from '@/features/scheduling/window/active-hours-picker';\nimport { cn } from '@/lib/cn';\n\ntype ScheduleFieldShellProps = {\n disabled?: boolean;\n label?: string;\n hint?: string;\n className?: string;\n};\n\nexport type CronScheduleFieldProps = ScheduleFieldShellProps & {\n kind: 'cron';\n value: string;\n onChange: (cron: string) => void;\n labels: CronSchedulePickerLabels;\n};\n\nexport type IntervalScheduleFieldProps = ScheduleFieldShellProps & {\n kind: 'interval';\n valueMs: number;\n onChangeMs: (ms: number) => void;\n labels: IntervalSchedulePickerLabels;\n presets?: readonly number[];\n minSeconds?: number;\n};\n\nexport type ActiveHoursScheduleFieldProps = ScheduleFieldShellProps & {\n kind: 'active-hours';\n value: ActiveHoursValue | null;\n onChange: (value: ActiveHoursValue | null) => void;\n labels: ActiveHoursPickerLabels;\n};\n\nexport type ScheduleFieldProps =\n | CronScheduleFieldProps\n | IntervalScheduleFieldProps\n | ActiveHoursScheduleFieldProps;\n\nexport type { ActiveHoursValue };\n\nexport function ScheduleField(props: ScheduleFieldProps) {\n const { disabled, label, hint, className } = props;\n\n return (\n <div className={cn('flex flex-col gap-2', className)}>\n {label ? <span className=\"text-xs font-medium text-fg-muted\">{label}</span> : null}\n {props.kind === 'cron' ? (\n <CronSchedulePicker\n value={props.value}\n onChange={props.onChange}\n labels={props.labels}\n disabled={disabled}\n showHeading={!label}\n />\n ) : null}\n {props.kind === 'interval' ? (\n <IntervalSchedulePicker\n valueMs={props.valueMs}\n onChangeMs={props.onChangeMs}\n labels={props.labels}\n disabled={disabled}\n presets={props.presets ?? HEARTBEAT_INTERVAL_PRESET_MS_ORDER}\n minSeconds={props.minSeconds}\n />\n ) : null}\n {props.kind === 'active-hours' ? (\n <ActiveHoursPicker\n value={props.value}\n onChange={props.onChange}\n labels={props.labels}\n disabled={disabled}\n />\n ) : null}\n {hint ? <p className=\"text-xs text-fg-subtle\">{hint}</p> : null}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport {\n type DreamingGatewayStatus,\n type DreamingLastRunRecord,\n type PhaseLastRun,\n} from '@/features/settings/dreaming-api';\nimport type { CronSchedulePickerLabels } from '@/features/scheduling/cron/cron-schedule-picker';\nimport { ScheduleField } from '@/features/scheduling/schedule-field';\nimport type { MessageBundle } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { formControlBorderFocusClass } from '@/lib/form-field-width';\n\nexport const sectionTightClass = 'p-4 sm:px-5';\nexport const sectionHeaderTightClass = 'mb-3';\nexport const phasePanelClass = 'rounded-xl border border-edge-subtle bg-surface-panel/30 p-3 sm:p-4';\nexport const numInputClass = cn(\n 'mt-1 w-full rounded-lg border border-edge-subtle bg-surface-panel px-2.5 py-1.5 text-sm text-fg',\n formControlBorderFocusClass,\n);\n\nexport type DreamingSettingsI18n = MessageBundle['dreamingSettings'];\n\nconst rowLabelClass = 'text-xs font-medium text-fg-muted';\nconst rowValueClass = 'text-sm font-medium text-fg';\n\nexport function FieldCell({\n label,\n children,\n className,\n}: {\n label: string;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <div className={className}>\n <span className={rowLabelClass}>{label}</span>\n {children}\n </div>\n );\n}\n\nexport function StatCell({\n label,\n children,\n className,\n}: {\n label: string;\n children: ReactNode;\n className?: string;\n}) {\n return (\n <div className={cn('min-w-0', className)}>\n <dt className={rowLabelClass}>{label}</dt>\n <dd className={cn(rowValueClass, 'mt-0.5')}>{children}</dd>\n </div>\n );\n}\n\nexport function PanelHeading({ label, className }: { label: string; className?: string }) {\n return (\n <h3 className={cn('text-[0.7rem] font-semibold uppercase tracking-wider text-fg-muted', className)}>{label}</h3>\n );\n}\n\nexport function isoShort(v: string | null | undefined): string {\n if (!v) return '—';\n return v.replace('T', ' ').replace('Z', '');\n}\n\nexport function formatDurationMs(ms: number | undefined): string {\n if (ms === undefined || !Number.isFinite(ms) || ms < 0) return '—';\n if (ms < 1000) return `${Math.round(ms)} ms`;\n return `${(ms / 1000).toFixed(2)} s`;\n}\n\nexport function lockStatusLabel(\n s: DreamingGatewayStatus['lock'],\n labels: Pick<DreamingSettingsI18n, 'lockValueLocked' | 'lockValueUnlocked'>,\n): { text: string; className: string } {\n if (s.locked) {\n return { text: labels.lockValueLocked, className: 'text-amber-600 dark:text-amber-400' };\n }\n return { text: labels.lockValueUnlocked, className: 'text-emerald-600 dark:text-emerald-400' };\n}\n\nexport function PhaseConfigPanel({\n icon,\n title,\n hint,\n enabled,\n onEnabledChange,\n cron,\n onCronChange,\n scheduleLabels,\n disabled,\n onLabel,\n offLabel,\n cronLabel,\n children,\n}: {\n icon: ReactNode;\n title: string;\n hint: string;\n enabled: boolean;\n onEnabledChange: (enabled: boolean) => void;\n cron: string;\n onCronChange: (cron: string) => void;\n scheduleLabels: CronSchedulePickerLabels;\n disabled?: boolean;\n onLabel: string;\n offLabel: string;\n cronLabel: string;\n children: ReactNode;\n}) {\n return (\n <div className={phasePanelClass}>\n <div className=\"mb-2.5 flex flex-wrap items-start justify-between gap-2 border-b border-edge-subtle/80 pb-2.5\">\n <div className=\"flex min-w-0 items-start gap-2\">\n <span className=\"mt-0.5 shrink-0\">{icon}</span>\n <div className=\"min-w-0\">\n <div className=\"text-sm font-semibold text-fg\">{title}</div>\n <p className=\"mt-0.5 text-xs leading-snug text-fg-muted\">{hint}</p>\n </div>\n </div>\n <label className=\"inline-flex shrink-0 items-center gap-2 text-xs text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={enabled}\n disabled={disabled}\n onChange={(e) => onEnabledChange(e.target.checked)}\n />\n <span>{enabled ? onLabel : offLabel}</span>\n </label>\n </div>\n <ScheduleField\n kind=\"cron\"\n className=\"mb-2.5\"\n label={cronLabel}\n value={cron}\n onChange={onCronChange}\n labels={scheduleLabels}\n disabled={disabled}\n />\n <div className=\"grid grid-cols-2 gap-2 sm:grid-cols-3 lg:grid-cols-4\">{children}</div>\n </div>\n );\n}\n\nexport function PhaseStatusCard({\n icon,\n label,\n enabled,\n cron,\n scheduleSummary,\n details,\n t,\n}: {\n icon: ReactNode;\n label: string;\n enabled: boolean;\n cron: string;\n scheduleSummary: string;\n details: string;\n t: DreamingSettingsI18n;\n}) {\n return (\n <div className={cn(phasePanelClass, 'space-y-1')}>\n <div className=\"flex items-center gap-2\">\n {icon}\n <span className=\"text-sm font-medium text-fg\">{label}</span>\n <span className={cn('ml-auto text-xs font-medium', enabled ? 'text-emerald-600 dark:text-emerald-400' : 'text-fg-muted')}>\n {enabled ? t.on : t.off}\n </span>\n </div>\n <div className=\"text-sm font-medium text-fg\">{scheduleSummary}</div>\n <p className=\"truncate font-mono text-[0.65rem] text-fg-subtle\" title={cron}>\n {cron}\n </p>\n <p className=\"text-[0.65rem] leading-snug text-fg-muted\">{details}</p>\n </div>\n );\n}\n\nexport function PhaseLastRunBlock({\n label,\n lastRun,\n t,\n}: {\n label: string;\n lastRun: PhaseLastRun | undefined;\n t: DreamingSettingsI18n;\n}) {\n return (\n <div className=\"border-t border-edge-subtle/80 pt-3\">\n <PanelHeading label={label} className=\"mb-2\" />\n {lastRun?.exists ? (\n <details className=\"group rounded-lg border border-edge-subtle\">\n <summary className=\"cursor-pointer list-none px-2.5 py-1.5 text-xs font-medium text-fg-muted marker:hidden [&::-webkit-details-marker]:hidden\">\n <span className=\"underline decoration-edge underline-offset-2 group-open:text-fg\">{t.lastRunRaw}</span>\n </summary>\n <pre className=\"max-h-40 overflow-auto border-t border-edge-subtle p-2.5 text-xs text-fg-muted\">\n {JSON.stringify(lastRun.raw, null, 2)}\n </pre>\n </details>\n ) : (\n <p className=\"text-xs text-fg-muted\">{t.phaseLastRunEmpty}</p>\n )}\n </div>\n );\n}\n\nexport function LastRunStructuredView({ t, r }: { t: DreamingSettingsI18n; r: DreamingLastRunRecord }) {\n const s = r.deep?.skipped;\n return (\n <dl className=\"grid grid-cols-2 gap-x-3 gap-y-2 sm:grid-cols-3 lg:grid-cols-4\">\n <StatCell label={t.lastRunStatus}>\n <span className={r.ok ? 'text-emerald-600 dark:text-emerald-400' : 'text-amber-600 dark:text-amber-400'}>\n {r.ok ? t.lastRunSuccess : t.lastRunFailure}\n </span>\n </StatCell>\n <StatCell label={t.lastRunDuration}>{formatDurationMs(r.durationMs)}</StatCell>\n <StatCell label={t.lastRunRanked}>{String(r.deep?.candidatesRanked ?? '—')}</StatCell>\n <StatCell label={t.lastRunApplied}>{String(r.deep?.applied ?? '—')}</StatCell>\n <StatCell label={t.lastRunReason} className=\"col-span-2 sm:col-span-3 lg:col-span-4\">\n <span className=\"block text-pretty\">{r.reason}</span>\n {r.errorMessage ? (\n <span className=\"mt-1 block text-xs text-amber-600 dark:text-amber-400\">\n {`${t.lastRunError}: ${r.errorMessage}`}\n </span>\n ) : null}\n </StatCell>\n {s ? (\n <>\n <StatCell label={t.lastRunSkipKey}>{String(s.alreadyPromotedKey)}</StatCell>\n <StatCell label={t.lastRunSkipRehydrate}>{String(s.rehydrateFailed)}</StatCell>\n <StatCell label={t.lastRunSkipContaminated}>{String(s.contaminated)}</StatCell>\n <StatCell label={t.lastRunSkipHash}>{String(s.hashDuplicate)}</StatCell>\n </>\n ) : null}\n </dl>\n );\n}\n","import { Loader2, Moon, Settings2, Sparkles, Sun } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { DreamingConfigState } from '@/features/settings/dreaming-config-api';\nimport {\n FieldCell,\n PhaseConfigPanel,\n numInputClass,\n phasePanelClass,\n sectionHeaderTightClass,\n sectionTightClass,\n type DreamingSettingsI18n,\n} from '@/features/settings/dreaming-settings-shared';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\nimport type { CronSchedulePickerLabels } from '@/features/scheduling/cron/cron-schedule-picker';\nimport { ScheduleField } from '@/features/scheduling/schedule-field';\nimport { cn } from '@/lib/cn';\n\ntype Props = {\n t: DreamingSettingsI18n;\n schedulePickerLabels: CronSchedulePickerLabels;\n hasToken: boolean;\n cfgForm: DreamingConfigState | null;\n cfgBaseline: DreamingConfigState | null;\n cfgSaving: boolean;\n cfgDirty: boolean;\n setCfgForm: (next: DreamingConfigState | null | ((prev: DreamingConfigState | null) => DreamingConfigState | null)) => void;\n setCfgOk: (v: boolean) => void;\n setCfgError: (v: string | null) => void;\n saveConfig: () => void | Promise<void>;\n};\n\nexport function DreamingConfigSection({\n t,\n schedulePickerLabels,\n hasToken,\n cfgForm,\n cfgBaseline,\n cfgSaving,\n cfgDirty,\n setCfgForm,\n setCfgOk,\n setCfgError,\n saveConfig,\n}: Props) {\n return (\n <SettingsFormSection className={cn('min-w-0', sectionTightClass)}>\n <SettingsFormSectionHeader\n className={sectionHeaderTightClass}\n icon={Settings2}\n title={t.configTitle}\n subtitle={t.configHint}\n trailing={\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"secondary\"\n className=\"px-2.5 py-1.5 text-xs\"\n disabled={!hasToken || !cfgForm || cfgSaving || !cfgDirty}\n onClick={() => void saveConfig()}\n >\n {cfgSaving ? <Loader2 className=\"mr-2 size-4 animate-spin\" aria-hidden /> : null}\n {t.saveConfig}\n </Button>\n <Button\n variant=\"secondary\"\n className=\"px-2.5 py-1.5 text-xs\"\n disabled={!hasToken || !cfgForm || cfgSaving || !cfgDirty}\n onClick={() => {\n setCfgOk(false);\n setCfgError(null);\n setCfgForm(cfgBaseline);\n }}\n >\n {t.resetConfig}\n </Button>\n </div>\n }\n />\n\n {cfgForm ? (\n <div className=\"space-y-3\">\n <div className={phasePanelClass}>\n <div className=\"grid grid-cols-1 gap-2 lg:grid-cols-12\">\n <div className=\"lg:col-span-9\">\n <ScheduleField\n kind=\"cron\"\n label={t.configFrequency}\n value={cfgForm.frequency}\n onChange={(frequency) => setCfgForm((prev) => (prev ? { ...prev, frequency } : prev))}\n labels={schedulePickerLabels}\n disabled={!hasToken || cfgSaving}\n />\n </div>\n <FieldCell label={t.configTimezone} className=\"lg:col-span-3\">\n <input\n className={numInputClass}\n value={cfgForm.timezone}\n disabled={!hasToken || cfgSaving}\n onChange={(e) => setCfgForm((prev) => (prev ? { ...prev, timezone: e.target.value } : prev))}\n placeholder=\"Asia/Shanghai\"\n />\n </FieldCell>\n </div>\n </div>\n\n <PhaseConfigPanel\n icon={<Sun className=\"size-4 text-amber-500\" />}\n title={t.configPhaseLight}\n hint={t.configPhaseLightHint}\n enabled={cfgForm.light.enabled}\n onEnabledChange={(enabled) =>\n setCfgForm((prev) => (prev ? { ...prev, light: { ...prev.light, enabled } } : prev))\n }\n cron={cfgForm.light.cron}\n onCronChange={(cron) => setCfgForm((prev) => (prev ? { ...prev, light: { ...prev.light, cron } } : prev))}\n scheduleLabels={schedulePickerLabels}\n disabled={!hasToken || cfgSaving}\n onLabel={t.on}\n offLabel={t.off}\n cronLabel={t.configPhaseCron}\n >\n <FieldCell label={t.configLightLookbackDays}>\n <input\n type=\"number\"\n step=\"1\"\n min={1}\n className={numInputClass}\n value={cfgForm.light.lookbackDays}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, light: { ...prev.light, lookbackDays: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configLightLimit}>\n <input\n type=\"number\"\n step=\"1\"\n min={0}\n className={numInputClass}\n value={cfgForm.light.limit}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, light: { ...prev.light, limit: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configLightDedupe}>\n <input\n type=\"number\"\n step=\"0.01\"\n min={0}\n max={1}\n className={numInputClass}\n value={cfgForm.light.dedupeSimilarity}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, light: { ...prev.light, dedupeSimilarity: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n </PhaseConfigPanel>\n\n <PhaseConfigPanel\n icon={<Moon className=\"size-4 text-indigo-500\" />}\n title={t.configPhaseDeep}\n hint={t.configPhaseDeepHint}\n enabled={cfgForm.deep.enabled}\n onEnabledChange={(enabled) =>\n setCfgForm((prev) => (prev ? { ...prev, deep: { ...prev.deep, enabled } } : prev))\n }\n cron={cfgForm.deep.cron}\n onCronChange={(cron) => setCfgForm((prev) => (prev ? { ...prev, deep: { ...prev.deep, cron } } : prev))}\n scheduleLabels={schedulePickerLabels}\n disabled={!hasToken || cfgSaving}\n onLabel={t.on}\n offLabel={t.off}\n cronLabel={t.configPhaseCron}\n >\n <FieldCell label={t.configDeepMinScore}>\n <input\n type=\"number\"\n step=\"0.01\"\n min={0}\n max={1}\n className={numInputClass}\n value={cfgForm.deep.minScore}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, deep: { ...prev.deep, minScore: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configDeepMinRecallCount}>\n <input\n type=\"number\"\n step=\"1\"\n min={1}\n className={numInputClass}\n value={cfgForm.deep.minRecallCount}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, deep: { ...prev.deep, minRecallCount: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configDeepLimit}>\n <input\n type=\"number\"\n step=\"1\"\n min={0}\n className={numInputClass}\n value={cfgForm.deep.limit}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, deep: { ...prev.deep, limit: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configDeepHalfLife}>\n <input\n type=\"number\"\n step=\"1\"\n min={1}\n className={numInputClass}\n value={cfgForm.deep.recencyHalfLifeDays}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev\n ? { ...prev, deep: { ...prev.deep, recencyHalfLifeDays: Number(e.target.value) } }\n : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configDeepMaxAge}>\n <input\n type=\"number\"\n step=\"1\"\n min={1}\n className={numInputClass}\n value={cfgForm.deep.maxAgeDays}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, deep: { ...prev.deep, maxAgeDays: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n </PhaseConfigPanel>\n\n <PhaseConfigPanel\n icon={<Sparkles className=\"size-4 text-purple-500\" />}\n title={t.configPhaseRem}\n hint={t.configPhaseRemHint}\n enabled={cfgForm.rem.enabled}\n onEnabledChange={(enabled) =>\n setCfgForm((prev) => (prev ? { ...prev, rem: { ...prev.rem, enabled } } : prev))\n }\n cron={cfgForm.rem.cron}\n onCronChange={(cron) => setCfgForm((prev) => (prev ? { ...prev, rem: { ...prev.rem, cron } } : prev))}\n scheduleLabels={schedulePickerLabels}\n disabled={!hasToken || cfgSaving}\n onLabel={t.on}\n offLabel={t.off}\n cronLabel={t.configPhaseCron}\n >\n <FieldCell label={t.configRemLookbackDays}>\n <input\n type=\"number\"\n step=\"1\"\n min={1}\n className={numInputClass}\n value={cfgForm.rem.lookbackDays}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, rem: { ...prev.rem, lookbackDays: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configRemLimit}>\n <input\n type=\"number\"\n step=\"1\"\n min={0}\n className={numInputClass}\n value={cfgForm.rem.limit}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev ? { ...prev, rem: { ...prev.rem, limit: Number(e.target.value) } } : prev,\n )\n }\n />\n </FieldCell>\n <FieldCell label={t.configRemMinStrength}>\n <input\n type=\"number\"\n step=\"0.01\"\n min={0}\n max={1}\n className={numInputClass}\n value={cfgForm.rem.minPatternStrength}\n disabled={!hasToken || cfgSaving}\n onChange={(e) =>\n setCfgForm((prev) =>\n prev\n ? { ...prev, rem: { ...prev.rem, minPatternStrength: Number(e.target.value) } }\n : prev,\n )\n }\n />\n </FieldCell>\n </PhaseConfigPanel>\n </div>\n ) : (\n <p className=\"text-sm text-fg-muted\">{t.configLoading}</p>\n )}\n </SettingsFormSection>\n );\n}\n","import { Activity, Loader2 } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { DreamingEvent } from '@/features/settings/dreaming-api';\nimport {\n formatDurationMs,\n isoShort,\n sectionHeaderTightClass,\n sectionTightClass,\n type DreamingSettingsI18n,\n} from '@/features/settings/dreaming-settings-shared';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\nimport { cn } from '@/lib/cn';\n\ntype Props = {\n t: DreamingSettingsI18n;\n hasToken: boolean;\n eventsLoading: boolean;\n events: DreamingEvent[] | null;\n loadEvents: () => void | Promise<void>;\n};\n\nexport function DreamingEventsSection({ t, hasToken, eventsLoading, events, loadEvents }: Props) {\n return (\n <SettingsFormSection className={sectionTightClass}>\n <SettingsFormSectionHeader\n className={sectionHeaderTightClass}\n icon={Activity}\n title={t.eventsTitle}\n subtitle={t.eventsHint}\n trailing={\n <Button\n variant=\"secondary\"\n className=\"px-2.5 py-1.5 text-xs\"\n disabled={!hasToken || eventsLoading}\n onClick={() => void loadEvents()}\n >\n {eventsLoading ? <Loader2 className=\"mr-2 size-4 animate-spin\" aria-hidden /> : null}\n {t.eventsLoad}\n </Button>\n }\n />\n {events ? (\n events.length > 0 ? (\n <div className=\"space-y-1.5\">\n {events.map((ev) => {\n const phaseIcon = ev.phase === 'light' ? '☀️' : ev.phase === 'rem' ? '✨' : '🌙';\n const metrics =\n ev.phase === 'light'\n ? `scanned=${ev.scannedEntries ?? 0} new=${ev.newSignals ?? 0} deduped=${ev.deduped ?? 0}`\n : ev.phase === 'rem'\n ? `patterns=${ev.patternsDiscovered ?? 0} analyzed=${ev.entriesAnalyzed ?? 0}`\n : `candidates=${ev.candidates ?? 0} applied=${ev.applied ?? 0}`;\n return (\n <div\n key={`${ev.timestamp}:${ev.phase}`}\n className=\"flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border border-edge-subtle bg-surface-panel/60 px-3 py-2 text-xs\"\n >\n <span>{phaseIcon}</span>\n <span className=\"font-medium text-fg\">{ev.phase}</span>\n <span\n className={cn(\n 'font-medium',\n ev.ok ? 'text-emerald-600 dark:text-emerald-400' : 'text-amber-600 dark:text-amber-400',\n )}\n >\n {ev.ok ? 'OK' : 'FAIL'}\n </span>\n <span className=\"text-fg-muted\">{metrics}</span>\n <span className=\"text-fg-muted\">{formatDurationMs(ev.durationMs)}</span>\n <span className=\"ml-auto text-fg-subtle\">{isoShort(ev.timestamp)}</span>\n </div>\n );\n })}\n </div>\n ) : (\n <p className=\"text-sm text-fg-muted\">{t.eventsEmpty}</p>\n )\n ) : (\n <p className=\"text-sm text-fg-muted\">{t.eventsNotLoaded}</p>\n )}\n </SettingsFormSection>\n );\n}\n","import { Loader2, Play, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { DreamingPhaseId } from '@/features/settings/dreaming-api';\nimport type { DreamingConfigState } from '@/features/settings/dreaming-config-api';\nimport { type DreamingSettingsI18n } from '@/features/settings/dreaming-settings-shared';\nimport { cn } from '@/lib/cn';\n\ntype Props = {\n t: DreamingSettingsI18n;\n cfgForm: DreamingConfigState | null;\n dreamingEnabled: boolean;\n hasToken: boolean;\n cfgSaving: boolean;\n enableSaving: boolean;\n runPhase: DreamingPhaseId;\n setRunPhase: (p: DreamingPhaseId) => void;\n runBusy: boolean;\n doRunNow: (phase: DreamingPhaseId) => void | Promise<void>;\n doRefresh: () => void | Promise<void>;\n setDreamingEnabled: (enabled: boolean) => void | Promise<void>;\n};\n\nexport function DreamingHeader({\n t,\n cfgForm,\n dreamingEnabled,\n hasToken,\n cfgSaving,\n enableSaving,\n runPhase,\n setRunPhase,\n runBusy,\n doRunNow,\n doRefresh,\n setDreamingEnabled,\n}: Props) {\n return (\n <header className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t.subtitle}</p>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-2\">\n {cfgForm ? (\n <label\n className={cn(\n 'inline-flex cursor-pointer items-center gap-2 rounded-xl border px-3 py-1.5 text-sm transition-colors',\n dreamingEnabled\n ? 'border-emerald-500/30 bg-emerald-500/5 text-fg'\n : 'border-edge-subtle bg-surface-panel/50 text-fg-muted',\n )}\n >\n <span className=\"text-xs font-medium\">{t.configEnabled}</span>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={cfgForm.enabled}\n disabled={!hasToken || cfgSaving || enableSaving}\n onChange={(e) => void setDreamingEnabled(e.target.checked)}\n />\n {enableSaving ? (\n <Loader2 className=\"size-3.5 animate-spin text-fg-muted\" aria-hidden />\n ) : (\n <span\n className={cn(\n 'text-xs font-semibold',\n dreamingEnabled ? 'text-emerald-600 dark:text-emerald-400' : '',\n )}\n >\n {cfgForm.enabled ? t.on : t.off}\n </span>\n )}\n </label>\n ) : null}\n {dreamingEnabled ? (\n <>\n <select\n className=\"rounded-lg border border-edge bg-surface-panel px-2 py-1.5 text-xs text-fg\"\n value={runPhase}\n onChange={(e) => setRunPhase(e.target.value as DreamingPhaseId)}\n disabled={!hasToken || runBusy}\n >\n <option value=\"light\">Light</option>\n <option value=\"deep\">Deep</option>\n <option value=\"rem\">REM</option>\n </select>\n <Button\n variant=\"secondary\"\n className=\"px-2.5 py-1.5 text-xs\"\n disabled={!hasToken || runBusy}\n onClick={() => void doRunNow(runPhase)}\n title={t.runNowHint}\n >\n {runBusy ? (\n <Loader2 className=\"mr-2 size-4 animate-spin\" aria-hidden />\n ) : (\n <Play className=\"mr-2 size-4\" aria-hidden />\n )}\n {t.runNow}\n </Button>\n </>\n ) : null}\n <Button\n variant=\"secondary\"\n className=\"px-2.5 py-1.5 text-xs\"\n disabled={!hasToken}\n onClick={() => void doRefresh()}\n >\n <RefreshCw className=\"mr-2 size-4\" aria-hidden />\n {t.refresh}\n </Button>\n </div>\n </header>\n );\n}\n","import { Loader2, Trash2, Unlock, Wrench } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport {\n sectionHeaderTightClass,\n sectionTightClass,\n type DreamingSettingsI18n,\n} from '@/features/settings/dreaming-settings-shared';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\nimport { cn } from '@/lib/cn';\n\ntype Props = {\n t: DreamingSettingsI18n;\n disabled: boolean;\n actionBusy: 'reset_store' | 'clear_lock' | null;\n doAction: (action: 'reset_store' | 'clear_lock') => void | Promise<void>;\n};\n\nexport function DreamingMaintenanceSection({ t, disabled, actionBusy, doAction }: Props) {\n return (\n <SettingsFormSection className={cn('max-w-2xl', sectionTightClass)}>\n <SettingsFormSectionHeader\n className={sectionHeaderTightClass}\n icon={Wrench}\n title={t.maintenanceTitle}\n subtitle={t.maintenanceHint}\n />\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Button\n variant=\"secondary\"\n disabled={disabled}\n onClick={() => {\n if (!confirm(t.confirmResetStore)) return;\n void doAction('reset_store');\n }}\n >\n {actionBusy === 'reset_store' ? (\n <Loader2 className=\"mr-2 size-4 animate-spin\" aria-hidden />\n ) : (\n <Trash2 className=\"mr-2 size-4\" aria-hidden />\n )}\n {t.resetStore}\n </Button>\n <Button\n variant=\"secondary\"\n disabled={disabled}\n onClick={() => {\n if (!confirm(t.confirmClearLock)) return;\n void doAction('clear_lock');\n }}\n >\n {actionBusy === 'clear_lock' ? (\n <Loader2 className=\"mr-2 size-4 animate-spin\" aria-hidden />\n ) : (\n <Unlock className=\"mr-2 size-4\" aria-hidden />\n )}\n {t.clearLock}\n </Button>\n </div>\n </SettingsFormSection>\n );\n}\n","import { Loader2, ScanLine } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { DreamingPreviewItem } from '@/features/settings/dreaming-api';\nimport {\n sectionHeaderTightClass,\n sectionTightClass,\n type DreamingSettingsI18n,\n} from '@/features/settings/dreaming-settings-shared';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\n\ntype Props = {\n t: DreamingSettingsI18n;\n hasToken: boolean;\n previewLoading: boolean;\n previewItems: DreamingPreviewItem[] | null;\n loadPreview: () => void | Promise<void>;\n};\n\nexport function DreamingPreviewSection({ t, hasToken, previewLoading, previewItems, loadPreview }: Props) {\n return (\n <SettingsFormSection className={sectionTightClass}>\n <SettingsFormSectionHeader\n className={sectionHeaderTightClass}\n icon={ScanLine}\n title={t.previewTitle}\n subtitle={t.previewHint}\n trailing={\n <Button\n variant=\"secondary\"\n className=\"px-2.5 py-1.5 text-xs\"\n disabled={!hasToken || previewLoading}\n onClick={() => void loadPreview()}\n >\n {previewLoading ? <Loader2 className=\"mr-2 size-4 animate-spin\" aria-hidden /> : null}\n {t.previewLoad}\n </Button>\n }\n />\n {previewItems ? (\n previewItems.length > 0 ? (\n <div className=\"space-y-2\">\n {previewItems.map((it) => {\n const src = `${it.path}:${it.startLine}-${it.endLine}`;\n const skipped = it.skippedReason;\n return (\n <div\n key={`${it.key}:${it.hash}:${src}`}\n className=\"rounded-lg border border-edge-subtle bg-surface-panel/60 px-2.5 py-2\"\n >\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-muted\">\n <span className=\"font-medium text-fg\">{src}</span>\n <span>score={it.score.toFixed(3)}</span>\n <span>recalls={it.recallCount}</span>\n <span>avg={it.avgScore.toFixed(3)}</span>\n <span>decay={it.recencyDecay?.toFixed(3) ?? '—'}</span>\n {skipped ? (\n <span className=\"text-amber-600 dark:text-amber-400\">{skipped}</span>\n ) : (\n <span className=\"text-emerald-600 dark:text-emerald-400\">{t.previewEligible}</span>\n )}\n </div>\n {it.snippet ? <div className=\"mt-2 text-sm text-fg\">{it.snippet}</div> : null}\n </div>\n );\n })}\n </div>\n ) : (\n <p className=\"text-sm text-fg-muted\">{t.previewEmpty}</p>\n )\n ) : (\n <p className=\"text-sm text-fg-muted\">{t.previewNotLoaded}</p>\n )}\n </SettingsFormSection>\n );\n}\n","import { Activity, Loader2, Moon, Sparkles, Sun } from 'lucide-react';\n\nimport { type DreamingGatewayStatus } from '@/features/settings/dreaming-api';\nimport {\n PanelHeading,\n PhaseLastRunBlock,\n PhaseStatusCard,\n StatCell,\n isoShort,\n lockStatusLabel,\n phasePanelClass,\n sectionHeaderTightClass,\n sectionTightClass,\n type DreamingSettingsI18n,\n} from '@/features/settings/dreaming-settings-shared';\nimport { LastRunStructuredView } from '@/features/settings/dreaming-settings-shared';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\nimport { formatCronExpressionLabel, type ScheduleBadgeLabels } from '@/features/scheduling/cron/format-cron-label';\nimport { ScheduleSummary } from '@/features/scheduling/schedule-summary';\nimport { cn } from '@/lib/cn';\n\ntype Props = {\n t: DreamingSettingsI18n;\n data: DreamingGatewayStatus | undefined;\n isLoading: boolean;\n localeTag: string;\n scheduleBadgeLabels: ScheduleBadgeLabels;\n};\n\nexport function DreamingRuntimeSection({ t, data, isLoading, localeTag, scheduleBadgeLabels }: Props) {\n const lockLabel = data ? lockStatusLabel(data.lock, t) : null;\n\n return (\n <SettingsFormSection className={cn('min-w-0', sectionTightClass)}>\n <SettingsFormSectionHeader\n className={sectionHeaderTightClass}\n icon={Activity}\n title={t.runtimeTitle}\n subtitle={t.runtimeHint}\n trailing={isLoading ? <Loader2 className=\"size-4 shrink-0 animate-spin text-fg-muted\" aria-hidden /> : null}\n />\n\n <div className=\"space-y-3\">\n <div className={phasePanelClass}>\n <PanelHeading label={t.subsectionSchedule} className=\"mb-2\" />\n <dl className=\"grid grid-cols-2 gap-x-3 gap-y-2 sm:grid-cols-4\">\n <StatCell label={t.enabled}>{data ? (data.config.enabled ? t.on : t.off) : '—'}</StatCell>\n <StatCell label={t.lock}>\n <span className={lockLabel?.className}>{lockLabel ? lockLabel.text : '—'}</span>\n </StatCell>\n <StatCell label={t.timezone}>{data ? data.config.timezone || '—' : '—'}</StatCell>\n <StatCell label={t.schedule} className=\"col-span-2 sm:col-span-2\">\n {data ? (\n <ScheduleSummary\n kind=\"cron\"\n expression={data.config.frequency}\n locale={localeTag}\n labels={scheduleBadgeLabels}\n timezone={data.config.timezone || undefined}\n />\n ) : (\n '—'\n )}\n {data?.config.frequency ? (\n <p className=\"mt-0.5 truncate font-mono text-[0.65rem] text-fg-subtle\" title={data.config.frequency}>\n {data.config.frequency}\n </p>\n ) : null}\n </StatCell>\n </dl>\n </div>\n\n <div className={phasePanelClass}>\n <PanelHeading label={t.subsectionStore} className=\"mb-2\" />\n <dl className=\"grid grid-cols-2 gap-x-3 gap-y-2 sm:grid-cols-4\">\n <StatCell label={t.storeEntries}>{data ? String(data.store.entryCount) : '—'}</StatCell>\n <StatCell label={t.storePromoted}>{data ? String(data.store.promotedCount) : '—'}</StatCell>\n <StatCell label={t.storeUpdatedAt}>{data ? isoShort(data.store.updatedAt) : '—'}</StatCell>\n <StatCell label={t.storeLastPromotedAt}>{data ? isoShort(data.store.lastPromotedAt) : '—'}</StatCell>\n </dl>\n </div>\n\n {data?.config?.phases ? (\n <div>\n <PanelHeading label={t.subsectionPhases} className=\"mb-2\" />\n <div className=\"grid gap-2 sm:grid-cols-3\">\n <PhaseStatusCard\n icon={<Sun className=\"size-4 text-amber-500\" />}\n label=\"Light\"\n enabled={data.config.phases.light.enabled}\n cron={data.config.phases.light.cron}\n scheduleSummary={formatCronExpressionLabel(\n data.config.phases.light.cron,\n localeTag,\n scheduleBadgeLabels,\n { timezone: data.config.timezone || undefined },\n )}\n details={`lookback=${data.config.phases.light.lookbackDays}d, limit=${data.config.phases.light.limit}, dedupe=${data.config.phases.light.dedupeSimilarity}`}\n t={t}\n />\n <PhaseStatusCard\n icon={<Moon className=\"size-4 text-indigo-500\" />}\n label=\"Deep\"\n enabled={data.config.phases.deep.enabled}\n cron={data.config.phases.deep.cron}\n scheduleSummary={formatCronExpressionLabel(\n data.config.phases.deep.cron,\n localeTag,\n scheduleBadgeLabels,\n { timezone: data.config.timezone || undefined },\n )}\n details={`minScore=${data.config.phases.deep.minScore}, recalls≥${data.config.phases.deep.minRecallCount}, limit=${data.config.phases.deep.limit}, halfLife=${data.config.phases.deep.recencyHalfLifeDays}d`}\n t={t}\n />\n <PhaseStatusCard\n icon={<Sparkles className=\"size-4 text-purple-500\" />}\n label=\"REM\"\n enabled={data.config.phases.rem.enabled}\n cron={data.config.phases.rem.cron}\n scheduleSummary={formatCronExpressionLabel(\n data.config.phases.rem.cron,\n localeTag,\n scheduleBadgeLabels,\n { timezone: data.config.timezone || undefined },\n )}\n details={`lookback=${data.config.phases.rem.lookbackDays}d, limit=${data.config.phases.rem.limit}, strength≥${data.config.phases.rem.minPatternStrength}`}\n t={t}\n />\n </div>\n </div>\n ) : null}\n\n <div className={phasePanelClass}>\n <PanelHeading label={t.subsectionLastRun} className=\"mb-2\" />\n <p className=\"mb-2 text-xs text-fg-muted\">{t.lastRunBlockHint}</p>\n {data?.lastRun?.exists ? (\n <div className=\"space-y-2\">\n {data.lastRun.parseError ? (\n <p className=\"text-sm text-amber-600 dark:text-amber-400\" role=\"alert\">\n {t.lastRunParseError}\n {': '}\n {data.lastRun.parseError}\n </p>\n ) : null}\n {data.lastRun.record ? (\n <div className=\"rounded-lg border border-edge-subtle/80 bg-surface-panel/50 p-2.5\">\n <LastRunStructuredView t={t} r={data.lastRun.record} />\n </div>\n ) : null}\n {data.lastRun.raw !== undefined && data.lastRun.raw !== null ? (\n <details className=\"group rounded-lg border border-edge-subtle\">\n <summary className=\"cursor-pointer list-none px-2.5 py-1.5 text-xs font-medium text-fg-muted marker:hidden [&::-webkit-details-marker]:hidden\">\n <span className=\"underline decoration-edge underline-offset-2 group-open:text-fg\">{t.lastRunRaw}</span>\n </summary>\n <pre className=\"max-h-40 overflow-auto border-t border-edge-subtle p-2.5 text-xs text-fg-muted\">\n {JSON.stringify(data.lastRun.raw, null, 2)}\n </pre>\n </details>\n ) : null}\n </div>\n ) : (\n <p className=\"text-xs text-fg-muted\">{t.lastRunEmpty}</p>\n )}\n </div>\n\n <PhaseLastRunBlock label={t.subsectionLightLastRun} lastRun={data?.lightLastRun} t={t} />\n <PhaseLastRunBlock label={t.subsectionRemLastRun} lastRun={data?.remLastRun} t={t} />\n </div>\n </SettingsFormSection>\n );\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n dreamingSwrKey,\n fetchDreamingEvents,\n fetchDreamingPreview,\n fetchDreamingStatus,\n postDreamingAction,\n postDreamingRunNow,\n type DreamingEvent,\n type DreamingPhaseId,\n type DreamingPreviewItem,\n} from '@/features/settings/dreaming-api';\nimport {\n normalizeDreamingFromConfig,\n patchDreamingConfig,\n type DreamingConfigState,\n} from '@/features/settings/dreaming-config-api';\nimport { DreamingConfigSection } from '@/features/settings/dreaming-settings-config-section';\nimport { DreamingEventsSection } from '@/features/settings/dreaming-settings-events-section';\nimport { DreamingHeader } from '@/features/settings/dreaming-settings-header';\nimport { DreamingMaintenanceSection } from '@/features/settings/dreaming-settings-maintenance-section';\nimport { DreamingPreviewSection } from '@/features/settings/dreaming-settings-preview-section';\nimport { DreamingRuntimeSection } from '@/features/settings/dreaming-settings-runtime-section';\nimport { messages } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nexport function DreamingSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const t = m.dreamingSettings;\n const schedulePickerLabels = m.cron.schedulePicker;\n const scheduleBadgeLabels = m.cron.scheduleBadge;\n const localeTag = language === 'zh' ? 'zh-CN' : 'en-US';\n\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const { data: cfgData } = useGatewayConfigSwr(hasToken);\n\n const [actionBusy, setActionBusy] = useState<null | 'reset_store' | 'clear_lock'>(null);\n const [actionError, setActionError] = useState<string | null>(null);\n const [actionOk, setActionOk] = useState(false);\n const [runBusy, setRunBusy] = useState(false);\n const [runOk, setRunOk] = useState(false);\n const [runError, setRunError] = useState<string | null>(null);\n const [runPhase, setRunPhase] = useState<DreamingPhaseId>('deep');\n const [cfgForm, setCfgForm] = useState<DreamingConfigState | null>(null);\n const [cfgBaseline, setCfgBaseline] = useState<DreamingConfigState | null>(null);\n const [cfgSaving, setCfgSaving] = useState(false);\n const [enableSaving, setEnableSaving] = useState(false);\n const [cfgOk, setCfgOk] = useState(false);\n const [cfgError, setCfgError] = useState<string | null>(null);\n const [previewLoading, setPreviewLoading] = useState(false);\n const [previewError, setPreviewError] = useState<string | null>(null);\n const [previewItems, setPreviewItems] = useState<DreamingPreviewItem[] | null>(null);\n const [eventsLoading, setEventsLoading] = useState(false);\n const [eventsError, setEventsError] = useState<string | null>(null);\n const [events, setEvents] = useState<DreamingEvent[] | null>(null);\n\n const { data, error, isLoading, mutate } = useSWR(hasToken ? dreamingSwrKey() : null, fetchDreamingStatus, {\n revalidateOnFocus: false,\n });\n\n const errorMessages = useMemo(() => {\n const list: string[] = [];\n if (error) list.push(error instanceof Error ? error.message : String(error));\n if (actionError) list.push(actionError);\n if (runError) list.push(runError);\n if (previewError) list.push(previewError);\n if (eventsError) list.push(eventsError);\n if (cfgError) list.push(cfgError);\n return list;\n }, [error, actionError, runError, previewError, eventsError, cfgError]);\n\n const successMessages = useMemo(() => {\n const list: string[] = [];\n if (cfgOk) list.push(t.configSaved);\n if (runOk) list.push(t.runQueued);\n if (actionOk) list.push(t.actionOk);\n return list;\n }, [cfgOk, runOk, actionOk, t]);\n\n const doRefresh = useCallback(async () => {\n setActionOk(false);\n setActionError(null);\n setRunOk(false);\n setRunError(null);\n setCfgOk(false);\n setCfgError(null);\n setPreviewError(null);\n await mutate();\n }, [mutate]);\n\n const loadPreview = useCallback(async () => {\n setPreviewLoading(true);\n setPreviewError(null);\n try {\n const res = await fetchDreamingPreview(20);\n setPreviewItems(res.items ?? []);\n } catch (e) {\n setPreviewError(e instanceof Error ? e.message : String(e));\n } finally {\n setPreviewLoading(false);\n }\n }, []);\n\n const loadEvents = useCallback(async () => {\n setEventsLoading(true);\n setEventsError(null);\n try {\n const result = await fetchDreamingEvents(50);\n setEvents(result);\n } catch (e) {\n setEventsError(e instanceof Error ? e.message : String(e));\n } finally {\n setEventsLoading(false);\n }\n }, []);\n\n const doRunNow = useCallback(\n async (phase: DreamingPhaseId = 'deep') => {\n setRunBusy(true);\n setRunOk(false);\n setRunError(null);\n try {\n await postDreamingRunNow(phase);\n setRunOk(true);\n await mutate();\n } catch (e) {\n setRunError(e instanceof Error ? e.message : String(e));\n } finally {\n setRunBusy(false);\n }\n },\n [mutate],\n );\n\n const doAction = useCallback(\n async (action: 'reset_store' | 'clear_lock') => {\n setActionBusy(action);\n setActionError(null);\n setActionOk(false);\n try {\n await postDreamingAction(action);\n setActionOk(true);\n await mutate();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setActionBusy(null);\n }\n },\n [mutate],\n );\n\n const disabled = !hasToken || isLoading || Boolean(actionBusy);\n\n const cfgFromGateway = useMemo(() => {\n const rawCfg = cfgData?.payload?.config;\n return normalizeDreamingFromConfig(rawCfg ?? {});\n }, [cfgData]);\n\n useEffect(() => {\n if (!hasToken) return;\n if (!cfgBaseline) {\n setCfgBaseline(cfgFromGateway);\n setCfgForm(cfgFromGateway);\n return;\n }\n const nextJson = JSON.stringify(cfgFromGateway);\n const baseJson = JSON.stringify(cfgBaseline);\n if (nextJson !== baseJson) {\n setCfgBaseline(cfgFromGateway);\n setCfgForm(cfgFromGateway);\n }\n }, [cfgBaseline, cfgFromGateway, hasToken]);\n\n const cfgDirty = useMemo(() => {\n if (!cfgForm || !cfgBaseline) return false;\n return JSON.stringify(cfgForm) !== JSON.stringify(cfgBaseline);\n }, [cfgForm, cfgBaseline]);\n\n const saveConfig = useCallback(async () => {\n if (!cfgForm) return;\n setCfgSaving(true);\n setCfgOk(false);\n setCfgError(null);\n try {\n await patchDreamingConfig(cfgForm);\n setCfgBaseline(cfgForm);\n setCfgOk(true);\n await mutate();\n } catch (e) {\n setCfgError(e instanceof Error ? e.message : String(e));\n } finally {\n setCfgSaving(false);\n }\n }, [cfgForm, mutate]);\n\n const setDreamingEnabled = useCallback(\n async (enabled: boolean) => {\n if (!cfgForm || !hasToken) return;\n const next = { ...cfgForm, enabled };\n const prev = cfgForm;\n setCfgForm(next);\n setEnableSaving(true);\n setCfgOk(false);\n setCfgError(null);\n try {\n await patchDreamingConfig(next);\n setCfgBaseline(next);\n setCfgOk(true);\n await mutate();\n } catch (e) {\n setCfgForm(prev);\n setCfgError(e instanceof Error ? e.message : String(e));\n } finally {\n setEnableSaving(false);\n }\n },\n [cfgForm, hasToken, mutate],\n );\n\n const dreamingEnabled = cfgForm?.enabled ?? cfgFromGateway.enabled;\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-6\">\n <DreamingHeader\n t={t}\n cfgForm={cfgForm}\n dreamingEnabled={dreamingEnabled}\n hasToken={hasToken}\n cfgSaving={cfgSaving}\n enableSaving={enableSaving}\n runPhase={runPhase}\n setRunPhase={setRunPhase}\n runBusy={runBusy}\n doRunNow={doRunNow}\n doRefresh={doRefresh}\n setDreamingEnabled={setDreamingEnabled}\n />\n\n {errorMessages.length > 0 ? (\n <div\n className=\"space-y-1.5 rounded-2xl border border-amber-500/20 bg-amber-500/5 px-4 py-3\"\n role=\"alert\"\n >\n {errorMessages.map((line) => (\n <p key={line} className=\"text-sm text-amber-800 dark:text-amber-200/90\">\n {line}\n </p>\n ))}\n </div>\n ) : null}\n {successMessages.length > 0 ? (\n <div\n className=\"space-y-1.5 rounded-2xl border border-emerald-500/20 bg-emerald-500/5 px-4 py-3\"\n role=\"status\"\n >\n {successMessages.map((line) => (\n <p key={line} className=\"text-sm text-emerald-800 dark:text-emerald-200/90\">\n {line}\n </p>\n ))}\n </div>\n ) : null}\n\n <div className=\"flex flex-col gap-4\">\n <DreamingConfigSection\n t={t}\n schedulePickerLabels={schedulePickerLabels}\n hasToken={hasToken}\n cfgForm={cfgForm}\n cfgBaseline={cfgBaseline}\n cfgSaving={cfgSaving}\n cfgDirty={cfgDirty}\n setCfgForm={setCfgForm}\n setCfgOk={setCfgOk}\n setCfgError={setCfgError}\n saveConfig={saveConfig}\n />\n\n <DreamingRuntimeSection\n t={t}\n data={data}\n isLoading={isLoading}\n localeTag={localeTag}\n scheduleBadgeLabels={scheduleBadgeLabels}\n />\n </div>\n\n <div className=\"grid gap-4 xl:grid-cols-2\">\n <DreamingPreviewSection\n t={t}\n hasToken={hasToken}\n previewLoading={previewLoading}\n previewItems={previewItems}\n loadPreview={loadPreview}\n />\n <DreamingEventsSection\n t={t}\n hasToken={hasToken}\n eventsLoading={eventsLoading}\n events={events}\n loadEvents={loadEvents}\n />\n </div>\n\n <DreamingMaintenanceSection t={t} disabled={disabled} actionBusy={actionBusy} doAction={doAction} />\n </div>\n );\n}\n","export type GatewayAuthMode = 'none' | 'token' | 'password';\n\nexport type UpdatePackageChannel = 'stable' | 'beta' | 'dev';\n\nexport interface GatewayAuthRateLimitState {\n enabled: boolean;\n maxAttempts: number;\n windowMs: number;\n blockDurationMs: number;\n}\n\nexport type GatewayChannelConnectDeferMode = 'auto' | 'off' | 'explicit';\n\nexport interface GatewaySettingsState {\n host: string;\n port: number;\n auth: {\n mode: GatewayAuthMode;\n token: string;\n password: string;\n rateLimit: GatewayAuthRateLimitState;\n };\n /** Browser origin allowlist (`gateway.corsOrigins`). Empty uses gateway localhost defaults. */\n corsOrigins: string[];\n maxSseConnections: number;\n channelConnectDeferMode: GatewayChannelConnectDeferMode;\n channelConnectDeferIds: string[];\n channelConnectDeferSkipIds: string[];\n /** npm / CLI update channel (config `update.channel`). */\n updateChannel: UpdatePackageChannel;\n}\n\nexport const DEFAULT_GATEWAY_PORT = 18790;\nexport const DEFAULT_MAX_SSE_CONNECTIONS = 100;\nexport const MAX_CHANNEL_DEFER_LIST_SIZE = 24;\n\nexport const DEFAULT_AUTH_RATE_LIMIT: GatewayAuthRateLimitState = {\n enabled: true,\n maxAttempts: 5,\n windowMs: 900_000,\n blockDurationMs: 300_000,\n};\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport {\n DEFAULT_AUTH_RATE_LIMIT,\n DEFAULT_GATEWAY_PORT,\n DEFAULT_MAX_SSE_CONNECTIONS,\n MAX_CHANNEL_DEFER_LIST_SIZE,\n type GatewayAuthMode,\n type GatewayAuthRateLimitState,\n type GatewayChannelConnectDeferMode,\n type GatewaySettingsState,\n type UpdatePackageChannel,\n} from './gateway-settings.types';\n\nexport type {\n GatewayAuthMode,\n GatewayAuthRateLimitState,\n GatewayChannelConnectDeferMode,\n GatewaySettingsState,\n UpdatePackageChannel,\n} from './gateway-settings.types';\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n}\n\nexport function isMaskedGatewaySecret(value: string): boolean {\n return value === '***' || value === '••••••••••••';\n}\n\nfunction normalizeAuthMode(raw: unknown): GatewayAuthMode {\n if (raw === 'none' || raw === 'token' || raw === 'password') return raw;\n return 'token';\n}\n\nfunction normalizeRateLimit(raw: unknown): GatewayAuthRateLimitState {\n const rl = isRecord(raw) ? raw : {};\n return {\n enabled: rl.enabled !== false,\n maxAttempts:\n typeof rl.maxAttempts === 'number' && Number.isFinite(rl.maxAttempts)\n ? Math.max(1, Math.floor(rl.maxAttempts))\n : DEFAULT_AUTH_RATE_LIMIT.maxAttempts,\n windowMs:\n typeof rl.windowMs === 'number' && Number.isFinite(rl.windowMs) && rl.windowMs > 0\n ? Math.floor(rl.windowMs)\n : DEFAULT_AUTH_RATE_LIMIT.windowMs,\n blockDurationMs:\n typeof rl.blockDurationMs === 'number' &&\n Number.isFinite(rl.blockDurationMs) &&\n rl.blockDurationMs > 0\n ? Math.floor(rl.blockDurationMs)\n : DEFAULT_AUTH_RATE_LIMIT.blockDurationMs,\n };\n}\n\nfunction normalizeDeferMode(raw: unknown): GatewayChannelConnectDeferMode {\n if (raw === 'auto' || raw === 'off' || raw === 'explicit') return raw;\n return 'auto';\n}\n\nfunction normalizeStringIdList(raw: unknown, max = MAX_CHANNEL_DEFER_LIST_SIZE): string[] {\n if (!Array.isArray(raw)) return [];\n return raw\n .filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n .map((x) => x.trim())\n .slice(0, max);\n}\n\nexport function normalizeGatewayFromConfig(config: unknown): GatewaySettingsState {\n const c = isRecord(config) ? config : {};\n const gw = isRecord(c.gateway) ? c.gateway : {};\n const auth = isRecord(gw.auth) ? gw.auth : {};\n const upd = isRecord(c.update) ? c.update : {};\n const ch = upd.channel;\n const updateChannel: UpdatePackageChannel =\n ch === 'beta' || ch === 'dev' || ch === 'stable' ? ch : 'stable';\n const corsOrigins = Array.isArray(gw.corsOrigins)\n ? gw.corsOrigins.filter((x): x is string => typeof x === 'string' && x.trim().length > 0)\n : [];\n return {\n host: typeof gw.host === 'string' ? gw.host : '',\n port:\n typeof gw.port === 'number' && Number.isFinite(gw.port) ? Math.floor(gw.port) : DEFAULT_GATEWAY_PORT,\n auth: {\n mode: normalizeAuthMode(auth.mode),\n token: typeof auth.token === 'string' ? auth.token : '',\n password: typeof auth.password === 'string' ? auth.password : '',\n rateLimit: normalizeRateLimit(auth.rateLimit),\n },\n corsOrigins,\n maxSseConnections:\n typeof gw.maxSseConnections === 'number' && Number.isFinite(gw.maxSseConnections)\n ? Math.max(1, Math.floor(gw.maxSseConnections))\n : DEFAULT_MAX_SSE_CONNECTIONS,\n channelConnectDeferMode: normalizeDeferMode(gw.channelConnectDeferMode),\n channelConnectDeferIds: normalizeStringIdList(gw.channelConnectDeferIds),\n channelConnectDeferSkipIds: normalizeStringIdList(gw.channelConnectDeferSkipIds),\n updateChannel,\n };\n}\n\nfunction buildAuthPatch(state: GatewaySettingsState): Record<string, unknown> {\n const auth: Record<string, unknown> = {\n mode: state.auth.mode,\n rateLimit: state.auth.rateLimit,\n };\n\n if (state.auth.mode === 'token') {\n const token = state.auth.token.trim();\n if (token.length > 0 && !isMaskedGatewaySecret(token)) {\n auth.token = state.auth.token;\n }\n auth.password = null;\n } else if (state.auth.mode === 'password') {\n const password = state.auth.password.trim();\n if (password.length > 0 && !isMaskedGatewaySecret(password)) {\n auth.password = state.auth.password;\n }\n auth.token = null;\n }\n\n return auth;\n}\n\nexport async function fetchGatewaySettings(): Promise<GatewaySettingsState> {\n const res = await fetchJson<{ ok?: boolean; payload?: { config?: unknown } }>(apiUrl('/api/config'));\n return normalizeGatewayFromConfig(res.payload?.config ?? {});\n}\n\nexport async function patchGatewaySettings(state: GatewaySettingsState): Promise<void> {\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({\n gateway: {\n host: state.host.trim() || '127.0.0.1',\n port: state.port,\n auth: buildAuthPatch(state),\n corsOrigins: state.corsOrigins,\n maxSseConnections: state.maxSseConnections,\n channelConnectDeferMode: state.channelConnectDeferMode,\n channelConnectDeferIds: state.channelConnectDeferIds,\n channelConnectDeferSkipIds: state.channelConnectDeferSkipIds,\n },\n update: {\n channel: state.updateChannel,\n },\n }),\n });\n void revalidateGatewayConfig();\n}\n","import { AlertCircle, Check, Copy, ExternalLink, Eye, EyeOff, Loader2, Server, SlidersHorizontal } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n normalizeGatewayFromConfig,\n patchGatewaySettings,\n type GatewaySettingsState,\n} from '@/features/settings/gateway-config-api';\nimport { MAX_CHANNEL_DEFER_LIST_SIZE } from '@/features/settings/gateway-settings.types';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages, type GatewaySettingsMessages } from '@/i18n/messages';\nimport { docsGuidePageUrl } from '@/navigation';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nexport function GatewaySettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const g = m.gatewaySettings;\n const token = useGatewayStore((st) => st.token);\n const tokenExpired = useGatewayStore((st) => st.tokenExpired);\n const openTokenDialog = useGatewayStore((st) => st.openTokenDialog);\n const hasToken = Boolean(token);\n\n const [form, setForm] = useState<GatewaySettingsState | null>(null);\n const [baseline, setBaseline] = useState<GatewaySettingsState | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n const [showAccessToken, setShowAccessToken] = useState(false);\n const [showPassword, setShowPassword] = useState(false);\n const [copied, setCopied] = useState(false);\n const dirtyRef = useRef(false);\n\n const { data, error: swrError, isLoading, mutate } = useGatewayConfigSwr(hasToken);\n\n const parsed = useMemo(\n () =>\n data?.payload?.config !== undefined\n ? structuredClone(normalizeGatewayFromConfig(data.payload.config))\n : null,\n [data],\n );\n\n useEffect(() => {\n if (!hasToken) {\n setForm(null);\n setBaseline(null);\n dirtyRef.current = false;\n return;\n }\n if (parsed === null) return;\n if (!dirtyRef.current) {\n setForm(parsed);\n setBaseline(structuredClone(parsed));\n setSaveOk(false);\n }\n }, [hasToken, parsed]);\n\n const loading = Boolean(hasToken && isLoading && data === undefined && !swrError);\n const fetchError =\n swrError instanceof Error ? swrError.message : swrError ? String(swrError) : null;\n\n const dirty = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n const updateAuth = useCallback((patch: Partial<GatewaySettingsState['auth']>) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, auth: { ...f.auth, ...patch } } : null));\n }, []);\n\n const updateChannel = useCallback((channel: GatewaySettingsState['updateChannel']) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, updateChannel: channel } : null));\n }, []);\n\n const updateCorsOrigins = useCallback((corsOrigins: string[]) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, corsOrigins } : null));\n }, []);\n\n const updateHost = useCallback((host: string) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, host } : null));\n }, []);\n\n const updatePort = useCallback((port: number) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, port } : null));\n }, []);\n\n const updateRateLimit = useCallback((patch: Partial<GatewaySettingsState['auth']['rateLimit']>) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, auth: { ...f.auth, rateLimit: { ...f.auth.rateLimit, ...patch } } } : null));\n }, []);\n\n const updateMaxSseConnections = useCallback((maxSseConnections: number) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, maxSseConnections } : null));\n }, []);\n\n const updateChannelConnectDeferMode = useCallback(\n (channelConnectDeferMode: GatewaySettingsState['channelConnectDeferMode']) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, channelConnectDeferMode } : null));\n },\n [],\n );\n\n const updateChannelConnectDeferIds = useCallback((channelConnectDeferIds: string[]) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, channelConnectDeferIds } : null));\n }, []);\n\n const updateChannelConnectDeferSkipIds = useCallback((channelConnectDeferSkipIds: string[]) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, channelConnectDeferSkipIds } : null));\n }, []);\n\n const save = useCallback(async () => {\n if (!form || saving) return;\n setSaving(true);\n setError(null);\n setSaveOk(false);\n try {\n await patchGatewaySettings(form);\n dirtyRef.current = false;\n const next = structuredClone(form);\n setBaseline(next);\n setSaveOk(true);\n window.setTimeout(() => setSaveOk(false), 2500);\n } catch (e) {\n setError(e instanceof Error ? e.message : g.saveError);\n } finally {\n setSaving(false);\n }\n }, [form, saving, g.saveError]);\n\n const discard = useCallback(() => {\n if (!baseline) return;\n dirtyRef.current = false;\n setForm(structuredClone(baseline));\n setError(null);\n setSaveOk(false);\n }, [baseline]);\n\n const copyAccessToken = useCallback(async () => {\n const t = form?.auth.token;\n if (!t) return;\n await navigator.clipboard.writeText(t).catch(() => {});\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n }, [form?.auth.token]);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.gateway}</h1>\n <p className=\"text-sm text-fg-muted\">{g.needToken}</p>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <div className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" />\n {g.loading}\n </div>\n </div>\n );\n }\n\n if (!form) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{error ?? fetchError ?? g.loadError}</p>\n <Button type=\"button\" variant=\"secondary\" onClick={() => void mutate()}>\n {g.retry}\n </Button>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{m.settingsSections.gateway}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{g.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'gateway')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {g.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-2\">\n {saveOk ? <span className=\"text-sm text-fg-muted\">{g.saved}</span> : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirty || saving} onClick={discard}>\n {g.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={!dirty || saving} onClick={() => void save()}>\n {saving ? g.saving : g.save}\n </Button>\n </div>\n </header>\n\n {tokenExpired ? (\n <div\n className=\"flex flex-col gap-3 rounded-lg border border-red-200 bg-red-50 px-4 py-3 dark:border-red-900/50 dark:bg-red-950/40\"\n role=\"alert\"\n >\n <div className=\"flex items-start gap-2\">\n <AlertCircle className=\"mt-0.5 size-4 shrink-0 text-red-600 dark:text-red-400\" />\n <p className=\"text-sm text-red-900 dark:text-red-100\">{g.tokenExpired}</p>\n </div>\n <div>\n <Button type=\"button\" variant=\"secondary\" className=\"text-sm\" onClick={() => openTokenDialog()}>\n {g.updateToken}\n </Button>\n </div>\n </div>\n ) : null}\n\n {dirty ? <p className=\"text-xs text-amber-800 dark:text-amber-200\">{g.unsavedHint}</p> : null}\n {error ? <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n\n <p className=\"rounded-lg border border-edge bg-surface-panel/60 px-3 py-2 text-xs text-fg-subtle\">\n {g.restartHint}\n </p>\n\n {form.auth.mode === 'none' ? (\n <p className=\"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100\">\n {g.authModeNone}\n </p>\n ) : null}\n\n <section className=\"rounded-2xl bg-surface-base px-4 py-5 sm:px-5\">\n <div className=\"mb-5 flex items-center gap-2 text-sm font-semibold text-fg\">\n <Server className=\"size-4 text-accent\" strokeWidth={1.75} />\n {m.settingsSections.gateway}\n </div>\n <div className=\"space-y-4\">\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-fg\" htmlFor=\"gateway-listen-host\">\n {g.listenHost}\n </label>\n <input\n id=\"gateway-listen-host\"\n className={cn(inputClassName(), 'font-mono text-xs')}\n value={form.host}\n onChange={(e) => updateHost(e.target.value)}\n placeholder={g.listenHostPlaceholder}\n autoComplete=\"off\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-sm font-medium text-fg\" htmlFor=\"gateway-listen-port\">\n {g.listenPort}\n </label>\n <input\n id=\"gateway-listen-port\"\n type=\"number\"\n min={1}\n max={65535}\n className={cn(inputClassName(), 'font-mono text-xs')}\n value={form.port}\n onChange={(e) => {\n const n = Number(e.target.value);\n updatePort(Number.isFinite(n) ? Math.max(1, Math.min(65535, Math.floor(n))) : form.port);\n }}\n />\n </div>\n <p className=\"sm:col-span-2 text-xs text-fg-subtle\">{g.listenHint}</p>\n </div>\n\n <div className=\"space-y-2 border-t border-edge pt-4\">\n <label className=\"text-sm font-medium text-fg\" htmlFor=\"gateway-auth-mode\">\n {g.authMode}\n </label>\n <select\n id=\"gateway-auth-mode\"\n value={form.auth.mode}\n onChange={(e) => updateAuth({ mode: e.target.value as GatewaySettingsState['auth']['mode'] })}\n className={inputClassName()}\n >\n <option value=\"token\">{g.authModeToken}</option>\n <option value=\"password\">{g.authModePassword}</option>\n <option value=\"none\">{g.authModeNoneLabel}</option>\n </select>\n </div>\n\n {form.auth.mode === 'token' ? (\n <>\n <SecretCredentialField\n g={g}\n id=\"gateway-access-token\"\n label={g.accessToken}\n help={g.tokenHelp}\n placeholder={g.tokenPlaceholder}\n value={form.auth.token}\n show={showAccessToken}\n copied={copied}\n onToggleShow={() => setShowAccessToken((s) => !s)}\n onCopy={() => void copyAccessToken()}\n onChange={(token) => updateAuth({ token })}\n />\n <Button type=\"button\" variant=\"secondary\" className=\"w-full sm:w-auto\" onClick={() => openTokenDialog()}>\n {g.changeToken}\n </Button>\n </>\n ) : null}\n\n {form.auth.mode === 'password' ? (\n <SecretCredentialField\n g={g}\n id=\"gateway-auth-password\"\n label={g.authPassword}\n help={g.authPasswordHelp}\n placeholder={g.authPasswordPlaceholder}\n value={form.auth.password}\n show={showPassword}\n onToggleShow={() => setShowPassword((s) => !s)}\n onChange={(password) => updateAuth({ password })}\n />\n ) : null}\n\n {form.auth.mode !== 'none' ? (\n <AuthRateLimitFields g={g} rateLimit={form.auth.rateLimit} onChange={updateRateLimit} />\n ) : null}\n\n <div className=\"space-y-2 border-t border-edge pt-4\">\n <label className=\"text-sm font-medium text-fg\" htmlFor=\"gateway-update-channel\">\n {g.updateChannel}\n </label>\n <select\n id=\"gateway-update-channel\"\n value={form.updateChannel}\n onChange={(e) => updateChannel(e.target.value as GatewaySettingsState['updateChannel'])}\n className={inputClassName()}\n >\n <option value=\"stable\">{g.channelStable}</option>\n <option value=\"beta\">{g.channelBeta}</option>\n <option value=\"dev\">{g.channelDev}</option>\n </select>\n <p className=\"text-xs text-fg-subtle\">{g.updateChannelHint}</p>\n </div>\n\n <CorsOriginsField\n g={g}\n origins={form.corsOrigins}\n onChange={updateCorsOrigins}\n />\n </div>\n </section>\n\n <section className=\"rounded-2xl bg-surface-base px-4 py-5 sm:px-5\">\n <div className=\"mb-5 flex items-center gap-2 text-sm font-semibold text-fg\">\n <SlidersHorizontal className=\"size-4 text-accent\" strokeWidth={1.75} />\n {g.advancedSection}\n </div>\n <p className=\"mb-4 text-xs text-fg-subtle\">{g.advancedSectionHint}</p>\n <GatewayAdvancedFields\n g={g}\n form={form}\n onMaxSseConnectionsChange={updateMaxSseConnections}\n onDeferModeChange={updateChannelConnectDeferMode}\n onDeferIdsChange={updateChannelConnectDeferIds}\n onSkipIdsChange={updateChannelConnectDeferSkipIds}\n />\n </section>\n </div>\n );\n}\n\nfunction GatewayAdvancedFields({\n g,\n form,\n onMaxSseConnectionsChange,\n onDeferModeChange,\n onDeferIdsChange,\n onSkipIdsChange,\n}: {\n g: GatewaySettingsMessages;\n form: GatewaySettingsState;\n onMaxSseConnectionsChange: (value: number) => void;\n onDeferModeChange: (mode: GatewaySettingsState['channelConnectDeferMode']) => void;\n onDeferIdsChange: (ids: string[]) => void;\n onSkipIdsChange: (ids: string[]) => void;\n}) {\n return (\n <div className=\"space-y-4\">\n <div>\n <label className=\"mb-1 block text-sm font-medium text-fg\" htmlFor=\"gateway-max-sse\">\n {g.maxSseConnections}\n </label>\n <input\n id=\"gateway-max-sse\"\n type=\"number\"\n min={1}\n className={cn(inputClassName(), 'max-w-xs font-mono text-xs')}\n value={form.maxSseConnections}\n onChange={(e) => {\n const n = Number(e.target.value);\n if (Number.isFinite(n)) onMaxSseConnectionsChange(Math.max(1, Math.floor(n)));\n }}\n />\n <p className=\"mt-1 text-xs text-fg-subtle\">{g.maxSseConnectionsHint}</p>\n </div>\n\n <div className=\"space-y-2 border-t border-edge pt-4\">\n <label className=\"text-sm font-medium text-fg\" htmlFor=\"gateway-channel-defer-mode\">\n {g.channelConnectDeferMode}\n </label>\n <select\n id=\"gateway-channel-defer-mode\"\n value={form.channelConnectDeferMode}\n onChange={(e) =>\n onDeferModeChange(e.target.value as GatewaySettingsState['channelConnectDeferMode'])\n }\n className={inputClassName()}\n >\n <option value=\"auto\">{g.channelConnectDeferModeAuto}</option>\n <option value=\"off\">{g.channelConnectDeferModeOff}</option>\n <option value=\"explicit\">{g.channelConnectDeferModeExplicit}</option>\n </select>\n <p className=\"text-xs text-fg-subtle\">{g.channelConnectDeferModeHint}</p>\n </div>\n\n {form.channelConnectDeferMode === 'explicit' ? (\n <GatewayStringListField\n title={g.channelConnectDeferIds}\n hint={g.channelConnectDeferIdsHint}\n emptyText={g.channelIdListEmpty}\n placeholder={g.channelIdListPlaceholder}\n values={form.channelConnectDeferIds}\n maxItems={MAX_CHANNEL_DEFER_LIST_SIZE}\n onChange={onDeferIdsChange}\n />\n ) : null}\n\n {form.channelConnectDeferMode !== 'off' ? (\n <GatewayStringListField\n title={g.channelConnectDeferSkipIds}\n hint={g.channelConnectDeferSkipIdsHint}\n emptyText={g.channelIdListEmpty}\n placeholder={g.channelIdListPlaceholder}\n values={form.channelConnectDeferSkipIds}\n maxItems={MAX_CHANNEL_DEFER_LIST_SIZE}\n onChange={onSkipIdsChange}\n />\n ) : null}\n </div>\n );\n}\n\nfunction GatewayStringListField({\n title,\n hint,\n emptyText,\n placeholder,\n values,\n maxItems,\n onChange,\n children,\n}: {\n title: string;\n hint: string;\n emptyText: string;\n placeholder: string;\n values: string[];\n maxItems: number;\n onChange: (values: string[]) => void;\n children?: ReactNode;\n}) {\n const addValue = useCallback(\n (raw: string) => {\n const next = raw.trim();\n if (!next || values.includes(next) || values.length >= maxItems) return;\n onChange([...values, next]);\n },\n [maxItems, onChange, values],\n );\n\n return (\n <div className=\"space-y-2 border-t border-edge pt-4\">\n <div className=\"text-sm font-medium text-fg\">{title}</div>\n <p className=\"text-xs text-fg-subtle\">{hint}</p>\n {values.length === 0 ? (\n <p className=\"text-xs text-fg-muted\">{emptyText}</p>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {values.map((value) => (\n <span\n key={value}\n className=\"inline-flex items-center gap-1 rounded-md border border-edge bg-surface-panel px-2 py-0.5 font-mono text-xs text-fg\"\n >\n {value}\n <button\n type=\"button\"\n className=\"text-fg-muted hover:text-fg\"\n aria-label={`Remove ${value}`}\n onClick={() => onChange(values.filter((x) => x !== value))}\n >\n ×\n </button>\n </span>\n ))}\n </div>\n )}\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n placeholder={placeholder}\n disabled={values.length >= maxItems}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n addValue((e.target as HTMLInputElement).value);\n (e.target as HTMLInputElement).value = '';\n }\n }}\n />\n {children}\n </div>\n );\n}\n\nfunction CorsOriginsField({\n g,\n origins,\n onChange,\n}: {\n g: GatewaySettingsMessages;\n origins: string[];\n onChange: (origins: string[]) => void;\n}) {\n const hasWildcard = origins.includes('*');\n\n return (\n <GatewayStringListField\n title={g.corsOrigins}\n hint={g.corsOriginsHint}\n emptyText={g.corsOriginsEmpty}\n placeholder={g.corsOriginsPlaceholder}\n values={origins}\n maxItems={128}\n onChange={onChange}\n >\n {hasWildcard ? (\n <p className=\"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100\">\n {g.corsOriginsWildcardWarning}\n </p>\n ) : null}\n </GatewayStringListField>\n );\n}\n\nfunction AuthRateLimitFields({\n g,\n rateLimit,\n onChange,\n}: {\n g: GatewaySettingsMessages;\n rateLimit: GatewaySettingsState['auth']['rateLimit'];\n onChange: (patch: Partial<GatewaySettingsState['auth']['rateLimit']>) => void;\n}) {\n return (\n <div className=\"space-y-3 border-t border-edge pt-4\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{g.rateLimitTitle}</div>\n <p className=\"mt-1 text-xs text-fg-subtle\">{g.rateLimitHint}</p>\n </div>\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={rateLimit.enabled}\n onChange={(e) => onChange({ enabled: e.target.checked })}\n />\n {g.rateLimitEnabled}\n </label>\n <div className=\"grid gap-3 sm:grid-cols-3\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\" htmlFor=\"gateway-rate-max\">\n {g.rateLimitMaxAttempts}\n </label>\n <input\n id=\"gateway-rate-max\"\n type=\"number\"\n min={1}\n className={inputClassName()}\n value={rateLimit.maxAttempts}\n disabled={!rateLimit.enabled}\n onChange={(e) => {\n const n = Number(e.target.value);\n if (Number.isFinite(n)) onChange({ maxAttempts: Math.max(1, Math.floor(n)) });\n }}\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\" htmlFor=\"gateway-rate-window\">\n {g.rateLimitWindowMinutes}\n </label>\n <input\n id=\"gateway-rate-window\"\n type=\"number\"\n min={1}\n className={inputClassName()}\n value={Math.round(rateLimit.windowMs / 60_000)}\n disabled={!rateLimit.enabled}\n onChange={(e) => {\n const n = Number(e.target.value);\n if (Number.isFinite(n) && n > 0) onChange({ windowMs: Math.floor(n) * 60_000 });\n }}\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\" htmlFor=\"gateway-rate-block\">\n {g.rateLimitBlockMinutes}\n </label>\n <input\n id=\"gateway-rate-block\"\n type=\"number\"\n min={1}\n className={inputClassName()}\n value={Math.round(rateLimit.blockDurationMs / 60_000)}\n disabled={!rateLimit.enabled}\n onChange={(e) => {\n const n = Number(e.target.value);\n if (Number.isFinite(n) && n > 0) onChange({ blockDurationMs: Math.floor(n) * 60_000 });\n }}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction SecretCredentialField({\n g,\n id,\n label,\n help,\n placeholder,\n value,\n show,\n copied,\n onToggleShow,\n onCopy,\n onChange,\n}: {\n g: GatewaySettingsMessages;\n id: string;\n label: string;\n help: string;\n placeholder: string;\n value: string;\n show: boolean;\n copied?: boolean;\n onToggleShow: () => void;\n onCopy?: () => void;\n onChange: (v: string) => void;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium text-fg\" htmlFor={id}>\n {label}\n </label>\n <div className=\"flex flex-wrap gap-2\">\n <input\n id={id}\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n type={show ? 'text' : 'password'}\n autoComplete=\"off\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n />\n {value && onCopy ? (\n <Button type=\"button\" variant=\"secondary\" className=\"px-2 py-1 text-xs\" onClick={onCopy}>\n {copied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {copied ? g.copied : g.copy}\n </Button>\n ) : null}\n <Button type=\"button\" variant=\"secondary\" className=\"px-2 py-1 text-xs\" onClick={onToggleShow}>\n {show ? <EyeOff className=\"size-3.5\" /> : <Eye className=\"size-3.5\" />}\n {show ? g.hide : g.show}\n </Button>\n </div>\n <p className=\"text-xs text-fg-subtle\">{help}</p>\n </div>\n );\n}\n","import { getChannels } from '@/features/cron/cron-api';\nimport { apiUrl } from '@/lib/url';\n\nexport function channelsStatusSwrKey(): string {\n return apiUrl('/api/channels/status');\n}\n\n/** Same network call as `getChannels`; use with `channelsStatusSwrKey()` for SWR. */\nexport const fetchChannelsStatusSwr = getChannels;\n","import { ExternalLink, Heart, Loader2, Play, RefreshCw } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { getSessionChatIds, type ChannelStatus, type SessionChatId } from '@/features/cron/cron-api';\nimport { formatRecipientOptionLabel } from '@/features/cron/cron-utils';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport { channelsStatusSwrKey, fetchChannelsStatusSwr } from '@/features/settings/channels-status-swr';\nimport {\n normalizeHeartbeatFromConfig,\n patchHeartbeatSettings,\n putHeartbeatMd,\n triggerHeartbeat,\n} from '@/features/settings/heartbeat-config-api';\nimport { fetchHeartbeatMdSwr, heartbeatMdSwrKey } from '@/features/settings/heartbeat-md-swr';\nimport type { HeartbeatSettingsState } from '@/features/settings/heartbeat-settings.types';\nimport { SettingsFormSection } from '@/features/settings/settings-form-section';\nimport { nativeSelectMaxWidthClass, selectControlBaseClass, settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages, type HeartbeatSettingsMessages } from '@/i18n/messages';\nimport { ScheduleField } from '@/features/scheduling/schedule-field';\nimport { docsGuidePageUrl } from '@/navigation';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nfunction selectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\ntype CronMessages = ReturnType<typeof messages>['cron'];\n\nfunction workspacePathFromConfig(cfg: unknown): string {\n if (!cfg || typeof cfg !== 'object' || Array.isArray(cfg)) return '';\n const agents = (cfg as { agents?: unknown }).agents;\n if (!agents || typeof agents !== 'object' || Array.isArray(agents)) return '';\n const defaults = (agents as { defaults?: unknown }).defaults;\n if (!defaults || typeof defaults !== 'object' || Array.isArray(defaults)) return '';\n const w = (defaults as { workspace?: unknown }).workspace;\n return typeof w === 'string' ? w : '';\n}\n\nexport function HeartbeatSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const h = m.heartbeatSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [form, setForm] = useState<HeartbeatSettingsState | null>(null);\n const [baseline, setBaseline] = useState<HeartbeatSettingsState | null>(null);\n const [doc, setDoc] = useState<string>('');\n const [docBaseline, setDocBaseline] = useState<string>('');\n const [savingConfig, setSavingConfig] = useState(false);\n const [savingDoc, setSavingDoc] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveConfigOk, setSaveConfigOk] = useState(false);\n const [saveDocOk, setSaveDocOk] = useState(false);\n const [triggerLoading, setTriggerLoading] = useState(false);\n const [triggerOk, setTriggerOk] = useState(false);\n const [triggerError, setTriggerError] = useState<string | null>(null);\n const [sessionChatIds, setSessionChatIds] = useState<SessionChatId[]>([]);\n\n const {\n data: cfgData,\n error: cfgErr,\n isLoading: cfgLoading,\n mutate: mutCfg,\n } = useGatewayConfigSwr(hasToken);\n const {\n data: mdContent,\n error: mdErr,\n isLoading: mdLoading,\n mutate: mutMd,\n } = useSWR(hasToken ? heartbeatMdSwrKey() : null, fetchHeartbeatMdSwr, { revalidateOnFocus: false });\n const { data: channels = [] } = useSWR(hasToken ? channelsStatusSwrKey() : null, fetchChannelsStatusSwr, {\n revalidateOnFocus: false,\n });\n\n const workspacePath = useMemo(\n () => workspacePathFromConfig(cfgData?.payload?.config),\n [cfgData],\n );\n\n const heartbeatParsed = useMemo(\n () => normalizeHeartbeatFromConfig(cfgData?.payload?.config ?? {}),\n [cfgData],\n );\n\n const dirtyConfig = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n const dirtyDoc = useMemo(() => doc !== docBaseline, [doc, docBaseline]);\n\n useEffect(() => {\n if (!hasToken) {\n setForm(null);\n setBaseline(null);\n return;\n }\n if (cfgData === undefined) return;\n if (!dirtyConfig) {\n const next = structuredClone(heartbeatParsed);\n setForm(next);\n setBaseline(next);\n setSaveConfigOk(false);\n }\n }, [hasToken, cfgData, heartbeatParsed, dirtyConfig]);\n\n useEffect(() => {\n if (!hasToken || mdContent === undefined) return;\n if (!dirtyDoc) {\n setDoc(mdContent);\n setDocBaseline(mdContent);\n setSaveDocOk(false);\n }\n }, [hasToken, mdContent, dirtyDoc]);\n\n const fetchError =\n cfgErr instanceof Error\n ? cfgErr.message\n : cfgErr\n ? String(cfgErr)\n : mdErr instanceof Error\n ? mdErr.message\n : mdErr\n ? String(mdErr)\n : null;\n\n const loading = Boolean(\n hasToken &&\n (cfgData === undefined || mdContent === undefined) &&\n !fetchError &&\n (cfgLoading || mdLoading),\n );\n\n useEffect(() => {\n if (!hasToken || !form) {\n setSessionChatIds([]);\n return;\n }\n const t = form.target.trim();\n if (!t) {\n setSessionChatIds([]);\n return;\n }\n let cancelled = false;\n void getSessionChatIds(t).then((ids) => {\n if (!cancelled) setSessionChatIds(ids);\n });\n return () => {\n cancelled = true;\n };\n }, [hasToken, form?.target]);\n\n const refreshSessionChatIds = useCallback(() => {\n const t = form?.target?.trim();\n if (!t) return;\n void getSessionChatIds(t).then(setSessionChatIds);\n }, [form?.target]);\n\n const runHeartbeatNow = useCallback(async () => {\n setTriggerLoading(true);\n setTriggerOk(false);\n setTriggerError(null);\n try {\n await triggerHeartbeat();\n setTriggerOk(true);\n window.setTimeout(() => setTriggerOk(false), 3000);\n } catch (e) {\n setTriggerError(e instanceof Error ? e.message : h.triggerError);\n } finally {\n setTriggerLoading(false);\n }\n }, [h.triggerError]);\n\n const update = useCallback((patch: Partial<HeartbeatSettingsState>) => {\n setForm((f) => (f ? { ...f, ...patch } : null));\n }, []);\n\n const discardConfiguration = useCallback(() => {\n if (!baseline) return;\n setForm(structuredClone(baseline));\n setSaveConfigOk(false);\n setError(null);\n }, [baseline]);\n\n const discardDocument = useCallback(() => {\n setDoc(docBaseline);\n setSaveDocOk(false);\n setError(null);\n }, [docBaseline]);\n\n const saveConfiguration = useCallback(async () => {\n if (!form || savingConfig) return;\n setSavingConfig(true);\n setError(null);\n setSaveConfigOk(false);\n try {\n await patchHeartbeatSettings(form);\n const next = structuredClone(form);\n setBaseline(next);\n setSaveConfigOk(true);\n window.setTimeout(() => setSaveConfigOk(false), 2500);\n } catch (e) {\n setError(e instanceof Error ? e.message : h.saveConfigError);\n } finally {\n setSavingConfig(false);\n }\n }, [form, savingConfig, h.saveConfigError]);\n\n const saveDocument = useCallback(async () => {\n if (savingDoc) return;\n setSavingDoc(true);\n setError(null);\n setSaveDocOk(false);\n try {\n await putHeartbeatMd(doc);\n setDocBaseline(doc);\n setSaveDocOk(true);\n window.setTimeout(() => setSaveDocOk(false), 2500);\n } catch (e) {\n setError(e instanceof Error ? e.message : h.saveDocError);\n } finally {\n setSavingDoc(false);\n }\n }, [doc, savingDoc, h.saveDocError]);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.heartbeat}</h1>\n <p className=\"text-sm text-fg-muted\">{h.needToken}</p>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <div className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" />\n {h.loading}\n </div>\n </div>\n );\n }\n\n if (!form) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{error ?? fetchError ?? h.loadError}</p>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void mutCfg();\n void mutMd();\n }}\n >\n {h.retry}\n </Button>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{m.settingsSections.heartbeat}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{h.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'heartbeat')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {h.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </div>\n </header>\n\n {workspacePath ? (\n <p className=\"text-xs text-fg-subtle\">\n {h.workspaceLabel}: <span className=\"font-mono text-fg-muted\">{workspacePath}</span>\n </p>\n ) : null}\n\n {error ? <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n\n <SettingsFormSection>\n <div className=\"mb-2 flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex items-center gap-2 text-sm font-semibold text-fg\">\n <Heart className=\"size-4 text-accent\" strokeWidth={1.75} />\n {h.configSection}\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"inline-flex items-center gap-2\"\n disabled={triggerLoading}\n onClick={() => void runHeartbeatNow()}\n >\n {triggerLoading ? (\n <Loader2 className=\"size-4 animate-spin\" aria-hidden />\n ) : (\n <Play className=\"size-4\" strokeWidth={1.75} aria-hidden />\n )}\n {triggerLoading ? h.triggering : h.triggerNow}\n </Button>\n {triggerOk ? <span className=\"text-sm text-fg-muted\">{h.triggered}</span> : null}\n </div>\n </div>\n <p className=\"mb-4 text-xs text-fg-subtle\">{h.triggerHint}</p>\n {triggerError ? <p className=\"mb-3 text-sm text-red-600 dark:text-red-400\">{triggerError}</p> : null}\n <HeartbeatConfigFields\n h={h}\n cron={m.cron}\n form={form}\n channels={channels}\n sessionChatIds={sessionChatIds}\n onRefreshChatIds={refreshSessionChatIds}\n update={update}\n inputClassName={inputClassName}\n selectClassName={selectClassName}\n />\n <div className=\"mt-4 flex flex-wrap items-center gap-2\">\n {saveConfigOk ? <span className=\"text-sm text-fg-muted\">{h.savedConfig}</span> : null}\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={!dirtyConfig || savingConfig}\n onClick={discardConfiguration}\n >\n {h.discard}\n </Button>\n <Button\n type=\"button\"\n variant=\"primary\"\n disabled={!dirtyConfig || savingConfig}\n onClick={() => void saveConfiguration()}\n >\n {savingConfig ? h.savingConfig : h.saveConfig}\n </Button>\n {dirtyConfig ? <span className=\"text-xs text-amber-800 dark:text-amber-200\">{h.unsavedConfig}</span> : null}\n </div>\n </SettingsFormSection>\n\n <SettingsFormSection>\n <div className=\"mb-2 text-sm font-semibold text-fg\">{h.docSection}</div>\n <p className=\"mb-3 text-xs text-fg-subtle\">{h.docHint}</p>\n <textarea\n className={cn(inputClassName(), 'min-h-[12rem] resize-y font-mono text-xs leading-relaxed')}\n value={doc}\n onChange={(e) => setDoc(e.target.value)}\n spellCheck={false}\n aria-label={h.docSection}\n />\n <div className=\"mt-4 flex flex-wrap items-center gap-2\">\n {saveDocOk ? <span className=\"text-sm text-fg-muted\">{h.savedDoc}</span> : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirtyDoc || savingDoc} onClick={discardDocument}>\n {h.discard}\n </Button>\n <Button\n type=\"button\"\n variant=\"primary\"\n disabled={!dirtyDoc || savingDoc}\n onClick={() => void saveDocument()}\n >\n {savingDoc ? h.savingDoc : h.saveDoc}\n </Button>\n {dirtyDoc ? <span className=\"text-xs text-amber-800 dark:text-amber-200\">{h.unsavedDoc}</span> : null}\n </div>\n </SettingsFormSection>\n </div>\n );\n}\n\nfunction HeartbeatConfigFields({\n h,\n cron: c,\n form,\n channels,\n sessionChatIds,\n onRefreshChatIds,\n update,\n inputClassName: inputCn,\n selectClassName: selectCn,\n}: {\n h: HeartbeatSettingsMessages;\n cron: CronMessages;\n form: HeartbeatSettingsState;\n channels: ChannelStatus[];\n sessionChatIds: SessionChatId[];\n onRefreshChatIds: () => void;\n update: (patch: Partial<HeartbeatSettingsState>) => void;\n inputClassName: typeof inputClassName;\n selectClassName: typeof selectClassName;\n}) {\n const channelNames = useMemo(() => new Set(channels.map((x) => x.name)), [channels]);\n const targetTrim = form.target.trim();\n const showCustomChannel = Boolean(targetTrim && !channelNames.has(targetTrim));\n\n return (\n <div className=\"space-y-4\">\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={form.enabled}\n onChange={(e) => update({ enabled: e.target.checked })}\n />\n {h.enable}\n </label>\n\n <label className=\"flex cursor-pointer items-start gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox mt-0.5\"\n checked={form.includeSystemPromptSection}\n onChange={(e) => update({ includeSystemPromptSection: e.target.checked })}\n />\n <span>\n {h.includeSystemPromptSection}\n <span className=\"mt-1 block text-xs text-fg-subtle\">{h.includeSystemPromptSectionHint}</span>\n </span>\n </label>\n\n <ScheduleField\n kind=\"interval\"\n label={h.interval}\n valueMs={form.intervalMs}\n onChangeMs={(intervalMs) => update({ intervalMs })}\n labels={{ secondsLabel: h.intervalSecondsLabel, presets: h.intervalPresets }}\n hint={`${h.intervalHintPreset} ${h.intervalHint}`}\n />\n\n <div className=\"border-t border-edge-subtle pt-4\">\n <div className=\"mb-2 text-sm font-medium text-fg\">{h.deliveryTitle}</div>\n\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.channel}</span>\n <select\n className={selectCn()}\n value={targetTrim}\n onChange={(e) => {\n const v = e.target.value.trim();\n update({ target: v, targetChatId: '' });\n }}\n >\n <option value=\"\">{h.channelNone}</option>\n {showCustomChannel ? (\n <option value={targetTrim}>\n {targetTrim} ({h.customChannelSuffix})\n </option>\n ) : null}\n {channels.map((ch) => (\n <option key={ch.name} value={ch.name} disabled={!ch.enabled}>\n {ch.name} {!ch.enabled ? '(disabled)' : ''}\n </option>\n ))}\n </select>\n </label>\n\n {targetTrim ? (\n <div className=\"mt-3 flex flex-col gap-1\">\n <div className=\"flex items-center justify-between gap-2\">\n <span className=\"text-xs font-medium text-fg-muted\">{c.recipient}</span>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-7 gap-1 px-2 text-xs\"\n title={c.refreshRecipientHint}\n onClick={onRefreshChatIds}\n >\n <RefreshCw className=\"size-3.5\" strokeWidth={1.75} aria-hidden />\n {c.refreshList}\n </Button>\n </div>\n <div className=\"flex gap-2\">\n <input\n type=\"text\"\n className={cn(inputCn(), 'min-w-0 flex-1')}\n value={form.targetChatId}\n onChange={(e) => update({ targetChatId: e.target.value })}\n placeholder={c.recipientPlaceholder}\n autoComplete=\"off\"\n />\n <select\n className={cn(selectCn(), 'max-w-[10rem] shrink-0 text-xs')}\n value={form.targetChatId}\n onChange={(e) => {\n const v = e.target.value;\n if (v) update({ targetChatId: v });\n }}\n >\n <option value=\"\">{c.selectRecipient}</option>\n {sessionChatIds.length > 0 ? (\n sessionChatIds.map((item) => (\n <option key={`${item.channel}-${item.chatId}`} value={item.chatId}>\n {formatRecipientOptionLabel(item, c.lastActiveLabels)}\n </option>\n ))\n ) : (\n <option value=\"\" disabled>\n {c.noRecentChatsOption}\n </option>\n )}\n </select>\n </div>\n <p className=\"text-xs text-fg-muted\">\n {sessionChatIds.length > 0 ? c.enterManuallyOrSelect : c.noRecentChats}\n </p>\n </div>\n ) : null}\n\n <p className=\"mt-2 text-xs text-fg-subtle\">{h.deliveryHint}</p>\n </div>\n\n <div>\n <div className=\"mb-1 text-sm font-medium text-fg\">{h.prompt}</div>\n <textarea\n className={cn(inputCn(), 'min-h-[4.5rem] resize-y font-mono text-xs')}\n value={form.prompt}\n onChange={(e) => update({ prompt: e.target.value })}\n placeholder={h.promptPlaceholder}\n />\n <p className=\"mt-1 text-xs text-fg-subtle\">{h.promptHint}</p>\n </div>\n\n <div>\n <div className=\"mb-1 text-sm font-medium text-fg\">{h.ackMaxChars}</div>\n <input\n type=\"number\"\n min={1}\n className={inputCn()}\n value={form.ackMaxChars === '' ? '' : form.ackMaxChars}\n onChange={(e) => {\n const v = e.target.value;\n if (v === '') update({ ackMaxChars: '' });\n else {\n const n = parseInt(v, 10);\n update({ ackMaxChars: Number.isFinite(n) ? n : '' });\n }\n }}\n placeholder={h.ackDefaultPlaceholder}\n />\n <p className=\"mt-1 text-xs text-fg-subtle\">{h.ackMaxCharsHint}</p>\n </div>\n\n <label className=\"flex cursor-pointer items-start gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox mt-0.5\"\n checked={form.isolatedSession}\n onChange={(e) => update({ isolatedSession: e.target.checked })}\n />\n <span>\n {h.isolatedSession}\n <span className=\"mt-1 block text-xs text-fg-subtle\">{h.isolatedSessionHint}</span>\n </span>\n </label>\n\n <div className=\"border-t border-edge-subtle pt-4\">\n <ScheduleField\n kind=\"active-hours\"\n label={h.activeHoursTitle}\n value={form.activeHours}\n onChange={(activeHours) => update({ activeHours })}\n labels={{\n start: h.activeStart,\n end: h.activeEnd,\n timezone: h.activeTimezone,\n add: h.addActiveHours,\n clear: h.clearActiveHours,\n }}\n hint={h.activeHoursHint}\n />\n </div>\n </div>\n );\n}\n","import { Check, Copy, Smartphone } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { SettingsFormSection } from '@/features/settings/settings-form-section';\nimport type { MobilePairQrState } from '@/features/tunnel/use-mobile-pair-qr';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages } from '@/i18n/messages';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nexport function MobilePairQrSection({ pairQr }: { pairQr: MobilePairQrState }) {\n const language = useLocaleStore((s) => s.language);\n const t = messages(language).tunnelSettings;\n const {\n tunnelActive,\n tunnelStatus,\n tunnelQr,\n pairBaseUrl,\n setPairBaseUrl,\n baseOk,\n localhostWarn,\n deepLink,\n qrPayload,\n qrDataUrl,\n qrGenFailed,\n encoding,\n linkCopied,\n copyDeepLink,\n } = pairQr;\n\n return (\n <SettingsFormSection>\n <div className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-fg\">\n <Smartphone className=\"size-4 text-accent\" strokeWidth={1.75} />\n {t.pairTitle}\n </div>\n <p className=\"mb-3 text-xs text-fg-subtle\">\n {tunnelActive ? t.pairTunnelActive : t.pairSubtitle}\n </p>\n\n {tunnelActive ? (\n <div className=\"mb-3 space-y-2 rounded-lg border border-edge bg-surface-panel px-3 py-3\">\n <div>\n <div className=\"text-xs font-medium text-fg-muted\">{t.pairTunnelPublicUrl}</div>\n <div className=\"mt-0.5 break-all font-mono text-xs text-fg\">{tunnelStatus?.publicUrl}</div>\n </div>\n {tunnelQr?.lanUrl ? (\n <div>\n <div className=\"text-xs font-medium text-fg-muted\">{t.pairTunnelLanUrl}</div>\n <div className=\"mt-0.5 break-all font-mono text-xs text-fg\">{tunnelQr.lanUrl}</div>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"mb-3 space-y-1.5\">\n <label className=\"text-sm font-medium text-fg\" htmlFor=\"tunnel-mobile-pair-base\">\n {t.pairBaseUrlLabel}\n </label>\n <input\n id=\"tunnel-mobile-pair-base\"\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n value={pairBaseUrl}\n onChange={(e) => setPairBaseUrl(e.target.value)}\n />\n <p className=\"text-xs text-fg-subtle\">{t.pairBaseUrlHint}</p>\n {!baseOk ? (\n <p className=\"text-xs text-amber-800 dark:text-amber-200\">{t.pairInvalidBaseUrl}</p>\n ) : null}\n {localhostWarn ? (\n <p className=\"rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100\">\n {t.pairLocalhostWarning}\n </p>\n ) : null}\n </div>\n )}\n\n <p className=\"mb-3 text-xs text-fg-subtle\">{t.pairSecurityNote}</p>\n\n {deepLink ? (\n <div className=\"flex flex-col items-center gap-3 sm:items-start\">\n {qrDataUrl && !qrGenFailed ? (\n <img\n src={qrDataUrl}\n alt=\"\"\n className=\"size-56 rounded-lg border border-edge-subtle bg-white object-contain p-3 dark:border-edge\"\n />\n ) : null}\n {encoding ? <p className=\"text-sm text-fg-muted\">{t.pairEncoding}</p> : null}\n {qrGenFailed ? (\n <p className=\"text-center text-sm text-fg-muted sm:text-left\">{t.pairImageError}</p>\n ) : null}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"w-full sm:w-auto\"\n disabled={!deepLink}\n onClick={() => void copyDeepLink()}\n >\n {linkCopied ? <Check className=\"size-3.5\" /> : <Copy className=\"size-3.5\" />}\n {linkCopied ? t.pairCopied : t.pairCopyLink}\n </Button>\n </div>\n ) : null}\n\n {qrPayload ? (\n <details className=\"mt-3 rounded-lg border border-edge bg-surface-panel px-3 py-2\">\n <summary className=\"cursor-pointer text-xs font-medium text-fg-muted\">{t.deeplinkTitle}</summary>\n <p className=\"mt-2 break-all font-mono text-[10px] leading-relaxed text-fg-subtle\">{qrPayload}</p>\n </details>\n ) : null}\n\n <p className=\"mt-3 break-all font-mono text-[10px] leading-relaxed text-fg-subtle\">{t.pairSchemeHint}</p>\n </SettingsFormSection>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\nexport type TunnelConsentDialogProps = {\n open: boolean;\n title: string;\n intro: string;\n bullets: readonly string[];\n checkboxLabel: string;\n confirmLabel: string;\n cancelLabel: string;\n onConfirm: () => void;\n onCancel: () => void;\n};\n\nexport function TunnelConsentDialog({\n open,\n title,\n intro,\n bullets,\n checkboxLabel,\n confirmLabel,\n cancelLabel,\n onConfirm,\n onCancel,\n}: TunnelConsentDialogProps) {\n const [checked, setChecked] = useState(false);\n\n return (\n <Dialog.Root\n open={open}\n onOpenChange={(next) => {\n if (!next) {\n setChecked(false);\n onCancel();\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn(\n 'xopc-dialog-overlay fixed inset-0 bg-scrim backdrop-blur-[1px]',\n SETTINGS_SHELL_OVERLAY_Z,\n )}\n />\n <Dialog.Content\n className={cn(\n 'fixed left-1/2 top-1/2 max-h-[min(90vh,40rem)] w-[min(100%-2rem,32rem)] -translate-x-1/2 -translate-y-1/2',\n 'overflow-y-auto rounded-2xl border border-edge bg-surface-panel p-6 shadow-popover outline-none dark:border-edge',\n SETTINGS_SHELL_CONTENT_Z,\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <Dialog.Title className=\"text-base font-semibold text-fg\">{title}</Dialog.Title>\n <Dialog.Description className=\"mt-2 text-sm text-fg-muted\">{intro}</Dialog.Description>\n <ul className=\"mt-4 list-disc space-y-2 pl-5 text-sm text-fg-muted\">\n {bullets.map((line) => (\n <li key={line}>{line}</li>\n ))}\n </ul>\n <label className=\"mt-5 flex cursor-pointer items-start gap-3 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"mt-0.5 size-4 shrink-0 rounded border-edge accent-accent\"\n checked={checked}\n onChange={(e) => setChecked(e.target.checked)}\n />\n <span>{checkboxLabel}</span>\n </label>\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button type=\"button\" disabled={!checked} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport type TunnelStatusResponse = {\n enabled: boolean;\n state: 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'error';\n subdomain: string | null;\n publicUrl: string | null;\n connectedSince: string | null;\n frpcPid: number | null;\n lastHeartbeatAt: string | null;\n lastError: string | null;\n frpcDownload?: {\n phase: 'downloading' | 'extracting';\n bytesReceived?: number;\n totalBytes?: number | null;\n percent?: number | null;\n } | null;\n startProgress?: {\n phase:\n | 'preparing_frpc'\n | 'registering'\n | 'provisioning_tls'\n | 'starting_frpc'\n | 'reconnecting_frpc';\n startedAt: string;\n acmeStep?: 'checking' | 'dns_challenge' | 'dns_propagation' | 'ca_validation' | 'issuing' | null;\n publicUrl?: string | null;\n } | null;\n consentRequired?: boolean;\n canAutoStart?: boolean;\n consent?: {\n currentVersion: string;\n acceptedVersion: string | null;\n acceptedAt: string | null;\n valid: boolean;\n };\n registrationSecret?: {\n configured: boolean;\n source: 'env' | 'config' | 'dev_default' | 'missing';\n };\n config: {\n autoStart: boolean;\n brokerUrl: string;\n e2e?: {\n enabled: boolean;\n tlsPort: number;\n staging: boolean;\n };\n };\n cert?: {\n status: 'no_cert' | 'healthy' | 'expiring_soon' | 'critical' | 'renewal_failed';\n domain: string | null;\n issuedAt: string | null;\n expiresAt: string | null;\n daysUntilExpiry: number | null;\n autoRenewal: boolean;\n renewalFailed?: boolean;\n lastRenewalError?: string | null;\n lastRenewalErrorAt?: string | null;\n };\n};\n\nexport type TunnelStartResponse = {\n publicUrl: string | null;\n subdomain: string | null;\n qrPayload: string;\n lanUrl: string | null;\n};\n\nexport type TunnelQrResponse = {\n qrPayload: string;\n publicUrl: string | null;\n lanUrl: string | null;\n expiresAt?: string;\n};\n\nexport type TunnelPairResponse = {\n pairingSecret: string;\n expiresAt: string;\n};\n\nexport async function fetchTunnelStatus(): Promise<TunnelStatusResponse> {\n return fetchJson<TunnelStatusResponse>(apiUrl('/api/tunnel/status'));\n}\n\nexport async function recordTunnelConsent(): Promise<void> {\n await fetchJson(apiUrl('/api/tunnel/consent'), { method: 'POST', body: JSON.stringify({}) });\n}\n\nexport async function startTunnel(): Promise<TunnelStartResponse> {\n return fetchJson<TunnelStartResponse>(apiUrl('/api/tunnel/start'), {\n method: 'POST',\n body: JSON.stringify({}),\n });\n}\n\nexport async function stopTunnel(opts?: { release?: boolean }): Promise<{ ok: boolean; released?: boolean }> {\n return fetchJson<{ ok: boolean; released?: boolean }>(apiUrl('/api/tunnel/stop'), {\n method: 'POST',\n body: JSON.stringify({ release: opts?.release === true }),\n });\n}\n\nexport async function fetchTunnelQr(): Promise<TunnelQrResponse> {\n return fetchJson<TunnelQrResponse>(apiUrl('/api/tunnel/qr'));\n}\n\nexport async function createTunnelPair(): Promise<TunnelPairResponse> {\n return fetchJson<TunnelPairResponse>(apiUrl('/api/tunnel/pair'), {\n method: 'POST',\n body: JSON.stringify({}),\n });\n}\n\nexport async function patchTunnelConfig(patch: {\n enabled?: boolean;\n autoStart?: boolean;\n brokerUrl?: string;\n registrationSecret?: string | null;\n}): Promise<void> {\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({ tunnel: patch }),\n });\n}\n","import QRCode from 'qrcode';\n\nexport const MOBILE_PAIR_QR_OPTIONS = {\n width: 216,\n margin: 2,\n errorCorrectionLevel: 'M' as const,\n color: { dark: '#000000ff', light: '#ffffffff' },\n};\n\nexport async function encodeMobilePairQr(payload: string): Promise<string> {\n return QRCode.toDataURL(payload, MOBILE_PAIR_QR_OPTIONS);\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR, { useSWRConfig } from 'swr';\n\nimport {\n createTunnelPair,\n fetchTunnelQr,\n fetchTunnelStatus,\n type TunnelQrResponse,\n type TunnelStatusResponse,\n} from '@/features/tunnel/tunnel-api';\nimport { encodeMobilePairQr } from '@/features/tunnel/mobile-pair-qr';\nimport { buildMobileGatewayPairDeepLink, getBaseUrl, isLoopbackHttpOrigin } from '@/lib/url';\n\nexport type MobilePairQrState = {\n tunnelActive: boolean;\n tunnelStatus: TunnelStatusResponse | undefined;\n tunnelQr: TunnelQrResponse | undefined;\n pairBaseUrl: string;\n setPairBaseUrl: (value: string) => void;\n baseOk: boolean;\n localhostWarn: boolean;\n deepLink: string;\n qrPayload: string;\n qrDataUrl: string | null;\n qrGenFailed: boolean;\n encoding: boolean;\n linkCopied: boolean;\n copyDeepLink: () => Promise<void>;\n refreshQr: (payload?: string) => Promise<void>;\n};\n\nexport function useMobilePairQr(gatewayToken: string): MobilePairQrState {\n const hasToken = Boolean(gatewayToken);\n const { mutate: globalMutate } = useSWRConfig();\n\n const { data: tunnelStatus } = useSWR(hasToken ? 'tunnel-status' : null, fetchTunnelStatus, {\n refreshInterval: 60_000,\n });\n\n useEffect(() => {\n const onTunnelStatus = () => {\n void globalMutate('tunnel-status');\n void globalMutate('tunnel-qr');\n void globalMutate('tunnel-pair');\n };\n window.addEventListener('tunnel-status', onTunnelStatus);\n return () => window.removeEventListener('tunnel-status', onTunnelStatus);\n }, [globalMutate]);\n\n const tunnelActive =\n tunnelStatus?.state === 'connected' && Boolean(tunnelStatus.publicUrl?.trim());\n\n const { data: tunnelQr, mutate: mutTunnelQr } = useSWR(\n tunnelActive && hasToken ? 'tunnel-qr' : null,\n fetchTunnelQr,\n { refreshInterval: 4 * 60_000 },\n );\n\n const { data: lanPair, mutate: mutLanPair } = useSWR(\n !tunnelActive && hasToken ? 'tunnel-pair' : null,\n createTunnelPair,\n { refreshInterval: 4 * 60_000 },\n );\n\n const [pairBaseUrl, setPairBaseUrl] = useState(getBaseUrl);\n const [qrDataUrl, setQrDataUrl] = useState<string | null>(null);\n const [qrGenFailed, setQrGenFailed] = useState(false);\n const [linkCopied, setLinkCopied] = useState(false);\n const [manualPayload, setManualPayload] = useState('');\n\n const trimmedBase = pairBaseUrl.trim();\n const baseOk = useMemo(() => {\n try {\n const u = new URL(trimmedBase);\n return u.protocol === 'http:' || u.protocol === 'https:';\n } catch {\n return false;\n }\n }, [trimmedBase]);\n\n const deepLink = useMemo(() => {\n if (!gatewayToken) return '';\n if (manualPayload.trim()) return manualPayload.trim();\n if (tunnelActive && tunnelQr?.qrPayload?.trim()) {\n return tunnelQr.qrPayload.trim();\n }\n if (!baseOk || !lanPair?.pairingSecret) return '';\n return buildMobileGatewayPairDeepLink({\n baseUrl: trimmedBase,\n pairingSecret: lanPair.pairingSecret,\n lanUrl: null,\n });\n }, [baseOk, gatewayToken, lanPair?.pairingSecret, manualPayload, trimmedBase, tunnelActive, tunnelQr?.qrPayload]);\n\n useEffect(() => {\n if (!deepLink) {\n setQrDataUrl(null);\n setQrGenFailed(false);\n return;\n }\n let cancelled = false;\n setQrGenFailed(false);\n void encodeMobilePairQr(deepLink)\n .then((url) => {\n if (!cancelled) setQrDataUrl(url);\n })\n .catch(() => {\n if (!cancelled) {\n setQrGenFailed(true);\n setQrDataUrl(null);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [deepLink]);\n\n const refreshQr = useCallback(\n async (payload?: string) => {\n if (payload?.trim()) {\n setManualPayload(payload.trim());\n void mutTunnelQr({ qrPayload: payload.trim(), publicUrl: tunnelStatus?.publicUrl ?? '', lanUrl: tunnelQr?.lanUrl ?? null }, false);\n return;\n }\n setManualPayload('');\n if (tunnelActive) {\n await mutTunnelQr();\n } else {\n await mutLanPair();\n }\n },\n [mutLanPair, mutTunnelQr, tunnelActive, tunnelQr?.lanUrl, tunnelStatus?.publicUrl],\n );\n\n const localhostWarn = baseOk && isLoopbackHttpOrigin(trimmedBase);\n const encoding = Boolean(deepLink && !qrDataUrl && !qrGenFailed);\n\n const copyDeepLink = useCallback(async () => {\n if (!deepLink) return;\n await navigator.clipboard.writeText(deepLink).catch(() => {});\n setLinkCopied(true);\n window.setTimeout(() => setLinkCopied(false), 2000);\n }, [deepLink]);\n\n return {\n tunnelActive,\n tunnelStatus,\n tunnelQr,\n pairBaseUrl,\n setPairBaseUrl,\n baseOk,\n localhostWarn,\n deepLink,\n qrPayload: deepLink,\n qrDataUrl,\n qrGenFailed,\n encoding,\n linkCopied,\n copyDeepLink,\n refreshQr,\n };\n}\n","import { Check, Circle, Loader2 } from 'lucide-react';\nimport { useEffect, useState } from 'react';\n\nimport type { TunnelStatusResponse } from '@/features/tunnel/tunnel-api';\nimport type { TunnelSettingsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\n\ntype StepId = 'preparing_frpc' | 'registering' | 'provisioning_tls' | 'starting_frpc';\n\nfunction formatByteCount(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nconst STEP_ORDER: StepId[] = ['preparing_frpc', 'registering', 'provisioning_tls', 'starting_frpc'];\n\nfunction phaseIndex(phase: StepId | 'reconnecting_frpc' | undefined): number {\n if (!phase) return -1;\n if (phase === 'reconnecting_frpc') return STEP_ORDER.indexOf('starting_frpc');\n return STEP_ORDER.indexOf(phase);\n}\n\nfunction stepState(\n stepId: StepId,\n status: TunnelStatusResponse,\n): 'done' | 'active' | 'pending' {\n if (status.state === 'connected') return 'done';\n const current = status.startProgress?.phase;\n const idx = STEP_ORDER.indexOf(stepId);\n const currentIdx = phaseIndex(current);\n if (currentIdx < 0) {\n return status.state === 'connecting' || status.state === 'reconnecting' ? 'active' : 'pending';\n }\n if (idx < currentIdx) return 'done';\n if (idx === currentIdx) return 'active';\n return 'pending';\n}\n\nfunction stepDetail(\n t: TunnelSettingsMessages,\n stepId: StepId,\n status: TunnelStatusResponse,\n): string | null {\n const progress = status.startProgress;\n if (stepState(stepId, status) !== 'active') return null;\n\n if (stepId === 'preparing_frpc' && status.frpcDownload) {\n if (status.frpcDownload.phase === 'extracting') return t.frpcExtracting;\n if (status.frpcDownload.percent != null) {\n return t.frpcDownloadingPercent.replace('{{percent}}', String(status.frpcDownload.percent));\n }\n return t.frpcDownloading;\n }\n\n if (stepId === 'registering' && progress?.publicUrl) {\n return t.stepRegisterDetail;\n }\n\n if (stepId === 'provisioning_tls' && progress?.acmeStep) {\n switch (progress.acmeStep) {\n case 'checking':\n return t.stepTlsChecking;\n case 'dns_challenge':\n return t.stepTlsDnsChallenge;\n case 'dns_propagation':\n return t.stepTlsDnsPropagation;\n case 'ca_validation':\n return t.stepTlsCaValidation;\n case 'issuing':\n return t.stepTlsIssuing;\n default:\n return t.stepTlsDetail;\n }\n }\n\n if (stepId === 'starting_frpc') {\n return progress?.phase === 'reconnecting_frpc' ? t.stepReconnectDetail : t.stepFrpcDetail;\n }\n\n return null;\n}\n\nfunction stepLabel(t: TunnelSettingsMessages, stepId: StepId): string {\n switch (stepId) {\n case 'preparing_frpc':\n return t.stepPrepareFrpc;\n case 'registering':\n return t.stepRegister;\n case 'provisioning_tls':\n return t.stepTls;\n case 'starting_frpc':\n return t.stepFrpcLogin;\n }\n}\n\nexport function formatPhaseElapsed(startedAt: string | undefined): string | null {\n if (!startedAt) return null;\n const sec = Math.max(0, Math.floor((Date.now() - new Date(startedAt).getTime()) / 1000));\n if (sec < 60) return `${sec}s`;\n return `${Math.floor(sec / 60)}m ${sec % 60}s`;\n}\n\nexport function TunnelStartProgressPanel({\n status,\n t,\n}: {\n status: TunnelStatusResponse;\n t: TunnelSettingsMessages;\n}) {\n const [, setTick] = useState(0);\n useEffect(() => {\n if (status.state !== 'connecting' && status.state !== 'reconnecting') return;\n const id = window.setInterval(() => setTick((n) => n + 1), 1000);\n return () => window.clearInterval(id);\n }, [status.state, status.startProgress?.startedAt]);\n\n const showSteps =\n status.state === 'connecting' ||\n status.state === 'reconnecting' ||\n (status.state === 'connected' && Boolean(status.startProgress));\n\n if (!showSteps) return null;\n\n const e2eEnabled = status.config?.e2e?.enabled !== false;\n const steps = STEP_ORDER.filter((id) => id !== 'provisioning_tls' || e2eEnabled);\n const elapsed = formatPhaseElapsed(status.startProgress?.startedAt);\n const showPendingUrlNotice =\n Boolean(status.publicUrl) &&\n status.state !== 'connected' &&\n status.startProgress?.phase !== 'registering';\n\n return (\n <div className=\"mt-3 space-y-3 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-3\">\n <div>\n <p className=\"text-xs font-medium text-fg\">{t.startProgressTitle}</p>\n <p className=\"mt-1 text-xs text-fg-muted\">{t.startProgressHint}</p>\n </div>\n\n <ol className=\"space-y-2\">\n {steps.map((stepId) => {\n const state = stepState(stepId, status);\n const detail = stepDetail(t, stepId, status);\n return (\n <li key={stepId} className=\"flex gap-2 text-xs\">\n <span className=\"mt-0.5 shrink-0 text-fg-subtle\" aria-hidden>\n {state === 'done' ? (\n <Check className=\"size-3.5 text-emerald-600 dark:text-emerald-400\" />\n ) : state === 'active' ? (\n <Loader2 className=\"size-3.5 animate-spin text-accent\" />\n ) : (\n <Circle className=\"size-3.5\" />\n )}\n </span>\n <div className=\"min-w-0\">\n <div\n className={cn(\n 'font-medium',\n state === 'active' ? 'text-fg' : state === 'done' ? 'text-fg-muted' : 'text-fg-subtle',\n )}\n >\n {stepLabel(t, stepId)}\n </div>\n {detail ? <div className=\"mt-0.5 text-fg-muted\">{detail}</div> : null}\n {stepId === 'preparing_frpc' &&\n state === 'active' &&\n status.frpcDownload &&\n status.frpcDownload.phase === 'downloading' ? (\n <div className=\"mt-2 space-y-1\">\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-surface-panel\">\n <div\n className={cn(\n 'h-full rounded-full bg-accent transition-[width] duration-300',\n status.frpcDownload.percent == null && 'w-1/3 animate-pulse',\n )}\n style={\n status.frpcDownload.percent != null\n ? { width: `${status.frpcDownload.percent}%` }\n : undefined\n }\n />\n </div>\n {status.frpcDownload.bytesReceived != null && status.frpcDownload.totalBytes ? (\n <p className=\"text-fg-subtle\">\n {formatByteCount(status.frpcDownload.bytesReceived)} /{' '}\n {formatByteCount(status.frpcDownload.totalBytes)}\n </p>\n ) : null}\n </div>\n ) : null}\n </div>\n </li>\n );\n })}\n </ol>\n\n {elapsed && status.startProgress ? (\n <p className=\"text-xs text-fg-subtle\">\n {t.startProgressElapsed.replace('{{elapsed}}', elapsed)}\n </p>\n ) : null}\n\n {showPendingUrlNotice ? (\n <p className=\"text-xs text-fg-muted\">{t.publicUrlPendingNotice}</p>\n ) : null}\n </div>\n );\n}\n","import { AlertTriangle, Check, Copy, Globe, Loader2, Power, RefreshCw } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { isMaskedKey } from '@/features/settings/providers-api';\nimport { SettingsFormSection } from '@/features/settings/settings-form-section';\nimport { MobilePairQrSection } from '@/features/tunnel/mobile-pair-qr-section';\nimport { TunnelConsentDialog } from '@/features/tunnel/tunnel-consent-dialog';\nimport {\n fetchTunnelStatus,\n patchTunnelConfig,\n recordTunnelConsent,\n startTunnel,\n stopTunnel,\n type TunnelStatusResponse,\n} from '@/features/tunnel/tunnel-api';\nimport { useMobilePairQr } from '@/features/tunnel/use-mobile-pair-qr';\nimport { TunnelStartProgressPanel } from '@/features/tunnel/tunnel-start-progress';\nimport { cn } from '@/lib/cn';\nimport { messages } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction statusLabel(\n t: ReturnType<typeof messages>['tunnelSettings'],\n status: TunnelStatusResponse,\n): string {\n if (status.state === 'connected') return t.statusConnected;\n if (status.state === 'error') return t.statusError;\n if (status.startProgress?.phase === 'reconnecting_frpc') return t.statusReconnecting;\n if (status.startProgress?.phase === 'provisioning_tls') return t.statusProvisioningTls;\n if (status.startProgress?.phase === 'starting_frpc') return t.statusStartingFrpc;\n if (status.startProgress?.phase === 'registering') return t.statusRegistering;\n if (status.startProgress?.phase === 'preparing_frpc' || status.frpcDownload) return t.statusPreparingFrpc;\n if (status.state === 'connecting' || status.state === 'reconnecting') return t.statusConnecting;\n return t.statusOff;\n}\n\nfunction statusDotClass(status: TunnelStatusResponse): string {\n if (status.state === 'connected') return 'bg-emerald-500';\n if (status.state === 'connecting' || status.state === 'reconnecting') return 'bg-amber-500 animate-pulse';\n if (status.state === 'error') return 'bg-red-500';\n return 'bg-fg-subtle';\n}\n\nfunction formatUptime(since: string | null): string {\n if (!since) return '—';\n const ms = Date.now() - new Date(since).getTime();\n if (ms < 0) return '—';\n const mins = Math.floor(ms / 60_000);\n if (mins < 60) return `${mins}m`;\n const hrs = Math.floor(mins / 60);\n const rem = mins % 60;\n return `${hrs}h ${rem}m`;\n}\n\nexport function TunnelSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const t = messages(language).tunnelSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [actionError, setActionError] = useState<string | null>(null);\n const [starting, setStarting] = useState(false);\n const [stopping, setStopping] = useState(false);\n const [savingAutoStart, setSavingAutoStart] = useState(false);\n const [linkCopied, setLinkCopied] = useState(false);\n const [consentOpen, setConsentOpen] = useState(false);\n const [autoStartConfirmOpen, setAutoStartConfirmOpen] = useState(false);\n const [releaseConfirmOpen, setReleaseConfirmOpen] = useState(false);\n const [releasing, setReleasing] = useState(false);\n const [brokerSecretDraft, setBrokerSecretDraft] = useState('');\n const [savingBrokerSecret, setSavingBrokerSecret] = useState(false);\n const [brokerSecretNotice, setBrokerSecretNotice] = useState<string | null>(null);\n\n const pairQr = useMobilePairQr(token ?? '');\n\n const { data: cfgData } = useGatewayConfigSwr(hasToken);\n\n const {\n data: status,\n error: statusErr,\n isLoading,\n mutate: mutStatus,\n } = useSWR(hasToken ? 'tunnel-status' : null, fetchTunnelStatus, {\n refreshInterval: (latest) => {\n if (starting) return 1000;\n if (latest?.frpcDownload || latest?.state === 'connecting' || latest?.state === 'reconnecting') {\n return 2000;\n }\n return 60_000;\n },\n });\n\n const autoStartEnabled = useMemo(() => {\n const c = cfgData?.payload?.config;\n if (c && typeof c === 'object' && !Array.isArray(c)) {\n const tunnel = (c as { tunnel?: unknown }).tunnel;\n if (tunnel && typeof tunnel === 'object' && !Array.isArray(tunnel)) {\n if ((tunnel as { autoStart?: unknown }).autoStart === true) return true;\n }\n }\n return status?.config?.autoStart === true;\n }, [cfgData, status?.config?.autoStart]);\n\n const brokerSecretFromConfig = useMemo(() => {\n const c = cfgData?.payload?.config;\n if (c && typeof c === 'object' && !Array.isArray(c)) {\n const tunnel = (c as { tunnel?: unknown }).tunnel;\n if (tunnel && typeof tunnel === 'object' && !Array.isArray(tunnel)) {\n const secret = (tunnel as { registrationSecret?: unknown }).registrationSecret;\n if (typeof secret === 'string') return secret;\n }\n }\n return '';\n }, [cfgData]);\n\n const brokerSecretConfiguredInConfig = isMaskedKey(brokerSecretFromConfig);\n const brokerSecretFromEnv = status?.registrationSecret?.source === 'env';\n const brokerSecretMissing = status?.registrationSecret?.source === 'missing';\n\n useEffect(() => {\n const onTunnelStatus = () => {\n void mutStatus();\n };\n window.addEventListener('tunnel-status', onTunnelStatus);\n return () => window.removeEventListener('tunnel-status', onTunnelStatus);\n }, [mutStatus]);\n\n const consentBullets = useMemo(\n () => [t.consentBullet1, t.consentBullet2, t.consentBullet3] as const,\n [t.consentBullet1, t.consentBullet2, t.consentBullet3],\n );\n\n const runStart = useCallback(async () => {\n setActionError(null);\n setStarting(true);\n try {\n const res = await startTunnel();\n await mutStatus();\n void revalidateGatewayConfig();\n await pairQr.refreshQr(res.qrPayload);\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setStarting(false);\n }\n }, [mutStatus, pairQr.refreshQr]);\n\n const handleStartClick = useCallback(() => {\n if (status?.consentRequired) {\n setConsentOpen(true);\n return;\n }\n void runStart();\n }, [status?.consentRequired, runStart]);\n\n const handleConsentConfirm = useCallback(async () => {\n setConsentOpen(false);\n setActionError(null);\n try {\n await recordTunnelConsent();\n await mutStatus();\n await runStart();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n }\n }, [mutStatus, runStart]);\n\n const handleStop = useCallback(async () => {\n setActionError(null);\n setStopping(true);\n try {\n await stopTunnel();\n await pairQr.refreshQr();\n await mutStatus();\n void revalidateGatewayConfig();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setStopping(false);\n }\n }, [mutStatus, pairQr.refreshQr]);\n\n const applyAutoStart = useCallback(\n async (next: boolean) => {\n setSavingAutoStart(true);\n setActionError(null);\n try {\n await patchTunnelConfig({ autoStart: next });\n void revalidateGatewayConfig();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setSavingAutoStart(false);\n }\n },\n [],\n );\n\n const toggleAutoStart = useCallback(() => {\n if (autoStartEnabled) {\n void applyAutoStart(false);\n return;\n }\n if (status?.consentRequired) {\n setActionError(t.consentExpiredBanner);\n return;\n }\n if (!status?.canAutoStart) {\n setActionError(t.autoStartHint);\n return;\n }\n setAutoStartConfirmOpen(true);\n }, [applyAutoStart, status?.canAutoStart, status?.consentRequired, t, autoStartEnabled]);\n\n const saveBrokerSecret = useCallback(async () => {\n const trimmed = brokerSecretDraft.trim();\n if (!trimmed) return;\n setSavingBrokerSecret(true);\n setActionError(null);\n setBrokerSecretNotice(null);\n try {\n await patchTunnelConfig({ registrationSecret: trimmed });\n setBrokerSecretDraft('');\n setBrokerSecretNotice(t.brokerSecretSaved);\n void revalidateGatewayConfig();\n await mutStatus();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setSavingBrokerSecret(false);\n }\n }, [brokerSecretDraft, mutStatus, t.brokerSecretSaved]);\n\n const clearBrokerSecret = useCallback(async () => {\n setSavingBrokerSecret(true);\n setActionError(null);\n setBrokerSecretNotice(null);\n try {\n await patchTunnelConfig({ registrationSecret: null });\n setBrokerSecretDraft('');\n setBrokerSecretNotice(t.brokerSecretCleared);\n void revalidateGatewayConfig();\n await mutStatus();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setSavingBrokerSecret(false);\n }\n }, [mutStatus, t.brokerSecretCleared]);\n\n const handleRelease = useCallback(async () => {\n setReleaseConfirmOpen(false);\n setActionError(null);\n setReleasing(true);\n try {\n await stopTunnel({ release: true });\n await pairQr.refreshQr();\n await mutStatus();\n void revalidateGatewayConfig();\n } catch (e) {\n setActionError(e instanceof Error ? e.message : String(e));\n } finally {\n setReleasing(false);\n }\n }, [mutStatus, pairQr.refreshQr]);\n\n const copyLink = useCallback(async () => {\n if (!status?.publicUrl) return;\n await navigator.clipboard.writeText(status.publicUrl).catch(() => {});\n setLinkCopied(true);\n window.setTimeout(() => setLinkCopied(false), 2000);\n }, [status?.publicUrl]);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto w-full max-w-app-main px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{t.needToken}</p>\n </div>\n );\n }\n\n const st = status ?? {\n enabled: false,\n state: 'disconnected' as const,\n subdomain: null,\n publicUrl: null,\n connectedSince: null,\n frpcPid: null,\n lastHeartbeatAt: null,\n lastError: null,\n consentRequired: true,\n config: { autoStart: autoStartEnabled, brokerUrl: 'https://frp.xopc.ai/api' },\n };\n\n const showConsentExpired =\n status?.consentRequired && (st.enabled || autoStartEnabled || status?.consent?.acceptedAt);\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <div>\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t.subtitle}</p>\n </div>\n\n <div className=\"flex items-start gap-2 rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-fg-muted\">\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0 text-amber-600 dark:text-amber-400\" />\n <div>\n <p className=\"font-medium text-fg\">{t.riskBannerTitle}</p>\n <p className=\"mt-1\">{t.riskBannerBody}</p>\n </div>\n </div>\n\n {showConsentExpired ? (\n <div className=\"rounded-lg border border-edge bg-surface-panel px-3 py-2 text-xs text-fg-muted\">\n {t.consentExpiredBanner}\n </div>\n ) : null}\n\n <SettingsFormSection>\n <h2 className=\"mb-3 text-sm font-semibold text-fg\">{t.statusTitle}</h2>\n {isLoading && !status ? (\n <p className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" />\n {t.loading}\n </p>\n ) : null}\n {statusErr ? (\n <p className=\"text-sm text-red-600 dark:text-red-400\">\n {statusErr instanceof Error ? statusErr.message : String(statusErr)}\n </p>\n ) : null}\n <div className=\"flex items-center gap-2 text-sm font-medium text-fg\">\n <span className={cn('size-2.5 rounded-full', statusDotClass(st))} aria-hidden />\n {statusLabel(t, st)}\n </div>\n <TunnelStartProgressPanel status={st} t={t} />\n {st.publicUrl ? (\n <p className=\"font-mono text-xs text-fg-subtle break-all\">{st.publicUrl}</p>\n ) : null}\n {st.connectedSince ? (\n <p className=\"text-xs text-fg-subtle\">\n {t.uptime}: {formatUptime(st.connectedSince)}\n </p>\n ) : null}\n {st.lastError && st.state === 'error' ? (\n <p className=\"text-xs text-red-600 dark:text-red-400\">{st.lastError}</p>\n ) : null}\n <p className=\"text-xs text-fg-subtle\">{t.lanHint}</p>\n </SettingsFormSection>\n\n <MobilePairQrSection pairQr={pairQr} />\n\n <div className=\"flex flex-wrap gap-2\">\n {!st.enabled ? (\n <Button type=\"button\" disabled={starting} onClick={handleStartClick}>\n {starting ? <Loader2 className=\"size-4 animate-spin\" /> : <Power className=\"size-4\" />}\n {t.start}\n </Button>\n ) : (\n <Button type=\"button\" variant=\"secondary\" disabled={stopping} onClick={() => void handleStop()}>\n {stopping ? <Loader2 className=\"size-4 animate-spin\" /> : null}\n {t.stop}\n </Button>\n )}\n {st.publicUrl ? (\n <Button type=\"button\" variant=\"secondary\" onClick={() => void copyLink()}>\n {linkCopied ? <Check className=\"size-4\" /> : <Copy className=\"size-4\" />}\n {linkCopied ? t.copied : t.copyUrl}\n </Button>\n ) : null}\n {st.enabled ? (\n <Button type=\"button\" variant=\"ghost\" onClick={() => void pairQr.refreshQr()}>\n <RefreshCw className=\"size-4\" />\n {t.refreshQr}\n </Button>\n ) : null}\n {st.subdomain || st.publicUrl ? (\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={releasing || stopping}\n className=\"border-danger/40 text-danger hover:bg-danger/10\"\n onClick={() => setReleaseConfirmOpen(true)}\n >\n {releasing ? <Loader2 className=\"size-4 animate-spin\" /> : null}\n {t.release}\n </Button>\n ) : null}\n </div>\n\n {st.subdomain || st.publicUrl ? (\n <p className=\"text-xs text-fg-subtle\">{t.releaseHint}</p>\n ) : null}\n\n <SettingsFormSection>\n <h2 className=\"mb-1 text-sm font-semibold text-fg\">{t.brokerSecretTitle}</h2>\n <p className=\"mb-3 text-xs text-fg-muted\">{t.brokerSecretHint}</p>\n {brokerSecretFromEnv ? (\n <p className=\"mb-3 text-xs text-fg-subtle\">{t.brokerSecretEnvHint}</p>\n ) : null}\n {brokerSecretMissing && !brokerSecretFromEnv ? (\n <p className=\"mb-3 text-xs text-amber-700 dark:text-amber-400\">{t.brokerSecretMissingHint}</p>\n ) : null}\n {!brokerSecretFromEnv ? (\n <>\n <label className=\"sr-only\" htmlFor=\"tunnel-broker-secret\">\n {t.brokerSecretTitle}\n </label>\n <input\n id=\"tunnel-broker-secret\"\n type=\"password\"\n autoComplete=\"off\"\n className=\"w-full rounded-md border border-edge bg-surface-panel px-3 py-2 font-mono text-sm text-fg\"\n placeholder={\n brokerSecretConfiguredInConfig ? t.brokerSecretPlaceholderKeep : t.brokerSecretPlaceholder\n }\n value={brokerSecretDraft}\n disabled={savingBrokerSecret}\n onChange={(e) => setBrokerSecretDraft(e.target.value)}\n />\n <div className=\"mt-3 flex flex-wrap gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={savingBrokerSecret || !brokerSecretDraft.trim()}\n onClick={() => void saveBrokerSecret()}\n >\n {savingBrokerSecret ? <Loader2 className=\"size-4 animate-spin\" /> : null}\n {t.brokerSecretSave}\n </Button>\n {brokerSecretConfiguredInConfig ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={savingBrokerSecret}\n onClick={() => void clearBrokerSecret()}\n >\n {t.brokerSecretClear}\n </Button>\n ) : null}\n </div>\n </>\n ) : null}\n {brokerSecretNotice ? (\n <p className=\"mt-2 text-xs text-emerald-700 dark:text-emerald-400\">{brokerSecretNotice}</p>\n ) : null}\n </SettingsFormSection>\n\n <SettingsFormSection>\n <h2 className=\"mb-3 text-sm font-semibold text-fg\">{t.optionsTitle}</h2>\n <label\n className={cn(\n 'flex items-center gap-3 text-sm text-fg',\n !autoStartEnabled && !status?.canAutoStart ? 'cursor-not-allowed opacity-60' : 'cursor-pointer',\n )}\n >\n <input\n type=\"checkbox\"\n className=\"size-4 rounded border-edge accent-accent\"\n checked={autoStartEnabled}\n disabled={savingAutoStart || (!autoStartEnabled && !status?.canAutoStart)}\n onChange={toggleAutoStart}\n />\n {t.autoStart}\n </label>\n {!status?.canAutoStart && !autoStartEnabled ? (\n <p className=\"mt-2 text-xs text-fg-subtle\">{t.autoStartHint}</p>\n ) : null}\n </SettingsFormSection>\n\n {actionError ? <p className=\"text-sm text-red-600 dark:text-red-400\">{actionError}</p> : null}\n\n <div className=\"flex items-start gap-2 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-2 text-xs text-fg-subtle\">\n <Globe className=\"mt-0.5 size-4 shrink-0 text-accent\" />\n <span>{t.brokerNote}</span>\n </div>\n\n <TunnelConsentDialog\n key={consentOpen ? 'consent-open' : 'consent-closed'}\n open={consentOpen}\n title={t.consentTitle}\n intro={t.consentIntro}\n bullets={consentBullets}\n checkboxLabel={t.consentCheckbox}\n confirmLabel={showConsentExpired ? t.consentReconfirm : t.consentConfirm}\n cancelLabel={t.consentCancel}\n onConfirm={() => void handleConsentConfirm()}\n onCancel={() => setConsentOpen(false)}\n />\n\n <ConfirmDialog\n open={autoStartConfirmOpen}\n title={t.autoStartConfirmTitle}\n description={t.autoStartConfirmBody}\n confirmLabel={t.autoStartConfirmLabel}\n cancelLabel={t.consentCancel}\n onConfirm={() => {\n setAutoStartConfirmOpen(false);\n void applyAutoStart(true);\n }}\n onCancel={() => setAutoStartConfirmOpen(false)}\n />\n\n <ConfirmDialog\n open={releaseConfirmOpen}\n title={t.releaseConfirmTitle}\n description={t.releaseConfirmBody}\n confirmLabel={t.releaseConfirmLabel}\n cancelLabel={t.consentCancel}\n destructive\n onConfirm={() => void handleRelease()}\n onCancel={() => setReleaseConfirmOpen(false)}\n />\n </div>\n );\n}\n","import {\n Check,\n Clock,\n Copy,\n FileText,\n Loader2,\n Plus,\n RefreshCw,\n Trash2,\n} from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport { SettingsFormSection } from '@/features/settings/settings-form-section';\nimport {\n cleanExpiredShares,\n createShare,\n extendShare,\n fetchShares,\n revokeShare,\n type CreateShareParams,\n type ShareItem,\n} from '@/features/shares/shares-api';\nimport {\n ReachabilityHint,\n ShareLinkDialog,\n ShareUrlCopyRows,\n type ShareLinkResult,\n} from '@/features/shares/share-link-dialog';\nimport { cn } from '@/lib/cn';\nimport { messages } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n\nfunction formatRelativeTime(isoDate: string, language: string): string {\n const diff = new Date(isoDate).getTime() - Date.now();\n const absDiff = Math.abs(diff);\n const isPast = diff < 0;\n\n if (absDiff < 60_000) return language === 'zh' ? '刚刚' : 'just now';\n const minutes = Math.floor(absDiff / 60_000);\n if (minutes < 60) {\n const label = language === 'zh' ? `${minutes} 分钟` : `${minutes}m`;\n return isPast ? (language === 'zh' ? `${label}前` : `${label} ago`) : label;\n }\n const hours = Math.floor(minutes / 60);\n if (hours < 24) {\n const label = language === 'zh' ? `${hours} 小时` : `${hours}h`;\n return isPast ? (language === 'zh' ? `${label}前` : `${label} ago`) : label;\n }\n const days = Math.floor(hours / 24);\n const label = language === 'zh' ? `${days} 天` : `${days}d`;\n return isPast ? (language === 'zh' ? `${label}前` : `${label} ago`) : label;\n}\n\nconst TTL_OPTIONS = [\n { value: 3_600_000, key: '1h' },\n { value: 21_600_000, key: '6h' },\n { value: 86_400_000, key: '24h' },\n { value: 259_200_000, key: '3d' },\n { value: 604_800_000, key: '7d' },\n] as const;\n\n// ── Main Panel ────────────────────────────────────────────────────────────────\n\nexport function SharesSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const t = messages(language).sharesSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const {\n data,\n error,\n isLoading,\n mutate,\n } = useSWR(hasToken ? 'shares-list' : null, fetchShares, { refreshInterval: 30_000 });\n\n const shares = data?.payload?.shares ?? [];\n const [showExpired, setShowExpired] = useState(false);\n\n const filteredShares = useMemo(() => {\n if (showExpired) return shares;\n return shares.filter((s) => !s.expired && !s.revoked);\n }, [shares, showExpired]);\n\n const activeCount = useMemo(() => shares.filter((s) => !s.expired && !s.revoked).length, [shares]);\n const expiredCount = useMemo(() => shares.filter((s) => s.expired || s.revoked).length, [shares]);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto w-full max-w-app-main px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{t.needToken}</p>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <div>\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t.subtitle}</p>\n </div>\n\n <CreateShareSection t={t} onCreated={() => void mutate()} />\n\n <SettingsFormSection>\n <div className=\"mb-3 flex items-center justify-between\">\n <h2 className=\"text-sm font-semibold text-fg\">\n {showExpired ? t.allSharesTitle : t.listTitle}\n {activeCount > 0 && (\n <span className=\"ml-2 text-xs font-normal text-fg-muted\">({activeCount})</span>\n )}\n </h2>\n <div className=\"flex items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"px-2 py-1\"\n onClick={() => void mutate()}\n disabled={isLoading}\n >\n <RefreshCw className={cn('size-3.5', isLoading && 'animate-spin')} />\n </Button>\n {expiredCount > 0 && (\n <button\n type=\"button\"\n className=\"text-xs text-accent hover:underline\"\n onClick={() => setShowExpired((v) => !v)}\n >\n {showExpired ? t.hideExpired : t.showExpired}\n </button>\n )}\n </div>\n </div>\n\n {isLoading && !data ? (\n <p className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" />\n {t.loading}\n </p>\n ) : error ? (\n <div className=\"flex items-center gap-2 text-sm text-red-600 dark:text-red-400\">\n <span>{t.error}</span>\n <Button type=\"button\" variant=\"ghost\" className=\"px-2 py-1 text-xs\" onClick={() => void mutate()}>\n {t.retry}\n </Button>\n </div>\n ) : filteredShares.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{t.emptyState}</p>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {filteredShares.map((share) => (\n <ShareRow\n key={share.id}\n share={share}\n t={t}\n language={language}\n onRevoked={() => void mutate()}\n onExtended={() => void mutate()}\n />\n ))}\n </div>\n )}\n\n {expiredCount > 0 && showExpired && (\n <CleanExpiredButton t={t} onCleaned={() => void mutate()} />\n )}\n </SettingsFormSection>\n </div>\n );\n}\n\n// ── Create Section ────────────────────────────────────────────────────────────\n\nfunction CreateShareSection({\n t,\n onCreated,\n}: {\n t: ReturnType<typeof messages>['sharesSettings'];\n onCreated: () => void;\n}) {\n const [expanded, setExpanded] = useState(false);\n const [path, setPath] = useState('');\n const [ttlMs, setTtlMs] = useState(86_400_000);\n const [maxViews, setMaxViews] = useState<number | null>(null);\n const [description, setDescription] = useState('');\n const [creating, setCreating] = useState(false);\n const [result, setResult] = useState<ShareLinkResult | null>(null);\n const [errorMsg, setErrorMsg] = useState<string | null>(null);\n const [resultDialogOpen, setResultDialogOpen] = useState(false);\n\n const handleCreate = useCallback(async () => {\n if (!path.trim()) return;\n setCreating(true);\n setErrorMsg(null);\n setResult(null);\n try {\n const params: CreateShareParams = {\n path: path.trim(),\n ttlMs,\n maxViews,\n description: description.trim() || undefined,\n };\n const res = await createShare(params);\n setResult(res.payload);\n setResultDialogOpen(true);\n onCreated();\n } catch (err) {\n setErrorMsg(err instanceof Error ? err.message : String(err));\n } finally {\n setCreating(false);\n }\n }, [path, ttlMs, maxViews, description, onCreated]);\n\n const resetForm = useCallback(() => {\n setPath('');\n setDescription('');\n setMaxViews(null);\n setTtlMs(86_400_000);\n setResult(null);\n setErrorMsg(null);\n }, []);\n\n if (!expanded) {\n return (\n <Button type=\"button\" onClick={() => setExpanded(true)} className=\"self-start\">\n <Plus className=\"size-4\" />\n {t.createTitle}\n </Button>\n );\n }\n\n return (\n <SettingsFormSection>\n <h2 className=\"mb-1 text-sm font-semibold text-fg\">{t.createTitle}</h2>\n <p className=\"mb-4 text-xs text-fg-muted\">{t.createHint}</p>\n\n <div className=\"flex flex-col gap-3\">\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg\">{t.pathLabel}</span>\n <input\n type=\"text\"\n className=\"rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle focus:outline-none focus:ring-2 focus:ring-accent\"\n placeholder={t.pathPlaceholder}\n value={path}\n onChange={(e) => setPath(e.target.value)}\n />\n </label>\n\n <div className=\"flex flex-wrap gap-3\">\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg\">{t.ttlLabel}</span>\n <select\n className=\"rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg focus:outline-none focus:ring-2 focus:ring-accent\"\n value={ttlMs}\n onChange={(e) => setTtlMs(Number(e.target.value))}\n >\n {TTL_OPTIONS.map((opt) => (\n <option key={opt.key} value={opt.value}>\n {t.ttlOptions[opt.key]}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg\">{t.maxViewsLabel}</span>\n <select\n className=\"rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg focus:outline-none focus:ring-2 focus:ring-accent\"\n value={maxViews ?? 'unlimited'}\n onChange={(e) =>\n setMaxViews(e.target.value === 'unlimited' ? null : Number(e.target.value))\n }\n >\n <option value=\"unlimited\">{t.maxViewsUnlimited}</option>\n <option value=\"1\">1</option>\n <option value=\"5\">5</option>\n <option value=\"10\">10</option>\n <option value=\"50\">50</option>\n <option value=\"100\">100</option>\n </select>\n </label>\n </div>\n\n <label className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-fg\">{t.descriptionLabel}</span>\n <input\n type=\"text\"\n className=\"rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle focus:outline-none focus:ring-2 focus:ring-accent\"\n placeholder={t.descriptionPlaceholder}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n />\n </label>\n\n <div className=\"flex items-center gap-2 pt-1\">\n <Button type=\"button\" disabled={creating || !path.trim()} onClick={() => void handleCreate()}>\n {creating ? <Loader2 className=\"size-4 animate-spin\" /> : <Plus className=\"size-4\" />}\n {creating ? t.creating : t.createButton}\n </Button>\n <Button type=\"button\" variant=\"ghost\" onClick={() => { resetForm(); setExpanded(false); }}>\n {t.cancel}\n </Button>\n </div>\n\n {errorMsg && <p className=\"text-sm text-red-600 dark:text-red-400\">{errorMsg}</p>}\n </div>\n\n <ShareLinkDialog\n open={resultDialogOpen}\n onOpenChange={(open) => {\n setResultDialogOpen(open);\n if (!open) setResult(null);\n }}\n result={result}\n />\n </SettingsFormSection>\n );\n}\n\n// ── Share Row ─────────────────────────────────────────────────────────────────\n\nfunction ShareRow({\n share,\n t,\n language,\n onRevoked,\n onExtended,\n}: {\n share: ShareItem;\n t: ReturnType<typeof messages>['sharesSettings'];\n language: string;\n onRevoked: () => void;\n onExtended: () => void;\n}) {\n const [revokeOpen, setRevokeOpen] = useState(false);\n const [revoking, setRevoking] = useState(false);\n const [linksOpen, setLinksOpen] = useState(false);\n const [extending, setExtending] = useState(false);\n\n const isActive = !share.expired && !share.revoked;\n const statusLabel = share.revoked ? t.statusRevoked : share.expired ? t.statusExpired : t.statusActive;\n const statusColor = share.revoked\n ? 'text-red-600 dark:text-red-400'\n : share.expired\n ? 'text-fg-subtle'\n : 'text-emerald-600 dark:text-emerald-400';\n\n const handleRevoke = useCallback(async () => {\n setRevokeOpen(false);\n setRevoking(true);\n try {\n await revokeShare(share.id);\n onRevoked();\n } catch {\n /* silent */\n } finally {\n setRevoking(false);\n }\n }, [share.id, onRevoked]);\n\n const handleCopy = useCallback(async () => {\n setLinksOpen((v) => !v);\n }, []);\n\n const handleExtend = useCallback(async () => {\n setExtending(true);\n try {\n await extendShare(share.id, 86_400_000);\n onExtended();\n } catch {\n /* silent */\n } finally {\n setExtending(false);\n }\n }, [share.id, onExtended]);\n\n return (\n <>\n <div className=\"rounded-lg border border-edge-subtle bg-surface-panel px-3 py-2.5\">\n <div className=\"flex items-start gap-3\">\n <FileText className=\"mt-0.5 size-4 shrink-0 text-fg-muted\" />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2\">\n <span className=\"truncate text-sm font-medium text-fg\">{share.fileName}</span>\n <span className={cn('text-xs font-medium', statusColor)}>{statusLabel}</span>\n </div>\n <p className=\"truncate text-xs text-fg-subtle\">{share.workspaceRelativePath}</p>\n <div className=\"mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-muted\">\n <span>{formatFileSize(share.fileSize)}</span>\n <span className=\"flex items-center gap-1\">\n <Clock className=\"size-3\" />\n {share.expired\n ? (language === 'zh' ? '已过期' : 'expired')\n : formatRelativeTime(share.expiresAt, language)}\n </span>\n <span>\n {t.views}: {share.viewCount}\n {share.maxViews !== null && ` ${t.viewsOf} ${share.maxViews}`}\n </span>\n {share.description && (\n <span className=\"italic text-fg-subtle\">{share.description}</span>\n )}\n </div>\n </div>\n <div className=\"flex shrink-0 items-center gap-1\">\n {isActive && (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"px-2 py-1\"\n title={t.copyUrl}\n onClick={() => void handleCopy()}\n >\n {linksOpen ? <Check className=\"size-3.5 text-emerald-500\" /> : <Copy className=\"size-3.5\" />}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"px-2 py-1\"\n onClick={() => void handleExtend()}\n disabled={extending}\n title={t.extend}\n >\n {extending ? <Loader2 className=\"size-3.5 animate-spin\" /> : <Clock className=\"size-3.5\" />}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"px-2 py-1 text-red-600 hover:text-red-700 dark:text-red-400\"\n onClick={() => setRevokeOpen(true)}\n disabled={revoking}\n >\n {revoking ? <Loader2 className=\"size-3.5 animate-spin\" /> : <Trash2 className=\"size-3.5\" />}\n </Button>\n </>\n )}\n </div>\n </div>\n {isActive && linksOpen ? (\n <div className=\"mt-3 border-t border-edge-subtle pt-3 pl-7\">\n <ShareUrlCopyRows\n shareUrl={share.shareUrl}\n lanUrl={share.lanUrl}\n reachability={share.reachability}\n compact\n />\n <div className=\"mt-2\">\n <ReachabilityHint reachability={share.reachability} />\n </div>\n </div>\n ) : null}\n </div>\n\n <ConfirmDialog\n open={revokeOpen}\n title={t.revokeConfirmTitle}\n description={t.revokeConfirmBody}\n confirmLabel={t.revokeConfirmLabel}\n cancelLabel={t.cancel}\n destructive\n onConfirm={() => void handleRevoke()}\n onCancel={() => setRevokeOpen(false)}\n />\n </>\n );\n}\n\n// ── Clean Expired Button ──────────────────────────────────────────────────────\n\nfunction CleanExpiredButton({\n t,\n onCleaned,\n}: {\n t: ReturnType<typeof messages>['sharesSettings'];\n onCleaned: () => void;\n}) {\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [cleaning, setCleaning] = useState(false);\n\n const handleClean = useCallback(async () => {\n setConfirmOpen(false);\n setCleaning(true);\n try {\n await cleanExpiredShares();\n onCleaned();\n } catch {\n /* silent */\n } finally {\n setCleaning(false);\n }\n }, [onCleaned]);\n\n return (\n <>\n <div className=\"mt-3 flex justify-end\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n disabled={cleaning}\n onClick={() => setConfirmOpen(true)}\n className=\"border-danger/40 px-2 py-1 text-xs text-danger hover:bg-danger/10\"\n >\n {cleaning ? <Loader2 className=\"size-3.5 animate-spin\" /> : <Trash2 className=\"size-3.5\" />}\n {t.cleanExpired}\n </Button>\n </div>\n\n <ConfirmDialog\n open={confirmOpen}\n title={t.cleanExpiredConfirmTitle}\n description={t.cleanExpiredConfirmBody}\n confirmLabel={t.cleanExpiredConfirmLabel}\n cancelLabel={t.cancel}\n destructive\n onConfirm={() => void handleClean()}\n onCancel={() => setConfirmOpen(false)}\n />\n </>\n );\n}\n","import * as Popover from '@radix-ui/react-popover';\nimport { Check, ChevronsUpDown } from 'lucide-react';\nimport { useCallback, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport {\n comboboxTriggerLayoutClass,\n formControlBorderFocusClass,\n selectComboboxTriggerFocusClass,\n} from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { apiFetch } from '@/lib/fetch';\nimport { SETTINGS_SHELL_POPOVER_Z } from '@/lib/settings-shell-dialog-layer';\nimport { interaction } from '@/lib/interaction';\nimport { apiUrl } from '@/lib/url';\n\nexport type ImageProviderSummary = {\n id: string;\n defaultModel?: string;\n models: string[];\n /** From gateway: provider has resolvable API credentials. */\n configured?: boolean;\n};\n\nasync function fetchImageGenerationProviders(): Promise<ImageProviderSummary[]> {\n const res = await apiFetch(apiUrl('/api/image/providers'));\n if (!res.ok) throw new Error(`Image providers: HTTP ${res.status}`);\n const data = (await res.json()) as { payload?: { providers?: ImageProviderSummary[] } };\n return data.payload?.providers ?? [];\n}\n\nfunction modelIdsForProviders(providerList: ImageProviderSummary[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const p of providerList) {\n const models = p.models.length > 0 ? p.models : p.defaultModel ? [p.defaultModel] : [];\n for (const m of models) {\n const id = `${p.id}/${m}`;\n if (!seen.has(id)) {\n seen.add(id);\n out.push(id);\n }\n }\n }\n return out;\n}\n\n/** Only image-generation providers the gateway marks as configured (credentials available). */\nfunction buildConfiguredModelIds(providers: ImageProviderSummary[], currentValueTrimmed: string): string[] {\n const configuredOnly = providers.filter((p) => p.configured === true);\n const fromRegistry = modelIdsForProviders(configuredOnly);\n if (!currentValueTrimmed || fromRegistry.includes(currentValueTrimmed)) {\n return fromRegistry;\n }\n return [currentValueTrimmed, ...fromRegistry];\n}\n\nfunction idsMatchingQuery(ids: string[], query: string): string[] {\n const raw = query.trim().toLowerCase();\n if (!raw) return ids;\n const tokens = raw.split(/[/\\s]+/).filter(Boolean);\n return ids.filter((h) => {\n const lower = h.toLowerCase();\n return tokens.every((t) => lower.includes(t));\n });\n}\n\nconst SWR_KEY = 'image-generation-providers';\n\n/**\n * Dropdown only: choose a registered `provider/model` from the gateway. Search runs inside\n * the popover; the trigger is not a text field (no free-text model strings).\n */\nexport function ImageGenerationModelInput({\n value,\n disabled,\n placeholder,\n searchPlaceholder,\n noMatches,\n registryEmptyHint,\n outOfFilterNote,\n className,\n onChange,\n}: {\n value: string;\n disabled?: boolean;\n placeholder: string;\n searchPlaceholder: string;\n noMatches: string;\n /** When every provider is unconfigured and there is no current value. */\n registryEmptyHint?: string;\n /** Current value uses a provider that is not configured (still listed so you can change it). */\n outOfFilterNote?: string;\n className?: string;\n onChange: (modelId: string) => void;\n}) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n\n const { data: providers, isLoading, error } = useSWR(SWR_KEY, fetchImageGenerationProviders, {\n revalidateOnFocus: false,\n });\n\n const valueTrimmed = value.trim();\n const configuredOnlyIds = useMemo(\n () => modelIdsForProviders((providers ?? []).filter((p) => p.configured === true)),\n [providers],\n );\n const allIds = useMemo(\n () => buildConfiguredModelIds(providers ?? [], valueTrimmed),\n [providers, valueTrimmed],\n );\n const filtered = useMemo(() => idsMatchingQuery(allIds, query), [allIds, query]);\n const showOutOfFilterNote =\n Boolean(outOfFilterNote) &&\n Boolean(valueTrimmed) &&\n !configuredOnlyIds.includes(valueTrimmed);\n\n const label = value.trim() ? value : placeholder;\n const titleText = value.trim() || placeholder;\n\n const handleOpenChange = useCallback(\n (next: boolean) => {\n setOpen(next);\n if (!next) {\n setQuery('');\n }\n },\n [],\n );\n\n return (\n <div className=\"flex min-w-0 flex-col gap-1\">\n <Popover.Root open={open} onOpenChange={handleOpenChange} modal={false}>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n disabled={disabled || isLoading}\n title={isLoading ? '…' : titleText}\n className={cn(\n comboboxTriggerLayoutClass,\n 'items-center gap-2 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-2 text-left text-sm font-normal text-fg',\n interaction.transition,\n 'hover:border-edge hover:bg-surface-hover/45',\n selectComboboxTriggerFocusClass,\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'dark:border-edge-subtle dark:hover:bg-surface-hover/55',\n className,\n )}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n <span className=\"min-w-0 truncate\">{isLoading ? '…' : label}</span>\n <ChevronsUpDown className=\"size-4 shrink-0 text-fg-subtle opacity-70\" aria-hidden />\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className={cn(\n 'w-[min(22rem,calc(100vw-2rem))] rounded-xl border border-edge-subtle bg-surface-panel p-1 shadow-elevated dark:border-edge-subtle',\n SETTINGS_SHELL_POPOVER_Z,\n )}\n side=\"bottom\"\n sideOffset={4}\n align=\"end\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <input\n type=\"search\"\n className={cn(\n 'mb-1 w-full rounded-lg border border-edge-subtle bg-surface-base px-2.5 py-1.5 text-sm text-fg placeholder:text-fg-disabled dark:bg-surface-hover/40',\n formControlBorderFocusClass,\n )}\n placeholder={searchPlaceholder}\n value={query}\n onChange={(e) => setQuery(e.target.value)}\n onKeyDown={(e) => e.stopPropagation()}\n />\n <div className=\"max-h-60 overflow-auto\" role=\"listbox\" aria-label={searchPlaceholder}>\n {error ? (\n <div className=\"p-2 text-xs text-red-600 dark:text-red-400\">\n {error instanceof Error ? error.message : 'Failed to load image providers'}\n </div>\n ) : null}\n {!error && allIds.length === 0 && !isLoading ? (\n <div className=\"px-2 py-3 text-center text-xs text-fg-muted\">\n {registryEmptyHint ?? noMatches}\n </div>\n ) : null}\n {!error && allIds.length > 0 && filtered.length === 0 ? (\n <div className=\"px-2 py-3 text-center text-xs text-fg-muted\">{noMatches}</div>\n ) : null}\n {filtered.map((id) => (\n <button\n key={id}\n type=\"button\"\n role=\"option\"\n aria-selected={id === value}\n className={cn(\n 'flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-sm text-fg hover:bg-surface-hover',\n id === value && 'bg-surface-hover/90 font-medium dark:bg-surface-hover/70',\n )}\n onClick={() => {\n onChange(id);\n setOpen(false);\n setQuery('');\n }}\n >\n <Check className={cn('size-4 shrink-0', id !== value && 'invisible')} aria-hidden />\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium\">{id}</span>\n </button>\n ))}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n {showOutOfFilterNote ? (\n <p className=\"text-xs text-amber-700 dark:text-amber-400/90\">{outOfFilterNote}</p>\n ) : null}\n </div>\n );\n}\n","import { Image as ImageIcon, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { ModelSelector } from '@/features/chat/model-selector';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\n\nimport { AgentDefaultsField } from '../agent-defaults-field';\nimport type { AgentDefaultsPanelProps } from '../agent-defaults-panel-props';\nimport { ImageGenerationModelInput } from '../image-generation-model-input';\n\n/** Vision + image-generation defaults (`agents.defaults.*`) — lives on the Image generation settings page. */\nexport function AgentDefaultsImageModelChainsSection(props: AgentDefaultsPanelProps) {\n const { a, chat, form, update } = props;\n\n return (\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={ImageIcon} title={a.cardModelsTitle} subtitle={a.cardModelsSubtitle} />\n <div className=\"mt-4 flex flex-col gap-5\">\n <AgentDefaultsField label={a.label.imageModel} description={a.desc.imageModel}>\n <ModelSelector\n value={form.imageModel}\n placeholder={chat.modelPlaceholder}\n searchPlaceholder={chat.modelSearchPlaceholder}\n noMatches={chat.modelNoMatches}\n capabilitiesFilter=\"vision\"\n registryEmptyHint={a.visionRegistryEmpty}\n outOfFilterNote={a.visionOutOfFilterNote}\n onChange={(modelId) => update({ imageModel: modelId })}\n />\n </AgentDefaultsField>\n <AgentDefaultsField label={a.label.imageModelFallbacks} description={a.desc.imageModelFallbacks}>\n <div className=\"flex flex-col gap-2\">\n {form.imageModelFallbacks.map((fb, idx) => (\n <div key={idx} className=\"flex items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <ModelSelector\n value={fb}\n placeholder={chat.modelPlaceholder}\n searchPlaceholder={chat.modelSearchPlaceholder}\n noMatches={chat.modelNoMatches}\n capabilitiesFilter=\"vision\"\n registryEmptyHint={a.visionRegistryEmpty}\n outOfFilterNote={a.visionOutOfFilterNote}\n onChange={(modelId) => {\n const next = [...form.imageModelFallbacks];\n next[idx] = modelId;\n update({ imageModelFallbacks: next });\n }}\n />\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"shrink-0\"\n aria-label={a.removeModelFallback}\n onClick={() =>\n update({\n imageModelFallbacks: form.imageModelFallbacks.filter((_, j) => j !== idx),\n })\n }\n >\n <Trash2 className=\"size-4\" strokeWidth={1.75} />\n </Button>\n </div>\n ))}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"w-fit gap-1.5\"\n onClick={() => update({ imageModelFallbacks: [...form.imageModelFallbacks, ''] })}\n >\n <Plus className=\"size-4 shrink-0\" strokeWidth={1.75} />\n {a.addModelFallback}\n </Button>\n </div>\n </AgentDefaultsField>\n <AgentDefaultsField label={a.label.imageGenerationModel} description={a.desc.imageGenerationModel}>\n <ImageGenerationModelInput\n value={form.imageGenerationModel}\n placeholder={chat.modelPlaceholder}\n searchPlaceholder={chat.modelSearchPlaceholder}\n noMatches={chat.modelNoMatches}\n registryEmptyHint={a.imageGenRegistryEmpty}\n outOfFilterNote={a.imageGenOutOfFilterNote}\n onChange={(modelId) => update({ imageGenerationModel: modelId })}\n />\n </AgentDefaultsField>\n <AgentDefaultsField\n label={a.label.imageGenerationModelFallbacks}\n description={a.desc.imageGenerationModelFallbacks}\n >\n <div className=\"flex flex-col gap-2\">\n {form.imageGenerationModelFallbacks.map((fb, idx) => (\n <div key={idx} className=\"flex items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <ImageGenerationModelInput\n value={fb}\n placeholder={chat.modelPlaceholder}\n searchPlaceholder={chat.modelSearchPlaceholder}\n noMatches={chat.modelNoMatches}\n registryEmptyHint={a.imageGenRegistryEmpty}\n outOfFilterNote={a.imageGenOutOfFilterNote}\n onChange={(modelId) => {\n const next = [...form.imageGenerationModelFallbacks];\n next[idx] = modelId;\n update({ imageGenerationModelFallbacks: next });\n }}\n />\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"shrink-0\"\n aria-label={a.removeModelFallback}\n onClick={() =>\n update({\n imageGenerationModelFallbacks: form.imageGenerationModelFallbacks.filter(\n (_, j) => j !== idx,\n ),\n })\n }\n >\n <Trash2 className=\"size-4\" strokeWidth={1.75} />\n </Button>\n </div>\n ))}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"w-fit gap-1.5\"\n onClick={() =>\n update({ imageGenerationModelFallbacks: [...form.imageGenerationModelFallbacks, ''] })\n }\n >\n <Plus className=\"size-4 shrink-0\" strokeWidth={1.75} />\n {a.addModelFallback}\n </Button>\n </div>\n </AgentDefaultsField>\n </div>\n </SettingsFormSection>\n );\n}\n","import { Image as ImageIcon, Loader2, RefreshCw, Save, Server } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { useExtensions } from '@/features/extensions/extension-provider';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport { fetchImageProvidersList } from '@/features/settings/fetch-image-providers';\nimport {\n ImageProviderCredentialsPanel,\n type ImageProviderCredentialsPanelMessages,\n} from '@/features/settings/image-provider-credentials-panel';\nimport { IMAGE_PROVIDERS_SWR_KEY } from '@/features/settings/image-providers-swr-key';\nimport { AgentDefaultsImageModelChainsSection } from '@/features/settings/agents/agent-defaults-panels/image-model-chains-section';\nimport {\n fetchAgentDefaults,\n parseParamsJsonForSave,\n patchAgentDefaults,\n type AgentDefaultsState,\n} from '@/features/settings/config-api';\nimport {\n SettingsFormSection,\n SettingsFormSectionHeader,\n} from '@/features/settings/settings-form-section';\nimport { useImageProviderCredentials } from '@/features/settings/use-image-provider-credentials';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { apiUrl } from '@/lib/url';\nimport { cn } from '@/lib/cn';\nimport { messages, type MessageBundle } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction inputClass(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n );\n}\n\nconst imageProvidersSwrKey = () => apiUrl(IMAGE_PROVIDERS_SWR_KEY);\n\nfunction pickImageDefaultsSlice(s: AgentDefaultsState) {\n return {\n imageModel: s.imageModel,\n imageModelFallbacks: s.imageModelFallbacks,\n imageGenerationModel: s.imageGenerationModel,\n imageGenerationModelFallbacks: s.imageGenerationModelFallbacks,\n imageGenerationModelTimeoutMs: s.imageGenerationModelTimeoutMs,\n imageGenerationModelAutoProviderFallback: s.imageGenerationModelAutoProviderFallback,\n };\n}\n\nfunction panelMessagesFromBundle(t: MessageBundle['imageModelsSettings']): ImageProviderCredentialsPanelMessages {\n return {\n credentialsIntro: t.credentialsIntro,\n regionHint: t.regionHint,\n endpointPresetsHint: t.endpointPresetsHint,\n apiKeyLabel: t.apiKeyLabel,\n optionalPlaceholder: t.optionalPlaceholder,\n regionLabel: t.regionLabel,\n baseUrlLabel: t.baseUrlLabel,\n imageBaseUrlLabel: t.imageBaseUrlLabel,\n saveCredentials: t.saveCredentials,\n savingCredentials: t.savingCredentials,\n credentialsSaved: t.credentialsSaved,\n discardCredentials: t.discardCredentials,\n credentialsNothingToSave: t.credentialsNothingToSave,\n credentialsSaveError: t.credentialsSaveError,\n regionPresetDefault: t.regionPresetDefault,\n regionPresetCustom: t.regionPresetCustom,\n baseUrlPresetDefault: t.baseUrlPresetDefault,\n baseUrlPresetCustom: t.baseUrlPresetCustom,\n openExtensionSettings: t.openExtensionSettings,\n openImageModelsPage: t.openImageModelsPage,\n extensionSettingsLinkTitle: t.extensionSettingsLinkTitle,\n imageModelsLinkTitle: t.imageModelsLinkTitle,\n configured: t.configured,\n missingKey: t.missingKey,\n defaultModel: t.defaultModel,\n modelsLabel: t.modelsLabel,\n imageBaseUrlPresetHint: t.imageBaseUrlPresetHint,\n dashscopeRegion_beijing: t.dashscopeRegion_beijing,\n dashscopeRegion_singapore: t.dashscopeRegion_singapore,\n dashscopeRegion_us: t.dashscopeRegion_us,\n apiKeyMaskedHelp: t.apiKeyMaskedHelp,\n apiKeyCopy: t.apiKeyCopy,\n apiKeyCopied: t.apiKeyCopied,\n apiKeyShow: t.apiKeyShow,\n apiKeyHide: t.apiKeyHide,\n apiKeyNotInConfigFile: t.apiKeyNotInConfigFile,\n apiKeyRevealFailed: t.apiKeyRevealFailed,\n minimaxClusterLabel: t.minimaxClusterLabel,\n minimaxClusterHint: t.minimaxClusterHint,\n falQueueBaseLabel: t.falQueueBaseLabel,\n falQueueBaseHint: t.falQueueBaseHint,\n };\n}\n\nexport function ImageModelsSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const t = m.imageModelsSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [state, setState] = useState<AgentDefaultsState | null>(null);\n const [baseline, setBaseline] = useState<AgentDefaultsState | null>(null);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [savedFlash, setSavedFlash] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n\n const extensions = useExtensions();\n const extensionIds = useMemo(() => new Set(extensions.map((e) => e.id)), [extensions]);\n\n const reload = useCallback(async () => {\n if (!hasToken) return;\n setLoading(true);\n setError(undefined);\n try {\n const fresh = await fetchAgentDefaults();\n const snapshot = structuredClone(fresh);\n setState(snapshot);\n setBaseline(structuredClone(snapshot));\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setLoading(false);\n }\n }, [hasToken]);\n\n useEffect(() => {\n void reload();\n }, [reload]);\n\n const patchAgentDefaultsLocal = useCallback((patch: Partial<AgentDefaultsState>) => {\n setState((s) => (s ? { ...s, ...patch } : null));\n }, []);\n\n const { data: providers = [], mutate: refreshProviders } = useSWR(\n hasToken ? imageProvidersSwrKey() : null,\n fetchImageProvidersList,\n { revalidateOnFocus: false },\n );\n\n const gwSwr = useGatewayConfigSwr(hasToken);\n\n const cred = useImageProviderCredentials(providers);\n\n const dirty = useMemo(() => {\n if (!state || !baseline) return false;\n return (\n JSON.stringify(pickImageDefaultsSlice(state)) !== JSON.stringify(pickImageDefaultsSlice(baseline))\n );\n }, [state, baseline]);\n\n const anyDirty = dirty || cred.credDirty;\n\n useEffect(() => {\n if (!anyDirty) return;\n const onBeforeUnload = (e: BeforeUnloadEvent) => {\n e.preventDefault();\n e.returnValue = '';\n };\n window.addEventListener('beforeunload', onBeforeUnload);\n return () => window.removeEventListener('beforeunload', onBeforeUnload);\n }, [anyDirty]);\n\n const onSave = useCallback(async () => {\n if (!state) return;\n setSaving(true);\n setError(undefined);\n try {\n try {\n void parseParamsJsonForSave(state.paramsJson);\n } catch (e) {\n setError(\n e instanceof SyntaxError\n ? m.agentSettings.advanced.paramsInvalidJson\n : e instanceof Error\n ? e.message\n : m.agentSettings.advanced.paramsInvalidJson,\n );\n return;\n }\n await patchAgentDefaults(state);\n setBaseline(structuredClone(state));\n setSavedFlash(true);\n window.setTimeout(() => setSavedFlash(false), 1500);\n void gwSwr.mutate?.();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setSaving(false);\n }\n }, [state, gwSwr, m.agentSettings]);\n\n const onDiscard = useCallback(() => {\n if (!baseline) return;\n setState(structuredClone(baseline));\n setError(undefined);\n setSavedFlash(false);\n }, [baseline]);\n\n const panelMsg = useMemo(() => panelMessagesFromBundle(t), [t]);\n const apiKeyLinkLabels = useMemo(\n () => ({\n getApiKey: m.providersSettings.getApiKey,\n getApiKeyIntl: m.providersSettings.getApiKeyIntl,\n getApiKeyCn: m.providersSettings.getApiKeyCn,\n }),\n [m.providersSettings],\n );\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto w-full max-w-app-main px-4 py-8 text-sm text-fg-muted\">\n {language === 'zh' ? '请先登录网关。' : 'Connect to a gateway to continue.'}\n </div>\n );\n }\n\n if (loading || !state) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main items-center gap-2 px-4 py-8 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" /> Loading…\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <header className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{t.title}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t.subtitle}</p>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void reload();\n void refreshProviders();\n void gwSwr.mutate?.();\n }}\n >\n <RefreshCw className=\"size-3.5\" />\n <span className=\"ml-1.5\">{t.refresh}</span>\n </Button>\n {savedFlash ? <span className=\"text-sm text-fg-muted\">{t.saved}</span> : null}\n <Button type=\"button\" variant=\"secondary\" onClick={onDiscard} disabled={!dirty || saving}>\n {t.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" onClick={() => void onSave()} disabled={!dirty || saving}>\n {saving ? <Loader2 className=\"size-3.5 animate-spin\" /> : <Save className=\"size-3.5\" />}\n <span className=\"ml-1.5\">{saving ? t.saving : t.save}</span>\n </Button>\n </div>\n </header>\n\n {error ? (\n <div className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-700 dark:text-red-300\">\n {error}\n </div>\n ) : null}\n\n <AgentDefaultsImageModelChainsSection\n form={state}\n update={patchAgentDefaultsLocal}\n a={m.agentSettings}\n chat={m.chat}\n />\n\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={ImageIcon} title={t.title} subtitle={t.subtitle} />\n <div className=\"flex flex-col gap-4\">\n <div className=\"rounded-lg border border-edge-subtle bg-surface-base px-3 py-2.5 text-xs leading-relaxed text-fg-muted\">\n {t.crossLinkHint}\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <label className=\"text-sm font-medium text-fg\">{t.timeoutLabel}</label>\n <input\n type=\"number\"\n min={0}\n step={1000}\n className={cn(inputClass(), 'max-w-[12rem]')}\n value={state.imageGenerationModelTimeoutMs ?? ''}\n placeholder=\"120000\"\n onChange={(e) => {\n const raw = e.target.value.trim();\n const next = raw === '' ? null : Math.max(0, Math.floor(Number(raw)));\n setState((prev) =>\n prev\n ? {\n ...prev,\n imageGenerationModelTimeoutMs: next && next > 0 ? next : null,\n }\n : null,\n );\n }}\n />\n <p className=\"text-xs text-fg-subtle\">{t.timeoutHint}</p>\n </div>\n <label className=\"flex items-start gap-3 text-sm\">\n <input\n type=\"checkbox\"\n className=\"mt-0.5\"\n checked={state.imageGenerationModelAutoProviderFallback}\n onChange={(e) =>\n setState((prev) =>\n prev\n ? { ...prev, imageGenerationModelAutoProviderFallback: e.target.checked }\n : null,\n )\n }\n aria-label={t.autoFallbackLabel}\n />\n <span className=\"flex flex-col gap-0.5\">\n <span className=\"font-medium text-fg\">{t.autoFallbackLabel}</span>\n <span className=\"text-xs text-fg-subtle\">{t.autoFallbackHint}</span>\n </span>\n </label>\n </div>\n </SettingsFormSection>\n\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={Server} title={t.providersTitle} subtitle=\"\" />\n {providers.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{t.providersEmpty}</p>\n ) : (\n <ImageProviderCredentialsPanel\n summaries={providers}\n credDraft={cred.credDraft}\n credDirty={cred.credDirty}\n credSaving={cred.credSaving}\n credError={cred.credError}\n credSavedFlash={cred.credSavedFlash}\n credNoopFlash={cred.credNoopFlash}\n updateCredRow={cred.updateCredRow}\n onDiscardCredentials={cred.onDiscardCredentials}\n onSaveCredentials={() => void cred.saveCredentials(t.credentialsSaveError)}\n extensionIds={extensionIds}\n showExtensionLinks\n showImageModelsLink={false}\n language={language}\n apiKeyLinkLabels={apiKeyLinkLabels}\n messages={panelMsg}\n />\n )}\n </SettingsFormSection>\n </div>\n );\n}\n","import { apiFetch } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport type {\n ApiType,\n CustomModel,\n ModelsJsonConfig,\n ProviderConfig,\n ValidationResult,\n} from './models-json.types';\n\nexport type {\n ApiType,\n CustomModel,\n ModelsJsonConfig,\n ProviderConfig,\n ValidationResult,\n} from './models-json.types';\n\nexport interface ModelsJsonStatus {\n config: ModelsJsonConfig;\n path: string;\n exists: boolean;\n loadError?: string;\n}\n\nexport interface ApiKeyTestResult {\n type: 'literal' | 'env' | 'command';\n resolved?: string;\n error?: string;\n}\n\nexport const API_TYPE_OPTIONS: { value: ApiType; label: string }[] = [\n { value: 'openai-completions', label: 'OpenAI Completions' },\n { value: 'openai-responses', label: 'OpenAI Responses' },\n { value: 'anthropic-messages', label: 'Anthropic Messages' },\n { value: 'google-generative-ai', label: 'Google Generative AI' },\n { value: 'azure-openai-responses', label: 'Azure OpenAI' },\n { value: 'bedrock-converse-stream', label: 'AWS Bedrock' },\n { value: 'openai-codex-responses', label: 'OpenAI Codex' },\n { value: 'google-gemini-cli', label: 'Google Gemini CLI' },\n { value: 'google-vertex', label: 'Google Vertex AI' },\n];\n\nfunction gatewayErrorMessage(body: unknown): string | undefined {\n if (!body || typeof body !== 'object') return undefined;\n const o = body as { error?: unknown };\n if (typeof o.error === 'string') return o.error;\n if (o.error && typeof o.error === 'object' && 'message' in o.error) {\n const m = (o.error as { message?: unknown }).message;\n return typeof m === 'string' ? m : undefined;\n }\n return undefined;\n}\n\n/** Ensures `providers` exists when the gateway returns a partial object. */\nexport function normalizeModelsJsonConfig(input: unknown): ModelsJsonConfig {\n if (!input || typeof input !== 'object') {\n return { providers: {} };\n }\n const o = input as Record<string, unknown>;\n const raw = o.providers;\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n return input as ModelsJsonConfig;\n }\n return { ...o, providers: {} };\n}\n\nexport async function fetchModelsJson(): Promise<ModelsJsonStatus> {\n const res = await apiFetch(apiUrl('/api/models-json'));\n const data = await res.json().catch(() => ({})) as {\n ok?: boolean;\n payload?: ModelsJsonStatus;\n error?: unknown;\n };\n if (!res.ok || !data.ok || !data.payload) {\n throw new Error(gatewayErrorMessage(data) || `HTTP ${res.status}`);\n }\n return {\n ...data.payload,\n config: normalizeModelsJsonConfig(data.payload.config),\n };\n}\n\nexport async function validateModelsJson(config: ModelsJsonConfig): Promise<ValidationResult> {\n const res = await apiFetch(apiUrl('/api/models-json/validate'), {\n method: 'POST',\n body: JSON.stringify({ config }),\n });\n const data = await res.json().catch(() => ({})) as {\n ok?: boolean;\n payload?: ValidationResult;\n error?: unknown;\n };\n if (!res.ok || !data.ok || !data.payload) {\n throw new Error(gatewayErrorMessage(data) || `HTTP ${res.status}`);\n }\n return data.payload;\n}\n\nexport async function saveModelsJson(\n config: ModelsJsonConfig,\n): Promise<{ saved: boolean; modelCount: number }> {\n const res = await apiFetch(apiUrl('/api/models-json'), {\n method: 'PATCH',\n body: JSON.stringify({ config }),\n });\n const data = await res.json().catch(() => ({})) as {\n ok?: boolean;\n payload?: { saved: boolean; modelCount: number };\n error?: unknown;\n };\n if (!res.ok || !data.ok || !data.payload) {\n throw new Error(gatewayErrorMessage(data) || `HTTP ${res.status}`);\n }\n return data.payload;\n}\n\nexport async function reloadModelsJson(): Promise<{ modelCount: number; error?: string }> {\n const res = await apiFetch(apiUrl('/api/models-json/reload'), { method: 'POST' });\n const data = await res.json().catch(() => ({})) as {\n ok?: boolean;\n payload?: { modelCount: number; error?: string };\n error?: unknown;\n };\n if (!res.ok || !data.ok || !data.payload) {\n throw new Error(gatewayErrorMessage(data) || `HTTP ${res.status}`);\n }\n return data.payload;\n}\n\nexport async function testApiKey(value: string): Promise<ApiKeyTestResult> {\n const res = await apiFetch(apiUrl('/api/models-json/test-api-key'), {\n method: 'POST',\n body: JSON.stringify({ value }),\n });\n const data = await res.json().catch(() => ({})) as {\n ok?: boolean;\n payload?: ApiKeyTestResult;\n error?: unknown;\n };\n if (!res.ok || !data.ok || !data.payload) {\n throw new Error(gatewayErrorMessage(data) || `HTTP ${res.status}`);\n }\n return data.payload;\n}\n\nexport function createCustomProvider(\n baseUrl: string,\n apiKey: string,\n api: ApiType = 'openai-completions',\n): ProviderConfig {\n return {\n baseUrl,\n apiKey,\n api,\n models: [],\n };\n}\n\nexport function createCustomModel(id: string, name?: string, overrides?: Partial<CustomModel>): CustomModel {\n return {\n id,\n name: name || id,\n input: ['text'],\n contextWindow: 128000,\n maxTokens: 16384,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n ...overrides,\n };\n}\n\nexport function isShellCommand(value: string): boolean {\n return value.startsWith('!');\n}\n\nexport function isEnvVar(value: string): boolean {\n return /^[A-Z][A-Z0-9_]*$/.test(value);\n}\n\nexport function getApiKeyType(value: string): 'shell' | 'env' | 'literal' {\n if (isShellCommand(value)) return 'shell';\n if (isEnvVar(value)) return 'env';\n return 'literal';\n}\n\nexport function maskApiKey(value: string): string {\n if (!value) return '';\n if (value.length <= 8) return '••••';\n return `${value.slice(0, 4)}••••${value.slice(-4)}`;\n}\n","import { Cpu, Plus, Trash2 } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { ModelSelector } from '@/features/chat/model-selector';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\n\nimport type { AgentDefaultsPanelProps } from '../agent-defaults-panel-props';\n\n/** Chat-only fallback chain (`agents.defaults.modelFallbacks`) — lives on the Models settings page. */\nexport function AgentDefaultsChatModelFallbacksSection(props: AgentDefaultsPanelProps) {\n const { a, chat, form, update } = props;\n\n return (\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={Cpu} title={a.label.modelFallbacks} subtitle={a.desc.modelFallbacks} />\n <div className=\"mt-4 flex flex-col gap-2\">\n {form.modelFallbacks.map((fb, idx) => (\n <div key={idx} className=\"flex items-start gap-2\">\n <div className=\"min-w-0 flex-1\">\n <ModelSelector\n value={fb}\n placeholder={chat.modelPlaceholder}\n searchPlaceholder={chat.modelSearchPlaceholder}\n noMatches={chat.modelNoMatches}\n onChange={(modelId) => {\n const next = [...form.modelFallbacks];\n next[idx] = modelId;\n update({ modelFallbacks: next });\n }}\n />\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"shrink-0\"\n aria-label={a.removeModelFallback}\n onClick={() =>\n update({\n modelFallbacks: form.modelFallbacks.filter((_, j) => j !== idx),\n })\n }\n >\n <Trash2 className=\"size-4\" strokeWidth={1.75} />\n </Button>\n </div>\n ))}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"w-fit gap-1.5\"\n onClick={() => update({ modelFallbacks: [...form.modelFallbacks, ''] })}\n >\n <Plus className=\"size-4 shrink-0\" strokeWidth={1.75} />\n {a.addModelFallback}\n </Button>\n </div>\n </SettingsFormSection>\n );\n}\n","import { nativeSelectMaxWidthClass, selectControlBaseClass, settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\n\nimport type { CustomModel, ModelsJsonConfig, ProviderConfig } from '../models-json-api';\n\nexport const PROVIDER_PRESETS: Record<string, Partial<ProviderConfig>> = {\n ollama: {\n baseUrl: 'http://localhost:11434/v1',\n api: 'openai-completions',\n apiKey: 'ollama',\n },\n lmstudio: {\n baseUrl: 'http://localhost:1234/v1',\n api: 'openai-completions',\n apiKey: 'lmstudio',\n },\n openrouter: {\n baseUrl: 'https://openrouter.ai/api/v1',\n api: 'openai-completions',\n apiKey: '',\n },\n zhipuCn: {\n baseUrl: 'https://open.bigmodel.cn/api/coding/paas/v4',\n api: 'openai-completions',\n apiKey: 'ZHIPU_API_KEY',\n },\n zaiGeneral: {\n baseUrl: 'https://api.z.ai/api/paas/v4',\n api: 'openai-completions',\n apiKey: 'ZAI_API_KEY',\n },\n};\n\nexport function providerIdForPreset(presetKey: string): string {\n if (presetKey === 'openrouter') return 'openrouter';\n if (presetKey === 'zhipuCn') return 'zhipu-cn';\n if (presetKey === 'zaiGeneral') return 'zai';\n return presetKey;\n}\n\nexport const INPUT_OPTIONS = [\n { value: 'text', labelKey: 'inputTextOnly' as const },\n { value: 'text,image', labelKey: 'inputTextVision' as const },\n];\n\nexport function inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nexport function selectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\nexport function parseInputSelect(model: CustomModel): string {\n const i = model.input || ['text'];\n if (i.includes('image')) return 'text,image';\n return 'text';\n}\n\nexport function inputFromSelect(sel: string): ('text' | 'image')[] {\n if (sel === 'text,image') return ['text', 'image'];\n return ['text'];\n}\n\nexport function updateProvider(\n config: ModelsJsonConfig,\n providerId: string,\n updates: Partial<ProviderConfig>,\n): ModelsJsonConfig {\n return {\n ...config,\n providers: {\n ...config.providers,\n [providerId]: {\n ...config.providers[providerId],\n ...updates,\n },\n },\n };\n}\n\nexport function removeProvider(config: ModelsJsonConfig, providerId: string): ModelsJsonConfig {\n const providers = { ...config.providers };\n delete providers[providerId];\n return { ...config, providers };\n}\n\nexport function addProviderEntry(\n config: ModelsJsonConfig,\n providerId: string,\n prov: ProviderConfig,\n): ModelsJsonConfig {\n return {\n ...config,\n providers: {\n ...config.providers,\n [providerId]: prov,\n },\n };\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport { useEffect, useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\nimport { type ModelsSettingsMessages } from '@/i18n/messages';\n\nimport { createCustomModel, type CustomModel } from '../models-json-api';\n\nimport {\n inputClassName,\n INPUT_OPTIONS,\n inputFromSelect,\n parseInputSelect,\n selectClassName,\n} from './models-settings-lib';\n\ntype ModelDialogProps = {\n open: boolean;\n onOpenChange: (o: boolean) => void;\n providerId: string | null;\n model: CustomModel | null;\n isNew: boolean;\n onSave: (model: CustomModel) => void;\n m: ModelsSettingsMessages;\n};\n\nexport function ModelEditDialogContent({\n open,\n onOpenChange,\n providerId,\n model,\n isNew,\n onSave,\n m,\n}: ModelDialogProps) {\n const [form, setForm] = useState<Partial<CustomModel>>(() => createCustomModel(''));\n const [errors, setErrors] = useState<Map<string, string>>(() => new Map());\n\n useEffect(() => {\n if (!open) return;\n setErrors(new Map());\n setForm(model ? { ...model } : createCustomModel(''));\n }, [open, model]);\n\n const update = <K extends keyof CustomModel>(field: K, value: CustomModel[K]) => {\n setForm((f) => ({ ...f, [field]: value }));\n setErrors((prev) => {\n const next = new Map(prev);\n next.delete(field);\n return next;\n });\n };\n\n const validate = (): boolean => {\n const next = new Map<string, string>();\n const id = (form.id || '').trim();\n if (!id) next.set('id', m.modelIdRequired);\n if (form.contextWindow !== undefined && form.contextWindow <= 0) {\n next.set('contextWindow', m.mustBePositive);\n }\n if (form.maxTokens !== undefined && form.maxTokens <= 0) {\n next.set('maxTokens', m.mustBePositive);\n }\n setErrors(next);\n return next.size === 0;\n };\n\n const handleSave = () => {\n if (!validate()) return;\n const id = (form.id || '').trim();\n const result: CustomModel = {\n ...form,\n id,\n name: form.name?.trim() || id,\n reasoning: form.reasoning || false,\n input: form.input || ['text'],\n contextWindow: form.contextWindow ?? 128000,\n maxTokens: form.maxTokens ?? 16384,\n cost: {\n input: form.cost?.input ?? 0,\n output: form.cost?.output ?? 0,\n cacheRead: form.cost?.cacheRead ?? 0,\n cacheWrite: form.cost?.cacheWrite ?? 0,\n },\n };\n onSave(result);\n onOpenChange(false);\n };\n\n const inputSel = parseInputSelect(form as CustomModel);\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 max-h-[min(90vh,720px)] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2',\n SETTINGS_SHELL_CONTENT_Z,\n 'overflow-y-auto rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge',\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"mb-3 flex items-start justify-between gap-2\">\n <div>\n <Dialog.Title className=\"text-base font-semibold text-fg\">\n {isNew ? m.addModelTitle : m.editModelTitle}\n </Dialog.Title>\n {providerId ? (\n <p className=\"mt-0.5 text-xs text-fg-muted\">\n {m.modelProviderLabel}: {providerId}\n </p>\n ) : null}\n </div>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n className=\"rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n aria-label={m.close}\n >\n <X className=\"size-4\" />\n </button>\n </Dialog.Close>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg\">\n {m.modelId}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </label>\n <input\n className={cn(inputClassName(), errors.has('id') && 'border-red-500')}\n value={form.id || ''}\n onChange={(e) => update('id', e.target.value)}\n placeholder=\"e.g. llama3.1:8b\"\n disabled={!isNew}\n />\n {errors.has('id') ? (\n <p className=\"mt-1 text-xs text-red-600 dark:text-red-400\">{errors.get('id')}</p>\n ) : null}\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.displayName}</label>\n <input\n className={inputClassName()}\n value={form.name || ''}\n onChange={(e) => update('name', e.target.value)}\n />\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.inputTypes}</label>\n <select\n className={selectClassName()}\n value={inputSel}\n onChange={(e) => update('input', inputFromSelect(e.target.value))}\n >\n {INPUT_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {m[opt.labelKey]}\n </option>\n ))}\n </select>\n </div>\n <label className=\"mt-6 flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={form.reasoning || false}\n onChange={(e) => update('reasoning', e.target.checked)}\n />\n {m.reasoning}\n </label>\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.contextWindow}</label>\n <input\n type=\"number\"\n min={1}\n className={cn(inputClassName(), errors.has('contextWindow') && 'border-red-500')}\n value={form.contextWindow ?? 128000}\n onChange={(e) => update('contextWindow', parseInt(e.target.value, 10) || 0)}\n />\n {errors.has('contextWindow') ? (\n <p className=\"mt-1 text-xs text-red-600 dark:text-red-400\">{errors.get('contextWindow')}</p>\n ) : null}\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.maxOutputTokens}</label>\n <input\n type=\"number\"\n min={1}\n className={cn(inputClassName(), errors.has('maxTokens') && 'border-red-500')}\n value={form.maxTokens ?? 16384}\n onChange={(e) => update('maxTokens', parseInt(e.target.value, 10) || 0)}\n />\n {errors.has('maxTokens') ? (\n <p className=\"mt-1 text-xs text-red-600 dark:text-red-400\">{errors.get('maxTokens')}</p>\n ) : null}\n </div>\n </div>\n <div className=\"border-t border-edge-subtle pt-2 dark:border-edge\">\n <p className=\"mb-2 text-xs font-semibold text-fg\">{m.costSection}</p>\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"mb-1 block text-xs text-fg-muted\">{m.costInput}</label>\n <input\n type=\"number\"\n step=\"any\"\n min={0}\n className={inputClassName()}\n value={form.cost?.input ?? 0}\n onChange={(e) =>\n update('cost', {\n ...form.cost,\n input: parseFloat(e.target.value) || 0,\n output: form.cost?.output ?? 0,\n cacheRead: form.cost?.cacheRead ?? 0,\n cacheWrite: form.cost?.cacheWrite ?? 0,\n })\n }\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs text-fg-muted\">{m.costOutput}</label>\n <input\n type=\"number\"\n step=\"any\"\n min={0}\n className={inputClassName()}\n value={form.cost?.output ?? 0}\n onChange={(e) =>\n update('cost', {\n ...form.cost,\n input: form.cost?.input ?? 0,\n output: parseFloat(e.target.value) || 0,\n cacheRead: form.cost?.cacheRead ?? 0,\n cacheWrite: form.cost?.cacheWrite ?? 0,\n })\n }\n />\n </div>\n </div>\n </div>\n </div>\n\n <div className=\"mt-4 flex justify-end gap-2 border-t border-edge-subtle pt-3 dark:border-edge\">\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"secondary\">\n {m.cancel}\n </Button>\n </Dialog.Close>\n <Button type=\"button\" className=\"bg-accent text-white hover:bg-accent/90\" onClick={handleSave}>\n {isNew ? m.addModelConfirm : m.saveModelConfirm}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { AlertCircle, X } from 'lucide-react';\nimport { useEffect, useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\nimport { type ModelsSettingsMessages } from '@/i18n/messages';\n\nimport {\n API_TYPE_OPTIONS,\n type ApiType,\n type ProviderConfig,\n} from '../models-json-api';\n\nimport {\n inputClassName,\n PROVIDER_PRESETS,\n providerIdForPreset,\n selectClassName,\n} from './models-settings-lib';\n\ntype ProviderDialogProps = {\n open: boolean;\n onOpenChange: (o: boolean) => void;\n presetKey?: string | null;\n onConfirm: (providerId: string, prov: ProviderConfig) => void;\n m: ModelsSettingsMessages;\n};\n\nexport function ProviderAddDialog({ open, onOpenChange, presetKey, onConfirm, m }: ProviderDialogProps) {\n const [providerId, setProviderId] = useState('');\n const [preset, setPreset] = useState('custom');\n const [baseUrl, setBaseUrl] = useState('');\n const [api, setApi] = useState<ApiType>('openai-completions');\n const [apiKey, setApiKey] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (!open) return;\n setError(null);\n const pk = presetKey || null;\n if (pk && PROVIDER_PRESETS[pk]) {\n const p = PROVIDER_PRESETS[pk];\n setPreset(pk);\n setBaseUrl(p.baseUrl || '');\n setApi((p.api as ApiType) || 'openai-completions');\n setApiKey(p.apiKey ?? '');\n setProviderId(providerIdForPreset(pk));\n } else {\n setPreset('custom');\n setProviderId('');\n setBaseUrl('');\n setApi('openai-completions');\n setApiKey('');\n }\n }, [open, presetKey]);\n\n const applyPreset = (key: string) => {\n setPreset(key);\n if (key === 'custom') return;\n const p = PROVIDER_PRESETS[key];\n if (!p) return;\n setBaseUrl(p.baseUrl || '');\n setApi((p.api as ApiType) || 'openai-completions');\n setApiKey(p.apiKey ?? '');\n setProviderId(providerIdForPreset(key));\n };\n\n const handleSubmit = () => {\n const id = providerId.trim();\n if (!id) {\n setError(m.providerIdRequired);\n return;\n }\n setError(null);\n onConfirm(id, {\n baseUrl: baseUrl.trim() || undefined,\n api,\n apiKey: apiKey.trim() || undefined,\n models: [],\n });\n onOpenChange(false);\n };\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 max-h-[min(90vh,640px)] w-[min(100%-2rem,32rem)] -translate-x-1/2 -translate-y-1/2',\n SETTINGS_SHELL_CONTENT_Z,\n 'overflow-y-auto rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge',\n )}\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <div className=\"mb-3 flex items-start justify-between gap-2\">\n <div>\n <Dialog.Title className=\"text-base font-semibold text-fg\">{m.addProviderTitle}</Dialog.Title>\n <p className=\"mt-0.5 text-xs text-fg-muted\">{m.addProviderSubtitle}</p>\n </div>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n className=\"rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n aria-label={m.close}\n >\n <X className=\"size-4\" />\n </button>\n </Dialog.Close>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.presetLabel}</label>\n <select\n className={selectClassName()}\n value={preset}\n onChange={(e) => applyPreset(e.target.value)}\n >\n <option value=\"custom\">{m.presetCustom}</option>\n <option value=\"ollama\">{m.presetOllama}</option>\n <option value=\"lmstudio\">{m.presetLmStudio}</option>\n <option value=\"openrouter\">{m.presetOpenRouter}</option>\n <option value=\"zhipuCn\">{m.presetZhipuCn}</option>\n <option value=\"zaiGeneral\">{m.presetZaiGeneral}</option>\n </select>\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg\">\n {m.providerIdLabel}\n <span className=\"text-red-600 dark:text-red-400\"> *</span>\n </label>\n <input\n className={inputClassName()}\n value={providerId}\n onChange={(e) => setProviderId(e.target.value)}\n placeholder={m.providerIdPlaceholder}\n />\n </div>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.baseUrl}</label>\n <input\n className={inputClassName()}\n value={baseUrl}\n onChange={(e) => setBaseUrl(e.target.value)}\n placeholder=\"https://…\"\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.apiType}</label>\n <select\n className={selectClassName()}\n value={api}\n onChange={(e) => setApi(e.target.value as ApiType)}\n >\n {API_TYPE_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{m.apiKey}</label>\n <input\n className={inputClassName()}\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n placeholder={m.apiKeyPlaceholder}\n />\n </div>\n {error ? (\n <p className=\"flex items-center gap-1 text-xs text-red-600 dark:text-red-400\">\n <AlertCircle className=\"size-3.5 shrink-0\" />\n {error}\n </p>\n ) : null}\n </div>\n\n <div className=\"mt-4 flex justify-end gap-2 border-t border-edge-subtle pt-3 dark:border-edge\">\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"secondary\">\n {m.cancel}\n </Button>\n </Dialog.Close>\n <Button type=\"button\" className=\"bg-accent text-white hover:bg-accent/90\" onClick={handleSubmit}>\n {m.addProviderConfirm}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import {\n Box,\n ChevronDown,\n ChevronRight,\n Cpu,\n Eye,\n EyeOff,\n Pencil,\n Plus,\n Trash2,\n Zap,\n} from 'lucide-react';\nimport type { Dispatch, SetStateAction } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { interaction } from '@/lib/interaction';\nimport { type ModelsSettingsMessages } from '@/i18n/messages';\n\nimport {\n API_TYPE_OPTIONS,\n getApiKeyType,\n maskApiKey,\n type ApiType,\n type CustomModel,\n type ModelsJsonConfig,\n} from '../models-json-api';\n\nimport { inputClassName, selectClassName, updateProvider } from './models-settings-lib';\n\nexport type ModelsTestResult = { type: string; resolved?: string; error?: string };\n\ntype ModelsProvidersListProps = {\n config: ModelsJsonConfig;\n setConfig: Dispatch<SetStateAction<ModelsJsonConfig>>;\n expanded: Set<string>;\n toggleExpand: (id: string) => void;\n showPw: Set<string>;\n toggleShowPw: (id: string) => void;\n testResults: Map<string, ModelsTestResult>;\n runTestKey: (providerId: string, value: string) => void;\n ms: ModelsSettingsMessages;\n removeProv: (providerId: string) => void;\n openModelDialog: (providerId: string, model: CustomModel | null, isNew: boolean) => void;\n setTestResults: Dispatch<SetStateAction<Map<string, ModelsTestResult>>>;\n};\n\nexport function ModelsProvidersList({\n config,\n setConfig,\n expanded,\n toggleExpand,\n showPw,\n toggleShowPw,\n testResults,\n runTestKey,\n ms,\n removeProv,\n openModelDialog,\n setTestResults,\n}: ModelsProvidersListProps) {\n return (\n <div className=\"flex flex-col gap-3\">\n {Object.entries(config.providers)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([id, prov]) => {\n const isEx = expanded.has(id);\n const nModels = prov.models?.length ?? 0;\n const keyType = prov.apiKey ? getApiKeyType(prov.apiKey) : null;\n const testResult = testResults.get(id);\n const pwVisible = showPw.has(id);\n\n return (\n <section\n key={id}\n className=\"overflow-hidden rounded-2xl bg-surface-base\"\n >\n <div className=\"flex items-center justify-between gap-2 border-b border-edge-subtle bg-surface-hover/35 px-3 py-2 dark:border-edge-subtle\">\n <button\n type=\"button\"\n className=\"flex min-w-0 flex-1 items-center gap-2 text-left text-sm font-semibold text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n onClick={() => toggleExpand(id)}\n >\n {isEx ? (\n <ChevronDown className=\"size-4 shrink-0 text-fg-muted\" />\n ) : (\n <ChevronRight className=\"size-4 shrink-0 text-fg-muted\" />\n )}\n <span className=\"truncate\">{id}</span>\n {nModels > 0 ? (\n <span className=\"shrink-0 rounded-full bg-accent px-2 py-0.5 text-[10px] font-medium text-white\">\n {nModels}\n </span>\n ) : null}\n {keyType ? (\n <span\n className={cn(\n 'shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium',\n keyType === 'shell' && 'bg-blue-100 text-blue-800 dark:bg-blue-950 dark:text-blue-200',\n keyType === 'env' && 'bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-200',\n keyType === 'literal' && 'bg-surface-hover text-fg-muted dark:bg-surface-active',\n )}\n >\n {keyType === 'shell' ? ms.badgeShell : keyType === 'env' ? ms.badgeEnv : ms.badgeLiteral}\n </span>\n ) : null}\n </button>\n <button\n type=\"button\"\n className=\"rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-red-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 dark:hover:text-red-400\"\n onClick={() => removeProv(id)}\n aria-label={ms.removeProvider}\n >\n <Trash2 className=\"size-4\" />\n </button>\n </div>\n\n {isEx ? (\n <div className=\"space-y-4 p-3\">\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{ms.baseUrl}</label>\n <input\n className={inputClassName()}\n value={prov.baseUrl || ''}\n onChange={(e) =>\n setConfig((c) => updateProvider(c, id, { baseUrl: e.target.value }))\n }\n />\n </div>\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{ms.apiType}</label>\n <select\n className={selectClassName()}\n value={prov.api || 'openai-completions'}\n onChange={(e) =>\n setConfig((c) =>\n updateProvider(c, id, { api: e.target.value as ApiType }),\n )\n }\n >\n {API_TYPE_OPTIONS.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n </div>\n </div>\n\n <div>\n <label className=\"mb-1 block text-xs font-medium text-fg-muted\">{ms.apiKey}</label>\n <div className=\"flex flex-wrap gap-2\">\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1')}\n type={pwVisible ? 'text' : 'password'}\n autoComplete=\"off\"\n value={prov.apiKey || ''}\n onChange={(e) => {\n const v = e.target.value;\n setConfig((c) => updateProvider(c, id, { apiKey: v }));\n setTestResults((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }}\n placeholder={ms.apiKeyPlaceholder}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => toggleShowPw(id)}\n >\n {pwVisible ? (\n <>\n <EyeOff className=\"mr-1 size-3.5\" />\n {ms.hide}\n </>\n ) : (\n <>\n <Eye className=\"mr-1 size-3.5\" />\n {ms.show}\n </>\n )}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => runTestKey(id, prov.apiKey || '')}\n >\n {ms.testKey}\n </Button>\n </div>\n {testResult ? (\n <p\n className={cn(\n 'mt-1 text-xs',\n testResult.error ? 'text-red-600 dark:text-red-400' : 'text-emerald-700 dark:text-emerald-400',\n )}\n >\n {testResult.error\n ? `${ms.testError}: ${testResult.error}`\n : `${ms.testOk} (${testResult.type}): ${maskApiKey(testResult.resolved || '')}`}\n </p>\n ) : null}\n <p className=\"mt-1 text-xs text-fg-subtle\">{ms.apiKeyHint}</p>\n </div>\n\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={prov.authHeader || false}\n onChange={(e) =>\n setConfig((c) => updateProvider(c, id, { authHeader: e.target.checked }))\n }\n />\n {ms.authHeader}\n </label>\n\n <div className=\"border-t border-edge-subtle pt-3 dark:border-edge\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <span className=\"text-sm font-semibold text-fg\">{ms.modelsSection}</span>\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"px-2 py-1 text-xs\"\n onClick={() => openModelDialog(id, null, true)}\n >\n <Plus className=\"mr-1 size-3.5\" />\n {ms.addModel}\n </Button>\n </div>\n {(prov.models || []).length === 0 ? (\n <p className=\"text-xs text-fg-muted\">{ms.modelsEmpty}</p>\n ) : (\n <ul className=\"space-y-2\">\n {(prov.models || []).map((mod) => (\n <li\n key={mod.id}\n className=\"flex items-center justify-between gap-2 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge\"\n >\n <div className=\"min-w-0\">\n <div className=\"truncate text-sm font-medium text-fg\">{mod.id}</div>\n {mod.name && mod.name !== mod.id ? (\n <div className=\"truncate text-xs text-fg-muted\">{mod.name}</div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 gap-1\">\n <button\n type=\"button\"\n className=\"rounded-lg p-1.5 text-fg-muted hover:bg-surface-panel hover:text-fg\"\n onClick={() => openModelDialog(id, mod, false)}\n aria-label={ms.editModel}\n >\n <Pencil className=\"size-4\" />\n </button>\n <button\n type=\"button\"\n className=\"rounded-lg p-1.5 text-fg-muted hover:bg-surface-panel hover:text-red-600 dark:hover:text-red-400\"\n onClick={() => {\n if (!window.confirm(ms.removeModelConfirm.replace('{{id}}', mod.id))) return;\n setConfig((c) => {\n const p = c.providers[id];\n if (!p) return c;\n return updateProvider(c, id, {\n models: (p.models || []).filter((mm) => mm.id !== mod.id),\n });\n });\n }}\n aria-label={ms.removeModel}\n >\n <Trash2 className=\"size-4\" />\n </button>\n </div>\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n ) : null}\n </section>\n );\n })}\n </div>\n );\n}\n\ntype ModelsSettingsEmptyStateProps = {\n ms: ModelsSettingsMessages;\n openAddProvider: (preset: string | null) => void;\n};\n\nexport function ModelsSettingsEmptyState({ ms, openAddProvider }: ModelsSettingsEmptyStateProps) {\n return (\n <div className=\"flex flex-col items-center rounded-xl border-2 border-dashed border-edge-subtle bg-surface-panel px-6 py-12 text-center dark:border-edge\">\n <div className=\"mb-4 flex size-14 items-center justify-center rounded-full border border-edge bg-surface-base dark:border-edge\">\n <Cpu className=\"size-7 text-accent\" strokeWidth={1.5} />\n </div>\n <h2 className=\"mb-1 text-base font-semibold text-fg\">{ms.emptyTitle}</h2>\n <p className=\"mb-6 max-w-md text-sm text-fg-muted\">{ms.emptyDesc}</p>\n <Button\n type=\"button\"\n className=\"mb-6 bg-accent text-white hover:bg-accent/90\"\n onClick={() => openAddProvider(null)}\n >\n <Plus className=\"mr-1 size-4\" />\n {ms.emptyCta}\n </Button>\n <div className=\"flex flex-wrap justify-center gap-2\">\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge',\n interaction.transition,\n interaction.focusRingBase,\n )}\n onClick={() => openAddProvider('ollama')}\n >\n <Zap className=\"size-3.5\" aria-hidden />\n {ms.presetOllama}\n </button>\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge',\n interaction.transition,\n interaction.focusRingBase,\n )}\n onClick={() => openAddProvider('openrouter')}\n >\n <Box className=\"size-3.5\" aria-hidden />\n {ms.presetOpenRouter}\n </button>\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge',\n interaction.transition,\n interaction.focusRingBase,\n )}\n onClick={() => openAddProvider('lmstudio')}\n >\n <Cpu className=\"size-3.5\" aria-hidden />\n {ms.presetLmStudio}\n </button>\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge',\n interaction.transition,\n interaction.focusRingBase,\n )}\n onClick={() => openAddProvider('zhipuCn')}\n >\n <Zap className=\"size-3.5\" aria-hidden />\n {ms.presetZhipuCn}\n </button>\n <button\n type=\"button\"\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge',\n interaction.transition,\n interaction.focusRingBase,\n )}\n onClick={() => openAddProvider('zaiGeneral')}\n >\n <Box className=\"size-3.5\" aria-hidden />\n {ms.presetZaiGeneral}\n </button>\n </div>\n </div>\n );\n}\n","import {\n AlertCircle,\n ExternalLink,\n Loader2,\n Plus,\n RefreshCw,\n} from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport { messages } from '@/i18n/messages';\nimport { docsGuidePageUrl } from '@/navigation';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nimport {\n fetchModelsJson,\n normalizeModelsJsonConfig,\n reloadModelsJson,\n saveModelsJson,\n testApiKey,\n validateModelsJson,\n type CustomModel,\n type ModelsJsonConfig,\n type ProviderConfig,\n type ValidationResult,\n} from '../models-json-api';\nimport { AgentDefaultsChatModelFallbacksSection } from '../agents/agent-defaults-panels/chat-model-fallbacks-section';\nimport { useAgentDefaultsForm } from '../agents/use-agent-defaults-form';\n\nimport { ModelEditDialogContent } from './models-model-edit-dialog';\nimport { ProviderAddDialog } from './models-provider-add-dialog';\nimport {\n ModelsProvidersList,\n ModelsSettingsEmptyState,\n type ModelsTestResult,\n} from './models-providers-list';\nimport { addProviderEntry, inputClassName, removeProvider, updateProvider } from './models-settings-lib';\n\nexport function ModelsSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const ms = m.modelsSettings;\n const agentVm = useAgentDefaultsForm(m.agentSettings);\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [config, setConfig] = useState<ModelsJsonConfig>({ providers: {} });\n const [baseline, setBaseline] = useState<ModelsJsonConfig>({ providers: {} });\n const [path, setPath] = useState('');\n const [loadMetaError, setLoadMetaError] = useState<string | undefined>();\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState(false);\n const [validating, setValidating] = useState(false);\n const [reloading, setReloading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n const [validation, setValidation] = useState<ValidationResult | null>(null);\n const [expanded, setExpanded] = useState<Set<string>>(() => new Set());\n const [showRawJson, setShowRawJson] = useState(false);\n const [rawText, setRawText] = useState('');\n const [rawError, setRawError] = useState<string | null>(null);\n const [showPw, setShowPw] = useState<Set<string>>(() => new Set());\n const [testResults, setTestResults] = useState<Map<string, ModelsTestResult>>(() => new Map());\n\n const [providerDialogOpen, setProviderDialogOpen] = useState(false);\n const [providerPreset, setProviderPreset] = useState<string | null>(null);\n\n const [modelDialogOpen, setModelDialogOpen] = useState(false);\n const [modelDialogCtx, setModelDialogCtx] = useState<{\n providerId: string;\n model: CustomModel | null;\n isNew: boolean;\n } | null>(null);\n\n const load = useCallback(async (opts?: { skipFullPageLoading?: boolean }) => {\n const showFullPageLoading = !opts?.skipFullPageLoading;\n if (showFullPageLoading) {\n setLoading(true);\n }\n setError(null);\n try {\n const st = await fetchModelsJson();\n const norm = normalizeModelsJsonConfig(st.config);\n setConfig(norm);\n setBaseline(structuredClone(norm));\n setPath(st.path);\n setLoadMetaError(st.loadError);\n setValidation(null);\n setSaveOk(false);\n } catch (e) {\n setError(e instanceof Error ? e.message : ms.loadError);\n setConfig({ providers: {} });\n setBaseline({ providers: {} });\n } finally {\n if (showFullPageLoading) {\n setLoading(false);\n }\n }\n }, [ms.loadError]);\n\n useEffect(() => {\n if (!hasToken) {\n setLoading(false);\n return;\n }\n void load();\n }, [hasToken, load]);\n\n const dirty = useMemo(\n () => JSON.stringify(config) !== JSON.stringify(baseline),\n [config, baseline],\n );\n\n const agentPanelProps = useMemo(() => {\n if (!agentVm.form) return null;\n return {\n form: agentVm.form,\n update: agentVm.update,\n a: m.agentSettings,\n chat: m.chat,\n };\n }, [agentVm.form, agentVm.update, m.agentSettings, m.chat]);\n\n const combinedDirty = dirty || agentVm.dirty;\n\n const stats = useMemo(() => {\n const ids = Object.keys(config.providers);\n let models = 0;\n for (const p of Object.values(config.providers)) {\n models += p.models?.length ?? 0;\n }\n return { providers: ids.length, models };\n }, [config.providers]);\n\n const toggleExpand = (id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const toggleShowPw = (id: string) => {\n setShowPw((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n const syncRawFromConfig = useCallback(() => {\n setRawText(JSON.stringify(config, null, 2));\n setRawError(null);\n }, [config]);\n\n useEffect(() => {\n if (showRawJson) syncRawFromConfig();\n }, [showRawJson, syncRawFromConfig]);\n\n const applyRawJson = () => {\n try {\n const parsed = JSON.parse(rawText) as unknown;\n const norm = normalizeModelsJsonConfig(parsed);\n setConfig(norm);\n setRawError(null);\n } catch {\n setRawError(ms.jsonParseError);\n }\n };\n\n const runValidate = async () => {\n setValidating(true);\n setError(null);\n try {\n const r = await validateModelsJson(config);\n setValidation(r);\n } catch (e) {\n setError(e instanceof Error ? e.message : ms.validateError);\n } finally {\n setValidating(false);\n }\n };\n\n const runSave = async () => {\n if (saving || agentVm.saving) return;\n const hadJsonDirty = dirty;\n const hadAgentDirty = agentVm.dirty;\n if (!hadJsonDirty && !hadAgentDirty) return;\n\n setError(null);\n setSaveOk(false);\n try {\n if (hadJsonDirty) {\n setSaving(true);\n try {\n await saveModelsJson(config);\n setBaseline(structuredClone(config));\n setValidation(null);\n } finally {\n setSaving(false);\n }\n }\n if (hadAgentDirty && agentVm.form) {\n const agentOk = await agentVm.save();\n if (!agentOk) {\n throw new Error(m.agentSettings.saveError);\n }\n }\n setSaveOk(true);\n } catch (e) {\n setError(e instanceof Error ? e.message : ms.saveError);\n }\n };\n\n const runDiscard = useCallback(() => {\n setConfig(structuredClone(baseline));\n setValidation(null);\n setSaveOk(false);\n setError(null);\n if (showRawJson) {\n setRawText(JSON.stringify(baseline, null, 2));\n setRawError(null);\n }\n agentVm.discard();\n }, [baseline, showRawJson, agentVm.discard]);\n\n const runReload = async () => {\n setReloading(true);\n setError(null);\n try {\n await reloadModelsJson();\n await load({ skipFullPageLoading: true });\n } catch (e) {\n setError(e instanceof Error ? e.message : ms.reloadError);\n } finally {\n setReloading(false);\n }\n };\n\n const runTestKey = async (providerId: string, value: string) => {\n try {\n const r = await testApiKey(value);\n setTestResults((prev) => {\n const next = new Map(prev);\n next.set(providerId, r);\n return next;\n });\n } catch (e) {\n setTestResults((prev) => {\n const next = new Map(prev);\n next.set(providerId, {\n type: 'error',\n error: e instanceof Error ? e.message : 'Error',\n });\n return next;\n });\n }\n };\n\n const openAddProvider = (preset: string | null = null) => {\n setProviderPreset(preset);\n setProviderDialogOpen(true);\n };\n\n const onProviderAdded = (providerId: string, prov: ProviderConfig) => {\n setConfig((c) => addProviderEntry(c, providerId, prov));\n setExpanded((prev) => new Set(prev).add(providerId));\n };\n\n const removeProv = (providerId: string) => {\n if (!window.confirm(ms.removeProviderConfirm.replace('{{id}}', providerId))) return;\n setConfig((c) => removeProvider(c, providerId));\n setTestResults((prev) => {\n const next = new Map(prev);\n next.delete(providerId);\n return next;\n });\n };\n\n const openModelDialog = (providerId: string, model: CustomModel | null, isNew: boolean) => {\n setModelDialogCtx({ providerId, model, isNew });\n setModelDialogOpen(true);\n };\n\n const onModelSaved = (updated: CustomModel) => {\n if (!modelDialogCtx) return;\n const { providerId, isNew } = modelDialogCtx;\n setConfig((c) => {\n const p = c.providers[providerId];\n if (!p) return c;\n const models = p.models || [];\n if (isNew) {\n return updateProvider(c, providerId, { models: [...models, updated] });\n }\n return updateProvider(c, providerId, {\n models: models.map((mm) => (mm.id === updated.id ? updated : mm)),\n });\n });\n };\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.models}</h1>\n <p className=\"text-sm text-fg-muted\">{ms.needToken}</p>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-8\">\n <div className=\"flex flex-col gap-1\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.models}</h1>\n <p className=\"text-sm text-fg-muted\">{ms.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'models')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {ms.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </div>\n\n {loadMetaError ? (\n <div\n className=\"flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100\"\n role=\"status\"\n >\n <AlertCircle className=\"mt-0.5 size-4 shrink-0\" />\n <span>{ms.loadFileWarning}: {loadMetaError}</span>\n </div>\n ) : null}\n\n {path ? (\n <p className=\"text-xs text-fg-subtle\">\n {ms.filePath}: <code className=\"rounded bg-surface-base px-1 py-0.5 font-mono text-fg-muted\">{path}</code>\n </p>\n ) : null}\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n type=\"button\"\n className=\"bg-accent text-white hover:bg-accent/90\"\n onClick={() => openAddProvider(null)}\n disabled={loading}\n >\n <Plus className=\"mr-1 size-4\" />\n {ms.addProvider}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"inline-flex min-h-9 min-w-[7.5rem] justify-center\"\n onClick={runValidate}\n disabled={loading || validating}\n >\n {validating ? (\n <>\n <Loader2 className=\"mr-1 size-4 animate-spin\" />\n {ms.validating}\n </>\n ) : (\n ms.validate\n )}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"inline-flex min-h-9 min-w-[7.5rem] justify-center\"\n onClick={runDiscard}\n disabled={loading || saving || agentVm.saving || !combinedDirty}\n >\n {ms.discard}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"inline-flex min-h-9 min-w-[7.5rem] justify-center\"\n onClick={() => void runSave()}\n disabled={loading || saving || agentVm.saving || !combinedDirty}\n >\n {saving || agentVm.saving ? (\n <>\n <Loader2 className=\"mr-1 size-4 animate-spin\" />\n {ms.saving}\n </>\n ) : (\n ms.save\n )}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"inline-flex min-h-9 min-w-[8.5rem] justify-center\"\n onClick={runReload}\n disabled={loading || reloading}\n >\n {reloading ? (\n <>\n <Loader2 className=\"mr-1 size-4 animate-spin\" />\n {ms.reloading}\n </>\n ) : (\n <>\n <RefreshCw className=\"mr-1 size-4\" />\n {ms.reload}\n </>\n )}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"text-fg-muted\"\n onClick={() => {\n setShowRawJson((v) => !v);\n setRawError(null);\n }}\n >\n {showRawJson ? ms.hideJson : ms.showJson}\n </Button>\n <div className=\"ml-auto flex items-center gap-2 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-1.5 text-sm dark:border-edge\">\n <span className=\"text-fg-muted\">\n {ms.statsProviders.replace('{{count}}', String(stats.providers))}\n </span>\n <span className=\"text-fg-subtle\">|</span>\n <span className=\"text-fg-muted\">\n {ms.statsModels.replace('{{count}}', String(stats.models))}\n </span>\n </div>\n </div>\n\n {combinedDirty ? <p className=\"text-xs text-amber-800 dark:text-amber-200\">{ms.unsavedHint}</p> : null}\n {saveOk || agentVm.saveOk ? (\n <p className=\"text-xs text-emerald-700 dark:text-emerald-400\" role=\"status\">\n {ms.saved}\n </p>\n ) : null}\n {error ? (\n <p className=\"flex items-center gap-1 text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n <AlertCircle className=\"size-4 shrink-0\" />\n {error}\n </p>\n ) : null}\n {agentVm.error ? (\n <p className=\"flex items-center gap-1 text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n <AlertCircle className=\"size-4 shrink-0\" />\n {agentVm.error}\n </p>\n ) : null}\n\n {validation && validation.errors.length > 0 ? (\n <div\n className=\"rounded-lg border border-amber-200 bg-amber-50/80 px-3 py-2 dark:border-amber-800 dark:bg-amber-950/30\"\n role=\"status\"\n >\n <p className=\"mb-1 text-sm font-medium text-amber-950 dark:text-amber-100\">\n {validation.valid ? ms.validationWarnings : ms.validationErrors}\n </p>\n <ul className=\"list-inside list-disc space-y-0.5 text-xs text-amber-900 dark:text-amber-200\">\n {validation.errors.map((err) => (\n <li key={`${err.path}-${err.severity}-${err.message}`}>\n {err.path}: {err.message} ({err.severity})\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n\n {loading ? (\n <div className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" />\n {ms.loading}\n </div>\n ) : showRawJson ? (\n <div className=\"flex flex-col gap-2\">\n <textarea\n className={cn(\n inputClassName(),\n 'min-h-[320px] resize-y font-mono text-xs leading-relaxed',\n )}\n value={rawText}\n onChange={(e) => setRawText(e.target.value)}\n spellCheck={false}\n />\n {rawError ? <p className=\"text-xs text-red-600 dark:text-red-400\">{rawError}</p> : null}\n <div className=\"flex gap-2\">\n <Button type=\"button\" variant=\"secondary\" onClick={syncRawFromConfig}>\n {ms.jsonReset}\n </Button>\n <Button type=\"button\" className=\"bg-accent text-white hover:bg-accent/90\" onClick={applyRawJson}>\n {ms.jsonApply}\n </Button>\n </div>\n </div>\n ) : Object.keys(config.providers).length === 0 ? (\n <ModelsSettingsEmptyState ms={ms} openAddProvider={openAddProvider} />\n ) : (\n <ModelsProvidersList\n config={config}\n setConfig={setConfig}\n expanded={expanded}\n toggleExpand={toggleExpand}\n showPw={showPw}\n toggleShowPw={toggleShowPw}\n testResults={testResults}\n runTestKey={runTestKey}\n ms={ms}\n removeProv={removeProv}\n openModelDialog={openModelDialog}\n setTestResults={setTestResults}\n />\n )}\n\n {agentPanelProps ? (\n <div className=\"mt-10 border-t border-edge-subtle pt-8 dark:border-edge\">\n <AgentDefaultsChatModelFallbacksSection {...agentPanelProps} />\n </div>\n ) : null}\n\n <ProviderAddDialog\n open={providerDialogOpen}\n onOpenChange={setProviderDialogOpen}\n presetKey={providerPreset}\n onConfirm={onProviderAdded}\n m={ms}\n />\n\n <ModelEditDialogContent\n open={modelDialogOpen}\n onOpenChange={(o) => {\n setModelDialogOpen(o);\n if (!o) setModelDialogCtx(null);\n }}\n providerId={modelDialogCtx?.providerId ?? null}\n model={modelDialogCtx?.model ?? null}\n isNew={modelDialogCtx?.isNew ?? false}\n onSave={onModelSaved}\n m={ms}\n />\n </div>\n );\n}\n","import { apiFetch } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport interface OAuthStartResult {\n sessionId: string;\n provider: string;\n status: string;\n}\n\nexport interface OAuthSessionStatus {\n sessionId: string;\n provider: string;\n status: 'pending' | 'waiting_auth' | 'waiting_code' | 'completed' | 'failed' | 'cancelled';\n authUrl?: string;\n instructions?: string;\n message?: string;\n error?: string;\n expiresAt: number;\n}\n\nexport async function startAsyncOAuthLogin(provider: string): Promise<OAuthStartResult> {\n const res = await apiFetch(apiUrl('/api/auth/oauth-async/start'), {\n method: 'POST',\n body: JSON.stringify({ provider }),\n });\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { error?: string };\n throw new Error(err.error || `OAuth start failed: ${res.status}`);\n }\n const data = (await res.json()) as { payload: OAuthStartResult };\n return data.payload;\n}\n\nexport async function fetchOAuthSessionStatus(sessionId: string): Promise<OAuthSessionStatus> {\n const res = await apiFetch(apiUrl(`/api/auth/oauth-async/${encodeURIComponent(sessionId)}/status`));\n if (!res.ok) {\n throw new Error(`OAuth status: ${res.status}`);\n }\n const data = (await res.json()) as { payload: OAuthSessionStatus };\n return data.payload;\n}\n\nexport async function submitOAuthCode(sessionId: string, code: string): Promise<void> {\n const res = await apiFetch(apiUrl(`/api/auth/oauth-async/${encodeURIComponent(sessionId)}/code`), {\n method: 'POST',\n body: JSON.stringify({ code }),\n });\n if (!res.ok) {\n const err = (await res.json().catch(() => ({}))) as { error?: string };\n throw new Error(err.error || `Submit code failed: ${res.status}`);\n }\n}\n\nexport async function cancelOAuth(sessionId: string): Promise<void> {\n const res = await apiFetch(apiUrl(`/api/auth/oauth-async/${encodeURIComponent(sessionId)}/cancel`), {\n method: 'POST',\n });\n if (!res.ok) {\n throw new Error(`Cancel OAuth failed: ${res.status}`);\n }\n}\n\nexport async function cleanupOAuthSession(sessionId: string): Promise<void> {\n const res = await apiFetch(apiUrl(`/api/auth/oauth-async/${encodeURIComponent(sessionId)}`), {\n method: 'DELETE',\n });\n if (!res.ok) {\n throw new Error(`Cleanup session failed: ${res.status}`);\n }\n}\n\nexport async function revokeOAuth(provider: string): Promise<void> {\n const res = await apiFetch(apiUrl(`/api/auth/oauth/${encodeURIComponent(provider)}`), {\n method: 'DELETE',\n });\n if (!res.ok) {\n throw new Error(`Revoke OAuth failed: ${res.status}`);\n }\n}\n","import * as Popover from '@radix-ui/react-popover';\nimport { ExternalLink, Info, X } from 'lucide-react';\n\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_POPOVER_Z } from '@/lib/settings-shell-dialog-layer';\nimport type { StoredLanguage } from '@/lib/storage';\n\nimport { PROVIDER_ENRICHMENT } from './provider-enrichment';\n\ninterface ProviderInfoPopoverProps {\n providerId: string;\n language: StoredLanguage;\n}\n\nexport function ProviderInfoPopover({ providerId, language }: ProviderInfoPopoverProps) {\n const enrichment = PROVIDER_ENRICHMENT[providerId];\n if (!enrichment) return null;\n\n const isZh = language === 'zh';\n const description = isZh && enrichment.descriptionZh ? enrichment.descriptionZh : enrichment.description;\n if (!description) return null;\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n aria-label={isZh ? `${providerId} 详情` : `${providerId} info`}\n >\n <Info className=\"size-3.5\" aria-hidden />\n </button>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n side=\"right\"\n align=\"start\"\n sideOffset={6}\n className={cn(\n 'w-64 rounded-xl border border-edge bg-surface-panel p-3 shadow-md',\n SETTINGS_SHELL_POPOVER_Z,\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',\n )}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <p className=\"text-xs font-semibold text-fg\">{providerId}</p>\n <Popover.Close asChild>\n <button\n type=\"button\"\n className=\"shrink-0 rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg\"\n aria-label={isZh ? '关闭' : 'Close'}\n >\n <X className=\"size-3.5\" aria-hidden />\n </button>\n </Popover.Close>\n </div>\n\n <p className=\"mt-1.5 text-xs leading-relaxed text-fg-muted\">{description}</p>\n\n {enrichment.bestFor && enrichment.bestFor.length > 0 ? (\n <div className=\"mt-2\">\n <p className=\"text-[10px] font-medium uppercase tracking-wide text-fg-subtle\">\n {isZh ? '适合场景' : 'Best for'}\n </p>\n <div className=\"mt-1 flex flex-wrap gap-1\">\n {enrichment.bestFor.map((tag) => (\n <span\n key={tag}\n className=\"rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium text-fg-muted\"\n >\n {tag}\n </span>\n ))}\n </div>\n </div>\n ) : null}\n\n {enrichment.freeTier !== undefined ? (\n <div className=\"mt-2\">\n <p className=\"text-[10px] font-medium uppercase tracking-wide text-fg-subtle\">\n {isZh ? '免费额度' : 'Free tier'}\n </p>\n <p className=\"mt-0.5 text-xs text-fg-muted\">\n {enrichment.freeTier\n ? enrichment.freeTierNote ?? (isZh ? '有免费额度' : 'Available')\n : isZh\n ? '无免费额度(按量付费)'\n : 'None (pay-as-you-go)'}\n </p>\n </div>\n ) : null}\n\n {enrichment.pricingUrl || enrichment.docsUrl ? (\n <div className=\"mt-2.5 flex gap-3\">\n {enrichment.pricingUrl ? (\n <a\n href={enrichment.pricingUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-0.5 text-xs text-accent-fg hover:underline\"\n >\n {isZh ? '定价' : 'Pricing'}\n <ExternalLink className=\"size-3\" aria-hidden />\n </a>\n ) : null}\n {enrichment.docsUrl ? (\n <a\n href={enrichment.docsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-0.5 text-xs text-accent-fg hover:underline\"\n >\n {isZh ? '文档' : 'Docs'}\n <ExternalLink className=\"size-3\" aria-hidden />\n </a>\n ) : null}\n </div>\n ) : null}\n\n <Popover.Arrow className=\"fill-edge\" />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import type { ProviderActiveKeySource, ProviderCategory, ProviderRowModel } from '@/features/settings/providers-api';\nimport type { ProvidersSettingsMessages } from '@/i18n/messages';\n\nexport const CATEGORY_ORDER: ProviderCategory[] = [\n 'common',\n 'specialty',\n 'enterprise',\n 'oauth',\n 'extension',\n];\n\nexport function groupByCategory(rows: ProviderRowModel[]): Map<ProviderCategory, ProviderRowModel[]> {\n const map = new Map<ProviderCategory, ProviderRowModel[]>();\n for (const c of CATEGORY_ORDER) map.set(c, []);\n for (const r of rows) {\n const cat = r.category || 'specialty';\n const list = map.get(cat) ?? [];\n list.push(r);\n map.set(cat, list);\n }\n return map;\n}\n\nexport function interpolate(template: string, params: Record<string, string>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nexport function activeSourceLabel(\n labels: ProvidersSettingsMessages,\n src: ProviderActiveKeySource | undefined,\n): string {\n switch (src) {\n case 'agent':\n return labels.sourceAgent;\n case 'gateway':\n return labels.sourceGateway;\n case 'oauth':\n return labels.sourceOauth;\n case 'env':\n return labels.sourceEnv;\n case 'models_json':\n return labels.sourceModelsJson;\n case 'extension':\n return labels.sourceExtension;\n default:\n return labels.sourceNone;\n }\n}\n","import {\n AlertCircle,\n CheckCircle2,\n ChevronDown,\n Copy,\n ExternalLink,\n Eye,\n EyeOff,\n Info,\n KeyRound,\n Loader2,\n LogIn,\n LogOut,\n Trash2,\n X,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { ConfirmDialog } from '@/components/ui/confirm-dialog';\nimport type { ConfiguredModel } from '@/features/chat/registry-api';\nimport {\n cancelOAuth,\n cleanupOAuthSession,\n fetchOAuthSessionStatus,\n revokeOAuth,\n startAsyncOAuthLogin,\n submitOAuthCode,\n} from '@/features/settings/oauth-api';\nimport {\n deleteProviderApiKey,\n isMaskedKey,\n testProviderKeyResolution,\n type ProviderRowModel,\n} from '@/features/settings/providers-api';\nimport {\n getOrderedApiKeyLinks,\n PROVIDER_ENRICHMENT,\n providerApiKeyLinkLabel,\n} from '@/features/settings/provider-enrichment';\nimport { ProviderInfoPopover } from '@/features/settings/provider-info-popover';\nimport { activeSourceLabel, interpolate } from './providers-settings-lib';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { interaction } from '@/lib/interaction';\nimport type { StoredLanguage } from '@/lib/storage';\nimport type { ProvidersSettingsMessages } from '@/i18n/messages';\n\nfunction EnvVarCopyRow({\n envVar,\n labels,\n}: {\n envVar: string;\n labels: ProvidersSettingsMessages;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(envVar);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n /* ignore clipboard errors */\n }\n };\n\n return (\n <div className=\"flex items-center gap-2\">\n <code className=\"rounded bg-surface-hover px-1.5 py-0.5 font-mono text-[11px] text-fg-muted\">{envVar}</code>\n <button\n type=\"button\"\n onClick={() => void handleCopy()}\n className=\"rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg\"\n title={copied ? labels.copied : labels.copy}\n aria-label={copied ? labels.copied : labels.copy}\n >\n {copied ? (\n <CheckCircle2 className=\"size-3.5 text-emerald-600 dark:text-emerald-400\" aria-hidden />\n ) : (\n <Copy className=\"size-3.5\" aria-hidden />\n )}\n </button>\n </div>\n );\n}\n\nexport function ProviderCredentialRow({\n row,\n value,\n rowDirty,\n labels,\n language,\n onChange,\n onReload,\n justSaved,\n availableModels,\n}: {\n row: ProviderRowModel;\n value: string;\n rowDirty: boolean;\n labels: ProvidersSettingsMessages;\n language: StoredLanguage;\n onChange: (id: string, v: string) => void;\n onReload: () => void;\n justSaved: boolean;\n availableModels: ConfiguredModel[];\n}) {\n const [expanded, setExpanded] = useState(false);\n const [showKey, setShowKey] = useState(false);\n const [copied, setCopied] = useState(false);\n const [revokeError, setRevokeError] = useState<string | null>(null);\n const [removeLoading, setRemoveLoading] = useState(false);\n const [removeMessage, setRemoveMessage] = useState<string | null>(null);\n const [removeConfirmOpen, setRemoveConfirmOpen] = useState(false);\n const masked = isMaskedKey(value);\n const inputValue = masked && !showKey ? '' : value;\n const isOAuthConfigured = row.configured && !masked && Boolean(value);\n\n const [oauthLoading, setOauthLoading] = useState(false);\n const [sessionId, setSessionId] = useState<string | undefined>();\n const [oauthStatus, setOauthStatus] = useState<\n 'idle' | 'waiting' | 'waiting_code' | 'success' | 'error' | undefined\n >();\n const [oauthMessage, setOauthMessage] = useState<string | undefined>();\n const [authUrl, setAuthUrl] = useState<string | undefined>();\n const [instructions, setInstructions] = useState<string | undefined>();\n const [codeInput, setCodeInput] = useState('');\n\n const [testLoading, setTestLoading] = useState(false);\n const [testMessage, setTestMessage] = useState<string | null>(null);\n const [testOk, setTestOk] = useState<boolean | null>(null);\n\n const activeSrc = row.activeKeySource ?? 'none';\n\n const apiKeyLinks = useMemo(() => getOrderedApiKeyLinks(row.id, language), [row.id, language]);\n\n useEffect(() => {\n return () => {\n if (sessionId) {\n void cleanupOAuthSession(sessionId).catch(() => {});\n }\n };\n }, [sessionId]);\n\n useEffect(() => {\n if (!sessionId || !oauthLoading) return;\n const id = window.setInterval(() => {\n void (async () => {\n try {\n const st = await fetchOAuthSessionStatus(sessionId);\n setOauthMessage(st.message);\n setAuthUrl(st.authUrl);\n setInstructions(st.instructions);\n if (st.status === 'waiting_auth' || st.status === 'waiting_code') {\n setOauthStatus(st.status === 'waiting_code' ? 'waiting_code' : 'waiting');\n } else if (st.status === 'completed') {\n window.clearInterval(id);\n setOauthLoading(false);\n setOauthStatus('success');\n setOauthMessage(st.message);\n window.setTimeout(() => onReload(), 800);\n } else if (st.status === 'failed' || st.status === 'cancelled') {\n window.clearInterval(id);\n setOauthLoading(false);\n setOauthStatus('error');\n setOauthMessage(st.error || st.message || 'OAuth failed');\n }\n } catch {\n /* ignore poll errors */\n }\n })();\n }, 1000);\n return () => window.clearInterval(id);\n }, [sessionId, oauthLoading, onReload]);\n\n const startOAuth = async () => {\n setOauthLoading(true);\n setOauthStatus('waiting');\n setOauthMessage(labels.oauthStarting);\n setSessionId(undefined);\n setAuthUrl(undefined);\n setInstructions(undefined);\n try {\n const res = await startAsyncOAuthLogin(row.id);\n setSessionId(res.sessionId);\n } catch (e) {\n setOauthStatus('error');\n setOauthMessage(e instanceof Error ? e.message : 'OAuth failed');\n setOauthLoading(false);\n }\n };\n\n const cancelFlow = async () => {\n if (!sessionId) return;\n try {\n await cancelOAuth(sessionId);\n } catch {\n /* ignore */\n }\n setSessionId(undefined);\n setOauthLoading(false);\n setOauthStatus('idle');\n setOauthMessage(undefined);\n };\n\n const submitCode = async () => {\n if (!sessionId || !codeInput.trim()) return;\n try {\n await submitOAuthCode(sessionId, codeInput.trim());\n setCodeInput('');\n setOauthMessage(labels.oauthProcessingCode);\n } catch (e) {\n setOauthStatus('error');\n setOauthMessage(e instanceof Error ? e.message : 'Failed');\n }\n };\n\n const doRevoke = () => {\n if (!window.confirm(interpolate(labels.revokeConfirm, { name: row.name }))) return;\n setRevokeError(null);\n void revokeOAuth(row.id)\n .then(() => onReload())\n .catch((e) => setRevokeError(e instanceof Error ? e.message : labels.revokeFailed));\n };\n\n const doRemoveKey = async () => {\n setRemoveConfirmOpen(false);\n setRemoveLoading(true);\n setRemoveMessage(null);\n try {\n await deleteProviderApiKey(row.id);\n setRemoveMessage(labels.removeKeySuccess);\n onChange(row.id, '');\n window.setTimeout(() => onReload(), 600);\n } catch (error) {\n setRemoveMessage(error instanceof Error ? error.message : labels.removeKeyFailed);\n } finally {\n setRemoveLoading(false);\n }\n };\n\n const canRemoveKey =\n row.configured && masked && activeSrc !== 'env' && activeSrc !== 'extension' && activeSrc !== 'models_json';\n\n const copyKey = async () => {\n if (!value || masked) return;\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n /* ignore */\n }\n };\n\n const runTest = async () => {\n const v = value.trim();\n if (!v || isMaskedKey(v)) return;\n setTestLoading(true);\n setTestMessage(null);\n setTestOk(null);\n try {\n const res = await testProviderKeyResolution(v);\n if (res.error) {\n setTestOk(false);\n setTestMessage(`${labels.testFailed} ${res.error}`);\n return;\n }\n setTestOk(true);\n if (res.type === 'env') setTestMessage(labels.testOkEnv);\n else if (res.type === 'command') setTestMessage(labels.testOkCommand);\n else setTestMessage(labels.testOkLiteral);\n } catch (e) {\n setTestOk(false);\n setTestMessage(e instanceof Error ? e.message : labels.testFailed);\n } finally {\n setTestLoading(false);\n }\n };\n\n const secondaryLine = rowDirty\n ? labels.metaWillSave\n : row.configured\n ? masked\n ? `${labels.metaMasked} · ${labels.runtimeLabelPrefix} ${activeSourceLabel(labels, activeSrc)}`\n : `${labels.runtimeLabelPrefix} ${activeSourceLabel(labels, activeSrc)}`\n : labels.metaNotConfigured;\n\n const detailsId = `provider-details-${row.id}`;\n\n return (\n <div className=\"bg-surface-panel\">\n <div className=\"flex items-center gap-3 p-3 sm:px-4\">\n <div\n className=\"flex size-8 shrink-0 items-center justify-center rounded-md bg-surface-hover/80 dark:bg-surface-hover/50\"\n aria-hidden\n >\n {row.configured ? (\n <CheckCircle2 className=\"size-4 text-emerald-600 dark:text-emerald-400\" />\n ) : (\n <KeyRound className=\"size-4 text-fg-subtle\" strokeWidth={1.75} />\n )}\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-sm font-semibold text-fg\">{row.name}</span>\n <ProviderInfoPopover providerId={row.id} language={language} />\n <span className=\"rounded bg-surface-hover px-1.5 py-0.5 font-mono text-[10px] font-medium uppercase tracking-wide text-fg-subtle\">\n {row.id}\n </span>\n <span className=\"rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-subtle\">\n {row.category}\n </span>\n </div>\n <p className=\"mt-0.5 text-xs text-fg-muted\">{secondaryLine}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 p-0\"\n aria-expanded={expanded}\n aria-controls={detailsId}\n aria-label={labels.expandRowDetails}\n onClick={() => setExpanded((e) => !e)}\n >\n <ChevronDown className={cn('size-4 transition-transform', expanded && 'rotate-180')} aria-hidden />\n </Button>\n </div>\n\n {expanded ? (\n <div\n id={detailsId}\n role=\"region\"\n className=\"space-y-3 border-t border-edge-subtle bg-surface-base/40 p-3 dark:bg-surface-base/20 sm:px-4\"\n >\n {row.supportsApiKey !== false ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"relative flex flex-col gap-2 sm:flex-row sm:gap-2\">\n <div className=\"relative min-w-0 flex-1\">\n <input\n type={showKey || !masked ? 'text' : 'password'}\n className={cn(\n 'w-full rounded-lg border border-edge bg-surface-panel py-2 pl-3 pr-20 font-mono text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n )}\n value={inputValue}\n placeholder={\n masked ? labels.placeholderOverride : row.configured ? labels.placeholderKeep : labels.placeholderKey\n }\n disabled={oauthLoading}\n onChange={(e) => onChange(row.id, e.target.value)}\n autoComplete=\"off\"\n spellCheck={false}\n />\n <div className=\"absolute right-1 top-1/2 flex -translate-y-1/2 gap-0.5\">\n {value && !masked ? (\n <button\n type=\"button\"\n className={cn(\n 'rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg',\n interaction.transition,\n interaction.press,\n interaction.focusRingPanel,\n )}\n title={copied ? labels.copied : labels.copy}\n aria-label={copied ? labels.copied : labels.copy}\n onClick={() => void copyKey()}\n >\n {copied ? <CheckCircle2 className=\"size-4\" /> : <Copy className=\"size-4\" />}\n </button>\n ) : null}\n <button\n type=\"button\"\n className={cn(\n 'rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg disabled:opacity-40',\n interaction.transition,\n interaction.press,\n interaction.focusRingPanel,\n )}\n title={showKey ? labels.hide : labels.show}\n aria-label={showKey ? labels.hide : labels.show}\n disabled={masked}\n onClick={() => setShowKey((s) => !s)}\n >\n {showKey ? <EyeOff className=\"size-4\" /> : <Eye className=\"size-4\" />}\n </button>\n </div>\n </div>\n <div className=\"flex flex-wrap gap-2 sm:shrink-0\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"gap-1\"\n disabled={oauthLoading || testLoading || !value.trim() || isMaskedKey(value)}\n onClick={() => void runTest()}\n >\n {testLoading ? <Loader2 className=\"size-4 animate-spin\" aria-hidden /> : null}\n {testLoading ? labels.testingKey : labels.testKey}\n </Button>\n {row.supportsOAuth ? (\n isOAuthConfigured ? (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"gap-1 text-red-600 dark:text-red-400\"\n onClick={doRevoke}\n >\n <LogOut className=\"size-4\" aria-hidden />\n {labels.revoke}\n </Button>\n ) : (\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"gap-1\"\n disabled={oauthLoading}\n onClick={() => void startOAuth()}\n >\n {oauthLoading ? <Loader2 className=\"size-4 animate-spin\" aria-hidden /> : <LogIn className=\"size-4\" aria-hidden />}\n {labels.oauth}\n </Button>\n )\n ) : null}\n {canRemoveKey ? (\n <>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"gap-1 text-red-600 dark:text-red-400\"\n disabled={removeLoading}\n onClick={() => setRemoveConfirmOpen(true)}\n >\n {removeLoading ? <Loader2 className=\"size-4 animate-spin\" aria-hidden /> : <Trash2 className=\"size-4\" aria-hidden />}\n {labels.removeKey}\n </Button>\n <ConfirmDialog\n open={removeConfirmOpen}\n title={labels.removeKey}\n description={interpolate(labels.removeKeyConfirm, { name: row.name })}\n confirmLabel={labels.removeKey}\n cancelLabel={labels.cancelOAuth}\n destructive\n onConfirm={() => void doRemoveKey()}\n onCancel={() => setRemoveConfirmOpen(false)}\n />\n </>\n ) : null}\n </div>\n </div>\n {testMessage ? (\n <p\n className={cn(\n 'text-xs',\n testOk === false ? 'text-red-600 dark:text-red-400' : 'text-fg-muted',\n )}\n role=\"status\"\n >\n {testMessage}\n </p>\n ) : null}\n {apiKeyLinks.length > 0 ? (\n <div className=\"flex flex-col gap-1\">\n {apiKeyLinks.map((link) => (\n <a\n key={`${link.kind}-${link.href}`}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex w-fit items-center gap-1 text-xs font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n {providerApiKeyLinkLabel(link.kind, labels)}\n <ExternalLink className=\"size-3\" aria-hidden />\n </a>\n ))}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {oauthMessage ? (\n <div\n className={cn(\n 'flex gap-2 rounded-md px-3 py-2 text-xs',\n oauthStatus === 'error'\n ? 'border border-red-200 bg-red-50 text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400'\n : 'bg-surface-base text-fg-muted',\n )}\n >\n {oauthStatus === 'error' ? (\n <AlertCircle className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n ) : oauthStatus === 'success' ? (\n <CheckCircle2 className=\"mt-0.5 size-4 shrink-0 text-emerald-600\" aria-hidden />\n ) : (\n <Info className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n )}\n <span>{oauthMessage}</span>\n </div>\n ) : null}\n\n {revokeError ? (\n <div\n className=\"flex gap-2 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400\"\n role=\"alert\"\n >\n <AlertCircle className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n <span>{revokeError}</span>\n </div>\n ) : null}\n\n {removeMessage ? (\n <div\n className={cn(\n 'flex gap-2 rounded-md px-3 py-2 text-xs',\n removeMessage === labels.removeKeySuccess\n ? 'bg-surface-hover/60 text-fg-muted dark:bg-surface-hover/40'\n : 'border border-red-200 bg-red-50 text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400',\n )}\n role=\"status\"\n >\n {removeMessage === labels.removeKeySuccess ? (\n <CheckCircle2 className=\"mt-0.5 size-4 shrink-0 text-emerald-600 dark:text-emerald-400\" aria-hidden />\n ) : (\n <AlertCircle className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n )}\n <span>{removeMessage}</span>\n </div>\n ) : null}\n\n {(oauthStatus === 'waiting' || oauthStatus === 'waiting_code') && (\n <div className=\"flex flex-wrap gap-2\">\n {authUrl ? (\n <a\n href={authUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-sm font-medium text-white hover:bg-accent-hover\"\n >\n <ExternalLink className=\"size-4\" aria-hidden />\n {labels.openAuthPage}\n </a>\n ) : null}\n <Button type=\"button\" variant=\"secondary\" className=\"gap-1\" onClick={() => void cancelFlow()}>\n <X className=\"size-4\" aria-hidden />\n {labels.cancelOAuth}\n </Button>\n </div>\n )}\n\n {instructions ? (\n <div className=\"flex gap-2 rounded-md bg-surface-hover/60 px-3 py-2 text-xs text-fg-muted dark:bg-surface-hover/40\">\n <Info className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n <span>{instructions}</span>\n </div>\n ) : null}\n\n {oauthStatus === 'waiting_code' ? (\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <input\n type=\"text\"\n className={cn(\n 'min-w-0 flex-1 rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n settingsInputFocusClass,\n 'dark:border-edge',\n )}\n value={codeInput}\n placeholder={labels.pasteRedirectUrl}\n onChange={(e) => setCodeInput(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && void submitCode()}\n />\n <Button type=\"button\" variant=\"primary\" className=\"shrink-0\" onClick={() => void submitCode()}>\n {labels.submitCode}\n </Button>\n </div>\n ) : null}\n\n {masked ? (\n <div className=\"flex gap-2 rounded-md bg-surface-hover/60 px-3 py-2 text-xs text-fg-muted dark:bg-surface-hover/40\">\n <Info className=\"mt-0.5 size-4 shrink-0\" aria-hidden />\n <span>{activeSrc === 'env' ? labels.envHint : labels.maskedStoredHint}</span>\n </div>\n ) : null}\n\n {row.supportsOAuth && !masked && !isOAuthConfigured ? (\n <p className=\"text-xs text-fg-subtle\">{labels.oauthHint}</p>\n ) : null}\n\n {justSaved ? (\n <div className=\"flex items-start gap-2 rounded-md bg-surface-hover/60 px-3 py-2 text-xs text-fg-muted dark:bg-surface-hover/40\">\n <CheckCircle2 className=\"mt-0.5 size-3.5 shrink-0 text-emerald-600 dark:text-emerald-400\" aria-hidden />\n <span>\n {(() => {\n const providerModels = availableModels.filter((m) => m.provider === row.id);\n if (providerModels.length === 0) return labels.savedNoModels;\n const preview = providerModels\n .slice(0, 3)\n .map((m) => m.name || m.id)\n .join(', ');\n const suffix = providerModels.length > 3 ? `… (+${providerModels.length - 3})` : '';\n return `${providerModels.length} ${labels.savedModelsAvailable}: ${preview}${suffix}`;\n })()}\n </span>\n </div>\n ) : null}\n\n {(PROVIDER_ENRICHMENT[row.id]?.envVars ?? []).length > 0 ? (\n <details>\n <summary className=\"cursor-pointer select-none list-none text-xs text-fg-subtle hover:text-fg-muted\">\n {labels.envVarAlt}\n </summary>\n <div className=\"mt-1.5 flex flex-col gap-1\">\n {(PROVIDER_ENRICHMENT[row.id]?.envVars ?? []).map((envVar) => (\n <EnvVarCopyRow key={envVar} envVar={envVar} labels={labels} />\n ))}\n </div>\n </details>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n","import {\n CheckCircle2,\n ChevronDown,\n KeyRound,\n Search,\n} from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { CONFIGURED_MODELS_SWR_KEY, fetchConfiguredModelsCached } from '@/features/chat/registry-api';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n isMaskedKey,\n mergeProviderRows,\n patchProviderApiKeys,\n providersKeysFromConfigRoot,\n type ProviderMeta,\n type ProviderRowModel,\n} from '@/features/settings/providers-api';\nimport { PROVIDER_ENRICHMENT } from '@/features/settings/provider-enrichment';\nimport { ProviderCredentialRow } from './provider-credential-row';\nimport { CATEGORY_ORDER, groupByCategory, interpolate } from './providers-settings-lib';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages } from '@/i18n/messages';\nimport { docsGuidePageUrl } from '@/navigation';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nexport function ProvidersSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const p = m.providersSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [draft, setDraft] = useState<Record<string, string>>({});\n const [baseline, setBaseline] = useState<Record<string, string>>({});\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveNotice, setSaveNotice] = useState<null | 'saved' | 'noChanges'>(null);\n const [expandedCats, setExpandedCats] = useState<Set<string>>(() => new Set(['common']));\n const [searchQuery, setSearchQuery] = useState('');\n const [unconfiguredOnly, setUnconfiguredOnly] = useState(false);\n const [savedProviderIds, setSavedProviderIds] = useState<Set<string>>(() => new Set());\n const prevSearchRef = useRef('');\n\n const metaUrl = apiUrl('/api/providers/meta');\n const fetchMetaList = useCallback(async (url: string) => {\n const data = await fetchJson<{ ok?: boolean; payload?: { providers?: ProviderMeta[] } }>(url);\n return data.payload?.providers ?? [];\n }, []);\n\n const {\n data: cfgData,\n error: cfgErr,\n isLoading: cfgLoading,\n mutate: mutCfg,\n } = useGatewayConfigSwr(hasToken);\n const {\n data: metaList,\n error: metaErr,\n isLoading: metaLoading,\n mutate: mutMeta,\n } = useSWR(hasToken ? metaUrl : null, fetchMetaList, { revalidateOnFocus: false });\n const { data: models, mutate: mutModels } = useSWR(\n hasToken ? CONFIGURED_MODELS_SWR_KEY : null,\n () => fetchConfiguredModelsCached(),\n { revalidateOnFocus: false },\n );\n\n const mergedRows = useMemo((): ProviderRowModel[] | null => {\n if (!metaList || cfgData === undefined) return null;\n const keys = providersKeysFromConfigRoot(cfgData.payload?.config);\n return mergeProviderRows(metaList, keys, models ?? []);\n }, [metaList, cfgData, models]);\n\n const fetchError =\n cfgErr instanceof Error\n ? cfgErr.message\n : cfgErr\n ? String(cfgErr)\n : metaErr instanceof Error\n ? metaErr.message\n : metaErr\n ? String(metaErr)\n : null;\n\n const loading = Boolean(\n hasToken && mergedRows === null && (cfgLoading || metaLoading) && !fetchError,\n );\n\n const dirty = useMemo(\n () => JSON.stringify(draft) !== JSON.stringify(baseline),\n [draft, baseline],\n );\n\n useEffect(() => {\n if (!dirty) return;\n const onBeforeUnload = (e: BeforeUnloadEvent) => {\n e.preventDefault();\n e.returnValue = '';\n };\n window.addEventListener('beforeunload', onBeforeUnload);\n return () => window.removeEventListener('beforeunload', onBeforeUnload);\n }, [dirty]);\n\n useEffect(() => {\n if (!hasToken || mergedRows === null) return;\n if (!dirty) {\n const d: Record<string, string> = {};\n for (const r of mergedRows) d[r.id] = r.apiKey;\n setDraft(d);\n setBaseline({ ...d });\n }\n }, [hasToken, mergedRows, dirty]);\n\n const metaRows = mergedRows ?? [];\n\n const filteredRows = useMemo(() => {\n let rows = metaRows;\n const q = searchQuery.trim().toLowerCase();\n if (q) {\n rows = rows.filter((r) => {\n const enrichment = PROVIDER_ENRICHMENT[r.id];\n const aliases = enrichment?.aliases ?? [];\n return (\n r.id.toLowerCase().includes(q) ||\n r.name.toLowerCase().includes(q) ||\n aliases.some((alias) => alias.toLowerCase().includes(q))\n );\n });\n }\n if (unconfiguredOnly) {\n rows = rows.filter((r) => !r.configured);\n }\n return rows;\n }, [metaRows, searchQuery, unconfiguredOnly]);\n\n const groups = useMemo(() => groupByCategory(filteredRows), [filteredRows]);\n\n useEffect(() => {\n const prev = prevSearchRef.current;\n prevSearchRef.current = searchQuery;\n if (searchQuery.trim()) {\n const next = new Set<string>();\n for (const c of CATEGORY_ORDER) {\n if ((groups.get(c) ?? []).length > 0) next.add(c);\n }\n setExpandedCats(next);\n return;\n }\n if (prev.trim()) {\n setExpandedCats(new Set(['common']));\n }\n }, [searchQuery, groups]);\n\n const save = useCallback(async () => {\n if (saving) return;\n const toPatch: Record<string, string> = {};\n for (const id of Object.keys(draft)) {\n const v = draft[id]?.trim() ?? '';\n if (!v || isMaskedKey(v)) continue;\n toPatch[id] = v;\n }\n if (Object.keys(toPatch).length === 0) {\n setBaseline({ ...draft });\n setSaveNotice('noChanges');\n window.setTimeout(() => setSaveNotice(null), 2500);\n return;\n }\n setSaving(true);\n setError(null);\n setSaveNotice(null);\n try {\n await patchProviderApiKeys(toPatch);\n setSavedProviderIds(new Set(Object.keys(toPatch)));\n const freshModels = (await mutModels(fetchConfiguredModelsCached(true))) ?? models ?? [];\n const [nextCfg, nextMeta] = await Promise.all([mutCfg(), mutMeta()]);\n const list = Array.isArray(nextMeta) ? nextMeta : metaList ?? [];\n const cfg = nextCfg ?? cfgData;\n if (cfg?.payload) {\n const keys = providersKeysFromConfigRoot(cfg.payload.config);\n const rows = mergeProviderRows(list, keys, freshModels);\n const d: Record<string, string> = {};\n for (const r of rows) d[r.id] = r.apiKey;\n setDraft(d);\n setBaseline({ ...d });\n }\n setSaveNotice('saved');\n window.setTimeout(() => setSaveNotice(null), 2500);\n } catch (e) {\n setError(e instanceof Error ? e.message : p.saveError);\n } finally {\n setSaving(false);\n }\n }, [cfgData, draft, metaList, models, mutCfg, mutMeta, mutModels, p.saveError, saving]);\n\n const discard = useCallback(() => {\n setDraft({ ...baseline });\n setError(null);\n setSaveNotice(null);\n setSavedProviderIds(new Set());\n }, [baseline]);\n\n const toggleCat = (cat: string) => {\n setExpandedCats((prev) => {\n const next = new Set(prev);\n if (next.has(cat)) next.delete(cat);\n else next.add(cat);\n return next;\n });\n };\n\n const refreshProviders = useCallback(() => {\n void mutCfg();\n void mutMeta();\n }, [mutCfg, mutMeta]);\n\n const filtersActive = Boolean(searchQuery.trim() || unconfiguredOnly);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10\">\n <div className=\"flex items-start gap-3 rounded-2xl bg-surface-base p-6\">\n <KeyRound className=\"mt-0.5 size-5 shrink-0 text-fg-subtle\" strokeWidth={1.75} />\n <div>\n <h1 className=\"text-base font-semibold text-fg\">{m.settingsSections.providers}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{p.needToken}</p>\n </div>\n </div>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"mx-auto w-full max-w-app-main px-4 py-8\">\n <div className=\"h-8 w-48 animate-pulse rounded bg-surface-hover\" />\n <div className=\"mt-6 h-32 animate-pulse rounded-xl bg-surface-hover\" />\n <p className=\"mt-4 text-sm text-fg-muted\">{m.logs.loading}</p>\n </div>\n );\n }\n\n if (metaRows.length === 0) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10\">\n <div className=\"rounded-xl border border-edge-subtle bg-surface-base px-4 py-3\">\n <p className=\"text-sm font-medium text-fg\">{p.loadError}</p>\n <p className=\"mt-1 text-sm text-fg-muted\">{error ?? fetchError ?? p.empty}</p>\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void mutCfg();\n void mutMeta();\n }}\n >\n {m.logs.refresh}\n </Button>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{m.settingsSections.providers}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{p.subtitle}</p>\n <p className=\"mt-2 text-xs text-fg-subtle\">{p.rotateHint}</p>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center gap-2\">\n {saveNotice === 'saved' ? <span className=\"text-sm text-fg-muted\">{p.saved}</span> : null}\n {saveNotice === 'noChanges' ? <span className=\"text-sm text-fg-muted\">{p.noChangesSaved}</span> : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirty || saving} onClick={discard}>\n {p.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={!dirty || saving} onClick={() => void save()}>\n {saving ? p.saving : p.save}\n </Button>\n </div>\n </header>\n\n {dirty ? <p className=\"text-xs text-amber-800 dark:text-amber-200\">{p.unsavedHint}</p> : null}\n\n <p className=\"text-sm leading-relaxed text-fg-muted\">\n {p.intro}{' '}\n <a\n href={docsGuidePageUrl(language, 'models')}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n {p.docsLink}\n </a>\n {' · '}\n <Link\n to=\"/settings/models\"\n className=\"font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n >\n {p.modelsLink}\n </Link>\n </p>\n\n <div className=\"flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center\">\n <div className=\"relative min-w-0 flex-1 sm:max-w-md\">\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle\"\n strokeWidth={1.75}\n aria-hidden\n />\n <input\n type=\"search\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={p.searchPlaceholder}\n autoComplete=\"off\"\n className={cn(\n 'w-full rounded-lg border border-edge bg-surface-panel py-2 pl-10 pr-3 text-sm text-fg placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n )}\n aria-label={p.searchPlaceholder}\n />\n </div>\n <label className=\"flex cursor-pointer items-center gap-2 text-sm text-fg-muted\">\n <input\n type=\"checkbox\"\n checked={unconfiguredOnly}\n onChange={(e) => setUnconfiguredOnly(e.target.checked)}\n className=\"size-4 rounded border-edge text-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent\"\n />\n {p.unconfiguredOnly}\n </label>\n {filtersActive ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 w-fit self-start text-fg-muted\"\n onClick={() => {\n setSearchQuery('');\n setUnconfiguredOnly(false);\n }}\n >\n {p.clearFilters}\n </Button>\n ) : null}\n </div>\n\n {error ? (\n <div\n className=\"rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400\"\n role=\"alert\"\n >\n {error}\n </div>\n ) : null}\n\n {filteredRows.length === 0 ? (\n <div className=\"rounded-xl border border-dashed border-edge-subtle bg-surface-base px-4 py-8 text-center text-sm text-fg-muted\">\n <p>{p.noMatches}</p>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"mt-4\"\n onClick={() => {\n setSearchQuery('');\n setUnconfiguredOnly(false);\n }}\n >\n {p.clearFilters}\n </Button>\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {CATEGORY_ORDER.map((cat) => {\n const list = groups.get(cat) ?? [];\n if (list.length === 0) return null;\n const expanded = expandedCats.has(cat);\n const configuredCount = list.filter((r) => r.configured).length;\n const panelId = `providers-cat-${cat}`;\n return (\n <section key={cat} className=\"overflow-hidden rounded-2xl bg-surface-base\">\n <button\n type=\"button\"\n id={`${panelId}-trigger`}\n aria-expanded={expanded}\n aria-controls={panelId}\n className=\"flex w-full items-center justify-between gap-2 border-b border-edge-subtle px-4 py-3 text-left transition-colors hover:bg-surface-hover/60 dark:border-edge-subtle\"\n onClick={() => toggleCat(cat)}\n >\n <span className=\"flex min-w-0 items-center gap-2 text-sm font-semibold text-fg\">\n <span className=\"truncate\">{p.categories[cat]}</span>\n <span className=\"shrink-0 rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-subtle\">\n {list.length}\n </span>\n </span>\n <span className=\"flex shrink-0 items-center gap-2\">\n {configuredCount > 0 ? (\n <span className=\"flex items-center gap-1 text-xs text-fg-subtle\">\n <CheckCircle2 className=\"size-3.5 text-emerald-600 dark:text-emerald-400\" aria-hidden />\n {interpolate(p.configuredCount, { count: String(configuredCount) })}\n </span>\n ) : null}\n <ChevronDown\n className={cn('size-4 text-fg-subtle transition-transform', expanded && 'rotate-180')}\n aria-hidden\n />\n </span>\n </button>\n {expanded ? (\n <div id={panelId} role=\"region\" aria-labelledby={`${panelId}-trigger`} className=\"divide-y divide-edge-subtle\">\n {list.map((row) => (\n <div id={`provider-row-${row.id}`} key={row.id}>\n <ProviderCredentialRow\n row={row}\n value={draft[row.id] ?? ''}\n rowDirty={(draft[row.id] ?? '') !== (baseline[row.id] ?? '')}\n labels={p}\n language={language}\n onChange={(id, v) => setDraft((d) => ({ ...d, [id]: v }))}\n onReload={refreshProviders}\n justSaved={savedProviderIds.has(row.id)}\n availableModels={models ?? []}\n />\n </div>\n ))}\n </div>\n ) : null}\n </section>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { ExternalLink, Shield } from 'lucide-react';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { SettingsFormSection, settingsFormSectionClassName } from '@/features/settings/settings-form-section';\nimport { isElectron } from '@/lib/electron-env';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { messages } from '@/i18n/messages';\nimport { useLocaleStore } from '@/stores/locale-store';\nimport type { PrivacyPaneKind, ShellPermissionSnapshot, SystemSettingsBehavior, TccTriState } from '@/types/electron';\n\nconst PERM_ROWS: { key: keyof ShellPermissionSnapshot; pane: PrivacyPaneKind }[] = [\n { key: 'fullDisk', pane: 'fullDisk' },\n { key: 'screen', pane: 'screen' },\n { key: 'microphone', pane: 'microphone' },\n { key: 'accessibility', pane: 'accessibility' },\n { key: 'automation', pane: 'automation' },\n { key: 'notifications', pane: 'notifications' },\n { key: 'location', pane: 'location' },\n];\n\nfunction triStateFromMessages(\n lang: StoredLanguage,\n s: TccTriState,\n): { label: string; className: string } {\n const m = messages(lang).systemSettings.status;\n if (s === 'granted') {\n return { label: m.granted, className: 'text-emerald-600 dark:text-emerald-400' };\n }\n if (s === 'denied') {\n return { label: m.denied, className: 'text-amber-600 dark:text-amber-400' };\n }\n return { label: m.unknown, className: 'text-fg-muted' };\n}\n\nexport function SystemSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const t = m.systemSettings;\n\n const [behavior, setBehavior] = useState<SystemSettingsBehavior | null>(null);\n const [perms, setPerms] = useState<ShellPermissionSnapshot | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n const api = typeof window !== 'undefined' ? window.electronAPI?.system : undefined;\n\n const load = useCallback(async () => {\n if (!api) {\n return;\n }\n setLoadError(null);\n try {\n const b = await api.getBehavior();\n setBehavior(b);\n setPerms(await api.getPermissions());\n } catch (e) {\n setLoadError(e instanceof Error ? e.message : String(e));\n }\n }, [api]);\n\n useEffect(() => {\n if (isElectron() && api) {\n void load();\n }\n }, [api, load]);\n\n if (!isElectron() || !api) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n <div className={settingsFormSectionClassName()}>\n <p className=\"text-sm font-medium text-fg\">{t.desktopOnlyTitle}</p>\n <p className=\"mt-1 text-sm text-fg-muted\">{t.desktopOnlyBody}</p>\n </div>\n </div>\n );\n }\n\n const patchBehavior = async (patch: {\n openAtLogin?: boolean;\n keepAwakePreferred?: boolean;\n notifyEnabled?: boolean;\n notifySoundEnabled?: boolean;\n }) => {\n try {\n const { behavior: next } = await api.setBehavior(patch);\n setBehavior(next);\n } catch (e) {\n setLoadError(e instanceof Error ? e.message : String(e));\n }\n };\n\n const openPrivacy = async (kind: PrivacyPaneKind) => {\n try {\n const r = await api.openPrivacy(kind);\n if (!r.ok) {\n setLoadError('open_privacy failed');\n }\n } catch (e) {\n setLoadError(e instanceof Error ? e.message : String(e));\n }\n };\n\n const permissionsHint = (() => {\n if (!behavior) {\n return t.permissionsHint;\n }\n if (behavior.platform === 'win32') {\n return t.permissionsHintWin;\n }\n if (behavior.platform === 'linux') {\n return t.permissionsHintLinux;\n }\n if (behavior.platform === 'darwin') {\n return t.permissionsHintDarwin;\n }\n return t.permissionsHint;\n })();\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <div>\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n </div>\n\n {loadError ? (\n <p className=\"text-sm text-amber-600 dark:text-amber-400\" role=\"alert\">\n {loadError}\n </p>\n ) : null}\n\n <SettingsFormSection>\n <div className=\"mb-4 flex items-center gap-2 text-sm font-semibold text-fg\">\n <Shield className=\"size-4 text-accent\" strokeWidth={1.75} />\n {t.behaviorGroup}\n </div>\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{t.toggles.openAtLogin}</div>\n <p className=\"text-xs text-fg-muted\">{t.toggles.openAtLoginDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n disabled={!behavior}\n checked={Boolean(behavior?.openAtLogin)}\n onChange={(e) => {\n void patchBehavior({ openAtLogin: e.target.checked });\n }}\n />\n </div>\n <div className=\"flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{t.toggles.keepAwake}</div>\n <p className=\"text-xs text-fg-muted\">{t.toggles.keepAwakeDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n disabled={!behavior}\n checked={Boolean(behavior?.keepAwakePreferred)}\n onChange={(e) => {\n void patchBehavior({ keepAwakePreferred: e.target.checked });\n }}\n />\n </div>\n <div className=\"flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{t.toggles.notifyDesktop}</div>\n <p className=\"text-xs text-fg-muted\">{t.toggles.notifyDesktopDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n disabled={!behavior}\n checked={Boolean(behavior?.notifyEnabled)}\n onChange={(e) => {\n void patchBehavior({ notifyEnabled: e.target.checked });\n }}\n />\n </div>\n <div className=\"flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{t.toggles.notifySound}</div>\n <p className=\"text-xs text-fg-muted\">{t.toggles.notifySoundDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n disabled={!behavior}\n checked={Boolean(behavior?.notifySoundEnabled)}\n onChange={(e) => {\n void patchBehavior({ notifySoundEnabled: e.target.checked });\n }}\n />\n </div>\n </div>\n </SettingsFormSection>\n\n {behavior && perms ? (\n <section className={settingsFormSectionClassName()}>\n <div className=\"mb-4 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h2 className=\"text-sm font-semibold text-fg\">{t.permissionsTitle}</h2>\n <p className=\"mt-0.5 text-xs text-fg-muted\">{permissionsHint}</p>\n </div>\n <button\n type=\"button\"\n className=\"mt-2 inline-flex max-w-full items-center justify-center rounded-lg border border-edge bg-surface-panel px-3 py-1.5 text-sm font-medium text-fg transition-colors hover:bg-surface-hover sm:mt-0\"\n onClick={() => void load()}\n >\n {t.refresh}\n </button>\n </div>\n <ul className=\"space-y-3\">\n {PERM_ROWS.map(({ key, pane }) => {\n const st = triStateFromMessages(language, perms[key]);\n const permLabel = t.perm[key];\n if (!permLabel) {\n return null;\n }\n return (\n <li\n key={key}\n className=\"flex flex-col gap-2 rounded-xl border border-edge-subtle bg-surface-panel/60 p-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-fg\">{permLabel.title}</div>\n <p className=\"mt-0.5 text-xs text-fg-muted\">{permLabel.desc}</p>\n <p className={`mt-1 text-xs font-medium ${st.className}`}>{st.label}</p>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center gap-2\">\n {key === 'microphone' && behavior?.platform === 'darwin' ? (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded-lg border border-edge bg-surface-base px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover\"\n onClick={() => {\n void (async () => {\n try {\n await api.requestMicrophone();\n setPerms(await api.getPermissions());\n } catch (e) {\n setLoadError(e instanceof Error ? e.message : String(e));\n }\n })();\n }}\n >\n {language === 'zh' ? '请求访问' : 'Request'}\n </button>\n ) : null}\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-base px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover\"\n onClick={() => void openPrivacy(pane)}\n >\n {t.openSettings}\n <ExternalLink className=\"size-3.5\" strokeWidth={1.75} aria-hidden />\n </button>\n </div>\n </li>\n );\n })}\n </ul>\n </section>\n ) : null}\n </div>\n );\n}\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport type { SttSettings, TtsSettings, VoiceModelsPayload, VoiceSettingsState } from './voice-settings.types';\n\nexport type { SttSettings, TtsSettings, VoiceModelsPayload, VoiceSettingsState } from './voice-settings.types';\n\nfunction defaultStt(): SttSettings {\n return {\n enabled: false,\n provider: 'alibaba',\n alibaba: { model: 'paraformer-v2' },\n openai: { model: 'whisper-1' },\n fallback: { enabled: true, order: ['alibaba', 'openai'] },\n };\n}\n\n// Defaults intentionally mirror src/config/schema.ts (TTSConfigSchema /\n// TTSEdgeConfigSchema) and extensions/tts-local-cli/xopc.extension.json so a\n// PATCH /api/config round-trip never silently overrides backend defaults.\nfunction defaultTts(): TtsSettings {\n return {\n enabled: false,\n provider: 'openai',\n trigger: 'always',\n maxTextLength: 512,\n timeoutMs: 60000,\n alibaba: { model: 'qwen-tts', voice: 'Cherry' },\n openai: { model: 'tts-1', voice: 'alloy' },\n edge: { voice: 'en-US-MichelleNeural' },\n minimax: { model: 'speech-2.8-hd', voice: 'male-qn-qingse' },\n 'tts-local-cli': {\n command: '',\n outputFormat: 'wav',\n },\n };\n}\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return v !== null && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction mergeStt(raw: unknown): SttSettings {\n const d = defaultStt();\n if (!isRecord(raw)) return d;\n const provider = raw.provider === 'openai' ? 'openai' : 'alibaba';\n const alibaba = isRecord(raw.alibaba) ? { ...d.alibaba, ...raw.alibaba } : d.alibaba;\n const openai = isRecord(raw.openai) ? { ...d.openai, ...raw.openai } : d.openai;\n const baseFallback = d.fallback ?? { enabled: true, order: ['alibaba', 'openai'] as const };\n let fallback = baseFallback;\n if (isRecord(raw.fallback)) {\n const order = Array.isArray(raw.fallback.order)\n ? (raw.fallback.order.filter((x) => x === 'alibaba' || x === 'openai') as ('alibaba' | 'openai')[])\n : fallback.order;\n fallback = {\n enabled: typeof raw.fallback.enabled === 'boolean' ? raw.fallback.enabled : fallback.enabled,\n order: order.length ? order : fallback.order,\n };\n }\n return {\n enabled: Boolean(raw.enabled),\n provider,\n alibaba,\n openai,\n fallback,\n };\n}\n\n/** Provider id is open string — extension SpeechProviderPlugins (e.g. tts-local-cli) are allowed. */\nfunction normalizeTtsProvider(v: unknown): string {\n return typeof v === 'string' && v.trim().length > 0 ? v.trim() : 'openai';\n}\n\nfunction mergeTts(raw: unknown): TtsSettings {\n const d = defaultTts();\n if (!isRecord(raw)) return d;\n const provider = normalizeTtsProvider(raw.provider);\n const trigger =\n raw.trigger === 'off' ||\n raw.trigger === 'always' ||\n raw.trigger === 'inbound' ||\n raw.trigger === 'tagged'\n ? raw.trigger\n : 'always';\n // Per-provider buckets: keep built-in defaults, plus passthrough for any\n // extension-provider key (e.g. `tts-local-cli`) so unknown plugins survive\n // a round-trip through the UI without losing their config.\n const localCliRaw = raw['tts-local-cli'];\n return {\n enabled: Boolean(raw.enabled),\n provider,\n trigger,\n maxTextLength:\n typeof raw.maxTextLength === 'number' && Number.isFinite(raw.maxTextLength)\n ? raw.maxTextLength\n : d.maxTextLength,\n timeoutMs:\n typeof raw.timeoutMs === 'number' && Number.isFinite(raw.timeoutMs) ? raw.timeoutMs : d.timeoutMs,\n alibaba: isRecord(raw.alibaba) ? { ...d.alibaba, ...raw.alibaba } : d.alibaba,\n openai: isRecord(raw.openai) ? { ...d.openai, ...raw.openai } : d.openai,\n edge: isRecord(raw.edge) ? { ...d.edge, ...raw.edge } : d.edge,\n minimax: isRecord(raw.minimax) ? { ...d.minimax, ...raw.minimax } : d.minimax,\n 'tts-local-cli': isRecord(localCliRaw)\n ? { ...d['tts-local-cli'], ...localCliRaw }\n : d['tts-local-cli'],\n };\n}\n\nexport function normalizeVoiceSettings(config: unknown): VoiceSettingsState {\n const c = isRecord(config) ? config : {};\n return {\n stt: mergeStt(c.stt),\n tts: mergeTts(c.tts),\n };\n}\n\nexport async function fetchVoiceSettings(): Promise<VoiceSettingsState> {\n const res = await fetchJson<{ ok?: boolean; payload?: { config?: unknown } }>(apiUrl('/api/config'));\n return normalizeVoiceSettings(res.payload?.config ?? {});\n}\n\nexport async function patchVoiceSettings(state: VoiceSettingsState): Promise<void> {\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({ stt: state.stt, tts: state.tts }),\n });\n void revalidateGatewayConfig();\n}\n\nexport async function fetchVoiceModels(): Promise<VoiceModelsPayload> {\n const res = await fetchJson<{ ok?: boolean; payload?: { models?: VoiceModelsPayload } }>(\n apiUrl('/api/voice/models'),\n );\n if (!res.payload?.models) {\n throw new Error('Missing voice models payload');\n }\n return res.payload.models;\n}\n","import { ExternalLink, Loader2, Mic, Volume2 } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useState, type ReactNode } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n fetchVoiceModels,\n normalizeVoiceSettings,\n patchVoiceSettings,\n type VoiceModelsPayload,\n type VoiceSettingsState,\n} from '@/features/settings/voice-config-api';\nimport { apiUrl } from '@/lib/url';\nimport { nativeSelectMaxWidthClass, selectControlBaseClass, settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages, type VoiceSettingsMessages } from '@/i18n/messages';\nimport { docsGuidePageUrl } from '@/navigation';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nfunction selectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\nconst STT_ALIBABA_FALLBACK = [\n { id: 'paraformer-v2', name: 'Paraformer v2' },\n { id: 'paraformer-v1', name: 'Paraformer v1' },\n];\nconst STT_OPENAI_FALLBACK = [{ id: 'whisper-1', name: 'Whisper-1' }];\nconst TTS_OPENAI_MODELS_FALLBACK = [\n { id: 'tts-1', name: 'TTS-1' },\n { id: 'tts-1-hd', name: 'TTS-1 HD' },\n];\nconst TTS_OPENAI_VOICES_FALLBACK = [\n { id: 'alloy', name: 'Alloy' },\n { id: 'echo', name: 'Echo' },\n];\nconst TTS_ALIBABA_MODELS_FALLBACK = [\n { id: 'qwen-tts', name: 'Qwen TTS' },\n { id: 'qwen3-tts-flash', name: 'Qwen3 TTS Flash' },\n];\nconst TTS_ALIBABA_VOICES_FALLBACK = [\n { id: 'Cherry', name: 'Cherry' },\n { id: 'longxiaochun', name: 'Long Xiao Chun' },\n];\nconst TTS_EDGE_VOICES_FALLBACK = [\n { id: 'en-US-MichelleNeural', name: 'Michelle (US English)' },\n { id: 'zh-CN-XiaoxiaoNeural', name: 'Xiaoxiao (Chinese)' },\n];\nconst TTS_MINIMAX_MODELS_FALLBACK = [\n { id: 'speech-2.8-hd', name: 'Speech 2.8 HD (Recommended)' },\n { id: 'speech-2.8-turbo', name: 'Speech 2.8 Turbo (Fast)' },\n];\nconst TTS_MINIMAX_VOICES_FALLBACK = [\n { id: 'male-qn-qingse', name: 'Male Qingse (青涩男声)' },\n { id: 'female-shaonv', name: 'Female Shaonv (少女音)' },\n];\n\nexport function VoiceSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const v = m.voiceSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [form, setForm] = useState<VoiceSettingsState | null>(null);\n const [baseline, setBaseline] = useState<VoiceSettingsState | null>(null);\n const [models, setModels] = useState<VoiceModelsPayload | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n\n const {\n data: cfgData,\n error: cfgErr,\n isLoading: cfgLoading,\n mutate: mutCfg,\n } = useGatewayConfigSwr(hasToken);\n const {\n data: voiceModels,\n error: vmErr,\n isLoading: vmLoading,\n mutate: mutVm,\n } = useSWR(hasToken ? apiUrl('/api/voice/models') : null, fetchVoiceModels, { revalidateOnFocus: false });\n\n const voiceParsed = useMemo(\n () =>\n cfgData?.payload?.config !== undefined\n ? normalizeVoiceSettings(cfgData.payload.config)\n : null,\n [cfgData],\n );\n\n const dirty = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n useEffect(() => {\n if (!hasToken) {\n setForm(null);\n setBaseline(null);\n setModels(null);\n return;\n }\n if (voiceParsed === null || voiceModels === undefined) return;\n if (!dirty) {\n setForm(structuredClone(voiceParsed));\n setBaseline(structuredClone(voiceParsed));\n setModels(voiceModels);\n setSaveOk(false);\n }\n }, [hasToken, voiceParsed, voiceModels, dirty]);\n\n const loading = Boolean(\n hasToken &&\n (voiceParsed === null || voiceModels === undefined) &&\n (cfgLoading || vmLoading),\n );\n const fetchError =\n cfgErr instanceof Error\n ? cfgErr.message\n : cfgErr\n ? String(cfgErr)\n : vmErr instanceof Error\n ? vmErr.message\n : vmErr\n ? String(vmErr)\n : null;\n\n const updateStt = useCallback((patch: Partial<VoiceSettingsState['stt']>) => {\n setForm((f) => (f ? { ...f, stt: { ...f.stt, ...patch } } : null));\n }, []);\n\n const updateSttAlibaba = useCallback((patch: Partial<NonNullable<VoiceSettingsState['stt']['alibaba']>>) => {\n setForm((f) =>\n f\n ? {\n ...f,\n stt: { ...f.stt, alibaba: { ...f.stt.alibaba, ...patch } },\n }\n : null,\n );\n }, []);\n\n const updateSttOpenai = useCallback((patch: Partial<NonNullable<VoiceSettingsState['stt']['openai']>>) => {\n setForm((f) =>\n f\n ? {\n ...f,\n stt: { ...f.stt, openai: { ...f.stt.openai, ...patch } },\n }\n : null,\n );\n }, []);\n\n const updateSttFallback = useCallback((patch: Partial<NonNullable<VoiceSettingsState['stt']['fallback']>>) => {\n setForm((f) => {\n if (!f) return null;\n const cur = f.stt.fallback ?? { enabled: true, order: ['alibaba', 'openai'] };\n return {\n ...f,\n stt: {\n ...f.stt,\n fallback: { ...cur, ...patch },\n },\n };\n });\n }, []);\n\n const updateTts = useCallback((patch: Partial<VoiceSettingsState['tts']>) => {\n setForm((f) => (f ? { ...f, tts: { ...f.tts, ...patch } } : null));\n }, []);\n\n const updateTtsAlibaba = useCallback((patch: Partial<NonNullable<VoiceSettingsState['tts']['alibaba']>>) => {\n setForm((f) =>\n f\n ? {\n ...f,\n tts: { ...f.tts, alibaba: { ...f.tts.alibaba, ...patch } },\n }\n : null,\n );\n }, []);\n\n const updateTtsOpenai = useCallback((patch: Partial<NonNullable<VoiceSettingsState['tts']['openai']>>) => {\n setForm((f) =>\n f\n ? {\n ...f,\n tts: { ...f.tts, openai: { ...f.tts.openai, ...patch } },\n }\n : null,\n );\n }, []);\n\n const updateTtsEdge = useCallback((patch: Partial<NonNullable<VoiceSettingsState['tts']['edge']>>) => {\n setForm((f) =>\n f\n ? {\n ...f,\n tts: { ...f.tts, edge: { ...f.tts.edge, ...patch } },\n }\n : null,\n );\n }, []);\n\n const updateTtsMinimax = useCallback(\n (patch: Partial<NonNullable<VoiceSettingsState['tts']['minimax']>>) => {\n setForm((f) =>\n f ? { ...f, tts: { ...f.tts, minimax: { ...f.tts.minimax, ...patch } } } : null,\n );\n },\n [],\n );\n\n const updateTtsLocalCli = useCallback(\n (patch: Partial<NonNullable<VoiceSettingsState['tts']['tts-local-cli']>>) => {\n setForm((f) =>\n f\n ? {\n ...f,\n tts: {\n ...f.tts,\n 'tts-local-cli': { ...f.tts['tts-local-cli'], ...patch },\n },\n }\n : null,\n );\n },\n [],\n );\n\n const save = useCallback(async () => {\n if (!form || saving) return;\n setSaving(true);\n setError(null);\n setSaveOk(false);\n try {\n await patchVoiceSettings(form);\n const next = structuredClone(form);\n setBaseline(next);\n setForm(next);\n setSaveOk(true);\n window.setTimeout(() => setSaveOk(false), 2500);\n } catch (e) {\n setError(e instanceof Error ? e.message : v.saveError);\n } finally {\n setSaving(false);\n }\n }, [form, saving, v.saveError]);\n\n const discard = useCallback(() => {\n if (!baseline) return;\n setForm(structuredClone(baseline));\n setError(null);\n setSaveOk(false);\n }, [baseline]);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{m.settingsSections.voice}</h1>\n <p className=\"text-sm text-fg-muted\">{v.needToken}</p>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <div className=\"flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" />\n {v.loading}\n </div>\n </div>\n );\n }\n\n if (!form || models === null) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{error ?? fetchError ?? v.loadError}</p>\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void mutCfg();\n void mutVm();\n }}\n >\n {v.retry}\n </Button>\n </div>\n );\n }\n\n const stt = form.stt;\n const tts = form.tts;\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{m.settingsSections.voice}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{v.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'voice')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {v.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-2\">\n {saveOk ? <span className=\"text-sm text-fg-muted\">{v.saved}</span> : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirty || saving} onClick={discard}>\n {v.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={!dirty || saving} onClick={() => void save()}>\n {saving ? v.saving : v.save}\n </Button>\n </div>\n </header>\n\n {dirty ? <p className=\"text-xs text-amber-800 dark:text-amber-200\">{v.unsavedHint}</p> : null}\n {error ? <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n\n <div className=\"flex flex-col gap-4\">\n <SttSection\n v={v}\n stt={stt}\n models={models}\n updateStt={updateStt}\n updateSttAlibaba={updateSttAlibaba}\n updateSttOpenai={updateSttOpenai}\n updateSttFallback={updateSttFallback}\n />\n\n <TtsSection\n v={v}\n tts={tts}\n models={models}\n updateTts={updateTts}\n updateTtsAlibaba={updateTtsAlibaba}\n updateTtsOpenai={updateTtsOpenai}\n updateTtsEdge={updateTtsEdge}\n updateTtsMinimax={updateTtsMinimax}\n updateTtsLocalCli={updateTtsLocalCli}\n />\n </div>\n\n <div className=\"rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10\">\n <p className=\"text-sm text-fg\">\n <strong className=\"text-accent\">{v.notes.title}</strong> {v.notes.duration}\n </p>\n <p className=\"mt-2 text-xs text-fg-muted\">{v.notes.envVars}</p>\n </div>\n </div>\n );\n}\n\nfunction SttSection({\n v,\n stt,\n models,\n updateStt,\n updateSttAlibaba,\n updateSttOpenai,\n updateSttFallback,\n}: {\n v: VoiceSettingsMessages;\n stt: VoiceSettingsState['stt'];\n models: VoiceModelsPayload | null;\n updateStt: (p: Partial<VoiceSettingsState['stt']>) => void;\n updateSttAlibaba: (p: Partial<NonNullable<VoiceSettingsState['stt']['alibaba']>>) => void;\n updateSttOpenai: (p: Partial<NonNullable<VoiceSettingsState['stt']['openai']>>) => void;\n updateSttFallback: (p: Partial<NonNullable<VoiceSettingsState['stt']['fallback']>>) => void;\n}) {\n const alibabaModels = models?.stt?.alibaba?.length ? models.stt.alibaba : STT_ALIBABA_FALLBACK;\n const openaiModels = models?.stt?.openai?.length ? models.stt.openai : STT_OPENAI_FALLBACK;\n\n return (\n <section className=\"rounded-2xl bg-surface-base px-4 py-5 sm:px-5\">\n <div className=\"mb-4\">\n <div className=\"flex items-center gap-2 text-sm font-semibold text-fg\">\n <Mic className=\"size-4 text-accent\" strokeWidth={1.75} />\n {v.stt.title}\n </div>\n <p className=\"mt-1 text-xs text-fg-muted\">{v.stt.description}</p>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between gap-2 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{v.stt.enable}</div>\n <p className=\"text-xs text-fg-muted\">{v.stt.enableDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={stt.enabled}\n onChange={(e) => updateStt({ enabled: e.target.checked })}\n />\n </div>\n\n {stt.enabled ? (\n <>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.provider}</FieldLabel>\n <select\n className={selectClassName()}\n value={stt.provider}\n onChange={(e) => updateStt({ provider: e.target.value as 'alibaba' | 'openai' })}\n >\n <option value=\"alibaba\">{v.stt.alibaba}</option>\n <option value=\"openai\">{v.stt.openai}</option>\n </select>\n </div>\n </div>\n\n {stt.provider === 'alibaba' ? (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.apiKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"password\"\n autoComplete=\"off\"\n value={stt.alibaba?.apiKey ?? ''}\n onChange={(e) => updateSttAlibaba({ apiKey: e.target.value })}\n placeholder=\"sk-...\"\n />\n <p className=\"text-xs text-fg-subtle\">\n {v.stt.apiKeyDesc} (DASHSCOPE_API_KEY)\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.model}</FieldLabel>\n <select\n className={selectClassName()}\n value={stt.alibaba?.model ?? ''}\n onChange={(e) => updateSttAlibaba({ model: e.target.value })}\n >\n {alibabaModels.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.apiKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"password\"\n autoComplete=\"off\"\n value={stt.openai?.apiKey ?? ''}\n onChange={(e) => updateSttOpenai({ apiKey: e.target.value })}\n placeholder=\"sk-...\"\n />\n <p className=\"text-xs text-fg-subtle\">\n {v.stt.apiKeyDesc} (OPENAI_API_KEY)\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.model}</FieldLabel>\n <select\n className={selectClassName()}\n value={stt.openai?.model ?? ''}\n onChange={(e) => updateSttOpenai({ model: e.target.value })}\n >\n {openaiModels.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n </div>\n )}\n\n <div className=\"flex items-center justify-between gap-2 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{v.stt.fallback}</div>\n <p className=\"text-xs text-fg-muted\">{v.stt.fallbackDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={stt.fallback?.enabled ?? true}\n onChange={(e) => updateSttFallback({ enabled: e.target.checked })}\n />\n </div>\n </>\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction TtsSection({\n v,\n tts,\n models,\n updateTts,\n updateTtsAlibaba,\n updateTtsOpenai,\n updateTtsEdge,\n updateTtsMinimax,\n updateTtsLocalCli,\n}: {\n v: VoiceSettingsMessages;\n tts: VoiceSettingsState['tts'];\n models: VoiceModelsPayload | null;\n updateTts: (p: Partial<VoiceSettingsState['tts']>) => void;\n updateTtsAlibaba: (p: Partial<NonNullable<VoiceSettingsState['tts']['alibaba']>>) => void;\n updateTtsOpenai: (p: Partial<NonNullable<VoiceSettingsState['tts']['openai']>>) => void;\n updateTtsEdge: (p: Partial<NonNullable<VoiceSettingsState['tts']['edge']>>) => void;\n updateTtsMinimax: (p: Partial<NonNullable<VoiceSettingsState['tts']['minimax']>>) => void;\n updateTtsLocalCli: (p: Partial<NonNullable<VoiceSettingsState['tts']['tts-local-cli']>>) => void;\n}) {\n const triggerDesc = (t: string) => {\n if (t === 'off') return v.tts.triggerDescOff;\n if (t === 'always') return v.tts.triggerDescAlways;\n if (t === 'inbound') return v.tts.triggerDescInbound;\n if (t === 'tagged') return v.tts.triggerDescTagged;\n return '';\n };\n\n const ttsOpenai = models?.tts?.openai?.length ? models.tts.openai : TTS_OPENAI_MODELS_FALLBACK;\n const ttsVoicesOpenai = models?.ttsVoices?.openai?.length ? models.ttsVoices.openai : TTS_OPENAI_VOICES_FALLBACK;\n const ttsAlibaba = models?.tts?.alibaba?.length ? models.tts.alibaba : TTS_ALIBABA_MODELS_FALLBACK;\n const ttsVoicesAlibaba = models?.ttsVoices?.alibaba?.length ? models.ttsVoices.alibaba : TTS_ALIBABA_VOICES_FALLBACK;\n const ttsVoicesEdge = models?.ttsVoices?.edge?.length ? models.ttsVoices.edge : TTS_EDGE_VOICES_FALLBACK;\n const ttsMinimax = models?.tts?.minimax?.length ? models.tts.minimax : TTS_MINIMAX_MODELS_FALLBACK;\n const ttsVoicesMinimax = models?.ttsVoices?.minimax?.length\n ? models.ttsVoices.minimax\n : TTS_MINIMAX_VOICES_FALLBACK;\n\n return (\n <section className=\"rounded-2xl bg-surface-base px-4 py-5 sm:px-5\">\n <div className=\"mb-4\">\n <div className=\"flex items-center gap-2 text-sm font-semibold text-fg\">\n <Volume2 className=\"size-4 text-accent\" strokeWidth={1.75} />\n {v.tts.title}\n </div>\n <p className=\"mt-1 text-xs text-fg-muted\">{v.tts.description}</p>\n </div>\n <div className=\"space-y-4\">\n <div className=\"flex items-center justify-between gap-2 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35\">\n <div>\n <div className=\"text-sm font-medium text-fg\">{v.tts.enable}</div>\n <p className=\"text-xs text-fg-muted\">{v.tts.enableDesc}</p>\n </div>\n <input\n type=\"checkbox\"\n className=\"ui-checkbox\"\n checked={tts.enabled}\n onChange={(e) => updateTts({ enabled: e.target.checked })}\n />\n </div>\n\n {tts.enabled ? (\n <>\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.trigger}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.trigger}\n onChange={(e) =>\n updateTts({ trigger: e.target.value as VoiceSettingsState['tts']['trigger'] })\n }\n >\n <option value=\"off\">{v.tts.triggerOff}</option>\n <option value=\"always\">{v.tts.triggerAlways}</option>\n <option value=\"inbound\">{v.tts.triggerInbound}</option>\n <option value=\"tagged\">{v.tts.triggerTagged}</option>\n </select>\n <p className=\"text-xs text-fg-subtle\">{triggerDesc(tts.trigger)}</p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.provider}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.provider}\n onChange={(e) => updateTts({ provider: e.target.value })}\n >\n <option value=\"openai\">{v.tts.providerOpenai}</option>\n <option value=\"alibaba\">{v.stt.alibaba}</option>\n <option value=\"minimax\">MiniMax</option>\n <option value=\"edge\">{v.tts.providerEdge}</option>\n <option value=\"tts-local-cli\">{v.tts.providerLocalCli}</option>\n </select>\n </div>\n </div>\n\n {tts.provider === 'openai' ? (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{v.stt.apiKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"password\"\n autoComplete=\"off\"\n value={tts.openai?.apiKey ?? ''}\n onChange={(e) => updateTtsOpenai({ apiKey: e.target.value })}\n placeholder=\"sk-...\"\n />\n <p className=\"text-xs text-fg-subtle\">\n {v.stt.apiKeyDesc} (OPENAI_API_KEY)\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.model}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.openai?.model ?? ''}\n onChange={(e) => updateTtsOpenai({ model: e.target.value })}\n >\n {ttsOpenai.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.voice}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.openai?.voice ?? ''}\n onChange={(e) => updateTtsOpenai({ voice: e.target.value })}\n >\n {ttsVoicesOpenai.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n </div>\n ) : null}\n\n {tts.provider === 'alibaba' ? (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{v.stt.apiKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"password\"\n autoComplete=\"off\"\n value={tts.alibaba?.apiKey ?? ''}\n onChange={(e) => updateTtsAlibaba({ apiKey: e.target.value })}\n placeholder=\"sk-...\"\n />\n <p className=\"text-xs text-fg-subtle\">\n {v.stt.apiKeyDesc} (DASHSCOPE_API_KEY)\n </p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.model}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.alibaba?.model ?? ''}\n onChange={(e) => updateTtsAlibaba({ model: e.target.value })}\n >\n {ttsAlibaba.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.voice}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.alibaba?.voice ?? ''}\n onChange={(e) => updateTtsAlibaba({ voice: e.target.value })}\n >\n {ttsVoicesAlibaba.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n </div>\n ) : null}\n\n {tts.provider === 'minimax' ? (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{v.stt.apiKey}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"password\"\n autoComplete=\"off\"\n value={tts.minimax?.apiKey ?? ''}\n onChange={(e) => updateTtsMinimax({ apiKey: e.target.value })}\n placeholder=\"eyJ...\"\n />\n <p className=\"text-xs text-fg-subtle\">{v.stt.apiKeyDesc} (MINIMAX_API_KEY)</p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.stt.model}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.minimax?.model ?? ''}\n onChange={(e) => updateTtsMinimax({ model: e.target.value })}\n >\n {ttsMinimax.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.voice}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.minimax?.voice ?? ''}\n onChange={(e) => updateTtsMinimax({ voice: e.target.value })}\n >\n {ttsVoicesMinimax.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n </div>\n </div>\n ) : null}\n\n {tts.provider === 'edge' ? (\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.voice}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts.edge?.voice ?? ''}\n onChange={(e) => updateTtsEdge({ voice: e.target.value })}\n >\n {ttsVoicesEdge.map((m) => (\n <option key={m.id} value={m.id}>\n {m.name}\n </option>\n ))}\n </select>\n <p className=\"text-xs text-fg-subtle\">{v.tts.edgeHint}</p>\n </div>\n ) : null}\n\n {tts.provider === 'tts-local-cli' ? (\n <div className=\"grid gap-3 sm:grid-cols-2\">\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{v.tts.localCli.command}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n value={tts['tts-local-cli']?.command ?? ''}\n onChange={(e) => updateTtsLocalCli({ command: e.target.value })}\n placeholder={v.tts.localCli.commandPlaceholder}\n />\n <p className=\"text-xs text-fg-subtle\">{v.tts.localCli.commandDesc}</p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.localCli.cwd}</FieldLabel>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n type=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n value={tts['tts-local-cli']?.cwd ?? ''}\n onChange={(e) => updateTtsLocalCli({ cwd: e.target.value })}\n placeholder=\"/path/to/cwd\"\n />\n <p className=\"text-xs text-fg-subtle\">{v.tts.localCli.cwdDesc}</p>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <FieldLabel>{v.tts.localCli.outputFormat}</FieldLabel>\n <select\n className={selectClassName()}\n value={tts['tts-local-cli']?.outputFormat ?? 'wav'}\n onChange={(e) =>\n updateTtsLocalCli({\n outputFormat: e.target.value as 'mp3' | 'opus' | 'wav',\n })\n }\n >\n <option value=\"wav\">wav</option>\n <option value=\"mp3\">mp3</option>\n <option value=\"opus\">opus</option>\n </select>\n <p className=\"text-xs text-fg-subtle\">{v.tts.localCli.outputFormatDesc}</p>\n </div>\n <div className=\"flex flex-col gap-1.5 sm:col-span-2\">\n <FieldLabel>{v.tts.localCli.timeoutMs}</FieldLabel>\n <input\n className={inputClassName()}\n type=\"number\"\n min={0}\n step={1000}\n value={\n typeof tts['tts-local-cli']?.timeoutMs === 'number'\n ? String(tts['tts-local-cli'].timeoutMs)\n : ''\n }\n onChange={(e) => {\n const raw = e.target.value.trim();\n if (raw === '') {\n updateTtsLocalCli({ timeoutMs: undefined });\n return;\n }\n const num = Number(raw);\n if (Number.isFinite(num) && num >= 0) {\n updateTtsLocalCli({ timeoutMs: num });\n }\n }}\n placeholder=\"30000\"\n />\n <p className=\"text-xs text-fg-subtle\">{v.tts.localCli.timeoutMsDesc}</p>\n </div>\n <p className=\"text-xs text-fg-subtle sm:col-span-2\">{v.tts.localCli.hint}</p>\n </div>\n ) : null}\n </>\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction FieldLabel({ children }: { children: ReactNode }) {\n return <div className=\"text-sm font-medium text-fg\">{children}</div>;\n}\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport type SearchProviderRow = {\n type: 'brave' | 'tavily' | 'bing' | 'searxng';\n apiKey: string;\n url: string;\n disabled: boolean;\n};\n\nexport type WebSearchSettingsState = {\n regionMode: 'auto' | 'cn' | 'global';\n maxResults: number;\n providers: SearchProviderRow[];\n};\n\nexport function normalizeWebSearchSettingsFromConfig(cfg: unknown): WebSearchSettingsState {\n const tools = cfg && typeof cfg === 'object' && 'tools' in cfg ? (cfg as { tools?: unknown }).tools : undefined;\n const web = tools && typeof tools === 'object' && 'web' in tools ? (tools as { web?: unknown }).web : undefined;\n const region =\n web && typeof web === 'object' && 'region' in web\n ? (web as { region?: unknown }).region\n : undefined;\n const regionMode =\n region === 'cn' || region === 'global' ? region : 'auto';\n\n const search =\n web && typeof web === 'object' && 'search' in web ? (web as { search?: unknown }).search : undefined;\n const s = search && typeof search === 'object' ? (search as Record<string, unknown>) : {};\n\n const maxResults =\n typeof s.maxResults === 'number' && Number.isFinite(s.maxResults) ? Math.floor(s.maxResults) : 5;\n\n const rawProviders = s.providers;\n const rows: SearchProviderRow[] = Array.isArray(rawProviders)\n ? rawProviders.map((p) => {\n const o = p && typeof p === 'object' ? (p as Record<string, unknown>) : {};\n const type = o.type;\n const t =\n type === 'brave' || type === 'tavily' || type === 'bing' || type === 'searxng' ? type : 'brave';\n return {\n type: t,\n apiKey: typeof o.apiKey === 'string' ? o.apiKey : '',\n url: typeof o.url === 'string' ? o.url : '',\n disabled: o.disabled === true,\n };\n })\n : [];\n\n return {\n regionMode,\n maxResults,\n providers: rows,\n };\n}\n\nexport async function fetchWebSearchSettings(): Promise<WebSearchSettingsState> {\n const res = await fetchJson<{ ok?: boolean; payload?: { config?: unknown } }>(apiUrl('/api/config'));\n return normalizeWebSearchSettingsFromConfig(res.payload?.config);\n}\n\nexport async function patchWebSearchSettings(state: WebSearchSettingsState): Promise<void> {\n const region =\n state.regionMode === 'auto' ? 'auto' : state.regionMode === 'cn' ? 'cn' : 'global';\n\n const search: Record<string, unknown> = {\n maxResults: state.maxResults,\n providers: state.providers.map((p) => {\n const row: Record<string, unknown> = {\n type: p.type,\n apiKey: p.apiKey,\n };\n if (p.type === 'searxng' && p.url.trim()) {\n row.url = p.url.trim().replace(/\\/+$/, '');\n }\n if (p.disabled) row.disabled = true;\n return row;\n }),\n };\n\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({\n tools: {\n web: {\n region,\n search,\n },\n },\n }),\n });\n void revalidateGatewayConfig();\n}\n","import { ExternalLink, Loader2, Plus, Search, Trash2 } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport {\n normalizeWebSearchSettingsFromConfig,\n patchWebSearchSettings,\n type SearchProviderRow,\n type WebSearchSettingsState,\n} from '@/features/settings/web-search-config-api';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\nimport { isMaskedKey } from '@/features/settings/providers-api';\nimport { nativeSelectMaxWidthClass, selectControlBaseClass, settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages, type WebSearchSettingsMessages } from '@/i18n/messages';\nimport { docsGuidePageUrl } from '@/navigation';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction Field({\n label,\n description,\n children,\n}: {\n label: string;\n description: string;\n children: ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"text-sm font-medium text-fg\">{label}</div>\n {children}\n <p className=\"text-xs leading-relaxed text-fg-subtle\">{description}</p>\n </div>\n );\n}\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n 'dark:border-edge',\n );\n}\n\nfunction selectClassName(): string {\n return cn(selectControlBaseClass, nativeSelectMaxWidthClass);\n}\n\nconst PROVIDER_TYPES: SearchProviderRow['type'][] = ['brave', 'tavily', 'bing', 'searxng'];\n\nfunction emptyProviderRow(): SearchProviderRow {\n return { type: 'brave', apiKey: '', url: '', disabled: false };\n}\n\nexport function WebSearchSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const w = m.webSearchSettings;\n const logs = m.logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [form, setForm] = useState<WebSearchSettingsState | null>(null);\n const [baseline, setBaseline] = useState<WebSearchSettingsState | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n const dirtyRef = useRef(false);\n\n const { data, error: swrError, isLoading, mutate } = useGatewayConfigSwr(hasToken);\n\n const parsed = useMemo(\n () =>\n data?.payload?.config !== undefined\n ? normalizeWebSearchSettingsFromConfig(data.payload.config)\n : null,\n [data],\n );\n\n useEffect(() => {\n if (!hasToken) {\n setForm(null);\n setBaseline(null);\n dirtyRef.current = false;\n return;\n }\n if (parsed === null) return;\n if (!dirtyRef.current) {\n setForm(parsed);\n setBaseline(parsed);\n }\n }, [hasToken, parsed]);\n\n const loading = Boolean(hasToken && isLoading && data === undefined && !swrError);\n const fetchError =\n swrError instanceof Error ? swrError.message : swrError ? String(swrError) : null;\n\n const dirty = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n const update = useCallback((patch: Partial<WebSearchSettingsState>) => {\n dirtyRef.current = true;\n setForm((f) => (f ? { ...f, ...patch } : null));\n }, []);\n\n const save = useCallback(async () => {\n if (!form || saving) return;\n setSaving(true);\n setError(null);\n setSaveOk(false);\n try {\n await patchWebSearchSettings(form);\n const next = structuredClone(form);\n setBaseline(next);\n setForm(next);\n dirtyRef.current = false;\n setSaveOk(true);\n window.setTimeout(() => setSaveOk(false), 2500);\n } catch (e) {\n setError(e instanceof Error ? e.message : w.saveError);\n } finally {\n setSaving(false);\n }\n }, [form, saving, w.saveError]);\n\n const discard = useCallback(() => {\n if (!baseline) return;\n dirtyRef.current = false;\n setForm(structuredClone(baseline));\n setError(null);\n setSaveOk(false);\n }, [baseline]);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-6\">\n <h1 className=\"text-lg font-semibold text-fg\">{w.title}</h1>\n <p className=\"text-sm text-fg-muted\">{w.needToken}</p>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col items-center gap-3 px-4 py-8\">\n <Loader2 className=\"size-8 animate-spin text-fg-muted\" aria-hidden />\n <p className=\"text-sm text-fg-muted\">{w.loading}</p>\n </div>\n );\n }\n\n if (!form) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{error ?? fetchError ?? w.loadError}</p>\n <Button type=\"button\" variant=\"secondary\" onClick={() => void mutate()}>\n {logs.refresh}\n </Button>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{w.title}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{w.subtitle}</p>\n <a\n href={docsGuidePageUrl(language, 'gateway')}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40\"\n >\n {w.docsLink}\n <ExternalLink className=\"size-3.5\" />\n </a>\n </div>\n <div className=\"flex shrink-0 flex-wrap items-center justify-end gap-2\">\n {saveOk ? <span className=\"text-sm text-fg-muted\">{w.saved}</span> : null}\n <Button type=\"button\" variant=\"secondary\" disabled={!dirty || saving} onClick={discard}>\n {w.discard}\n </Button>\n <Button type=\"button\" variant=\"primary\" disabled={!dirty || saving} onClick={() => void save()}>\n {saving ? w.saving : w.save}\n </Button>\n </div>\n </header>\n\n {dirty ? <p className=\"text-xs text-amber-800 dark:text-amber-200\">{w.unsavedHint}</p> : null}\n {error ? <p className=\"text-sm text-red-600 dark:text-red-400\">{error}</p> : null}\n\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={Search} title={w.sectionRegion} subtitle={w.sectionRegionHint} />\n <div className=\"flex max-w-md flex-col gap-4\">\n <Field label={w.regionLabel} description={w.regionDesc}>\n <select\n className={selectClassName()}\n value={form.regionMode}\n onChange={(e) =>\n update({\n regionMode: e.target.value as WebSearchSettingsState['regionMode'],\n })\n }\n >\n <option value=\"auto\">{w.regionAuto}</option>\n <option value=\"cn\">{w.regionCn}</option>\n <option value=\"global\">{w.regionGlobal}</option>\n </select>\n </Field>\n </div>\n </SettingsFormSection>\n\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={Search} title={w.sectionSearch} subtitle={w.sectionSearchHint} />\n <div className=\"flex max-w-xl flex-col gap-6\">\n <Field label={w.maxResultsLabel} description={w.maxResultsDesc}>\n <input\n type=\"number\"\n min={1}\n max={50}\n className={inputClassName()}\n value={form.maxResults}\n onChange={(e) => update({ maxResults: Math.max(1, Math.min(50, Number(e.target.value) || 5)) })}\n />\n </Field>\n\n <div className=\"flex flex-col gap-3\">\n <div className=\"text-sm font-medium text-fg\">{w.providersTitle}</div>\n {form.providers.map((row, index) => (\n <ProviderRowEditor\n key={index}\n row={row}\n labels={w}\n onChange={(next) => {\n const nextRows = [...form.providers];\n nextRows[index] = next;\n update({ providers: nextRows });\n }}\n onRemove={() => {\n update({ providers: form.providers.filter((_, i) => i !== index) });\n }}\n />\n ))}\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"w-fit gap-1.5 text-sm\"\n onClick={() => update({ providers: [...form.providers, emptyProviderRow()] })}\n >\n <Plus className=\"size-4\" />\n {w.addProvider}\n </Button>\n </div>\n </div>\n </SettingsFormSection>\n\n <p className=\"text-xs leading-relaxed text-fg-subtle\">{w.footerHint}</p>\n </div>\n );\n}\n\nfunction ProviderRowEditor({\n row,\n labels,\n onChange,\n onRemove,\n}: {\n row: SearchProviderRow;\n labels: WebSearchSettingsMessages;\n onChange: (r: SearchProviderRow) => void;\n onRemove: () => void;\n}) {\n return (\n <div className=\"flex flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel/60 p-4 dark:border-edge-subtle\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <select\n className={cn(selectClassName(), 'min-w-[8rem]')}\n value={row.type}\n onChange={(e) =>\n onChange({\n ...row,\n type: e.target.value as SearchProviderRow['type'],\n url: e.target.value === 'searxng' ? row.url : '',\n })\n }\n >\n {PROVIDER_TYPES.map((t) => (\n <option key={t} value={t}>\n {labels.providerTypes[t]}\n </option>\n ))}\n </select>\n <div className=\"flex items-center gap-2\">\n <label className=\"flex cursor-pointer items-center gap-1.5 text-xs text-fg-muted\">\n <input\n type=\"checkbox\"\n className=\"size-3.5 rounded border-edge\"\n checked={row.disabled}\n onChange={(e) => onChange({ ...row, disabled: e.target.checked })}\n />\n {labels.disabled}\n </label>\n <Button type=\"button\" variant=\"ghost\" className=\"h-8 px-2 text-fg-muted\" onClick={onRemove}>\n <Trash2 className=\"size-4\" />\n </Button>\n </div>\n </div>\n {row.type === 'searxng' ? (\n <Field label={labels.urlLabel} description={labels.urlDesc}>\n <input\n type=\"url\"\n className={inputClassName()}\n value={row.url}\n placeholder=\"http://localhost:8080\"\n onChange={(e) => onChange({ ...row, url: e.target.value })}\n />\n </Field>\n ) : null}\n <Field label={labels.apiKeyLabel} description={labels.apiKeyDesc}>\n <input\n type=\"password\"\n autoComplete=\"off\"\n className={inputClassName()}\n value={isMaskedKey(row.apiKey) ? '' : row.apiKey}\n placeholder={isMaskedKey(row.apiKey) ? labels.keyPlaceholderMasked : labels.keyPlaceholder}\n onChange={(e) => onChange({ ...row, apiKey: e.target.value })}\n />\n </Field>\n </div>\n );\n}\n","export type McpHeaderEntry = {\n key: string;\n value: string;\n};\n\nexport function parseHeadersPaste(text: string): McpHeaderEntry[] | null {\n const trimmed = text.trim();\n if (!trimmed) return null;\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return Object.entries(parsed as Record<string, unknown>).map(([key, value]) => ({\n key,\n value: value == null ? '' : String(value),\n }));\n }\n } catch {\n // fall through to line parsing\n }\n\n const rows: McpHeaderEntry[] = [];\n for (const line of trimmed.split(/\\r?\\n/)) {\n const row = line.trim();\n if (!row) continue;\n const colon = row.indexOf(':');\n if (colon > 0) {\n rows.push({\n key: row.slice(0, colon).trim(),\n value: row.slice(colon + 1).trim(),\n });\n continue;\n }\n const eq = row.indexOf('=');\n if (eq > 0) {\n rows.push({\n key: row.slice(0, eq).trim(),\n value: row.slice(eq + 1).trim(),\n });\n }\n }\n return rows.length > 0 ? rows : null;\n}\n\nexport function headersToRecord(headers: McpHeaderEntry[]): Record<string, string> | undefined {\n const out: Record<string, string> = {};\n for (const row of headers) {\n const key = row.key.trim();\n if (!key) continue;\n out[key] = row.value;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nexport function recordToHeaders(record: Record<string, unknown> | undefined): McpHeaderEntry[] {\n if (!record || typeof record !== 'object') {\n return [{ key: '', value: '' }];\n }\n const rows = Object.entries(record).map(([key, value]) => ({\n key,\n value: value == null ? '' : String(value),\n }));\n return rows.length > 0 ? rows : [{ key: '', value: '' }];\n}\n","import { revalidateGatewayConfig } from '@/features/gateway/gateway-config-swr';\nimport {\n headersToRecord,\n recordToHeaders,\n type McpHeaderEntry,\n} from '@/features/settings/mcp/mcp-headers-utils';\nimport { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nexport type McpToolInfo = {\n name: string;\n shortName?: string;\n description?: string;\n};\n\nexport type McpTransportKind = 'stdio' | 'sse' | 'streamable-http';\n\nexport type McpServerRow = {\n id: string;\n transport: McpTransportKind;\n command: string;\n argsText: string;\n envJson: string;\n cwd: string;\n url: string;\n headers: McpHeaderEntry[];\n connectionTimeoutMs: number | undefined;\n};\n\nexport type McpSettingsState = {\n sessionIdleTtlMinutes: number | undefined;\n servers: McpServerRow[];\n};\n\nfunction parseArgsText(text: string): string[] | undefined {\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n return trimmed.split(/\\s+/).filter(Boolean);\n}\n\nfunction parseJsonObject(text: string): Record<string, unknown> | undefined {\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n const parsed = JSON.parse(trimmed) as unknown;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('Expected a JSON object');\n }\n return parsed as Record<string, unknown>;\n}\n\nfunction rowToServerConfig(row: McpServerRow): Record<string, unknown> {\n if (row.transport === 'stdio') {\n const config: Record<string, unknown> = {\n command: row.command.trim(),\n };\n const args = parseArgsText(row.argsText);\n if (args?.length) config.args = args;\n if (row.cwd.trim()) config.cwd = row.cwd.trim();\n if (row.envJson.trim()) config.env = parseJsonObject(row.envJson);\n if (row.connectionTimeoutMs != null && Number.isFinite(row.connectionTimeoutMs)) {\n config.connectionTimeoutMs = row.connectionTimeoutMs;\n }\n return config;\n }\n\n const config: Record<string, unknown> = {\n url: row.url.trim(),\n transport: row.transport,\n };\n const headers = headersToRecord(row.headers);\n if (headers) config.headers = headers;\n if (row.connectionTimeoutMs != null && Number.isFinite(row.connectionTimeoutMs)) {\n config.connectionTimeoutMs = row.connectionTimeoutMs;\n }\n return config;\n}\n\nfunction serverConfigToRow(id: string, raw: Record<string, unknown>): McpServerRow {\n const hasUrl = typeof raw.url === 'string' && raw.url.trim().length > 0;\n const transportRaw = typeof raw.transport === 'string' ? raw.transport.trim().toLowerCase() : '';\n const transport: McpTransportKind = hasUrl\n ? transportRaw === 'sse'\n ? 'sse'\n : 'streamable-http'\n : 'stdio';\n\n const headersRaw =\n raw.headers && typeof raw.headers === 'object' && !Array.isArray(raw.headers)\n ? (raw.headers as Record<string, unknown>)\n : undefined;\n\n return {\n id,\n transport,\n command: typeof raw.command === 'string' ? raw.command : '',\n argsText: Array.isArray(raw.args) ? raw.args.map(String).join(' ') : '',\n envJson: raw.env && typeof raw.env === 'object' ? JSON.stringify(raw.env, null, 2) : '',\n cwd: typeof raw.cwd === 'string' ? raw.cwd : typeof raw.workingDirectory === 'string' ? raw.workingDirectory : '',\n url: typeof raw.url === 'string' ? raw.url : '',\n headers: recordToHeaders(headersRaw),\n connectionTimeoutMs:\n typeof raw.connectionTimeoutMs === 'number' && Number.isFinite(raw.connectionTimeoutMs)\n ? raw.connectionTimeoutMs\n : undefined,\n };\n}\n\nexport function emptyMcpServerRow(id = ''): McpServerRow {\n return {\n id,\n transport: 'stdio',\n command: '',\n argsText: '',\n envJson: '',\n cwd: '',\n url: '',\n headers: [{ key: 'Authorization', value: '' }],\n connectionTimeoutMs: undefined,\n };\n}\n\nexport function normalizeMcpSettingsFromConfig(cfg: unknown): McpSettingsState {\n const mcp =\n cfg && typeof cfg === 'object' && 'mcp' in cfg ? (cfg as { mcp?: unknown }).mcp : undefined;\n const root = mcp && typeof mcp === 'object' ? (mcp as Record<string, unknown>) : {};\n const serversRaw = root.servers;\n const servers: McpServerRow[] =\n serversRaw && typeof serversRaw === 'object' && !Array.isArray(serversRaw)\n ? Object.entries(serversRaw as Record<string, unknown>)\n .filter(([, v]) => v && typeof v === 'object')\n .map(([id, v]) => serverConfigToRow(id, v as Record<string, unknown>))\n .sort((a, b) => a.id.localeCompare(b.id))\n : [];\n\n const ttlMs = typeof root.sessionIdleTtlMs === 'number' ? root.sessionIdleTtlMs : undefined;\n const sessionIdleTtlMinutes =\n ttlMs == null ? undefined : ttlMs === 0 ? 0 : Math.round(ttlMs / 60_000);\n\n return { sessionIdleTtlMinutes, servers };\n}\n\nexport function buildMcpServerConfigFromRow(row: McpServerRow): Record<string, unknown> {\n return rowToServerConfig(row);\n}\n\nexport async function patchMcpSettings(state: McpSettingsState): Promise<void> {\n const servers: Record<string, unknown> = {};\n for (const row of state.servers) {\n const id = row.id.trim();\n if (!id) continue;\n servers[id] = rowToServerConfig(row);\n }\n\n const mcp: Record<string, unknown> = { servers };\n if (state.sessionIdleTtlMinutes != null && Number.isFinite(state.sessionIdleTtlMinutes)) {\n mcp.sessionIdleTtlMs =\n state.sessionIdleTtlMinutes === 0 ? 0 : Math.round(state.sessionIdleTtlMinutes * 60_000);\n }\n\n await fetchJson(apiUrl('/api/config'), {\n method: 'PATCH',\n body: JSON.stringify({ mcp }),\n });\n void revalidateGatewayConfig();\n}\n\nexport type McpServerTestResult = {\n serverId: string;\n toolCount: number;\n tools: McpToolInfo[];\n};\n\n/** Accept legacy `string[]` or `{ name, description? }[]` from the gateway. */\nexport function normalizeMcpTools(tools: unknown): McpToolInfo[] {\n if (!Array.isArray(tools)) return [];\n const out: McpToolInfo[] = [];\n for (const item of tools) {\n if (typeof item === 'string') {\n const name = item.trim();\n if (name) out.push({ name });\n continue;\n }\n if (!item || typeof item !== 'object') continue;\n const raw = item as { name?: unknown; shortName?: unknown; description?: unknown };\n if (typeof raw.name !== 'string') continue;\n const name = raw.name.trim();\n if (!name) continue;\n const shortName =\n typeof raw.shortName === 'string' && raw.shortName.trim() ? raw.shortName.trim() : undefined;\n const description =\n typeof raw.description === 'string' && raw.description.trim()\n ? raw.description.trim()\n : undefined;\n out.push({ name, shortName, description });\n }\n return out;\n}\n\nexport async function testMcpServer(\n serverId: string,\n server?: Record<string, unknown>,\n): Promise<McpServerTestResult> {\n const res = await fetchJson<{\n ok?: boolean;\n payload?: { serverId?: string; toolCount?: number; tools?: unknown };\n error?: string;\n }>(\n apiUrl(`/api/mcp/servers/${encodeURIComponent(serverId)}/test`),\n {\n method: 'POST',\n body: server ? JSON.stringify({ server }) : undefined,\n },\n );\n if (!res.payload) {\n throw new Error(res.error ?? 'MCP test failed');\n }\n const tools = normalizeMcpTools(res.payload.tools);\n return {\n serverId: res.payload.serverId ?? serverId,\n toolCount: typeof res.payload.toolCount === 'number' ? res.payload.toolCount : tools.length,\n tools,\n };\n}\n\nexport async function fetchMcpServerTools(serverId: string): Promise<McpToolInfo[]> {\n const res = await fetchJson<{\n ok?: boolean;\n payload?: { tools?: unknown };\n error?: string;\n }>(apiUrl(`/api/mcp/servers/${encodeURIComponent(serverId)}/tools`));\n return normalizeMcpTools(res.payload?.tools);\n}\n\nexport function connectionTimeoutSeconds(row: McpServerRow): string {\n if (row.connectionTimeoutMs == null || !Number.isFinite(row.connectionTimeoutMs)) return '';\n return String(Math.round(row.connectionTimeoutMs / 1000));\n}\n\nexport function parseConnectionTimeoutSeconds(raw: string): number | undefined {\n const trimmed = raw.trim();\n if (!trimmed) return undefined;\n const seconds = Number.parseInt(trimmed, 10);\n if (!Number.isFinite(seconds) || seconds < 1 || seconds > 600) return undefined;\n return seconds * 1000;\n}\n\nexport function mcpServerCardKey(row: McpServerRow, index: number): string {\n return row.id.trim() || `draft-${index}`;\n}\n","import { ClipboardPaste, Trash2 } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { parseHeadersPaste, type McpHeaderEntry } from '@/features/settings/mcp/mcp-headers-utils';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\n\ntype Props = {\n label: string;\n optionalLabel?: string;\n addLabel: string;\n removeHeaderAria: string;\n pasteLabel: string;\n pasteFailed: string;\n keyPlaceholder: string;\n valuePlaceholder: string;\n headers: McpHeaderEntry[];\n onChange: (headers: McpHeaderEntry[]) => void;\n};\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n );\n}\n\nexport function McpHeadersEditor({\n label,\n optionalLabel,\n addLabel,\n removeHeaderAria,\n pasteLabel,\n pasteFailed,\n keyPlaceholder,\n valuePlaceholder,\n headers,\n onChange,\n}: Props) {\n const updateRow = (index: number, patch: Partial<McpHeaderEntry>) => {\n onChange(headers.map((row, i) => (i === index ? { ...row, ...patch } : row)));\n };\n\n const addRow = () => {\n onChange([...headers, { key: '', value: '' }]);\n };\n\n const removeRow = (index: number) => {\n const next = headers.filter((_, i) => i !== index);\n onChange(next.length > 0 ? next : [{ key: '', value: '' }]);\n };\n\n const pasteFromClipboard = async () => {\n try {\n const text = await navigator.clipboard.readText();\n const parsed = parseHeadersPaste(text);\n if (!parsed?.length) {\n window.alert(pasteFailed);\n return;\n }\n onChange(parsed);\n } catch {\n window.alert(pasteFailed);\n }\n };\n\n return (\n <div className=\"flex flex-col gap-2 md:col-span-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-1.5 text-sm font-medium text-fg\">\n <span>{label}</span>\n {optionalLabel ? <span className=\"font-normal text-fg-subtle\">{optionalLabel}</span> : null}\n </div>\n <Button type=\"button\" variant=\"ghost\" className=\"h-8 gap-1.5 px-2 text-xs\" onClick={() => void pasteFromClipboard()}>\n <ClipboardPaste className=\"size-3.5\" aria-hidden />\n {pasteLabel}\n </Button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {headers.map((row, index) => (\n <div key={`header-${index}`} className=\"flex items-center gap-2\">\n <input\n className={cn(inputClassName(), 'min-w-0 flex-1 font-mono text-xs')}\n value={row.key}\n placeholder={keyPlaceholder}\n onChange={(e) => updateRow(index, { key: e.target.value })}\n />\n <input\n className={cn(inputClassName(), 'min-w-0 flex-[1.4] font-mono text-xs')}\n value={row.value}\n placeholder={valuePlaceholder}\n onChange={(e) => updateRow(index, { value: e.target.value })}\n />\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"size-9 shrink-0 px-0\"\n disabled={headers.length <= 1 && !row.key && !row.value}\n onClick={() => removeRow(index)}\n aria-label={removeHeaderAria}\n >\n <Trash2 className=\"size-4 text-fg-subtle\" aria-hidden />\n </Button>\n </div>\n ))}\n </div>\n\n <button\n type=\"button\"\n className=\"self-start text-sm text-accent hover:underline\"\n onClick={addRow}\n >\n + {addLabel}\n </button>\n </div>\n );\n}\n","import { ChevronDown, Loader2, Plug, Trash2, Wrench, Zap } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { McpHeadersEditor } from '@/features/settings/mcp/mcp-headers-editor';\nimport {\n connectionTimeoutSeconds,\n parseConnectionTimeoutSeconds,\n type McpServerRow,\n type McpToolInfo,\n type McpTransportKind,\n} from '@/features/settings/mcp/mcp-config-api';\nimport type { McpSettingsMessages } from '@/i18n/messages';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\n\nconst TRANSPORTS: McpTransportKind[] = ['stdio', 'sse', 'streamable-http'];\n\ntype ServerToolsState =\n | { status: 'idle' }\n | { status: 'loading' }\n | { status: 'ok'; tools: McpToolInfo[] }\n | { status: 'error'; message: string };\n\nfunction Field({\n label,\n description,\n required,\n children,\n}: {\n label: string;\n description?: string;\n required?: boolean;\n children: ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"text-sm font-medium text-fg\">\n {label}\n {required ? <span className=\"ml-0.5 text-danger\">*</span> : null}\n </div>\n {children}\n {description ? <p className=\"text-xs leading-relaxed text-fg-subtle\">{description}</p> : null}\n </div>\n );\n}\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n );\n}\n\nfunction serverEndpointSummary(row: McpServerRow): string {\n if (row.transport === 'stdio') {\n const command = row.command.trim();\n if (!command) return '';\n const args = row.argsText.trim();\n return args ? `${command} ${args}` : command;\n }\n return row.url.trim();\n}\n\ntype Props = {\n row: McpServerRow;\n expanded: boolean;\n onToggle: () => void;\n t: McpSettingsMessages;\n testing: boolean;\n toolState: ServerToolsState;\n onUpdate: (patch: Partial<McpServerRow>) => void;\n onRemove: () => void;\n onTest: () => void;\n onViewTools: (tools: McpToolInfo[]) => void;\n};\n\nexport function McpServerCard({\n row,\n expanded,\n onToggle,\n t,\n testing,\n toolState,\n onUpdate,\n onRemove,\n onTest,\n onViewTools,\n}: Props) {\n const title = row.id.trim() || t.cardUntitled;\n const summary = serverEndpointSummary(row);\n const transportLabel = t.transportLabels[row.transport];\n\n return (\n <div className=\"rounded-xl border border-edge bg-surface-panel\">\n <div className=\"flex items-start gap-2 p-4\">\n <button\n type=\"button\"\n className=\"flex min-w-0 flex-1 items-start gap-2 rounded-lg text-left hover:opacity-90\"\n aria-expanded={expanded}\n aria-label={expanded ? t.cardCollapseAria : t.cardExpandAria}\n onClick={onToggle}\n >\n <ChevronDown\n className={cn(\n 'mt-0.5 size-4 shrink-0 text-fg-subtle transition-transform',\n expanded && 'rotate-180',\n )}\n aria-hidden\n />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <Plug className=\"size-4 shrink-0 text-accent\" aria-hidden />\n <span className=\"truncate font-medium text-fg\">{title}</span>\n <span className=\"rounded-md border border-edge bg-surface-base px-1.5 py-0.5 text-[11px] text-fg-muted\">\n {transportLabel}\n </span>\n {toolState.status === 'ok' && toolState.tools.length > 0 ? (\n <span className=\"inline-flex items-center gap-1 rounded-md border border-edge bg-surface-base px-1.5 py-0.5 text-[11px] text-fg-muted\">\n <Wrench className=\"size-3\" aria-hidden />\n {toolState.tools.length}\n </span>\n ) : null}\n </div>\n {!expanded && summary ? (\n <p className=\"mt-1 truncate font-mono text-xs text-fg-subtle\" title={summary}>\n {summary}\n </p>\n ) : null}\n {!expanded && toolState.status === 'error' ? (\n <p className=\"mt-1 truncate text-xs text-red-600 dark:text-red-300\" title={toolState.message}>\n {toolState.message}\n </p>\n ) : null}\n </div>\n </button>\n\n <div className=\"flex shrink-0 flex-wrap items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 px-2 text-xs\"\n disabled={!row.id.trim() || testing}\n onClick={(e) => {\n e.stopPropagation();\n onTest();\n }}\n >\n {testing ? (\n <Loader2 className=\"size-4 animate-spin\" aria-hidden />\n ) : (\n <Zap className=\"size-4\" aria-hidden />\n )}\n {t.testConnection}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 px-2 text-xs\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n >\n <Trash2 className=\"size-4\" aria-hidden />\n {t.removeServer}\n </Button>\n </div>\n </div>\n\n {expanded ? (\n <div className=\"border-t border-edge px-4 pb-4 pt-3\">\n <div className=\"grid gap-4 md:grid-cols-2\">\n <Field label={t.transportLabel} required>\n <select\n className={inputClassName()}\n value={row.transport}\n onChange={(e) => onUpdate({ transport: e.target.value as McpTransportKind })}\n >\n {TRANSPORTS.map((kind) => (\n <option key={kind} value={kind}>\n {t.transportLabels[kind]}\n </option>\n ))}\n </select>\n </Field>\n\n <Field label={t.serverIdLabel} required>\n <input\n className={inputClassName()}\n value={row.id}\n placeholder={t.serverIdPlaceholder}\n onChange={(e) => onUpdate({ id: e.target.value })}\n />\n </Field>\n\n {row.transport === 'stdio' ? (\n <>\n <Field label={t.commandLabel}>\n <input\n className={inputClassName()}\n value={row.command}\n onChange={(e) => onUpdate({ command: e.target.value })}\n />\n </Field>\n <Field label={t.argsLabel} description={t.argsHint}>\n <input\n className={inputClassName()}\n value={row.argsText}\n onChange={(e) => onUpdate({ argsText: e.target.value })}\n />\n </Field>\n <Field label={t.cwdLabel}>\n <input\n className={inputClassName()}\n value={row.cwd}\n onChange={(e) => onUpdate({ cwd: e.target.value })}\n />\n </Field>\n <Field label={t.envLabel} description={t.envHint}>\n <textarea\n className={cn(inputClassName(), 'min-h-[4rem] font-mono text-xs')}\n value={row.envJson}\n onChange={(e) => onUpdate({ envJson: e.target.value })}\n />\n </Field>\n </>\n ) : (\n <>\n <div className=\"md:col-span-2\">\n <Field label={t.urlLabel} required>\n <input\n className={cn(inputClassName(), 'font-mono text-xs')}\n value={row.url}\n placeholder=\"https://example.com/mcp\"\n onChange={(e) => onUpdate({ url: e.target.value })}\n />\n </Field>\n </div>\n <McpHeadersEditor\n label={t.headersLabel}\n optionalLabel={t.optionalSuffix}\n addLabel={t.addHeader}\n removeHeaderAria={t.removeHeader}\n pasteLabel={t.pasteHeaders}\n pasteFailed={t.pasteHeadersFailed}\n keyPlaceholder={t.headerKeyPlaceholder}\n valuePlaceholder={t.headerValuePlaceholder}\n headers={row.headers}\n onChange={(headers) => onUpdate({ headers })}\n />\n </>\n )}\n\n <Field label={t.timeoutLabel} description={t.timeoutHint}>\n <input\n type=\"number\"\n min={1}\n max={600}\n className={inputClassName()}\n value={connectionTimeoutSeconds(row)}\n placeholder={t.timeoutPlaceholder}\n onChange={(e) =>\n onUpdate({\n connectionTimeoutMs: parseConnectionTimeoutSeconds(e.target.value),\n })\n }\n />\n </Field>\n </div>\n\n {toolState.status === 'loading' ? (\n <div className=\"mt-4 flex items-center gap-2 text-sm text-fg-muted\">\n <Loader2 className=\"size-4 animate-spin\" aria-hidden />\n {t.toolsLoading}\n </div>\n ) : null}\n\n {toolState.status === 'error' ? (\n <p className=\"mt-4 rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-xs text-red-600 dark:text-red-300\">\n {toolState.message}\n </p>\n ) : null}\n\n {toolState.status === 'ok' ? (\n <div className=\"mt-4 rounded-lg border border-edge bg-surface-base px-3 py-2.5\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2 text-sm font-medium text-fg\">\n <Wrench className=\"size-4 text-accent\" aria-hidden />\n {toolState.tools.length === 0\n ? t.toolsEmpty\n : t.toolsTitle.replace('{{count}}', String(toolState.tools.length))}\n </div>\n {toolState.tools.length > 0 ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 text-xs\"\n onClick={() => onViewTools(toolState.tools)}\n >\n {t.viewAllTools}\n </Button>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n );\n}\n","import type { McpToolInfo } from '@/features/settings/mcp/mcp-config-api';\n\nfunction displayToolName(fullName: string | undefined, stripPrefix?: string): string {\n if (!fullName) return '';\n if (stripPrefix && fullName.startsWith(stripPrefix)) {\n return fullName.slice(stripPrefix.length);\n }\n return fullName;\n}\n\nexport function toolMatchesQuery(tool: McpToolInfo, query: string, stripPrefix?: string): boolean {\n const q = query.trim().toLowerCase();\n if (!q) return true;\n const shortName = tool.shortName || displayToolName(tool.name, stripPrefix);\n const haystack = [tool.name, shortName, tool.description].filter(Boolean).join('\\n').toLowerCase();\n return haystack.includes(q);\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Search, Wrench, X } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport type { McpToolInfo } from '@/features/settings/mcp/mcp-config-api';\nimport { toolMatchesQuery } from '@/features/settings/mcp/mcp-tools-utils';\nimport { cn } from '@/lib/cn';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n serverId: string;\n title: string;\n subtitle: string;\n searchPlaceholder: string;\n searchEmptyLabel: string;\n emptyLabel: string;\n closeLabel: string;\n tools: McpToolInfo[];\n stripPrefix?: string;\n};\n\nfunction displayToolName(fullName: string | undefined, stripPrefix?: string): string {\n if (!fullName) return '';\n if (stripPrefix && fullName.startsWith(stripPrefix)) {\n return fullName.slice(stripPrefix.length);\n }\n return fullName;\n}\n\nexport function McpToolsListDialog({\n open,\n onOpenChange,\n serverId,\n title,\n subtitle,\n searchPlaceholder,\n searchEmptyLabel,\n emptyLabel,\n closeLabel,\n tools,\n stripPrefix,\n}: Props) {\n const [query, setQuery] = useState('');\n\n useEffect(() => {\n if (!open) setQuery('');\n }, [open]);\n\n const filteredTools = useMemo(\n () => tools.filter((tool) => toolMatchesQuery(tool, query, stripPrefix)),\n [query, stripPrefix, tools],\n );\n\n const hasQuery = query.trim().length > 0;\n\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim backdrop-blur-[1px]', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'fixed left-1/2 top-1/2 flex max-h-[min(88vh,40rem)] w-[min(100%-2rem,min(92vw,36rem))] -translate-x-1/2 -translate-y-1/2 flex-col',\n SETTINGS_SHELL_CONTENT_Z,\n 'rounded-2xl border border-edge bg-surface-panel shadow-popover outline-none dark:border-edge',\n )}\n >\n <div className=\"flex items-start justify-between gap-3 border-b border-edge px-5 py-4\">\n <div className=\"min-w-0\">\n <Dialog.Title className=\"flex items-center gap-2 text-base font-semibold text-fg\">\n <Wrench className=\"size-4 shrink-0 text-accent\" aria-hidden />\n {title}\n </Dialog.Title>\n <Dialog.Description className=\"mt-1 text-sm text-fg-muted\">\n {subtitle.replace('{{serverId}}', serverId).replace('{{count}}', String(tools.length))}\n </Dialog.Description>\n </div>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"size-8 shrink-0 px-0\" aria-label={closeLabel}>\n <X className=\"size-4\" aria-hidden />\n </Button>\n </Dialog.Close>\n </div>\n\n {tools.length > 0 ? (\n <div className=\"border-b border-edge px-5 py-3\">\n <div className=\"relative\">\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle\"\n aria-hidden\n />\n <input\n type=\"search\"\n value={query}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n className={cn(\n 'w-full rounded-lg border border-edge bg-surface-panel py-2 pl-9 pr-3 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n )}\n onChange={(e) => setQuery(e.target.value)}\n />\n </div>\n {hasQuery ? (\n <p className=\"mt-2 text-xs text-fg-subtle\">\n {filteredTools.length} / {tools.length}\n </p>\n ) : null}\n </div>\n ) : null}\n\n <div className=\"min-h-0 flex-1 overflow-y-auto px-5 py-4\">\n {tools.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{emptyLabel}</p>\n ) : filteredTools.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{searchEmptyLabel}</p>\n ) : (\n <ul className=\"flex flex-col gap-2\">\n {filteredTools.map((tool, index) => {\n const shortName =\n tool.shortName || displayToolName(tool.name, stripPrefix) || tool.name || '?';\n const toolKey = tool.name || `tool-${index}`;\n return (\n <li\n key={toolKey}\n className=\"min-w-0 rounded-lg border border-edge bg-surface-base px-3 py-2.5\"\n >\n <div\n className=\"truncate font-mono text-sm font-medium text-fg\"\n title={tool.name !== shortName ? tool.name : shortName}\n >\n {shortName}\n </div>\n {tool.description ? (\n <p\n className=\"mt-1 truncate text-xs leading-relaxed text-fg-muted\"\n title={tool.description}\n >\n {tool.description}\n </p>\n ) : null}\n </li>\n );\n })}\n </ul>\n )}\n </div>\n\n <div className=\"flex justify-end border-t border-edge px-5 py-3\">\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"secondary\">\n {closeLabel}\n </Button>\n </Dialog.Close>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { Cable, Loader2, Plus, Plug } from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { useGatewayConfigSwr } from '@/features/gateway/gateway-config-swr';\nimport { SettingsFormSection, SettingsFormSectionHeader } from '@/features/settings/settings-form-section';\nimport {\n emptyMcpServerRow,\n buildMcpServerConfigFromRow,\n mcpServerCardKey,\n normalizeMcpSettingsFromConfig,\n patchMcpSettings,\n testMcpServer,\n type McpSettingsState,\n type McpToolInfo,\n} from '@/features/settings/mcp/mcp-config-api';\nimport { McpServerCard } from '@/features/settings/mcp/mcp-server-card';\nimport { McpToolsListDialog } from '@/features/settings/mcp/mcp-tools-list-dialog';\nimport { settingsInputFocusClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport { messages } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nfunction inputClassName(): string {\n return cn(\n 'w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg',\n 'placeholder:text-fg-subtle',\n settingsInputFocusClass,\n );\n}\n\ntype ServerToolsState =\n | { status: 'idle' }\n | { status: 'loading' }\n | { status: 'ok'; tools: McpToolInfo[] }\n | { status: 'error'; message: string };\n\nexport function McpSettingsPanel() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const t = m.mcpSettings;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n\n const [form, setForm] = useState<McpSettingsState | null>(null);\n const [baseline, setBaseline] = useState<McpSettingsState | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [saveOk, setSaveOk] = useState(false);\n const [testingId, setTestingId] = useState<string | null>(null);\n const [serverTools, setServerTools] = useState<Record<string, ServerToolsState>>({});\n const [toolsDialog, setToolsDialog] = useState<{ serverId: string; tools: McpToolInfo[] } | null>(\n null,\n );\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(() => new Set());\n const dirtyRef = useRef(false);\n\n const { data, error: swrError, isLoading, mutate } = useGatewayConfigSwr(hasToken);\n\n const parsed = useMemo(\n () =>\n data?.payload?.config !== undefined ? normalizeMcpSettingsFromConfig(data.payload.config) : null,\n [data],\n );\n\n useEffect(() => {\n if (!hasToken) {\n setForm(null);\n setBaseline(null);\n dirtyRef.current = false;\n setExpandedKeys(new Set());\n return;\n }\n if (parsed === null) return;\n if (!dirtyRef.current) {\n setForm(parsed);\n setBaseline(parsed);\n setExpandedKeys(new Set());\n }\n }, [hasToken, parsed]);\n\n const loading = Boolean(hasToken && isLoading && data === undefined && !swrError);\n const fetchError =\n swrError instanceof Error ? swrError.message : swrError ? String(swrError) : null;\n\n const dirty = useMemo(() => {\n if (!form || !baseline) return false;\n return JSON.stringify(form) !== JSON.stringify(baseline);\n }, [form, baseline]);\n\n const toggleExpanded = useCallback((key: string) => {\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n }, []);\n\n const updateServer = useCallback((index: number, patch: Partial<McpSettingsState['servers'][number]>) => {\n dirtyRef.current = true;\n setForm((f) => {\n if (!f) return f;\n const servers = [...f.servers];\n const prev = servers[index];\n if (!prev) return f;\n servers[index] = { ...prev, ...patch };\n if (patch.id && patch.id !== prev.id) {\n const prevKey = mcpServerCardKey(prev, index);\n const nextKey = mcpServerCardKey({ ...prev, ...patch }, index);\n setServerTools((st) => {\n const next = { ...st };\n if (prevKey !== nextKey && next[prevKey]) {\n next[nextKey] = next[prevKey]!;\n delete next[prevKey];\n }\n delete next[prev.id];\n return next;\n });\n setExpandedKeys((keys) => {\n if (!keys.has(prevKey)) return keys;\n const next = new Set(keys);\n next.delete(prevKey);\n next.add(nextKey);\n return next;\n });\n }\n return { ...f, servers };\n });\n }, []);\n\n const addServer = useCallback(() => {\n dirtyRef.current = true;\n setForm((f) => {\n if (!f) return f;\n const nextIndex = f.servers.length;\n setExpandedKeys((keys) => new Set(keys).add(`draft-${nextIndex}`));\n return { ...f, servers: [...f.servers, emptyMcpServerRow(`server-${nextIndex + 1}`)] };\n });\n }, []);\n\n const removeServer = useCallback((index: number) => {\n dirtyRef.current = true;\n setForm((f) => {\n if (!f) return f;\n const removed = f.servers[index];\n if (removed) {\n const key = mcpServerCardKey(removed, index);\n setExpandedKeys((keys) => {\n const next = new Set(keys);\n next.delete(key);\n return next;\n });\n if (removed.id) {\n setServerTools((st) => {\n const next = { ...st };\n delete next[removed.id];\n return next;\n });\n }\n }\n return { ...f, servers: f.servers.filter((_, i) => i !== index) };\n });\n }, []);\n\n const save = useCallback(async () => {\n if (!form || saving) return;\n setSaving(true);\n setError(null);\n setSaveOk(false);\n try {\n await patchMcpSettings(form);\n const next = structuredClone(form);\n setBaseline(next);\n setForm(next);\n dirtyRef.current = false;\n setSaveOk(true);\n setExpandedKeys(new Set());\n void mutate();\n } catch (e) {\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setSaving(false);\n }\n }, [form, mutate, saving]);\n\n const runTest = useCallback(async (serverId: string, row?: McpSettingsState['servers'][number]) => {\n if (!serverId.trim()) return;\n setTestingId(serverId);\n setError(null);\n setServerTools((prev) => ({ ...prev, [serverId]: { status: 'loading' } }));\n try {\n const serverConfig = row ? buildMcpServerConfigFromRow(row) : undefined;\n const result = await testMcpServer(serverId.trim(), serverConfig);\n setServerTools((prev) => ({\n ...prev,\n [serverId]: {\n status: 'ok',\n tools: result.tools,\n },\n }));\n } catch (e) {\n const message = e instanceof Error ? e.message : String(e);\n setServerTools((prev) => ({\n ...prev,\n [serverId]: { status: 'error', message },\n }));\n } finally {\n setTestingId(null);\n }\n }, []);\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n <p className=\"text-sm text-fg-muted\">{m.token.description}</p>\n </div>\n );\n }\n\n if (loading || !form) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{t.title}</h1>\n <p className=\"text-sm text-fg-muted\">{t.loading}</p>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8\">\n <div>\n <h1 className=\"text-lg font-semibold tracking-tight text-fg\">{t.title}</h1>\n <p className=\"mt-1 text-sm text-fg-muted\">{t.subtitle}</p>\n </div>\n\n {(fetchError || error) && (\n <p className=\"rounded-lg border border-red-500/30 bg-red-500/10 px-3 py-2 text-sm text-red-600 dark:text-red-300\">\n {error ?? fetchError}\n </p>\n )}\n {saveOk && (\n <p className=\"rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg-muted\">\n {t.saved}\n </p>\n )}\n\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={Cable} title={t.globalTitle} subtitle={t.globalHint} />\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"text-sm font-medium text-fg\">{t.idleTtlLabel}</div>\n <input\n type=\"number\"\n min={0}\n className={inputClassName()}\n value={form.sessionIdleTtlMinutes ?? ''}\n placeholder={t.idleTtlPlaceholder}\n onChange={(e) => {\n dirtyRef.current = true;\n const raw = e.target.value.trim();\n setForm((f) =>\n f\n ? {\n ...f,\n sessionIdleTtlMinutes: raw === '' ? undefined : Number.parseInt(raw, 10),\n }\n : f,\n );\n }}\n />\n <p className=\"text-xs leading-relaxed text-fg-subtle\">{t.idleTtlHint}</p>\n </div>\n </SettingsFormSection>\n\n <SettingsFormSection>\n <SettingsFormSectionHeader icon={Plug} title={t.serversTitle} subtitle={t.serversHint} />\n <div className=\"flex flex-col gap-3\">\n {form.servers.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{t.serversEmpty}</p>\n ) : null}\n {form.servers.map((row, index) => {\n const cardKey = mcpServerCardKey(row, index);\n const toolState = serverTools[row.id] ?? { status: 'idle' as const };\n\n return (\n <McpServerCard\n key={cardKey}\n row={row}\n expanded={expandedKeys.has(cardKey)}\n onToggle={() => toggleExpanded(cardKey)}\n t={t}\n testing={testingId === row.id}\n toolState={toolState}\n onUpdate={(patch) => updateServer(index, patch)}\n onRemove={() => removeServer(index)}\n onTest={() => void runTest(row.id, row)}\n onViewTools={(tools) => setToolsDialog({ serverId: row.id, tools })}\n />\n );\n })}\n\n <Button type=\"button\" variant=\"ghost\" className=\"self-start\" onClick={addServer}>\n <Plus className=\"size-4\" aria-hidden />\n {t.addServer}\n </Button>\n </div>\n </SettingsFormSection>\n\n <div className=\"flex flex-wrap gap-2\">\n <Button type=\"button\" disabled={!dirty || saving} onClick={() => void save()}>\n {saving ? <Loader2 className=\"size-4 animate-spin\" aria-hidden /> : null}\n {saving ? t.saving : t.save}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n disabled={!dirty || saving}\n onClick={() => {\n if (!baseline) return;\n dirtyRef.current = false;\n setForm(structuredClone(baseline));\n setSaveOk(false);\n setError(null);\n setServerTools({});\n setExpandedKeys(new Set());\n }}\n >\n {t.discard}\n </Button>\n </div>\n\n <p className=\"text-xs text-fg-subtle\">{t.disableHint}</p>\n\n {toolsDialog ? (\n <McpToolsListDialog\n open\n onOpenChange={(open) => {\n if (!open) setToolsDialog(null);\n }}\n serverId={toolsDialog.serverId}\n title={t.toolsDialogTitle}\n subtitle={t.toolsDialogSubtitle}\n searchPlaceholder={t.toolsDialogSearchPlaceholder}\n searchEmptyLabel={t.toolsDialogSearchEmpty}\n emptyLabel={t.toolsEmpty}\n closeLabel={t.toolsDialogClose}\n tools={toolsDialog.tools}\n stripPrefix={`${toolsDialog.serverId.trim()}__`}\n />\n ) : null}\n </div>\n );\n}\n","import { Navigate, useParams } from 'react-router-dom';\n\nimport {\n AgentBrowserDefaultsPage,\n AgentChatDefaultsPage,\n AgentRuntimeDefaultsPage,\n AgentSystemPromptDefaultsPage,\n AgentToolsDefaultsPage,\n AgentWorkspaceDefaultsPage,\n} from '@/features/settings/agents';\nimport { AppearanceSettingsPanel } from '@/features/settings/appearance-settings';\nimport { DreamingSettingsPanel } from '@/features/settings/dreaming-settings';\nimport { GatewaySettingsPanel } from '@/features/settings/gateway-settings';\nimport { HeartbeatSettingsPanel } from '@/features/settings/heartbeat-settings';\nimport { TunnelSettingsPanel } from '@/features/tunnel/tunnel-settings';\nimport { SharesSettingsPanel } from '@/features/shares/shares-settings';\nimport { ImageModelsSettingsPanel } from '@/features/settings/image-models-settings';\nimport { ModelsSettingsPanel } from '@/features/settings/models-settings';\nimport { ProvidersSettingsPanel } from '@/features/settings/providers-settings';\nimport { SystemSettingsPanel } from '@/features/settings/system-settings-panel';\nimport { VoiceSettingsPanel } from '@/features/settings/voice-settings';\nimport { WebSearchSettingsPanel } from '@/features/settings/web-search-settings';\nimport { McpSettingsPanel } from '@/features/settings/mcp/mcp-settings';\nimport { messages } from '@/i18n/messages';\nimport type { SettingsSectionId } from '@/navigation';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nconst SECTIONS: SettingsSectionId[] = [\n 'appearance',\n 'system',\n 'agent-chat',\n 'agent-workspace',\n 'agent-browser',\n 'agent-runtime',\n 'agent-tools',\n 'agent-mcp',\n 'agent-system-prompt',\n 'providers',\n 'models',\n 'image-models',\n 'voice',\n 'gateway',\n 'heartbeat',\n 'tunnel',\n 'shares',\n 'search',\n 'dreams',\n];\n\nexport function SettingsPage() {\n const { section } = useParams();\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n\n if (section === 'agent' || section === 'agents') {\n return <Navigate to=\"/agents\" replace />;\n }\n\n if (!section || !SECTIONS.includes(section as SettingsSectionId)) {\n return <Navigate to=\"/settings/appearance\" replace />;\n }\n\n const id = section as SettingsSectionId;\n const title = m.settingsSections[id];\n\n if (id === 'appearance') {\n return <AppearanceSettingsPanel />;\n }\n\n if (id === 'system') {\n return <SystemSettingsPanel />;\n }\n\n if (id === 'agent-chat') {\n return <AgentChatDefaultsPage />;\n }\n\n if (id === 'agent-workspace') {\n return <AgentWorkspaceDefaultsPage />;\n }\n\n if (id === 'agent-browser') {\n return <AgentBrowserDefaultsPage />;\n }\n\n if (id === 'agent-runtime') {\n return <AgentRuntimeDefaultsPage />;\n }\n\n if (id === 'agent-tools') {\n return <AgentToolsDefaultsPage />;\n }\n\n if (id === 'agent-system-prompt') {\n return <AgentSystemPromptDefaultsPage />;\n }\n\n if (id === 'providers') {\n return <ProvidersSettingsPanel />;\n }\n\n if (id === 'models') {\n return <ModelsSettingsPanel />;\n }\n\n if (id === 'image-models') {\n return <ImageModelsSettingsPanel />;\n }\n\n if (id === 'voice') {\n return <VoiceSettingsPanel />;\n }\n\n if (id === 'gateway') {\n return <GatewaySettingsPanel />;\n }\n\n if (id === 'heartbeat') {\n return <HeartbeatSettingsPanel />;\n }\n\n if (id === 'tunnel') {\n return <TunnelSettingsPanel />;\n }\n\n if (id === 'shares') {\n return <SharesSettingsPanel />;\n }\n\n if (id === 'search') {\n return <WebSearchSettingsPanel />;\n }\n\n if (id === 'agent-mcp') {\n return <McpSettingsPanel />;\n }\n\n if (id === 'dreams') {\n return <DreamingSettingsPanel />;\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{title}</h1>\n <p className=\"text-sm text-fg-muted\">\n {language === 'zh' ? `设置 · ${title}(即将推出)。` : `Settings · ${title} (coming soon).`}\n </p>\n </div>\n );\n}\n"],"mappings":"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"}
|