@xopcai/xopc 0.0.30 → 0.0.31
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-3u63Fw2Y.js +216 -0
- package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js.map +1 -0
- package/dist/gateway/static/root/assets/{apps-page-CTChHQAu.js → apps-page-CWegY6Kp.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-CTChHQAu.js.map → apps-page-CWegY6Kp.js.map} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js +9 -0
- package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js.map +1 -0
- package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js +3 -0
- package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js.map +1 -0
- package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js +2 -0
- package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js.map +1 -0
- package/dist/gateway/static/root/assets/dist-D0jxbvuz.js +2 -0
- package/dist/gateway/static/root/assets/{dist-UWGUW3x8.js.map → dist-D0jxbvuz.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-BwB4a4cK.js → extension-debug-page-DB630cW8.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-BwB4a4cK.js.map → extension-debug-page-DB630cW8.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CSWu2PHZ.js → extension-page-CnoPUBul.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-CSWu2PHZ.js.map → extension-page-CnoPUBul.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-B12K2a13.js → extension-settings-page-BsiOkvBe.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-B12K2a13.js.map → extension-settings-page-BsiOkvBe.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-D0pFZ0OE.js → index-DHLmAIQl.js} +81 -81
- package/dist/gateway/static/root/assets/{index-D0pFZ0OE.js.map → index-DHLmAIQl.js.map} +1 -1
- package/dist/gateway/static/root/assets/index-DoPwy4aU.css +1 -0
- package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js +2 -0
- package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js.map +1 -0
- package/dist/gateway/static/root/assets/sessions-page-Q201-_lP.js +2 -0
- package/dist/gateway/static/root/assets/{sessions-page-DJkuWpOT.js.map → sessions-page-Q201-_lP.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js +2 -0
- package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js.map +1 -0
- package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js +3 -0
- package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js.map +1 -0
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/package.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +12 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.d.ts +4 -0
- package/dist/src/agent/service.js +7 -1
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/skills/marketplace/resolve-adapter.js +1 -1
- package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +1 -1
- package/dist/src/config/schema.js +1 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/cron/validation.js +1 -1
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/gateway/hono/routes/sessions.js +124 -2
- package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
- package/dist/src/gateway/hono/sse.js +9 -2
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +1 -0
- package/dist/src/gateway/service/run-gateway-agent.js +18 -10
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service.d.ts +23 -1
- package/dist/src/gateway/service.js +47 -3
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/session/abort-cutoff.d.ts +6 -0
- package/dist/src/session/abort-cutoff.js +10 -0
- package/dist/src/session/abort-cutoff.js.map +1 -0
- package/dist/src/session/compaction-checkpoints.d.ts +8 -0
- package/dist/src/session/compaction-checkpoints.js +21 -0
- package/dist/src/session/compaction-checkpoints.js.map +1 -0
- package/dist/src/session/index.d.ts +8 -1
- package/dist/src/session/index.js +7 -1
- package/dist/src/session/manager.d.ts +26 -1
- package/dist/src/session/manager.js +39 -2
- package/dist/src/session/manager.js.map +1 -1
- package/dist/src/session/patch-metadata.d.ts +12 -0
- package/dist/src/session/patch-metadata.js +23 -0
- package/dist/src/session/patch-metadata.js.map +1 -0
- package/dist/src/session/search-index.d.ts +2 -0
- package/dist/src/session/search-index.js +30 -2
- package/dist/src/session/search-index.js.map +1 -1
- package/dist/src/session/session-context-for-llm.d.ts +32 -0
- package/dist/src/session/session-context-for-llm.js +60 -0
- package/dist/src/session/session-context-for-llm.js.map +1 -0
- package/dist/src/session/store.d.ts +36 -2
- package/dist/src/session/store.js +200 -28
- package/dist/src/session/store.js.map +1 -1
- package/dist/src/session/strip-webchat-early-save.d.ts +5 -0
- package/dist/src/session/strip-webchat-early-save.js +17 -0
- package/dist/src/session/strip-webchat-early-save.js.map +1 -0
- package/dist/src/session/transcript-format.d.ts +46 -0
- package/dist/src/session/transcript-format.js +88 -0
- package/dist/src/session/transcript-format.js.map +1 -0
- package/dist/src/session/types.d.ts +37 -0
- package/dist/src/session/types.js.map +1 -1
- package/dist/src/utils/logger/log-store.js +4 -3
- package/dist/src/utils/logger/log-store.js.map +1 -1
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents-BfwtJOPK.js +0 -216
- package/dist/gateway/static/root/assets/agents-BfwtJOPK.js.map +0 -1
- package/dist/gateway/static/root/assets/channels-settings-BpwVOvvf.js +0 -9
- package/dist/gateway/static/root/assets/channels-settings-BpwVOvvf.js.map +0 -1
- package/dist/gateway/static/root/assets/cron-page-C_6AbVRf.js +0 -2
- package/dist/gateway/static/root/assets/cron-page-C_6AbVRf.js.map +0 -1
- package/dist/gateway/static/root/assets/cron-utils-DZ7pabh5.js +0 -3
- package/dist/gateway/static/root/assets/cron-utils-DZ7pabh5.js.map +0 -1
- package/dist/gateway/static/root/assets/dist-UWGUW3x8.js +0 -2
- package/dist/gateway/static/root/assets/index-C6itMrqR.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-BXqha2gI.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-BXqha2gI.js.map +0 -1
- package/dist/gateway/static/root/assets/sessions-page-DJkuWpOT.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-CleZrGHy.js +0 -2
- package/dist/gateway/static/root/assets/settings-page-CleZrGHy.js.map +0 -1
- package/dist/gateway/static/root/assets/skills-page-D7NiIOzA.js +0 -3
- package/dist/gateway/static/root/assets/skills-page-D7NiIOzA.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logs-page-BXqha2gI.js","names":[],"sources":["../../../../../web/src/features/logs/log-api.ts","../../../../../web/src/features/logs/log.types.ts","../../../../../web/src/features/logs/logs-page.tsx"],"sourcesContent":["import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport type { LogEntry, LogFile, LogQuery, LogStats } from '@/features/logs/log.types';\n\nfunction buildQueryString(query?: LogQuery): string {\n const params = new URLSearchParams();\n if (!query) return '';\n if (query.level?.length) params.set('level', query.level.join(','));\n if (query.from) params.set('from', query.from);\n if (query.to) params.set('to', query.to);\n if (query.q) params.set('q', query.q);\n if (query.module) params.set('module', query.module);\n if (query.limit != null) params.set('limit', String(query.limit));\n if (query.offset != null) params.set('offset', String(query.offset));\n const qs = params.toString();\n return qs ? `?${qs}` : '';\n}\n\nexport async function queryLogs(query?: LogQuery): Promise<{ logs: LogEntry[]; count: number }> {\n return fetchJson<{ logs: LogEntry[]; count: number }>(apiUrl(`/api/logs${buildQueryString(query)}`));\n}\n\nexport async function getLogFiles(): Promise<LogFile[]> {\n const result = await fetchJson<{ files: LogFile[] }>(apiUrl('/api/logs/files'));\n return result.files ?? [];\n}\n\nexport async function getLogModules(): Promise<string[]> {\n const result = await fetchJson<{ modules: string[] }>(apiUrl('/api/logs/modules'));\n return result.modules ?? [];\n}\n\nexport async function getLogStats(): Promise<LogStats> {\n const raw = await fetchJson<Partial<LogStats>>(apiUrl('/api/logs/stats'));\n return { byLevel: raw.byLevel ?? {} };\n}\n\nexport async function getLogDir(): Promise<string> {\n const result = await fetchJson<{ dir: string }>(apiUrl('/api/logs/dir'));\n return result.dir ?? '';\n}\n","export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport const LOG_LEVELS: LogLevel[] = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n module?: string;\n prefix?: string;\n service?: string;\n extension?: string;\n requestId?: string;\n sessionId?: string;\n userId?: string;\n meta?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface LogQuery {\n level?: string[];\n from?: string;\n to?: string;\n q?: string;\n module?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface LogFile {\n name: string;\n size: number;\n modified: string;\n}\n\nexport interface LogStats {\n byLevel: Partial<Record<LogLevel | 'silent', number>>;\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport * as Popover from '@radix-ui/react-popover';\nimport {\n ChevronDown,\n ClipboardCopy,\n FileText,\n Folder,\n ListFilter,\n RefreshCw,\n Search,\n Terminal,\n X,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { bareInputFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport {\n getLogDir,\n getLogFiles,\n getLogModules,\n getLogStats,\n queryLogs,\n} from '@/features/logs/log-api';\nimport type { LogEntry, LogFile, LogLevel } from '@/features/logs/log.types';\nimport { LOG_LEVELS } from '@/features/logs/log.types';\nimport { messages } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nconst PAGE_LIMIT = 50;\nconst REFRESH_MS = 5000;\nconst LOG_LEVEL_SET = new Set<LogLevel>(LOG_LEVELS);\n\ntype LevelPreset = 'all' | 'errors' | 'warnPlus' | 'infoPlus' | 'verbose' | 'custom';\ntype LevelSegmentValue = Exclude<LevelPreset, 'custom'> | 'other';\n\nconst PRESET_ERRORS: LogLevel[] = ['error', 'fatal'];\nconst PRESET_WARN_PLUS: LogLevel[] = ['warn', 'error', 'fatal'];\nconst PRESET_INFO_PLUS: LogLevel[] = ['info', 'warn', 'error', 'fatal'];\n\nfunction parseLogLevelsParam(raw: string | null): Set<LogLevel> {\n if (!raw) return new Set<LogLevel>();\n const out = new Set<LogLevel>();\n for (const part of raw.split(',')) {\n const level = part.trim() as LogLevel;\n if (LOG_LEVEL_SET.has(level)) out.add(level);\n }\n return out;\n}\n\nfunction isSameLogLevelSet(a: Set<LogLevel>, b: Set<LogLevel>): boolean {\n if (a.size !== b.size) return false;\n for (const level of a) {\n if (!b.has(level)) return false;\n }\n return true;\n}\n\nfunction setMatchesLevels(s: Set<LogLevel>, levels: readonly LogLevel[]): boolean {\n if (s.size !== levels.length) return false;\n return levels.every((l) => s.has(l));\n}\n\nfunction derivePreset(levels: Set<LogLevel>): LevelPreset {\n if (levels.size === 0) return 'all';\n if (setMatchesLevels(levels, PRESET_ERRORS)) return 'errors';\n if (setMatchesLevels(levels, PRESET_WARN_PLUS)) return 'warnPlus';\n if (setMatchesLevels(levels, PRESET_INFO_PLUS)) return 'infoPlus';\n if (levels.size === LOG_LEVELS.length && LOG_LEVELS.every((l) => levels.has(l))) return 'verbose';\n return 'custom';\n}\n\nfunction segmentValueFromLevels(levels: Set<LogLevel>): LevelSegmentValue {\n const p = derivePreset(levels);\n return p === 'custom' ? 'other' : p;\n}\n\nfunction levelsForPreset(preset: Exclude<LevelPreset, 'custom'>): Set<LogLevel> {\n switch (preset) {\n case 'all':\n return new Set();\n case 'errors':\n return new Set(PRESET_ERRORS);\n case 'warnPlus':\n return new Set(PRESET_WARN_PLUS);\n case 'infoPlus':\n return new Set(PRESET_INFO_PLUS);\n case 'verbose':\n return new Set(LOG_LEVELS);\n }\n}\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nfunction moduleLabel(log: LogEntry): string {\n return String(log.module || log.prefix || log.service || log.extension || '—');\n}\n\nfunction messagePreview(log: LogEntry): string {\n if (typeof log.message === 'string' && log.message) return log.message;\n try {\n return JSON.stringify(log);\n } catch {\n return '';\n }\n}\n\nfunction formatTimeCompact(timestamp: string): string {\n try {\n const date = new Date(timestamp);\n return date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n } catch {\n return timestamp;\n }\n}\n\nfunction formatTimestampFull(timestamp: string): string {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n}\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 return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction requestIdPreview(id: string): string {\n const t = id.trim();\n if (t.length <= 10) return t;\n return `${t.slice(0, 8)}…`;\n}\n\nfunction levelLabel(level: string): string {\n return String(level).toLowerCase();\n}\n\nfunction formatStatsLine(\n byLevel: Partial<Record<LogLevel | 'silent', number>>,\n labels: Record<LogLevel, string>,\n): string {\n const parts: string[] = [];\n for (const lv of LOG_LEVELS) {\n const n = byLevel[lv] ?? 0;\n if (n > 0) parts.push(`${labels[lv]} ${n}`);\n }\n return parts.join(' · ');\n}\n\nexport function LogsPage() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const L = m.logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const initialSearch = searchParams.get('q') ?? '';\n const initialLevels = parseLogLevelsParam(searchParams.get('level'));\n const initialModule = searchParams.get('module') ?? '';\n const initialFrom = searchParams.get('from') ?? '';\n const initialTo = searchParams.get('to') ?? '';\n const initialAutoRefresh = searchParams.get('live') === '1';\n\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n\n const [searchInput, setSearchInput] = useState(initialSearch);\n const [debouncedSearch, setDebouncedSearch] = useState(initialSearch.trim());\n const [selectedLevels, setSelectedLevels] = useState<Set<LogLevel>>(initialLevels);\n const [moduleFilter, setModuleFilter] = useState(initialModule);\n const [dateFrom, setDateFrom] = useState(initialFrom);\n const [dateTo, setDateTo] = useState(initialTo);\n\n const [modules, setModules] = useState<string[]>([]);\n const [files, setFiles] = useState<LogFile[]>([]);\n const [stats, setStats] = useState<Awaited<ReturnType<typeof getLogStats>> | null>(null);\n\n const [selectedLog, setSelectedLog] = useState<LogEntry | null>(null);\n const [filesOpen, setFilesOpen] = useState(false);\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [logDir, setLogDir] = useState<string | null>(null);\n const [autoRefresh, setAutoRefresh] = useState(initialAutoRefresh);\n const [copiedDetail, setCopiedDetail] = useState<'json' | 'message' | null>(null);\n\n const levelSegment = useMemo(() => segmentValueFromLevels(selectedLevels), [selectedLevels]);\n\n const hasActiveFilters =\n debouncedSearch.length > 0 ||\n selectedLevels.size > 0 ||\n Boolean(moduleFilter) ||\n Boolean(dateFrom) ||\n Boolean(dateTo);\n\n const activeFilterCount =\n (debouncedSearch.length > 0 ? 1 : 0) +\n (selectedLevels.size > 0 ? 1 : 0) +\n (moduleFilter ? 1 : 0) +\n (dateFrom || dateTo ? 1 : 0);\n\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput.trim()), 300);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n useEffect(() => {\n const nextQ = searchParams.get('q') ?? '';\n const nextModule = searchParams.get('module') ?? '';\n const nextFrom = searchParams.get('from') ?? '';\n const nextTo = searchParams.get('to') ?? '';\n const nextAutoRefresh = searchParams.get('live') === '1';\n const nextLevels = parseLogLevelsParam(searchParams.get('level'));\n const nextDebouncedQ = nextQ.trim();\n\n setSearchInput((prev) => (prev === nextQ ? prev : nextQ));\n setDebouncedSearch((prev) => (prev === nextDebouncedQ ? prev : nextDebouncedQ));\n setSelectedLevels((prev) => (isSameLogLevelSet(nextLevels, prev) ? prev : nextLevels));\n setModuleFilter((prev) => (prev === nextModule ? prev : nextModule));\n setDateFrom((prev) => (prev === nextFrom ? prev : nextFrom));\n setDateTo((prev) => (prev === nextTo ? prev : nextTo));\n setAutoRefresh((prev) => (prev === nextAutoRefresh ? prev : nextAutoRefresh));\n }, [searchParams]);\n\n useEffect(() => {\n const params = new URLSearchParams(searchParams);\n const nextQ = debouncedSearch.trim();\n if (nextQ) params.set('q', nextQ);\n else params.delete('q');\n\n if (selectedLevels.size > 0) {\n params.set('level', Array.from(selectedLevels).sort().join(','));\n } else {\n params.delete('level');\n }\n\n if (moduleFilter) params.set('module', moduleFilter);\n else params.delete('module');\n if (dateFrom) params.set('from', dateFrom);\n else params.delete('from');\n if (dateTo) params.set('to', dateTo);\n else params.delete('to');\n if (autoRefresh) params.set('live', '1');\n else params.delete('live');\n\n const next = params.toString();\n if (next !== searchParams.toString()) {\n setSearchParams(params, { replace: true });\n }\n }, [\n autoRefresh,\n dateFrom,\n dateTo,\n debouncedSearch,\n moduleFilter,\n searchParams,\n selectedLevels,\n setSearchParams,\n ]);\n\n const queryParams = useMemo(\n () => ({\n q: debouncedSearch || undefined,\n level: selectedLevels.size > 0 ? Array.from(selectedLevels) : undefined,\n module: moduleFilter || undefined,\n from: dateFrom || undefined,\n to: dateTo || undefined,\n limit: PAGE_LIMIT,\n }),\n [debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo],\n );\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n (async () => {\n setLoading(true);\n setError(null);\n setLogs([]);\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n if (cancelled) return;\n setLogs(result.logs);\n setHasMore(result.logs.length === PAGE_LIMIT);\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : L.loadError);\n setLogs([]);\n setHasMore(false);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, queryParams, L.loadError]);\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n (async () => {\n try {\n const [mods, st, fileList] = await Promise.all([getLogModules(), getLogStats(), getLogFiles()]);\n if (!cancelled) {\n setModules(mods);\n setStats(st);\n setFiles(fileList);\n }\n } catch {\n /* optional */\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken]);\n\n useEffect(() => {\n if (!hasToken || !filesOpen) return;\n let cancelled = false;\n (async () => {\n try {\n const [list, dir] = await Promise.all([getLogFiles(), getLogDir()]);\n if (!cancelled) {\n setFiles(list);\n setLogDir(dir);\n }\n } catch {\n if (!cancelled) setFiles([]);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, filesOpen]);\n\n useEffect(() => {\n if (!autoRefresh || !hasToken) return;\n const id = window.setInterval(() => {\n void (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n setLogs(result.logs);\n setHasMore(result.logs.length === PAGE_LIMIT);\n const st = await getLogStats();\n setStats(st);\n } catch {\n /* ignore */\n }\n })();\n }, REFRESH_MS);\n return () => clearInterval(id);\n }, [autoRefresh, hasToken, queryParams]);\n\n useEffect(() => {\n if (!copiedDetail) return;\n const t = window.setTimeout(() => setCopiedDetail(null), 2000);\n return () => clearTimeout(t);\n }, [copiedDetail]);\n\n const clearFilters = () => {\n setSearchInput('');\n setDebouncedSearch('');\n setSelectedLevels(new Set());\n setModuleFilter('');\n setDateFrom('');\n setDateTo('');\n };\n\n const handleLevelSegment = (value: LevelSegmentValue) => {\n if (value === 'other') {\n setFiltersOpen(true);\n return;\n }\n setSelectedLevels(levelsForPreset(value));\n };\n\n const toggleDialogLevel = (level: LogLevel) => {\n setSelectedLevels((prev) => {\n const next = new Set(prev);\n if (next.has(level)) next.delete(level);\n else next.add(level);\n return next;\n });\n };\n\n const handleLoadMore = () => {\n if (loading || !hasMore) return;\n void (async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await queryLogs({ ...queryParams, offset: logs.length });\n setLogs((prev) => [...prev, ...result.logs]);\n setHasMore(result.logs.length === PAGE_LIMIT);\n } catch (e) {\n setError(e instanceof Error ? e.message : L.loadError);\n } finally {\n setLoading(false);\n }\n })();\n };\n\n const refreshAll = () => {\n void (async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n setLogs(result.logs);\n setHasMore(result.logs.length === PAGE_LIMIT);\n const [st, fileList] = await Promise.all([getLogStats(), getLogFiles()]);\n setStats(st);\n setFiles(fileList);\n } catch (e) {\n setError(e instanceof Error ? e.message : L.loadError);\n } finally {\n setLoading(false);\n }\n })();\n };\n\n const statsLine = stats ? formatStatsLine(stats.byLevel ?? {}, L.levelNames) : '';\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 border border-edge-subtle bg-surface-base p-6 dark:border-edge\">\n <Terminal className=\"mt-0.5 size-5 shrink-0 text-fg-subtle\" strokeWidth={1.75} aria-hidden />\n <div>\n <h1 className=\"text-base font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-1 text-sm leading-relaxed text-fg-muted\">{L.needToken}</p>\n </div>\n </div>\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-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-0.5 text-sm leading-relaxed text-fg-muted\">{L.subtitle}</p>\n </div>\n <div className=\"flex w-full shrink-0 flex-col gap-2 sm:w-auto sm:max-w-md sm:flex-row sm:items-center sm:justify-end\">\n <div className=\"w-full sm:w-48\">\n <SlidingSegmented\n aria-label={L.refreshModeAria}\n value={autoRefresh ? 'live' : 'paused'}\n onChange={(v) => setAutoRefresh(v === 'live')}\n options={[\n { value: 'paused', label: L.refreshManual },\n { value: 'live', label: L.refreshLive },\n ]}\n buttonClassName=\"h-8\"\n />\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.logFiles}\n aria-label={L.logFiles}\n onClick={() => setFilesOpen(true)}\n >\n <Folder className=\"size-4\" strokeWidth={1.75} />\n {files.length > 0 ? (\n <span className=\"rounded-full bg-surface-hover px-1.5 text-xs text-fg-muted\">{files.length}</span>\n ) : null}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.refresh}\n aria-label={L.refresh}\n onClick={refreshAll}\n >\n <RefreshCw\n className={cn(\n 'size-4 transition-transform duration-150 ease-out motion-reduce:transition-none',\n loading && 'animate-spin motion-reduce:animate-none',\n )}\n strokeWidth={1.75}\n />\n </Button>\n </div>\n </div>\n </header>\n\n {error ? (\n <div\n className=\"rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg dark:border-edge\"\n role=\"alert\"\n >\n {error}\n </div>\n ) : null}\n\n {stats && statsLine ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"max-w-full truncate rounded-lg border border-transparent px-1 py-0.5 text-left text-xs leading-5 text-fg-subtle transition-colors duration-150 ease-out hover:border-edge-subtle hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel dark:hover:border-edge\"\n >\n <span className=\"font-medium text-fg-muted\">{L.statsRegion}</span>\n <span className=\"mx-1.5 text-fg-subtle\">·</span>\n <span className=\"tabular-nums\">{statsLine}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={6}\n className={cn(\n 'z-50 w-[min(calc(100vw-2rem),20rem)] rounded-xl border border-edge bg-surface-panel p-3 shadow-popover outline-none',\n 'dark:border-edge',\n )}\n >\n <p className=\"text-xs font-medium text-fg\">{L.statsDetailTitle}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-muted\">{L.statsHint}</p>\n <ul className=\"mt-3 flex flex-col gap-1.5\" role=\"list\">\n {LOG_LEVELS.map((lv) => {\n const n = stats.byLevel?.[lv] ?? 0;\n if (n === 0) return null;\n return (\n <li\n key={lv}\n className=\"flex items-center justify-between gap-2 rounded-md border border-edge-subtle bg-surface-base px-2 py-1 text-xs dark:border-edge\"\n >\n <span className=\"font-medium capitalize text-fg\">{L.levelNames[lv]}</span>\n <span className=\"tabular-nums text-fg-muted\">{n}</span>\n </li>\n );\n })}\n </ul>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n ) : null}\n\n <section className=\"flex flex-col gap-3\" aria-label={L.filters}>\n <div className=\"overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n <div className=\"min-w-[min(100%,36rem)]\">\n <SlidingSegmented<LevelSegmentValue>\n aria-label={L.levelPresetAria}\n value={levelSegment}\n onChange={handleLevelSegment}\n options={[\n { value: 'all', label: L.presetAll },\n { value: 'errors', label: L.presetErrors },\n { value: 'warnPlus', label: L.presetWarnPlus },\n { value: 'infoPlus', label: L.presetInfoPlus },\n { value: 'verbose', label: L.presetVerbose },\n { value: 'other', label: L.presetOther },\n ]}\n buttonClassName=\"h-8 px-1.5 text-[11px] sm:px-2 sm:text-xs\"\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center\">\n <label className=\"relative min-w-0 flex-1 sm:min-w-[12rem]\">\n <span className=\"sr-only\">{L.searchPlaceholder}</span>\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={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n placeholder={L.searchPlaceholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={cn(\n 'h-10 w-full rounded-md border border-edge bg-surface-panel py-0 pl-10 pr-3 text-sm leading-5 text-fg placeholder:text-fg-subtle dark:border-edge',\n bareInputFocusClass,\n )}\n />\n </label>\n\n <select\n id=\"log-module\"\n value={moduleFilter}\n onChange={(e) => setModuleFilter(e.target.value)}\n aria-label={L.module}\n title={L.module}\n className={cn(\n selectControlBaseClass,\n 'h-10 w-full min-w-0 rounded-md py-0 sm:w-[min(100%,14rem)] sm:shrink-0',\n )}\n >\n <option value=\"\">{L.allModules}</option>\n {modules.map((mod) => (\n <option key={mod} value={mod}>\n {mod}\n </option>\n ))}\n </select>\n\n <div className=\"flex min-w-0 shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-10 min-h-[44px] gap-2 rounded-md sm:min-h-10\"\n onClick={() => setFiltersOpen(true)}\n >\n <ListFilter className=\"size-4\" strokeWidth={1.75} />\n {L.filtersMore}\n {activeFilterCount > 0 ? (\n <span className=\"rounded-md bg-surface-hover px-1.5 text-xs tabular-nums text-fg-muted\">\n {activeFilterCount}\n </span>\n ) : null}\n </Button>\n {hasActiveFilters ? (\n <Button type=\"button\" variant=\"ghost\" className=\"h-10 min-h-[44px] gap-1 sm:min-h-10\" onClick={clearFilters}>\n <X className=\"size-4\" strokeWidth={1.75} />\n {L.clear}\n </Button>\n ) : null}\n </div>\n </div>\n\n {autoRefresh ? <p className=\"text-xs leading-5 text-fg-subtle\">{L.liveHint}</p> : null}\n </section>\n\n {loading && logs.length === 0 ? (\n <div\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel dark:divide-edge dark:border-edge\"\n aria-busy=\"true\"\n >\n {Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"flex gap-3 px-3 py-2.5\">\n <div className=\"h-4 w-16 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-12 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-20 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 min-w-0 flex-1 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n </div>\n ))}\n </div>\n ) : null}\n\n {!loading && logs.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center gap-2 rounded-xl border border-edge-subtle bg-surface-base py-16 text-center dark:border-edge\">\n <FileText className=\"size-12 text-fg-subtle\" strokeWidth={1.5} aria-hidden />\n <h2 className=\"text-base font-semibold tracking-tight text-fg\">{L.noLogs}</h2>\n <p className=\"max-w-sm text-sm leading-relaxed text-fg-muted\">{L.noLogsDescription}</p>\n <Button type=\"button\" variant=\"secondary\" className=\"mt-4 gap-2\" onClick={refreshAll}>\n <RefreshCw className=\"size-4\" strokeWidth={1.75} />\n {L.refresh}\n </Button>\n </div>\n ) : null}\n\n {logs.length > 0 ? (\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-xs leading-5 text-fg-muted\">\n {interpolate(L.showingCount, { count: String(logs.length) })}\n {hasMore ? <span className=\"text-fg-subtle\"> · {L.moreAvailable}</span> : null}\n </p>\n <ul\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel font-mono text-sm leading-6 dark:divide-edge dark:border-edge\"\n role=\"list\"\n >\n {logs.map((log, idx) => {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId.trim() : '';\n return (\n <li key={`${log.timestamp}-${idx}`}>\n <button\n type=\"button\"\n onClick={() => setSelectedLog(log)}\n className={cn(\n 'flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left transition-colors duration-150 ease-out',\n 'hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n >\n <span className=\"w-[5.25rem] shrink-0 tabular-nums text-fg-subtle\">\n {formatTimeCompact(log.timestamp)}\n </span>\n <span className=\"w-[4.5rem] shrink-0 truncate text-fg-muted\" title={lv}>\n {levelLabel(lv)}\n </span>\n <span\n className=\"w-[4.5rem] shrink-0 truncate text-fg-subtle sm:w-[5.25rem]\"\n title={rid ? `${L.requestId}: ${rid}` : undefined}\n >\n {rid ? requestIdPreview(rid) : '—'}\n </span>\n <span\n className=\"hidden max-w-[7rem] shrink-0 truncate text-fg-muted lg:inline\"\n title={moduleLabel(log)}\n >\n {moduleLabel(log)}\n </span>\n <span className=\"min-w-0 flex-1 truncate text-fg\">{messagePreview(log)}</span>\n </button>\n </li>\n );\n })}\n </ul>\n {hasMore ? (\n <div className=\"flex justify-center pt-1\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"gap-2\"\n disabled={loading}\n onClick={handleLoadMore}\n >\n {loading ? (\n <RefreshCw className=\"size-4 animate-spin motion-reduce:animate-none\" strokeWidth={1.75} />\n ) : (\n <ChevronDown className=\"size-4\" strokeWidth={1.75} />\n )}\n {L.loadMore}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n\n <Dialog.Root open={filtersOpen} onOpenChange={setFiltersOpen}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-50 bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 z-50 flex max-h-[min(32rem,90vh)] w-[min(100%-2rem,22rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n aria-describedby=\"log-filters-desc\"\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.filtersDialogTitle}</Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"h-9 w-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div id=\"log-filters-desc\" className=\"sr-only\">\n {L.filtersDialogDesc}\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4\">\n <p className=\"text-xs font-medium text-fg-muted\">{L.timeRange}</p>\n <div className=\"mt-2 flex flex-col gap-3\">\n <div>\n <label htmlFor=\"log-from-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.from}\n </label>\n <input\n id=\"log-from-d\"\n type=\"datetime-local\"\n value={dateFrom}\n onChange={(e) => setDateFrom(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base px-2 py-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n <div>\n <label htmlFor=\"log-to-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.to}\n </label>\n <input\n id=\"log-to-d\"\n type=\"datetime-local\"\n value={dateTo}\n onChange={(e) => setDateTo(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base px-2 py-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n </div>\n <p className=\"mt-6 text-xs font-medium text-fg-muted\">{L.levelCustom}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-subtle\">{L.levelCustomHint}</p>\n <div className=\"mt-3 flex flex-wrap gap-2\" role=\"group\" aria-label={L.level}>\n {LOG_LEVELS.map((level) => {\n const active = selectedLevels.has(level);\n return (\n <button\n key={level}\n type=\"button\"\n className={cn(\n 'rounded-full border px-3 py-1.5 text-xs font-medium capitalize transition-[color,background-color,border-color] duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n active\n ? 'border-edge bg-surface-active text-fg dark:border-edge'\n : 'border-edge-subtle bg-surface-base text-fg-muted hover:bg-surface-hover dark:border-edge',\n )}\n onClick={() => toggleDialogLevel(level)}\n >\n {L.levelNames[level]}\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-3 dark:border-edge\">\n <Button type=\"button\" className=\"w-full rounded-xl\" onClick={() => setFiltersOpen(false)}>\n {L.filtersDone}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n\n <Dialog.Root open={selectedLog !== null} onOpenChange={(o) => !o && setSelectedLog(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-50 bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 z-50 flex h-full w-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n aria-describedby={undefined}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.details}</Dialog.Title>\n <div className=\"flex min-w-0 items-center gap-1\">\n {selectedLog ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n const text = typeof selectedLog.message === 'string' ? selectedLog.message : '';\n void navigator.clipboard.writeText(text).then(() => setCopiedDetail('message'));\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'message' ? L.copied : L.copyMessage}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n void navigator.clipboard\n .writeText(JSON.stringify(selectedLog, null, 2))\n .then(() => setCopiedDetail('json'));\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'json' ? L.copied : L.copyJson}</span>\n </Button>\n </>\n ) : null}\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"h-9 w-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4 font-mono text-sm leading-relaxed\">\n {selectedLog ? (\n <LogDetailBody\n log={selectedLog}\n labels={{\n time: L.time,\n level: L.level,\n module: L.module,\n message: L.message,\n metadata: L.metadata,\n requestId: L.requestId,\n sessionId: L.sessionId,\n }}\n />\n ) : null}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n\n <Dialog.Root open={filesOpen} onOpenChange={setFilesOpen}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-50 bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 z-50 flex max-h-[min(32rem,85vh)] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"flex items-center gap-2 text-base font-semibold tracking-tight text-fg\">\n <Folder className=\"size-4 text-fg-muted\" strokeWidth={1.75} />\n {L.logFiles}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"h-9 w-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {files.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{L.filesEmpty}</p>\n ) : (\n <ul className=\"flex flex-col gap-2\" role=\"list\">\n {files.map((f) => (\n <li\n key={f.name}\n className=\"flex flex-col gap-1 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge\"\n >\n <span className=\"break-all font-mono text-xs text-fg\">{f.name}</span>\n <span className=\"flex flex-wrap gap-x-2 text-xs text-fg-subtle\">\n <span>{formatFileSize(f.size)}</span>\n <span>{formatTimestampFull(f.modified)}</span>\n </span>\n </li>\n ))}\n </ul>\n )}\n </div>\n {logDir ? (\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-2 text-xs text-fg-subtle dark:border-edge\">\n <span className=\"font-medium text-fg-muted\">{L.logDir}: </span>\n <code className=\"break-all text-fg-subtle\">{logDir}</code>\n </div>\n ) : null}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n </div>\n );\n}\n\nfunction LogDetailBody({\n log,\n labels,\n}: {\n log: LogEntry;\n labels: {\n time: string;\n level: string;\n module: string;\n message: string;\n metadata: string;\n requestId: string;\n sessionId: string;\n };\n}) {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId : '';\n const sid = typeof log.sessionId === 'string' ? log.sessionId : '';\n return (\n <div className=\"flex flex-col gap-8\">\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.message}</span>\n <pre className=\"mt-2 whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {log.message || '—'}\n </pre>\n </div>\n <div className=\"grid grid-cols-[5.5rem_1fr] gap-x-3 gap-y-2 text-xs\">\n <span className=\"font-sans text-fg-muted\">{labels.time}</span>\n <code className=\"break-all text-fg\">{log.timestamp}</code>\n <span className=\"font-sans text-fg-muted\">{labels.level}</span>\n <span className=\"text-fg\">{levelLabel(lv)}</span>\n <span className=\"font-sans text-fg-muted\">{labels.module}</span>\n <code className=\"break-all text-fg\">{moduleLabel(log)}</code>\n {rid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.requestId}</span>\n <code className=\"break-all text-fg\">{rid}</code>\n </>\n ) : null}\n {sid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.sessionId}</span>\n <code className=\"break-all text-fg\">{sid}</code>\n </>\n ) : null}\n </div>\n {log.meta && Object.keys(log.meta).length > 0 ? (\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.metadata}</span>\n <pre className=\"mt-2 overflow-x-auto whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {JSON.stringify(log.meta, null, 2)}\n </pre>\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r}from"./vendor-swr-B5fPo7KK.js";import{t as i}from"./cn-BMCV0OMB.js";import{Ct as a,Dt as o,Et as s,G as c,Gr as l,In as u,On as d,Ot as f,Q as p,Rr as m,St as h,Tn as g,W as _,X as v,Yn as ee,Z as y,ai as b,br as te,ct as ne,dn as re,dt as x,ft as ie,gn as ae,gt as oe,ht as se,ir as S,kn as C,kr as ce,kt as le,lr as w,lt as ue,mi as de,mt as fe,oi as T,pt as pe,rr as E,st as me,ut as he,wn as ge,wt as _e,xr as ve,xt as ye,yr as be}from"./index-D0pFZ0OE.js";var D=e(t(),1),O=n();function xe(e){let t=new Date(e),n=Math.floor((new Date().getTime()-t.getTime())/(1e3*60*60*24));return n===0?t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):n===1?`Yesterday`:n<7?t.toLocaleDateString([],{weekday:`short`}):t.toLocaleDateString([],{month:`short`,day:`numeric`})}function Se(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function Ce({session:e,variant:t,labels:n,sessionAgentId:r,sessionAgentAvatar:a,onOpen:o,onAction:s}){let c=e.name?.trim()||n.unnamedSession,l=!!e.name?.trim(),f=e.status===`archived`,h=e.status===`pinned`;return(0,O.jsxs)(`div`,{role:`button`,tabIndex:0,className:i(`group flex min-w-0 w-full max-w-full cursor-pointer flex-col rounded-xl bg-surface-base text-left transition-colors duration-150 ease-out`,`hover:bg-surface-hover active:scale-[0.99]`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,t===`list`&&`sm:flex-row sm:items-center sm:gap-4`),onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},children:[(0,O.jsxs)(`div`,{className:i(`flex min-w-0 items-start justify-between gap-2 bg-surface-hover/35 px-3 py-2 dark:bg-surface-hover/25`,t===`list`&&`sm:py-3`),children:[(0,O.jsx)(`div`,{className:`flex min-w-0 items-center gap-2`,children:(0,O.jsx)(`span`,{className:`truncate text-[11px] font-medium uppercase tracking-wide text-fg-subtle`,children:e.sourceChannel})}),(0,O.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 text-xs text-fg-muted`,children:[h?(0,O.jsx)(E,{className:`size-3.5 text-accent-fg`,strokeWidth:1.75,"aria-hidden":!0}):null,(0,O.jsx)(`span`,{children:xe(e.updatedAt)})]})]}),(0,O.jsxs)(`div`,{className:i(`min-w-0 flex-1 px-3 py-2`,t===`list`&&`sm:py-3`),children:[(0,O.jsxs)(`div`,{className:i(`flex gap-3`,t===`list`&&`sm:items-start`),children:[(0,O.jsx)(p,{agentId:r,avatar:a,size:40,className:`size-10 shrink-0 ring-1 ring-edge/60 dark:ring-edge`}),(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,O.jsx)(`div`,{className:`min-w-0 max-w-full truncate text-sm font-semibold text-fg`,title:c,children:c}),l?(0,O.jsx)(`div`,{className:`mt-0.5 min-w-0 max-w-full truncate font-mono text-[11px] text-fg-subtle`,title:e.key,children:e.key}):null]})]}),(0,O.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-3 text-xs text-fg-muted`,children:[(0,O.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,O.jsx)(w,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0}),e.messageCount]}),(0,O.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,O.jsx)(d,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0}),Se(e.estimatedTokens)]})]}),e.tags.length>0?(0,O.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1`,children:[e.tags.slice(0,3).map(e=>(0,O.jsx)(`span`,{className:`max-w-full break-words rounded-md bg-surface-hover px-1.5 py-0.5 text-[11px] text-fg-muted`,children:e},e)),e.tags.length>3?(0,O.jsxs)(`span`,{className:`text-[11px] text-fg-disabled`,children:[`+`,e.tags.length-3]}):null]}):null]}),(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center gap-0.5 border-t border-edge-subtle/80 bg-surface-hover/25 px-2 py-2 dark:border-edge-subtle`,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:[(0,O.jsx)(`button`,{type:`button`,className:_,title:n.continueChat,"aria-label":n.continueChat,onClick:()=>s(`continue`),children:(0,O.jsx)(w,{className:`size-4`,strokeWidth:1.75})}),f?(0,O.jsx)(`button`,{type:`button`,className:_,title:n.unarchive,"aria-label":n.unarchive,onClick:()=>s(`unarchive`),children:(0,O.jsx)(T,{className:`size-4`,strokeWidth:1.75})}):(0,O.jsx)(`button`,{type:`button`,className:_,title:n.archive,"aria-label":n.archive,onClick:()=>s(`archive`),children:(0,O.jsx)(b,{className:`size-4`,strokeWidth:1.75})}),h?(0,O.jsx)(`button`,{type:`button`,className:_,title:n.unpin,"aria-label":n.unpin,onClick:()=>s(`unpin`),children:(0,O.jsx)(S,{className:`size-4`,strokeWidth:1.75})}):(0,O.jsx)(`button`,{type:`button`,className:_,title:n.pin,"aria-label":n.pin,onClick:()=>s(`pin`),children:(0,O.jsx)(E,{className:`size-4`,strokeWidth:1.75})}),(0,O.jsx)(`button`,{type:`button`,className:_,title:n.export,"aria-label":n.export,onClick:()=>s(`export`),children:(0,O.jsx)(m,{className:`size-4`,strokeWidth:1.75})}),(0,O.jsx)(`button`,{type:`button`,className:i(_,`text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950/40`),title:n.delete,"aria-label":n.delete,onClick:()=>s(`delete`),children:(0,O.jsx)(u,{className:`size-4`,strokeWidth:1.75})})]})]})}function k(e){if(typeof e==`string`)return e.length>2e3?`${e.slice(0,2e3)}…`:e;try{let t=JSON.stringify(e,null,2);return t.length>2e3?`${t.slice(0,2e3)}…`:t}catch{return String(e)}}function we({open:e,loading:t,session:n,sessionAgentId:r,sessionAgentAvatar:c,labels:l,onClose:u,onArchive:d,onUnarchive:m,onPin:h,onUnpin:_,onExport:v,onDelete:ee}){let y=n?.status===`archived`,b=n?.status===`pinned`;return(0,O.jsx)(f,{open:e,onOpenChange:e=>!e&&u(),children:(0,O.jsxs)(o,{children:[(0,O.jsx)(s,{className:`xopc-dialog-overlay fixed inset-0 z-50 bg-scrim`}),(0,O.jsxs)(_e,{className:i(`xopc-drawer-right fixed right-0 top-0 z-50 flex h-full w-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none`,`dark:border-edge`),"aria-describedby":void 0,children:[(0,O.jsxs)(`div`,{className:`flex min-w-0 shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge`,children:[(0,O.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[n&&r?(0,O.jsx)(p,{agentId:r,avatar:c,size:40,className:`size-10 shrink-0 ring-1 ring-edge/60 dark:ring-edge`}):null,(0,O.jsx)(le,{className:`min-w-0 flex-1 truncate text-base font-semibold tracking-tight text-fg`,children:n?.name?.trim()||l.unnamedSession})]}),(0,O.jsx)(a,{asChild:!0,children:(0,O.jsx)(g,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-label":l.close,children:(0,O.jsx)(C,{className:`size-5`,strokeWidth:1.75})})})]}),(0,O.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:t?(0,O.jsx)(`p`,{className:`text-sm text-fg-muted`,children:l.detailLoading}):n?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`dl`,{className:`mb-4 grid gap-2 text-xs text-fg-muted`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`dt`,{className:`text-fg-disabled`,children:`Key`}),(0,O.jsx)(`dd`,{className:`mt-0.5 break-all font-mono text-fg`,children:n.key})]}),(0,O.jsx)(`div`,{className:`flex flex-wrap gap-4`,children:(0,O.jsxs)(`span`,{children:[n.messageCount,` msgs · `,n.estimatedTokens,` tok`]})})]}),(0,O.jsx)(`h3`,{className:`mb-2 text-xs font-medium uppercase tracking-wide text-fg-subtle`,children:l.detailMessages}),(0,O.jsx)(`ul`,{className:`space-y-3`,children:n.messages.map((e,t)=>(0,O.jsxs)(`li`,{className:`rounded-lg border border-edge-subtle bg-surface-hover/50 p-2 dark:border-edge`,children:[(0,O.jsx)(`div`,{className:`mb-1 text-[10px] font-medium uppercase text-fg-subtle`,children:e.role}),(0,O.jsx)(`pre`,{className:`max-h-40 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-fg-muted`,children:k(e.content)})]},`${e.timestamp??t}-${t}`))})]}):null}),(0,O.jsx)(`div`,{className:`shrink-0 border-t border-edge px-4 py-3 dark:border-edge`,children:(0,O.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,O.jsx)(g,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:v,children:l.detailExport}),y?(0,O.jsx)(g,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:m,children:l.unarchive}):(0,O.jsx)(g,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:d,children:l.archive}),b?(0,O.jsx)(g,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:_,children:l.unpin}):(0,O.jsx)(g,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:h,children:l.pin}),(0,O.jsx)(g,{type:`button`,variant:`secondary`,className:`text-sm text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950/40`,onClick:ee,children:l.delete})]})})]})]})})}var A=20;function Te(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}var Ee=new Set([`all`,`active`,`pinned`,`archived`]),De=new Set([`grid`,`list`]);function j(){let e=ge(ae(e=>e.language)),t=e.sessions,n=re(e=>e.token),a=!!n,{data:u,mutate:d}=r(a?[`gateway-chat-agents`,n]:null,oe,{revalidateOnFocus:!1}),p=u?.defaultId??`main`,m=u?.items??[],[_,S]=de(),C=_.get(`q`)??``,w=_.get(`status`),T=_.get(`view`),xe=_.get(`channel`)??``,Se=Ee.has(w)?w:`all`,k=De.has(T)?T:`grid`,[j,Oe]=(0,D.useState)(C),[M,ke]=(0,D.useState)(C.trim()),[N,Ae]=(0,D.useState)(Se),[P,F]=(0,D.useState)(k),[I,L]=(0,D.useState)(xe.trim()),[R,z]=(0,D.useState)([]),[B,V]=(0,D.useState)(!1),[je,H]=(0,D.useState)(null),[U,Me]=(0,D.useState)(!1),[W,G]=(0,D.useState)(null),[Ne,K]=(0,D.useState)(!1),[Pe,Fe]=(0,D.useState)(!1),[q,J]=(0,D.useState)(null),[Ie,Y]=(0,D.useState)(!1),[X,Z]=(0,D.useState)(null);(0,D.useEffect)(()=>{let e=setTimeout(()=>ke(j.trim()),300);return()=>clearTimeout(e)},[j]),(0,D.useEffect)(()=>{let e=_.get(`q`)??``,t=_.get(`status`),n=_.get(`view`),r=(_.get(`channel`)??``).trim(),i=Ee.has(t)?t:`all`,a=De.has(n)?n:`grid`,o=e.trim();Oe(t=>t===e?t:e),ke(e=>e===o?e:o),Ae(e=>e===i?e:i),F(e=>e===a?e:a),L(e=>e===r?e:r)},[_]),(0,D.useEffect)(()=>{let e=new URLSearchParams(_),t=M.trim();t?e.set(`q`,t):e.delete(`q`),N===`all`?e.delete(`status`):e.set(`status`,N),P===`grid`?e.delete(`view`):e.set(`view`,P),I?e.set(`channel`,I):e.delete(`channel`),e.toString()!==_.toString()&&S(e,{replace:!0})},[M,_,S,N,P,I]),(0,D.useEffect)(()=>{if(!a)return;let e=!1;return(async()=>{V(!0),H(null);try{let t=await ie({limit:A,offset:0,...M?{search:M}:{},...N===`all`?{}:{status:N},...I?{channel:I}:{}});if(e)return;z(t.items),Me(t.hasMore)}catch(n){e||H(n instanceof Error?n.message:t.loadError)}finally{e||V(!1)}})(),()=>{e=!0}},[a,M,N,t.loadError]),(0,D.useEffect)(()=>{a&&x().then(G).catch(()=>{})},[a]),(0,D.useEffect)(()=>{if(!a)return;let e=()=>void d();return window.addEventListener(`config-reload`,e),()=>window.removeEventListener(`config-reload`,e)},[a,d]),(0,D.useEffect)(()=>{if(!a)return;let e=e=>{let t=e.detail;!t?.key||t.name===void 0||(z(e=>e.map(e=>e.key===t.key?{...e,name:t.name}:e)),J(e=>e&&e.key===t.key?{...e,name:t.name}:e))};return window.addEventListener(`session-updated`,e),()=>{window.removeEventListener(`session-updated`,e)}},[a]);let Le=(0,D.useCallback)(async()=>{if(!(!a||B||!U)){V(!0),H(null);try{let e=await ie({limit:A,offset:R.length,...M?{search:M}:{},...N===`all`?{}:{status:N},...I?{channel:I}:{}});z(t=>[...t,...e.items]),Me(e.hasMore)}catch(e){H(e instanceof Error?e.message:t.loadError)}finally{V(!1)}}},[a,B,U,R.length,M,N,I,t.loadError]),Q=(0,D.useCallback)((e,t)=>{z(n=>n.map(n=>n.key===e?{...n,status:t}:n)),J(n=>n&&n.key===e?{...n,status:t}:n)},[]),Re=(0,D.useCallback)(async e=>{K(!0),Fe(!0),J(null);try{J(await he(e))}catch{K(!1)}finally{Fe(!1)}},[]),ze=e=>{Re(e)},$=async(e,t)=>{if(t===`continue`){window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{sessionKey:e},bubbles:!0}));return}if(t===`delete`){Z(e),Y(!0);return}try{switch(t){case`archive`:await me(e),Q(e,`archived`);break;case`unarchive`:await fe(e),Q(e,`active`);break;case`pin`:await pe(e),Q(e,`pinned`);break;case`unpin`:await se(e),Q(e,`active`);break;case`export`:{let t=await ue(e),n=new Blob([t],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`session-${e.replace(/[^a-z0-9]/gi,`_`)}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r);break}default:break}x().then(G).catch(()=>{})}catch{}},Be=async e=>{try{await ne(e),z(t=>t.filter(t=>t.key!==e)),J(t=>t?.key===e?null:t),q?.key===e&&K(!1),x().then(G).catch(()=>{})}catch{}},Ve={continueChat:t.continueChat,archive:t.archive,unarchive:t.unarchive,pin:t.pin,unpin:t.unpin,export:t.export,delete:t.delete,unnamedSession:e.chat.newSession},He={close:t.close,detailLoading:t.detailLoading,detailMessages:t.detailMessages,detailExport:t.detailExport,archive:t.archive,unarchive:t.unarchive,pin:t.pin,unpin:t.unpin,delete:t.delete,unnamedSession:e.chat.newSession},Ue=[{key:`all`,label:t.filterAll,icon:ve},{key:`active`,label:t.filterActive,icon:l},{key:`pinned`,label:t.filterPinned,icon:E},{key:`archived`,label:t.filterArchived,icon:b}],We=(()=>{let e=Object.entries(W?.byChannel??{}).sort((e,t)=>t[1]-e[1]).slice(0,6).map(([e])=>e);for(let t of[`telegram`,`weixin`,`feishu`])e.includes(t)||e.push(t);return e.slice(0,8)})();return a?(0,O.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto overflow-x-hidden bg-surface-panel`,children:[(0,O.jsxs)(`div`,{className:`mx-auto flex w-full min-w-0 max-w-2xl flex-col gap-4 px-4 py-6 sm:px-6 lg:max-w-app-main lg:px-8`,children:[(0,O.jsxs)(`header`,{className:`flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,O.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:t.title}),(0,O.jsxs)(`div`,{className:`flex w-full min-w-0 items-center gap-2 rounded-xl bg-surface-base px-3 py-2 transition-colors sm:max-w-md dark:bg-surface-hover/40`,children:[(0,O.jsx)(ee,{className:`size-4 shrink-0 text-fg-disabled`,strokeWidth:1.75,"aria-hidden":!0}),(0,O.jsx)(`input`,{type:`search`,value:j,onChange:e=>Oe(e.target.value),placeholder:t.searchPlaceholder,className:`min-w-0 flex-1 border-0 bg-transparent text-sm text-fg placeholder:text-fg-disabled focus:outline-none focus:ring-0`})]})]}),(0,O.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Ue.map(({key:e,label:t,icon:n})=>(0,O.jsxs)(`button`,{type:`button`,"aria-pressed":N===e,onClick:()=>Ae(e),className:i(`inline-flex items-center gap-1.5 rounded-xl px-3 py-2 text-sm font-medium`,c.transition,c.focusRingPanel,N===e?`bg-accent-soft text-accent-fg`:`bg-surface-base text-fg-muted hover:bg-surface-hover hover:text-fg dark:bg-surface-hover/35`),children:[(0,O.jsx)(n,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),t]},e))}),(0,O.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,O.jsx)(`span`,{className:`text-xs font-medium text-fg-subtle`,children:t.filterChannelLabel}),(0,O.jsx)(`button`,{type:`button`,"aria-pressed":!I,onClick:()=>L(``),className:i(`inline-flex items-center rounded-xl px-3 py-2 text-sm font-medium`,c.transition,c.focusRingPanel,I?`bg-surface-base text-fg-muted hover:bg-surface-hover hover:text-fg dark:bg-surface-hover/35`:`bg-accent-soft text-accent-fg`),children:t.filterChannelAll}),We.map(e=>(0,O.jsxs)(`button`,{type:`button`,"aria-pressed":I===e,onClick:()=>L(e),className:i(`inline-flex items-center rounded-xl px-3 py-2 text-sm font-medium`,c.transition,c.focusRingPanel,I===e?`bg-accent-soft text-accent-fg`:`bg-surface-base text-fg-muted hover:bg-surface-hover hover:text-fg dark:bg-surface-hover/35`),children:[e,W?.byChannel?.[e]==null?null:(0,O.jsx)(`span`,{className:`ml-2 rounded-full bg-surface-hover px-2 py-0.5 text-[11px] text-fg-subtle`,children:W.byChannel[e]})]},e))]}),W?(0,O.jsx)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-4`,children:[[W.totalSessions,t.totalSessions],[W.activeSessions,t.activeSessions],[W.pinnedSessions,t.pinnedSessions],[W.archivedSessions,t.archivedSessions]].map(([e,t])=>(0,O.jsxs)(`div`,{className:`rounded-xl bg-surface-base px-3 py-3 dark:bg-surface-hover/30`,children:[(0,O.jsx)(`div`,{className:`text-lg font-semibold tabular-nums text-fg`,children:e}),(0,O.jsx)(`div`,{className:`text-xs text-fg-muted`,children:t})]},t))}):null,je?(0,O.jsx)(`div`,{className:`rounded-lg border border-edge bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-edge dark:bg-red-950/40 dark:text-red-300`,children:je}):null,(0,O.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,O.jsx)(`p`,{className:`text-xs text-fg-muted`,children:Te(t.sessionCount,{count:R.length})}),(0,O.jsxs)(`div`,{className:h,role:`group`,"aria-label":t.layoutToggleGroup,children:[(0,O.jsx)(g,{type:`button`,variant:`segmented`,title:t.gridView,"aria-pressed":P===`grid`,onClick:()=>F(`grid`),className:i(ye,`size-7 p-0`,P===`grid`&&`bg-surface-panel shadow-sm dark:bg-surface-panel dark:shadow-sm dark:ring-1 dark:ring-edge-strong/40`,P===`grid`&&`text-accent-fg`),children:(0,O.jsx)(te,{className:`size-3.5`,strokeWidth:1.5})}),(0,O.jsx)(g,{type:`button`,variant:`segmented`,title:t.listView,"aria-pressed":P===`list`,onClick:()=>F(`list`),className:i(ye,`size-9 p-0`,P===`list`&&`bg-surface-panel shadow-sm dark:bg-surface-panel dark:shadow-sm dark:ring-1 dark:ring-edge-strong/40`,P===`list`&&`text-accent-fg`),children:(0,O.jsx)(be,{className:`size-3.5`,strokeWidth:1.5})})]})]}),B&&R.length===0?(0,O.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:Array.from({length:6}).map((e,t)=>(0,O.jsx)(`div`,{className:`h-40 animate-pulse rounded-xl bg-surface-hover/60 dark:bg-surface-hover/40`},t))}):R.length===0?(0,O.jsxs)(`div`,{className:`flex flex-col items-center justify-center rounded-2xl bg-surface-base py-16 text-center dark:bg-surface-hover/25`,children:[(0,O.jsx)(ce,{className:`mb-3 size-12 text-fg-disabled`,strokeWidth:1.25,"aria-hidden":!0}),(0,O.jsx)(`p`,{className:`text-base font-semibold text-fg`,children:t.noSessions}),(0,O.jsx)(`p`,{className:`mt-1 max-w-sm text-sm text-fg-muted`,children:t.noSessionsDescription}),(0,O.jsx)(g,{variant:`primary`,className:`mt-6`,onClick:()=>{window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{sessionKey:``},bubbles:!0}))},children:t.startNewChat})]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`div`,{className:i(`grid min-w-0 gap-3`,P===`grid`?`sm:grid-cols-2 lg:grid-cols-3`:`grid-cols-1`),children:R.map(e=>{let t=y(e,p);return(0,O.jsx)(Ce,{session:e,variant:P,labels:Ve,sessionAgentId:t,sessionAgentAvatar:v(t,m),onOpen:()=>ze(e.key),onAction:t=>void $(e.key,t)},e.key)})}),U?(0,O.jsx)(`div`,{className:`flex justify-center pt-2`,children:(0,O.jsx)(g,{type:`button`,variant:`secondary`,disabled:B,onClick:()=>void Le(),children:t.loadMore})}):null]})]}),(0,O.jsx)(we,{open:Ne,loading:Pe,session:q,sessionAgentId:q?y(q,p):void 0,sessionAgentAvatar:q?v(y(q,p),m):void 0,labels:He,onClose:()=>{K(!1),J(null)},onArchive:()=>q&&void $(q.key,`archive`),onUnarchive:()=>q&&void $(q.key,`unarchive`),onPin:()=>q&&void $(q.key,`pin`),onUnpin:()=>q&&void $(q.key,`unpin`),onExport:()=>q&&void $(q.key,`export`),onDelete:()=>q&&(Z(q.key),Y(!0))}),(0,O.jsx)(f,{open:Ie,onOpenChange:Y,children:(0,O.jsxs)(o,{children:[(0,O.jsx)(s,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),(0,O.jsxs)(_e,{className:`xopc-dialog-content fixed left-1/2 top-1/2 z-[60] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`,children:[(0,O.jsx)(le,{className:`text-base font-semibold text-fg`,children:t.deleteSessionTitle}),(0,O.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:X?Te(t.deleteSessionMessage,{name:R.find(e=>e.key===X)?.name?.trim()||e.chat.newSession}):``}),(0,O.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,O.jsx)(g,{type:`button`,variant:`secondary`,onClick:()=>Y(!1),children:t.cancel}),(0,O.jsx)(g,{type:`button`,variant:`primary`,className:`bg-red-600 hover:bg-red-700`,onClick:()=>{X&&Be(X),Y(!1),Z(null)},children:t.delete})]})]})]})})]}):(0,O.jsx)(`div`,{className:`mx-auto w-full max-w-2xl px-4 py-16 text-center text-sm text-fg-muted sm:px-8 lg:max-w-app-main`,children:t.needToken})}export{j as SessionsPage};
|
|
2
|
-
//# sourceMappingURL=sessions-page-DJkuWpOT.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r,o as i}from"./vendor-swr-B5fPo7KK.js";import{t as a}from"./cn-BMCV0OMB.js";import{$r as o,An as s,At as c,Br as l,Cn as u,Cr as d,Ct as f,Dt as p,Et as m,Fr as h,Ft as g,G as _,Gn as v,Hn as y,In as b,J as x,Mt as S,Nr as C,Nt as w,On as T,Ot as E,Pr as D,Pt as ee,Qn as te,Sn as O,Tn as k,Tr as ne,Wn as re,Yn as A,Yr as j,Zn as M,Zr as ie,_t as N,a as P,ar as F,bn as I,c as ae,ci as L,cn as R,cr as oe,dn as z,dr as B,ei as V,er as se,fn as H,fr as ce,g as le,gn as U,h as W,hn as ue,i as de,jn as fe,jt as pe,kn as me,kt as he,l as ge,li as _e,ln as G,mn as ve,mr as K,n as ye,ni as be,nr as xe,o as Se,pi as Ce,pr as we,qn as Te,qr as Ee,r as De,s as Oe,sn as q,sr as ke,t as Ae,u as je,ui as Me,vt as Ne,wn as Pe,wr as Fe,wt as Ie,zn as Le,zr as Re}from"./index-D0pFZ0OE.js";import{a as ze,p as Be,v as Ve}from"./cron-utils-DZ7pabh5.js";import{a as He,c as Ue,i as J,l as We,n as Ge,o as Ke,r as qe,s as Je,t as Ye,u as Xe}from"./agents-BfwtJOPK.js";var Y=n();function Ze(){return a(`rounded-xl border border-edge-subtle bg-surface-base px-4 py-1 sm:px-5`)}function Qe({scheme:e}){return e===`emerald`?(0,Y.jsxs)(`div`,{className:`flex h-10 w-full overflow-hidden rounded-md border border-edge-subtle`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#0a0a0a] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-8 rounded-full bg-[#134e2a]`}),(0,Y.jsx)(`div`,{className:`h-1 w-5 rounded-full bg-[#134e2a]`})]}),(0,Y.jsx)(`div`,{className:`w-1.5 bg-[#10b981]`}),(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#000000] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-6 rounded-full bg-[#34d399]`}),(0,Y.jsx)(`div`,{className:`h-1 w-9 rounded-full bg-[#065f46]`}),(0,Y.jsx)(`div`,{className:`h-1 w-4 rounded-full bg-[#065f46]`})]})]}):(0,Y.jsxs)(`div`,{className:`flex h-10 w-full overflow-hidden rounded-md border border-edge-subtle`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#f5f5f7] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-8 rounded-full bg-[#d2d2d7]`}),(0,Y.jsx)(`div`,{className:`h-1 w-5 rounded-full bg-[#d2d2d7]`})]}),(0,Y.jsx)(`div`,{className:`w-1.5 bg-[#2563eb]`}),(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#ffffff] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-6 rounded-full bg-[#1d1d1f]`}),(0,Y.jsx)(`div`,{className:`h-1 w-9 rounded-full bg-[#d2d2d7]`}),(0,Y.jsx)(`div`,{className:`h-1 w-4 rounded-full bg-[#d2d2d7]`})]})]})}var $e=[{value:`default`,labelKey:`colorSchemeDefault`},{value:`emerald`,labelKey:`colorSchemeLightGreen`}];function et(){let e=Pe(U(e=>e.language)).appearanceSettings,t=ue(e=>e.colorScheme),n=ue(e=>e.setColorScheme);return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-edge-subtle py-3.5 last:border-b-0 sm:py-4`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-semibold text-fg`,children:e.colorSchemeTitle}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:e.colorSchemeDescription})]}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-3`,children:$e.map(({value:r,labelKey:i})=>{let o=t===r;return(0,Y.jsxs)(`button`,{type:`button`,"aria-pressed":o,onClick:()=>n(r),className:a(`flex flex-col gap-2 rounded-xl border-2 p-2.5 text-left transition-[border-color,box-shadow] duration-150`,o?`border-accent shadow-[0_0_0_1px_var(--color-accent)]`:`border-edge-subtle hover:border-edge`),children:[(0,Y.jsx)(Qe,{scheme:r}),(0,Y.jsx)(`span`,{className:a(`text-xs font-medium leading-none`,o?`text-accent-fg`:`text-fg-muted`),children:e[i]})]},r)})})]})}function tt(){let e=Pe(U(e=>e.language)).appearanceSettings;return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:e.pageTitle}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.subtitle})]}),(0,Y.jsxs)(`section`,{className:Ze(),"aria-labelledby":`pref-language-heading`,children:[(0,Y.jsx)(`h2`,{id:`pref-language-heading`,className:`sr-only`,children:e.languageTitle}),(0,Y.jsx)(ve,{variant:`page`,sections:[`language`]})]}),(0,Y.jsxs)(`section`,{className:Ze(),"aria-labelledby":`pref-appearance-heading`,children:[(0,Y.jsx)(`h2`,{id:`pref-appearance-heading`,className:`sr-only`,children:e.themeTitle}),(0,Y.jsx)(ve,{variant:`page`,sections:[`theme`,`font`]}),(0,Y.jsx)(et,{})]})]})}var X=e(t(),1);function nt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function rt(e){let t=nt(e)?e:{},n=nt(t.gateway)?t.gateway:{},r=nt(n.auth)?n.auth:{},i=r.mode===`none`||r.mode===`token`?r.mode:`token`,a=(nt(t.update)?t.update:{}).channel,o=a===`beta`||a===`dev`||a===`stable`?a:`stable`;return{host:typeof n.host==`string`?n.host:``,port:typeof n.port==`number`?n.port:void 0,auth:{mode:i,token:typeof r.token==`string`?r.token:``},updateChannel:o}}async function it(e){let t=e.auth.token.trim().length>0?{mode:e.auth.mode,token:e.auth.token}:{mode:e.auth.mode};await G(q(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{auth:t},update:{channel:e.updateChannel}})}),N()}function at(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,u,`dark:border-edge`)}function ot(){let e=U(e=>e.language),t=Pe(e),n=t.gatewaySettings,r=z(e=>e.token),i=z(e=>e.tokenExpired),a=z(e=>e.openTokenDialog),o=!!r,[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(null),[g,_]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),[b,x]=(0,X.useState)(!1),S=(0,X.useRef)(!1),{data:C,error:w,isLoading:T,mutate:E}=Ne(o),D=(0,X.useMemo)(()=>C?.payload?.config===void 0?null:structuredClone(rt(C.payload.config)),[C]);(0,X.useEffect)(()=>{if(!o){c(null),u(null),S.current=!1;return}D!==null&&(S.current||(c(D),u(structuredClone(D)),_(!1)))},[o,D]);let ee=!!(o&&T&&C===void 0&&!w),te=w instanceof Error?w.message:w?String(w):null,O=(0,X.useMemo)(()=>!s||!l?!1:JSON.stringify(s)!==JSON.stringify(l),[s,l]),ne=(0,X.useCallback)(e=>{S.current=!0,c(t=>t?{...t,auth:{...t.auth,...e}}:null)},[]),re=(0,X.useCallback)(e=>{S.current=!0,c(t=>t?{...t,updateChannel:e}:null)},[]),A=(0,X.useCallback)(async()=>{if(!(!s||d)){f(!0),m(null),_(!1);try{await it(s),S.current=!1,u(structuredClone(s)),_(!0),window.setTimeout(()=>_(!1),2500)}catch(e){m(e instanceof Error?e.message:n.saveError)}finally{f(!1)}}},[s,d,n.saveError]),M=(0,X.useCallback)(async()=>{let e=s?.auth.token;e&&(await navigator.clipboard.writeText(e).catch(()=>{}),x(!0),window.setTimeout(()=>x(!1),2e3))},[s?.auth.token]);return o?ee?(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(K,{className:`size-4 animate-spin`}),n.loading]})}):s?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.gateway}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:H(e,`gateway`),target:`_blank`,rel:`noreferrer`,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`,children:[n.docsLink,(0,Y.jsx)(h,{className:`size-3.5`})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[g?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,(0,Y.jsx)(k,{type:`button`,variant:`primary`,disabled:!O||d,onClick:()=>void A(),children:d?n.saving:n.save})]})]}),i?(0,Y.jsxs)(`div`,{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`,role:`alert`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(j,{className:`mt-0.5 size-4 shrink-0 text-red-600 dark:text-red-400`}),(0,Y.jsx)(`p`,{className:`text-sm text-red-900 dark:text-red-100`,children:n.tokenExpired})]}),(0,Y.jsx)(`div`,{children:(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:()=>a(),children:n.updateToken})})]}):null,O?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,p?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:p}):null,s.auth.mode===`none`?(0,Y.jsx)(`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`,children:n.authModeNone}):null,(0,Y.jsxs)(`section`,{className:`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`,children:[(0,Y.jsxs)(`div`,{className:`mb-5 flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(Te,{className:`size-4 text-accent`,strokeWidth:1.75}),t.settingsSections.gateway]}),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(s.host||s.port!=null)&&(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:n.listenHost}),(0,Y.jsx)(`div`,{className:`rounded-lg bg-surface-hover/80 px-3 py-2 font-mono text-xs text-fg-muted dark:bg-surface-hover/50`,children:s.host||`—`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:n.listenPort}),(0,Y.jsx)(`div`,{className:`rounded-lg bg-surface-hover/80 px-3 py-2 font-mono text-xs text-fg-muted dark:bg-surface-hover/50`,children:s.port==null?`—`:String(s.port)})]}),(0,Y.jsx)(`p`,{className:`sm:col-span-2 text-xs text-fg-subtle`,children:n.listenHint})]}),(0,Y.jsx)(st,{g:n,value:s.auth.token,show:v,copied:b,onToggleShow:()=>y(e=>!e),onCopy:()=>void M(),onChange:e=>ne({token:e})}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`w-full sm:w-auto`,onClick:()=>a(),children:n.changeToken}),(0,Y.jsxs)(`div`,{className:`space-y-2 border-t border-edge pt-4`,children:[(0,Y.jsx)(`label`,{className:`text-sm font-medium text-fg`,htmlFor:`gateway-update-channel`,children:n.updateChannel}),(0,Y.jsxs)(`select`,{id:`gateway-update-channel`,value:s.updateChannel,onChange:e=>re(e.target.value),className:at(),children:[(0,Y.jsx)(`option`,{value:`stable`,children:n.channelStable}),(0,Y.jsx)(`option`,{value:`beta`,children:n.channelBeta}),(0,Y.jsx)(`option`,{value:`dev`,children:n.channelDev})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:n.updateChannelHint})]})]})]})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:p??te??n.loadError}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>void E(),children:n.retry})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.gateway}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function st({g:e,value:t,show:n,copied:r,onToggleShow:i,onCopy:o,onChange:s}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.accessToken}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsx)(`input`,{className:a(at(),`min-w-0 flex-1 font-mono text-xs`),type:n?`text`:`password`,autoComplete:`off`,value:t,onChange:e=>s(e.target.value),placeholder:e.tokenPlaceholder}),t?(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:o,children:[r?(0,Y.jsx)(V,{className:`size-3.5`}):(0,Y.jsx)(l,{className:`size-3.5`}),r?e.copied:e.copy]}):null,(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:i,children:[n?(0,Y.jsx)(D,{className:`size-3.5`}):(0,Y.jsx)(C,{className:`size-3.5`}),n?e.hide:e.show]})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:e.tokenHelp})]})}function ct(){return q(`/api/channels/status`)}var lt=Be;function ut(){return q(`/api/workspace/heartbeat-md`)}async function dt(){let e=await G(ut());return typeof e.payload?.content==`string`?e.payload.content:``}function ft(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function pt(e){let t=ft(e)?e:{},n=ft(t.gateway)?t.gateway:{},r=ft(n.heartbeat)?n.heartbeat:{},i=r.activeHours,a=ft(i)?i:null,o=a&&typeof a.start==`string`&&typeof a.end==`string`&&a.start&&a.end?{start:a.start,end:a.end,timezone:typeof a.timezone==`string`?a.timezone:``}:null;return{enabled:!!(r.enabled??!0),intervalMs:typeof r.intervalMs==`number`&&Number.isFinite(r.intervalMs)?r.intervalMs:18e5,target:typeof r.target==`string`?r.target:``,targetChatId:typeof r.targetChatId==`string`?r.targetChatId:``,prompt:typeof r.prompt==`string`?r.prompt:``,ackMaxChars:typeof r.ackMaxChars==`number`&&Number.isFinite(r.ackMaxChars)?r.ackMaxChars:``,isolatedSession:!!r.isolatedSession,activeHours:o}}function mt(e){let t={enabled:e.enabled,intervalMs:e.intervalMs};return e.target.trim()?t.target=e.target.trim():t.target=null,e.targetChatId.trim()?t.targetChatId=e.targetChatId.trim():t.targetChatId=null,e.prompt.trim()?t.prompt=e.prompt.trim():t.prompt=null,e.ackMaxChars===``||e.ackMaxChars===void 0?t.ackMaxChars=null:t.ackMaxChars=e.ackMaxChars,e.isolatedSession?t.isolatedSession=!0:t.isolatedSession=null,e.activeHours?.start?.trim()&&e.activeHours?.end?.trim()?t.activeHours={start:e.activeHours.start.trim(),end:e.activeHours.end.trim(),...e.activeHours.timezone.trim()?{timezone:e.activeHours.timezone.trim()}:{}}:t.activeHours=null,t}async function ht(e){await G(q(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{heartbeat:mt(e)}})}),N()}async function gt(e){await G(q(`/api/workspace/heartbeat-md`),{method:`PUT`,body:JSON.stringify({content:e})}),i(ut())}async function _t(e){await G(q(`/api/heartbeat/trigger`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e?{reason:e}:{})})}var vt=[3e4,6e4,3e5,6e5,9e5,18e5,36e5,72e5],yt=new Set(vt);function bt(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,u,`dark:border-edge`)}function xt(){return a(O,I)}function St(e){if(!e||typeof e!=`object`||Array.isArray(e))return``;let t=e.agents;if(!t||typeof t!=`object`||Array.isArray(t))return``;let n=t.defaults;if(!n||typeof n!=`object`||Array.isArray(n))return``;let r=n.workspace;return typeof r==`string`?r:``}function Ct(e,t){switch(e){case 3e4:return t.every30s;case 6e4:return t.every1min;case 3e5:return t.every5min;case 6e5:return t.every10min;case 9e5:return t.every15min;case 18e5:return t.every30min;case 36e5:return t.every1h;case 72e5:return t.every2h;default:return String(e)}}function wt(){let e=U(e=>e.language),t=Pe(e),n=t.heartbeatSettings,i=!!z(e=>e.token),[o,s]=(0,X.useState)(null),[c,l]=(0,X.useState)(null),[u,d]=(0,X.useState)(``),[f,p]=(0,X.useState)(``),[m,g]=(0,X.useState)(!1),[_,v]=(0,X.useState)(!1),[y,b]=(0,X.useState)(null),[x,S]=(0,X.useState)(!1),[C,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(!1),[D,ee]=(0,X.useState)(!1),[te,O]=(0,X.useState)(null),[re,A]=(0,X.useState)([]),{data:j,error:M,isLoading:ie,mutate:N}=Ne(i),{data:P,error:F,isLoading:I,mutate:ae}=r(i?ut():null,dt,{revalidateOnFocus:!1}),{data:L=[]}=r(i?ct():null,lt,{revalidateOnFocus:!1}),R=(0,X.useMemo)(()=>St(j?.payload?.config),[j]),oe=(0,X.useMemo)(()=>pt(j?.payload?.config??{}),[j]),B=(0,X.useMemo)(()=>!o||!c?!1:JSON.stringify(o)!==JSON.stringify(c),[o,c]),V=(0,X.useMemo)(()=>u!==f,[u,f]);(0,X.useEffect)(()=>{if(!i){s(null),l(null);return}if(j!==void 0&&!B){let e=structuredClone(oe);s(e),l(e),S(!1)}},[i,j,oe,B]),(0,X.useEffect)(()=>{!i||P===void 0||V||(d(P),p(P),w(!1))},[i,P,V]);let se=M instanceof Error?M.message:M?String(M):F instanceof Error?F.message:F?String(F):null,ce=!!(i&&(j===void 0||P===void 0)&&!se&&(ie||I));(0,X.useEffect)(()=>{if(!i||!o){A([]);return}let e=o.target.trim();if(!e){A([]);return}let t=!1;return Ve(e).then(e=>{t||A(e)}),()=>{t=!0}},[i,o?.target]);let le=(0,X.useCallback)(()=>{let e=o?.target?.trim();e&&Ve(e).then(A)},[o?.target]),W=(0,X.useCallback)(async()=>{E(!0),ee(!1),O(null);try{await _t(),ee(!0),window.setTimeout(()=>ee(!1),3e3)}catch(e){O(e instanceof Error?e.message:n.triggerError)}finally{E(!1)}},[n.triggerError]),ue=(0,X.useCallback)(e=>{s(t=>t?{...t,...e}:null)},[]),de=(0,X.useCallback)(async()=>{if(!(!o||m)){g(!0),b(null),S(!1);try{await ht(o),l(structuredClone(o)),S(!0),window.setTimeout(()=>S(!1),2500)}catch(e){b(e instanceof Error?e.message:n.saveConfigError)}finally{g(!1)}}},[o,m,n.saveConfigError]),fe=(0,X.useCallback)(async()=>{if(!_){v(!0),b(null),w(!1);try{await gt(u),p(u),w(!0),window.setTimeout(()=>w(!1),2500)}catch(e){b(e instanceof Error?e.message:n.saveDocError)}finally{v(!1)}}},[u,_,n.saveDocError]);return i?ce?(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(K,{className:`size-4 animate-spin`}),n.loading]})}):o?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsx)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.heartbeat}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:H(e,`heartbeat`),target:`_blank`,rel:`noreferrer`,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`,children:[n.docsLink,(0,Y.jsx)(h,{className:`size-3.5`})]})]})}),R?(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[n.workspaceLabel,`: `,(0,Y.jsx)(`span`,{className:`font-mono text-fg-muted`,children:R})]}):null,y?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:y}):null,(0,Y.jsxs)(Ge,{children:[(0,Y.jsxs)(`div`,{className:`mb-2 flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(ne,{className:`size-4 text-accent`,strokeWidth:1.75}),n.configSection]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`inline-flex items-center gap-2`,disabled:T,onClick:()=>void W(),children:[T?(0,Y.jsx)(K,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(xe,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),T?n.triggering:n.triggerNow]}),D?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.triggered}):null]})]}),(0,Y.jsx)(`p`,{className:`mb-4 text-xs text-fg-subtle`,children:n.triggerHint}),te?(0,Y.jsx)(`p`,{className:`mb-3 text-sm text-red-600 dark:text-red-400`,children:te}):null,(0,Y.jsx)(Tt,{h:n,cron:t.cron,form:o,channels:L,sessionChatIds:re,onRefreshChatIds:le,update:ue,inputClassName:bt,selectClassName:xt}),(0,Y.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[x?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.savedConfig}):null,(0,Y.jsx)(k,{type:`button`,variant:`primary`,disabled:!B||m,onClick:()=>void de(),children:m?n.savingConfig:n.saveConfig}),B?(0,Y.jsx)(`span`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedConfig}):null]})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(`div`,{className:`mb-2 text-sm font-semibold text-fg`,children:n.docSection}),(0,Y.jsx)(`p`,{className:`mb-3 text-xs text-fg-subtle`,children:n.docHint}),(0,Y.jsx)(`textarea`,{className:a(bt(),`min-h-[12rem] resize-y font-mono text-xs leading-relaxed`),value:u,onChange:e=>d(e.target.value),spellCheck:!1,"aria-label":n.docSection}),(0,Y.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[C?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.savedDoc}):null,(0,Y.jsx)(k,{type:`button`,variant:`primary`,disabled:!V||_,onClick:()=>void fe(),children:_?n.savingDoc:n.saveDoc}),V?(0,Y.jsx)(`span`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedDoc}):null]})]})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:y??se??n.loadError}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>{N(),ae()},children:n.retry})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.heartbeat}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function Tt({h:e,cron:t,form:n,channels:r,sessionChatIds:i,onRefreshChatIds:o,update:s,inputClassName:c,selectClassName:l}){let u=(0,X.useMemo)(()=>new Set(r.map(e=>e.name)),[r]),d=n.target.trim(),f=!!(d&&!u.has(d)),p=(0,X.useMemo)(()=>yt.has(n.intervalMs)?String(n.intervalMs):``,[n.intervalMs]),[m,h]=(0,X.useState)(null),g=Math.max(1,Math.round(n.intervalMs/1e3)),_=m===null?String(g):m;return(0,X.useEffect)(()=>{h(null)},[n.intervalMs]),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:n.enabled,onChange:e=>s({enabled:e.target.checked})}),e.enable]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.interval}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:e.intervalSecondsLabel}),(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(`input`,{type:`number`,min:1,step:1,className:a(c(),`min-w-0 flex-1`),value:_,onChange:e=>{let t=e.target.value;h(t);let n=parseInt(t,10);Number.isFinite(n)&&n>=1&&s({intervalMs:n*1e3})},onBlur:()=>{if(m===null)return;let e=parseInt(m,10);s(!Number.isFinite(e)||e<1?{intervalMs:1e3}:{intervalMs:e*1e3}),h(null)}}),(0,Y.jsxs)(`select`,{className:a(l(),`max-w-[11rem] shrink-0 text-xs`),value:p,onChange:e=>{let t=e.target.value;t&&(s({intervalMs:parseInt(t,10)}),h(null))},children:[(0,Y.jsx)(`option`,{value:``,children:e.intervalPresets.custom}),vt.map(t=>(0,Y.jsx)(`option`,{value:String(t),children:Ct(t,e.intervalPresets)},t))]})]})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.intervalHintPreset}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:e.intervalHint})]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-4`,children:[(0,Y.jsx)(`div`,{className:`mb-2 text-sm font-medium text-fg`,children:e.deliveryTitle}),(0,Y.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:t.channel}),(0,Y.jsxs)(`select`,{className:l(),value:d,onChange:e=>{s({target:e.target.value.trim(),targetChatId:``})},children:[(0,Y.jsx)(`option`,{value:``,children:e.channelNone}),f?(0,Y.jsxs)(`option`,{value:d,children:[d,` (`,e.customChannelSuffix,`)`]}):null,r.map(e=>(0,Y.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:`(disabled)`]},e.name))]})]}),d?(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-col gap-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:t.recipient}),(0,Y.jsxs)(k,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,title:t.refreshRecipientHint,onClick:o,children:[(0,Y.jsx)(te,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0}),t.refreshList]})]}),(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(`input`,{type:`text`,className:a(c(),`min-w-0 flex-1`),value:n.targetChatId,onChange:e=>s({targetChatId:e.target.value}),placeholder:t.recipientPlaceholder,autoComplete:`off`}),(0,Y.jsxs)(`select`,{className:a(l(),`max-w-[10rem] shrink-0 text-xs`),value:n.targetChatId,onChange:e=>{let t=e.target.value;t&&s({targetChatId:t})},children:[(0,Y.jsx)(`option`,{value:``,children:t.selectRecipient}),i.length>0?i.map(e=>(0,Y.jsx)(`option`,{value:e.chatId,children:ze(e,t.lastActiveLabels)},`${e.channel}-${e.chatId}`)):(0,Y.jsx)(`option`,{value:``,disabled:!0,children:t.noRecentChatsOption})]})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:i.length>0?t.enterManuallyOrSelect:t.noRecentChats})]}):null,(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:e.deliveryHint})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:e.prompt}),(0,Y.jsx)(`textarea`,{className:a(c(),`min-h-[4.5rem] resize-y font-mono text-xs`),value:n.prompt,onChange:e=>s({prompt:e.target.value}),placeholder:e.promptPlaceholder}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.promptHint})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:e.ackMaxChars}),(0,Y.jsx)(`input`,{type:`number`,min:1,className:c(),value:n.ackMaxChars===``?``:n.ackMaxChars,onChange:e=>{let t=e.target.value;if(t===``)s({ackMaxChars:``});else{let e=parseInt(t,10);s({ackMaxChars:Number.isFinite(e)?e:``})}},placeholder:e.ackDefaultPlaceholder}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.ackMaxCharsHint})]}),(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox mt-0.5`,checked:n.isolatedSession,onChange:e=>s({isolatedSession:e.target.checked})}),(0,Y.jsxs)(`span`,{children:[e.isolatedSession,(0,Y.jsx)(`span`,{className:`mt-1 block text-xs text-fg-subtle`,children:e.isolatedSessionHint})]})]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-4`,children:[(0,Y.jsx)(`div`,{className:`mb-2 text-sm font-medium text-fg`,children:e.activeHoursTitle}),n.activeHours?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-xs text-fg`,children:e.activeStart}),(0,Y.jsx)(`input`,{className:c(),value:n.activeHours.start,onChange:e=>s({activeHours:{...n.activeHours,start:e.target.value}}),placeholder:`09:00`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-xs text-fg`,children:e.activeEnd}),(0,Y.jsx)(`input`,{className:c(),value:n.activeHours.end,onChange:e=>s({activeHours:{...n.activeHours,end:e.target.value}}),placeholder:`22:00`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-xs text-fg`,children:e.activeTimezone}),(0,Y.jsx)(`input`,{className:c(),value:n.activeHours.timezone,onChange:e=>s({activeHours:{...n.activeHours,timezone:e.target.value}}),placeholder:`Asia/Shanghai`})]})]}):(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:()=>s({activeHours:{start:`09:00`,end:`22:00`,timezone:``}}),children:e.addActiveHours}),n.activeHours?(0,Y.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-2`,children:(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`text-xs`,onClick:()=>s({activeHours:null}),children:e.clearActiveHours})}):null,(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:e.activeHoursHint})]})]})}var Et=[{value:`openai-completions`,label:`OpenAI Completions`},{value:`openai-responses`,label:`OpenAI Responses`},{value:`anthropic-messages`,label:`Anthropic Messages`},{value:`google-generative-ai`,label:`Google Generative AI`},{value:`azure-openai-responses`,label:`Azure OpenAI`},{value:`bedrock-converse-stream`,label:`AWS Bedrock`},{value:`openai-codex-responses`,label:`OpenAI Codex`},{value:`google-gemini-cli`,label:`Google Gemini CLI`},{value:`google-vertex`,label:`Google Vertex AI`}];function Dt(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&`message`in t.error){let e=t.error.message;return typeof e==`string`?e:void 0}}function Ot(e){if(!e||typeof e!=`object`)return{providers:{}};let t=e,n=t.providers;return n&&typeof n==`object`&&!Array.isArray(n)?e:{...t,providers:{}}}async function kt(){let e=await R(q(`/api/models-json`)),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok||!t.payload)throw Error(Dt(t)||`HTTP ${e.status}`);return{...t.payload,config:Ot(t.payload.config)}}async function At(e){let t=await R(q(`/api/models-json/validate`),{method:`POST`,body:JSON.stringify({config:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(Dt(n)||`HTTP ${t.status}`);return n.payload}async function jt(e){let t=await R(q(`/api/models-json`),{method:`PATCH`,body:JSON.stringify({config:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(Dt(n)||`HTTP ${t.status}`);return n.payload}async function Mt(){let e=await R(q(`/api/models-json/reload`),{method:`POST`}),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok||!t.payload)throw Error(Dt(t)||`HTTP ${e.status}`);return t.payload}async function Nt(e){let t=await R(q(`/api/models-json/test-api-key`),{method:`POST`,body:JSON.stringify({value:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(Dt(n)||`HTTP ${t.status}`);return n.payload}function Pt(e,t,n){return{id:e,name:t||e,input:[`text`],contextWindow:128e3,maxTokens:16384,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},...n}}function Ft(e){return e.startsWith(`!`)}function It(e){return/^[A-Z][A-Z0-9_]*$/.test(e)}function Lt(e){return Ft(e)?`shell`:It(e)?`env`:`literal`}function Rt(e){return e?e.length<=8?`••••`:`${e.slice(0,4)}••••${e.slice(-4)}`:``}var zt={ollama:{baseUrl:`http://localhost:11434/v1`,api:`openai-completions`,apiKey:`ollama`},lmstudio:{baseUrl:`http://localhost:1234/v1`,api:`openai-completions`,apiKey:`lmstudio`},openrouter:{baseUrl:`https://openrouter.ai/api/v1`,api:`openai-completions`,apiKey:``},zhipuCn:{baseUrl:`https://open.bigmodel.cn/api/coding/paas/v4`,api:`openai-completions`,apiKey:`ZHIPU_API_KEY`},zaiGeneral:{baseUrl:`https://api.z.ai/api/paas/v4`,api:`openai-completions`,apiKey:`ZAI_API_KEY`}};function Bt(e){return e===`openrouter`?`openrouter`:e===`zhipuCn`?`zhipu-cn`:e===`zaiGeneral`?`zai`:e}var Vt=[{value:`text`,labelKey:`inputTextOnly`},{value:`text,image`,labelKey:`inputTextVision`}];function Ht(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,u,`dark:border-edge`)}function Ut(){return a(O,I)}function Wt(e){return(e.input||[`text`]).includes(`image`)?`text,image`:`text`}function Gt(e){return e===`text,image`?[`text`,`image`]:[`text`]}function Kt(e,t,n){return{...e,providers:{...e.providers,[t]:{...e.providers[t],...n}}}}function qt(e,t){let n={...e.providers};return delete n[t],{...e,providers:n}}function Jt(e,t,n){return{...e,providers:{...e.providers,[t]:n}}}function Yt({open:e,onOpenChange:t,presetKey:n,onConfirm:r,m:i}){let[o,s]=(0,X.useState)(``),[c,l]=(0,X.useState)(`custom`),[u,d]=(0,X.useState)(``),[h,g]=(0,X.useState)(`openai-completions`),[_,v]=(0,X.useState)(``),[y,b]=(0,X.useState)(null);(0,X.useEffect)(()=>{if(!e)return;b(null);let t=n||null;if(t&&zt[t]){let e=zt[t];l(t),d(e.baseUrl||``),g(e.api||`openai-completions`),v(e.apiKey??``),s(Bt(t))}else l(`custom`),s(``),d(``),g(`openai-completions`),v(``)},[e,n]);let x=e=>{if(l(e),e===`custom`)return;let t=zt[e];t&&(d(t.baseUrl||``),g(t.api||`openai-completions`),v(t.apiKey??``),s(Bt(e)))};return(0,Y.jsx)(E,{open:e,onOpenChange:t,children:(0,Y.jsxs)(p,{children:[(0,Y.jsx)(m,{className:`xopc-dialog-overlay fixed inset-0 z-50 bg-scrim`}),(0,Y.jsxs)(Ie,{className:a(`xopc-dialog-content fixed left-1/2 top-1/2 z-50 max-h-[min(90vh,640px)] w-[min(100%-2rem,32rem)] -translate-x-1/2 -translate-y-1/2`,`overflow-y-auto rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Y.jsxs)(`div`,{className:`mb-3 flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(he,{className:`text-base font-semibold text-fg`,children:i.addProviderTitle}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:i.addProviderSubtitle})]}),(0,Y.jsx)(f,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,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`,"aria-label":i.close,children:(0,Y.jsx)(me,{className:`size-4`})})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.presetLabel}),(0,Y.jsxs)(`select`,{className:Ut(),value:c,onChange:e=>x(e.target.value),children:[(0,Y.jsx)(`option`,{value:`custom`,children:i.presetCustom}),(0,Y.jsx)(`option`,{value:`ollama`,children:i.presetOllama}),(0,Y.jsx)(`option`,{value:`lmstudio`,children:i.presetLmStudio}),(0,Y.jsx)(`option`,{value:`openrouter`,children:i.presetOpenRouter}),(0,Y.jsx)(`option`,{value:`zhipuCn`,children:i.presetZhipuCn}),(0,Y.jsx)(`option`,{value:`zaiGeneral`,children:i.presetZaiGeneral})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`label`,{className:`mb-1 block text-xs font-medium text-fg`,children:[i.providerIdLabel,(0,Y.jsx)(`span`,{className:`text-red-600 dark:text-red-400`,children:` *`})]}),(0,Y.jsx)(`input`,{className:Ht(),value:o,onChange:e=>s(e.target.value),placeholder:i.providerIdPlaceholder})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.baseUrl}),(0,Y.jsx)(`input`,{className:Ht(),value:u,onChange:e=>d(e.target.value),placeholder:`https://…`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.apiType}),(0,Y.jsx)(`select`,{className:Ut(),value:h,onChange:e=>g(e.target.value),children:Et.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.apiKey}),(0,Y.jsx)(`input`,{className:Ht(),value:_,onChange:e=>v(e.target.value),placeholder:i.apiKeyPlaceholder})]}),y?(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-xs text-red-600 dark:text-red-400`,children:[(0,Y.jsx)(j,{className:`size-3.5 shrink-0`}),y]}):null]}),(0,Y.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2 border-t border-edge-subtle pt-3 dark:border-edge`,children:[(0,Y.jsx)(f,{asChild:!0,children:(0,Y.jsx)(k,{type:`button`,variant:`secondary`,children:i.cancel})}),(0,Y.jsx)(k,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:()=>{let e=o.trim();if(!e){b(i.providerIdRequired);return}b(null),r(e,{baseUrl:u.trim()||void 0,api:h,apiKey:_.trim()||void 0,models:[]}),t(!1)},children:i.addProviderConfirm})]})]})]})})}function Xt({open:e,onOpenChange:t,providerId:n,model:r,isNew:i,onSave:o,m:s}){let[c,l]=(0,X.useState)(()=>Pt(``)),[u,d]=(0,X.useState)(()=>new Map);(0,X.useEffect)(()=>{e&&(d(new Map),l(r?{...r}:Pt(``)))},[e,r]);let h=(e,t)=>{l(n=>({...n,[e]:t})),d(t=>{let n=new Map(t);return n.delete(e),n})},g=()=>{let e=new Map;return(c.id||``).trim()||e.set(`id`,s.modelIdRequired),c.contextWindow!==void 0&&c.contextWindow<=0&&e.set(`contextWindow`,s.mustBePositive),c.maxTokens!==void 0&&c.maxTokens<=0&&e.set(`maxTokens`,s.mustBePositive),d(e),e.size===0},_=()=>{if(!g())return;let e=(c.id||``).trim();o({...c,id:e,name:c.name?.trim()||e,reasoning:c.reasoning||!1,input:c.input||[`text`],contextWindow:c.contextWindow??128e3,maxTokens:c.maxTokens??16384,cost:{input:c.cost?.input??0,output:c.cost?.output??0,cacheRead:c.cost?.cacheRead??0,cacheWrite:c.cost?.cacheWrite??0}}),t(!1)},v=Wt(c);return(0,Y.jsx)(E,{open:e,onOpenChange:t,children:(0,Y.jsxs)(p,{children:[(0,Y.jsx)(m,{className:`xopc-dialog-overlay fixed inset-0 z-50 bg-scrim`}),(0,Y.jsxs)(Ie,{className:a(`xopc-dialog-content fixed left-1/2 top-1/2 z-50 max-h-[min(90vh,720px)] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2`,`overflow-y-auto rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Y.jsxs)(`div`,{className:`mb-3 flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(he,{className:`text-base font-semibold text-fg`,children:i?s.addModelTitle:s.editModelTitle}),n?(0,Y.jsxs)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:[s.modelProviderLabel,`: `,n]}):null]}),(0,Y.jsx)(f,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,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`,"aria-label":s.close,children:(0,Y.jsx)(me,{className:`size-4`})})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`label`,{className:`mb-1 block text-xs font-medium text-fg`,children:[s.modelId,(0,Y.jsx)(`span`,{className:`text-red-600 dark:text-red-400`,children:` *`})]}),(0,Y.jsx)(`input`,{className:a(Ht(),u.has(`id`)&&`border-red-500`),value:c.id||``,onChange:e=>h(`id`,e.target.value),placeholder:`e.g. llama3.1:8b`,disabled:!i}),u.has(`id`)?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-red-600 dark:text-red-400`,children:u.get(`id`)}):null]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.displayName}),(0,Y.jsx)(`input`,{className:Ht(),value:c.name||``,onChange:e=>h(`name`,e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.inputTypes}),(0,Y.jsx)(`select`,{className:Ut(),value:v,onChange:e=>h(`input`,Gt(e.target.value)),children:Vt.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:s[e.labelKey]},e.value))})]}),(0,Y.jsxs)(`label`,{className:`mt-6 flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:c.reasoning||!1,onChange:e=>h(`reasoning`,e.target.checked)}),s.reasoning]})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.contextWindow}),(0,Y.jsx)(`input`,{type:`number`,min:1,className:a(Ht(),u.has(`contextWindow`)&&`border-red-500`),value:c.contextWindow??128e3,onChange:e=>h(`contextWindow`,parseInt(e.target.value,10)||0)}),u.has(`contextWindow`)?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-red-600 dark:text-red-400`,children:u.get(`contextWindow`)}):null]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.maxOutputTokens}),(0,Y.jsx)(`input`,{type:`number`,min:1,className:a(Ht(),u.has(`maxTokens`)&&`border-red-500`),value:c.maxTokens??16384,onChange:e=>h(`maxTokens`,parseInt(e.target.value,10)||0)}),u.has(`maxTokens`)?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-red-600 dark:text-red-400`,children:u.get(`maxTokens`)}):null]})]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-2 dark:border-edge`,children:[(0,Y.jsx)(`p`,{className:`mb-2 text-xs font-semibold text-fg`,children:s.costSection}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs text-fg-muted`,children:s.costInput}),(0,Y.jsx)(`input`,{type:`number`,step:`any`,min:0,className:Ht(),value:c.cost?.input??0,onChange:e=>h(`cost`,{...c.cost,input:parseFloat(e.target.value)||0,output:c.cost?.output??0,cacheRead:c.cost?.cacheRead??0,cacheWrite:c.cost?.cacheWrite??0})})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs text-fg-muted`,children:s.costOutput}),(0,Y.jsx)(`input`,{type:`number`,step:`any`,min:0,className:Ht(),value:c.cost?.output??0,onChange:e=>h(`cost`,{...c.cost,input:c.cost?.input??0,output:parseFloat(e.target.value)||0,cacheRead:c.cost?.cacheRead??0,cacheWrite:c.cost?.cacheWrite??0})})]})]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2 border-t border-edge-subtle pt-3 dark:border-edge`,children:[(0,Y.jsx)(f,{asChild:!0,children:(0,Y.jsx)(k,{type:`button`,variant:`secondary`,children:s.cancel})}),(0,Y.jsx)(k,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:_,children:i?s.addModelConfirm:s.saveModelConfirm})]})]})]})})}function Zt(){let e=U(e=>e.language),t=Pe(e),n=t.modelsSettings,r=!!z(e=>e.token),[i,s]=(0,X.useState)({providers:{}}),[c,l]=(0,X.useState)({providers:{}}),[u,d]=(0,X.useState)(``),[f,p]=(0,X.useState)(),[m,g]=(0,X.useState)(!0),[v,y]=(0,X.useState)(!1),[x,S]=(0,X.useState)(!1),[w,E]=(0,X.useState)(!1),[ee,O]=(0,X.useState)(null),[ne,re]=(0,X.useState)(!1),[A,M]=(0,X.useState)(null),[N,P]=(0,X.useState)(()=>new Set),[I,ae]=(0,X.useState)(!1),[L,R]=(0,X.useState)(``),[oe,B]=(0,X.useState)(null),[V,ce]=(0,X.useState)(()=>new Set),[le,W]=(0,X.useState)(()=>new Map),[ue,de]=(0,X.useState)(!1),[fe,pe]=(0,X.useState)(null),[me,he]=(0,X.useState)(!1),[ge,_e]=(0,X.useState)(null),G=(0,X.useCallback)(async e=>{let t=!e?.skipFullPageLoading;t&&g(!0),O(null);try{let e=await kt(),t=Ot(e.config);s(t),l(structuredClone(t)),d(e.path),p(e.loadError),M(null),re(!1)}catch(e){O(e instanceof Error?e.message:n.loadError),s({providers:{}}),l({providers:{}})}finally{t&&g(!1)}},[n.loadError]);(0,X.useEffect)(()=>{if(!r){g(!1);return}G()},[r,G]);let ve=(0,X.useMemo)(()=>JSON.stringify(i)!==JSON.stringify(c),[i,c]),ye=(0,X.useMemo)(()=>{let e=Object.keys(i.providers),t=0;for(let e of Object.values(i.providers))t+=e.models?.length??0;return{providers:e.length,models:t}},[i.providers]),xe=e=>{P(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Se=e=>{ce(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Ce=(0,X.useCallback)(()=>{R(JSON.stringify(i,null,2)),B(null)},[i]);(0,X.useEffect)(()=>{I&&Ce()},[I,Ce]);let we=()=>{try{s(Ot(JSON.parse(L))),B(null)}catch{B(n.jsonParseError)}},Te=async()=>{S(!0),O(null);try{M(await At(i))}catch(e){O(e instanceof Error?e.message:n.validateError)}finally{S(!1)}},Ee=async()=>{if(!v){y(!0),O(null),re(!1);try{await jt(i),l(structuredClone(i)),re(!0),M(null)}catch(e){O(e instanceof Error?e.message:n.saveError)}finally{y(!1)}}},De=async()=>{E(!0),O(null);try{await Mt(),await G({skipFullPageLoading:!0})}catch(e){O(e instanceof Error?e.message:n.reloadError)}finally{E(!1)}},Oe=async(e,t)=>{try{let n=await Nt(t);W(t=>{let r=new Map(t);return r.set(e,n),r})}catch(t){W(n=>{let r=new Map(n);return r.set(e,{type:`error`,error:t instanceof Error?t.message:`Error`}),r})}},q=(e=null)=>{pe(e),de(!0)},ke=(e,t)=>{s(n=>Jt(n,e,t)),P(t=>new Set(t).add(e))},Ae=e=>{window.confirm(n.removeProviderConfirm.replace(`{{id}}`,e))&&(s(t=>qt(t,e)),W(t=>{let n=new Map(t);return n.delete(e),n}))},je=(e,t,n)=>{_e({providerId:e,model:t,isNew:n}),he(!0)};return r?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-8`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.models}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:H(e,`models`),target:`_blank`,rel:`noreferrer`,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`,children:[n.docsLink,(0,Y.jsx)(h,{className:`size-3.5`})]})]}),f?(0,Y.jsxs)(`div`,{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`,role:`status`,children:[(0,Y.jsx)(j,{className:`mt-0.5 size-4 shrink-0`}),(0,Y.jsxs)(`span`,{children:[n.loadFileWarning,`: `,f]})]}):null,u?(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[n.filePath,`: `,(0,Y.jsx)(`code`,{className:`rounded bg-surface-base px-1 py-0.5 font-mono text-fg-muted`,children:u})]}):null,(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(k,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:()=>q(null),disabled:m,children:[(0,Y.jsx)(se,{className:`mr-1 size-4`}),n.addProvider]}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`inline-flex min-h-9 min-w-[7.5rem] justify-center`,onClick:Te,disabled:m||x,children:x?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{className:`mr-1 size-4 animate-spin`}),n.validating]}):n.validate}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`inline-flex min-h-9 min-w-[7.5rem] justify-center`,onClick:Ee,disabled:m||v||!ve,children:v?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{className:`mr-1 size-4 animate-spin`}),n.saving]}):n.save}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`inline-flex min-h-9 min-w-[8.5rem] justify-center`,onClick:De,disabled:m||w,children:w?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{className:`mr-1 size-4 animate-spin`}),n.reloading]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(te,{className:`mr-1 size-4`}),n.reload]})}),(0,Y.jsx)(k,{type:`button`,variant:`ghost`,className:`text-fg-muted`,onClick:()=>{ae(e=>!e),B(null)},children:I?n.hideJson:n.showJson}),(0,Y.jsxs)(`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`,children:[(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:n.statsProviders.replace(`{{count}}`,String(ye.providers))}),(0,Y.jsx)(`span`,{className:`text-fg-subtle`,children:`|`}),(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:n.statsModels.replace(`{{count}}`,String(ye.models))})]})]}),ve?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,ne?(0,Y.jsx)(`p`,{className:`text-xs text-emerald-700 dark:text-emerald-400`,role:`status`,children:n.saved}):null,ee?(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-red-600 dark:text-red-400`,role:`alert`,children:[(0,Y.jsx)(j,{className:`size-4 shrink-0`}),ee]}):null,A&&A.errors.length>0?(0,Y.jsxs)(`div`,{className:`rounded-lg border border-amber-200 bg-amber-50/80 px-3 py-2 dark:border-amber-800 dark:bg-amber-950/30`,role:`status`,children:[(0,Y.jsx)(`p`,{className:`mb-1 text-sm font-medium text-amber-950 dark:text-amber-100`,children:A.valid?n.validationWarnings:n.validationErrors}),(0,Y.jsx)(`ul`,{className:`list-inside list-disc space-y-0.5 text-xs text-amber-900 dark:text-amber-200`,children:A.errors.map((e,t)=>(0,Y.jsxs)(`li`,{children:[e.path,`: `,e.message,` (`,e.severity,`)`]},`${e.path}-${t}`))})]}):null,m?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(K,{className:`size-4 animate-spin`}),n.loading]}):I?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`textarea`,{className:a(Ht(),`min-h-[320px] resize-y font-mono text-xs leading-relaxed`),value:L,onChange:e=>R(e.target.value),spellCheck:!1}),oe?(0,Y.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:oe}):null,(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(k,{type:`button`,variant:`secondary`,onClick:Ce,children:n.jsonReset}),(0,Y.jsx)(k,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:we,children:n.jsonApply})]})]}):Object.keys(i.providers).length===0?(0,Y.jsxs)(`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`,children:[(0,Y.jsx)(`div`,{className:`mb-4 flex size-14 items-center justify-center rounded-full border border-edge bg-surface-base dark:border-edge`,children:(0,Y.jsx)(Re,{className:`size-7 text-accent`,strokeWidth:1.5})}),(0,Y.jsx)(`h2`,{className:`mb-1 text-base font-semibold text-fg`,children:n.emptyTitle}),(0,Y.jsx)(`p`,{className:`mb-6 max-w-md text-sm text-fg-muted`,children:n.emptyDesc}),(0,Y.jsxs)(k,{type:`button`,className:`mb-6 bg-accent text-white hover:bg-accent/90`,onClick:()=>q(null),children:[(0,Y.jsx)(se,{className:`mr-1 size-4`}),n.emptyCta]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap justify-center gap-2`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:a(`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`,_.transition,_.focusRingBase),onClick:()=>q(`ollama`),children:[(0,Y.jsx)(T,{className:`size-3.5`,"aria-hidden":!0}),n.presetOllama]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`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`,_.transition,_.focusRingBase),onClick:()=>q(`openrouter`),children:[(0,Y.jsx)(be,{className:`size-3.5`,"aria-hidden":!0}),n.presetOpenRouter]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`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`,_.transition,_.focusRingBase),onClick:()=>q(`lmstudio`),children:[(0,Y.jsx)(Re,{className:`size-3.5`,"aria-hidden":!0}),n.presetLmStudio]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`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`,_.transition,_.focusRingBase),onClick:()=>q(`zhipuCn`),children:[(0,Y.jsx)(T,{className:`size-3.5`,"aria-hidden":!0}),n.presetZhipuCn]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`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`,_.transition,_.focusRingBase),onClick:()=>q(`zaiGeneral`),children:[(0,Y.jsx)(be,{className:`size-3.5`,"aria-hidden":!0}),n.presetZaiGeneral]})]})]}):(0,Y.jsx)(`div`,{className:`flex flex-col gap-3`,children:Object.entries(i.providers).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>{let r=N.has(e),i=t.models?.length??0,c=t.apiKey?Lt(t.apiKey):null,l=le.get(e),u=V.has(e);return(0,Y.jsxs)(`section`,{className:`overflow-hidden rounded-2xl bg-surface-base`,children:[(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`button`,{type:`button`,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`,onClick:()=>xe(e),children:[r?(0,Y.jsx)(o,{className:`size-4 shrink-0 text-fg-muted`}):(0,Y.jsx)(ie,{className:`size-4 shrink-0 text-fg-muted`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e}),i>0?(0,Y.jsx)(`span`,{className:`shrink-0 rounded-full bg-accent px-2 py-0.5 text-[10px] font-medium text-white`,children:i}):null,c?(0,Y.jsx)(`span`,{className:a(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium`,c===`shell`&&`bg-blue-100 text-blue-800 dark:bg-blue-950 dark:text-blue-200`,c===`env`&&`bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-200`,c===`literal`&&`bg-surface-hover text-fg-muted dark:bg-surface-active`),children:c===`shell`?n.badgeShell:c===`env`?n.badgeEnv:n.badgeLiteral}):null]}),(0,Y.jsx)(`button`,{type:`button`,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`,onClick:()=>Ae(e),"aria-label":n.removeProvider,children:(0,Y.jsx)(b,{className:`size-4`})})]}),r?(0,Y.jsxs)(`div`,{className:`space-y-4 px-3 py-3`,children:[(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:n.baseUrl}),(0,Y.jsx)(`input`,{className:Ht(),value:t.baseUrl||``,onChange:t=>s(n=>Kt(n,e,{baseUrl:t.target.value}))})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:n.apiType}),(0,Y.jsx)(`select`,{className:Ut(),value:t.api||`openai-completions`,onChange:t=>s(n=>Kt(n,e,{api:t.target.value})),children:Et.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:n.apiKey}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsx)(`input`,{className:a(Ht(),`min-w-0 flex-1`),type:u?`text`:`password`,autoComplete:`off`,value:t.apiKey||``,onChange:t=>{let n=t.target.value;s(t=>Kt(t,e,{apiKey:n})),W(t=>{let n=new Map(t);return n.delete(e),n})},placeholder:n.apiKeyPlaceholder}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:()=>Se(e),children:u?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(D,{className:`mr-1 size-3.5`}),n.hide]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(C,{className:`mr-1 size-3.5`}),n.show]})}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:()=>Oe(e,t.apiKey||``),children:n.testKey})]}),l?(0,Y.jsx)(`p`,{className:a(`mt-1 text-xs`,l.error?`text-red-600 dark:text-red-400`:`text-emerald-700 dark:text-emerald-400`),children:l.error?`${n.testError}: ${l.error}`:`${n.testOk} (${l.type}): ${Rt(l.resolved||``)}`}):null,(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:n.apiKeyHint})]}),(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.authHeader||!1,onChange:t=>s(n=>Kt(n,e,{authHeader:t.target.checked}))}),n.authHeader]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-3 dark:border-edge`,children:[(0,Y.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-semibold text-fg`,children:n.modelsSection}),(0,Y.jsxs)(k,{type:`button`,variant:`primary`,className:`px-2 py-1 text-xs`,onClick:()=>je(e,null,!0),children:[(0,Y.jsx)(se,{className:`mr-1 size-3.5`}),n.addModel]})]}),(t.models||[]).length===0?(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.modelsEmpty}):(0,Y.jsx)(`ul`,{className:`space-y-2`,children:(t.models||[]).map(t=>(0,Y.jsxs)(`li`,{className:`flex items-center justify-between gap-2 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`truncate text-sm font-medium text-fg`,children:t.id}),t.name&&t.name!==t.id?(0,Y.jsx)(`div`,{className:`truncate text-xs text-fg-muted`,children:t.name}):null]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-panel hover:text-fg`,onClick:()=>je(e,t,!1),"aria-label":n.editModel,children:(0,Y.jsx)(F,{className:`size-4`})}),(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-panel hover:text-red-600 dark:hover:text-red-400`,onClick:()=>{window.confirm(n.removeModelConfirm.replace(`{{id}}`,t.id))&&s(n=>{let r=n.providers[e];return r?Kt(n,e,{models:(r.models||[]).filter(e=>e.id!==t.id)}):n})},"aria-label":n.removeModel,children:(0,Y.jsx)(b,{className:`size-4`})})]})]},t.id))})]})]}):null]},e)})}),(0,Y.jsx)(Yt,{open:ue,onOpenChange:de,presetKey:fe,onConfirm:ke,m:n}),(0,Y.jsx)(Xt,{open:me,onOpenChange:e=>{he(e),e||_e(null)},providerId:ge?.providerId??null,model:ge?.model??null,isNew:ge?.isNew??!1,onSave:e=>{if(!ge)return;let{providerId:t,isNew:n}=ge;s(r=>{let i=r.providers[t];if(!i)return r;let a=i.models||[];return n?Kt(r,t,{models:[...a,e]}):Kt(r,t,{models:a.map(t=>t.id===e.id?e:t)})})},m:n})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.models}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function Qt(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function $t(){return{enabled:!1,provider:`openai`,trigger:`always`,maxTextLength:4096,timeoutMs:3e4,alibaba:{model:`qwen-tts`,voice:`Cherry`},openai:{model:`tts-1`,voice:`alloy`},edge:{voice:`zh-CN-XiaoxiaoNeural`},minimax:{model:`speech-2.8-hd`,voice:`male-qn-qingse`}}}function en(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function tn(e){let t=Qt();if(!en(e))return t;let n=e.provider===`openai`?`openai`:`alibaba`,r=en(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,i=en(e.openai)?{...t.openai,...e.openai}:t.openai,a=t.fallback??{enabled:!0,order:[`alibaba`,`openai`]};if(en(e.fallback)){let t=Array.isArray(e.fallback.order)?e.fallback.order.filter(e=>e===`alibaba`||e===`openai`):a.order;a={enabled:typeof e.fallback.enabled==`boolean`?e.fallback.enabled:a.enabled,order:t.length?t:a.order}}return{enabled:!!e.enabled,provider:n,alibaba:r,openai:i,fallback:a}}function nn(e){return e===`openai`||e===`alibaba`||e===`edge`||e===`minimax`}function rn(e){let t=$t();if(!en(e))return t;let n=nn(e.provider)?e.provider:`openai`,r=e.trigger===`off`||e.trigger===`always`||e.trigger===`inbound`||e.trigger===`tagged`?e.trigger:`always`;return{enabled:!!e.enabled,provider:n,trigger:r,maxTextLength:typeof e.maxTextLength==`number`&&Number.isFinite(e.maxTextLength)?e.maxTextLength:t.maxTextLength,timeoutMs:typeof e.timeoutMs==`number`&&Number.isFinite(e.timeoutMs)?e.timeoutMs:t.timeoutMs,alibaba:en(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,openai:en(e.openai)?{...t.openai,...e.openai}:t.openai,edge:en(e.edge)?{...t.edge,...e.edge}:t.edge,minimax:en(e.minimax)?{...t.minimax,...e.minimax}:t.minimax}}function an(e){let t=en(e)?e:{};return{stt:tn(t.stt),tts:rn(t.tts)}}async function on(e){await G(q(`/api/config`),{method:`PATCH`,body:JSON.stringify({stt:e.stt,tts:e.tts})}),N()}async function sn(){let e=await G(q(`/api/voice/models`));if(!e.payload?.models)throw Error(`Missing voice models payload`);return e.payload.models}function cn(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,u,`dark:border-edge`)}function ln(){return a(O,I)}var un=[{id:`paraformer-v2`,name:`Paraformer v2`},{id:`paraformer-v1`,name:`Paraformer v1`}],dn=[{id:`whisper-1`,name:`Whisper-1`}],fn=[{id:`tts-1`,name:`TTS-1`},{id:`tts-1-hd`,name:`TTS-1 HD`}],pn=[{id:`alloy`,name:`Alloy`},{id:`echo`,name:`Echo`}],mn=[{id:`qwen-tts`,name:`Qwen TTS`},{id:`qwen3-tts-flash`,name:`Qwen3 TTS Flash`}],hn=[{id:`Cherry`,name:`Cherry`},{id:`longxiaochun`,name:`Long Xiao Chun`}],gn=[{id:`en-US-MichelleNeural`,name:`Michelle (US English)`},{id:`zh-CN-XiaoxiaoNeural`,name:`Xiaoxiao (Chinese)`}],_n=[{id:`speech-2.8-hd`,name:`Speech 2.8 HD (Recommended)`},{id:`speech-2.8-turbo`,name:`Speech 2.8 Turbo (Fast)`}],vn=[{id:`male-qn-qingse`,name:`Male Qingse (青涩男声)`},{id:`female-shaonv`,name:`Female Shaonv (少女音)`}];function yn(){let e=U(e=>e.language),t=Pe(e),n=t.voiceSettings,i=!!z(e=>e.token),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(null),[g,_]=(0,X.useState)(!1),{data:v,error:y,isLoading:b,mutate:x}=Ne(i),{data:S,error:C,isLoading:w,mutate:T}=r(i?q(`/api/voice/models`):null,sn,{revalidateOnFocus:!1}),E=(0,X.useMemo)(()=>v?.payload?.config===void 0?null:an(v.payload.config),[v]),D=(0,X.useMemo)(()=>!a||!s?!1:JSON.stringify(a)!==JSON.stringify(s),[a,s]);(0,X.useEffect)(()=>{if(!i){o(null),c(null),u(null);return}E===null||S===void 0||D||(o(structuredClone(E)),c(structuredClone(E)),u(S),_(!1))},[i,E,S,D]);let ee=!!(i&&(E===null||S===void 0)&&(b||w)),te=y instanceof Error?y.message:y?String(y):C instanceof Error?C.message:C?String(C):null,O=(0,X.useCallback)(e=>{o(t=>t?{...t,stt:{...t.stt,...e}}:null)},[]),ne=(0,X.useCallback)(e=>{o(t=>t?{...t,stt:{...t.stt,alibaba:{...t.stt.alibaba,...e}}}:null)},[]),re=(0,X.useCallback)(e=>{o(t=>t?{...t,stt:{...t.stt,openai:{...t.stt.openai,...e}}}:null)},[]),A=(0,X.useCallback)(e=>{o(t=>{if(!t)return null;let n=t.stt.fallback??{enabled:!0,order:[`alibaba`,`openai`]};return{...t,stt:{...t.stt,fallback:{...n,...e}}}})},[]),j=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,...e}}:null)},[]),M=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,alibaba:{...t.tts.alibaba,...e}}}:null)},[]),ie=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,openai:{...t.tts.openai,...e}}}:null)},[]),N=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,edge:{...t.tts.edge,...e}}}:null)},[]),P=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,minimax:{...t.tts.minimax,...e}}}:null)},[]),F=(0,X.useCallback)(async()=>{if(!(!a||d)){f(!0),m(null),_(!1);try{await on(a);let e=structuredClone(a);c(e),o(e),_(!0),window.setTimeout(()=>_(!1),2500)}catch(e){m(e instanceof Error?e.message:n.saveError)}finally{f(!1)}}},[a,d,n.saveError]);if(!i)return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.voice}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]});if(ee)return(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(K,{className:`size-4 animate-spin`}),n.loading]})});if(!a||l===null)return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:p??te??n.loadError}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>{x(),T()},children:n.retry})]});let I=a.stt,ae=a.tts;return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.voice}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:H(e,`voice`),target:`_blank`,rel:`noreferrer`,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`,children:[n.docsLink,(0,Y.jsx)(h,{className:`size-3.5`})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[g?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,(0,Y.jsx)(k,{type:`button`,variant:`primary`,disabled:!D||d,onClick:()=>void F(),children:d?n.saving:n.save})]})]}),D?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,p?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:p}):null,(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsx)(bn,{v:n,stt:I,models:l,updateStt:O,updateSttAlibaba:ne,updateSttOpenai:re,updateSttFallback:A}),(0,Y.jsx)(xn,{v:n,tts:ae,models:l,updateTts:j,updateTtsAlibaba:M,updateTtsOpenai:ie,updateTtsEdge:N,updateTtsMinimax:P})]}),(0,Y.jsxs)(`div`,{className:`rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10`,children:[(0,Y.jsxs)(`p`,{className:`text-sm text-fg`,children:[(0,Y.jsx)(`strong`,{className:`text-accent`,children:n.notes.title}),` `,n.notes.duration]}),(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:n.notes.envVars})]})]})}function bn({v:e,stt:t,models:n,updateStt:r,updateSttAlibaba:i,updateSttOpenai:o,updateSttFallback:s}){let c=n?.stt?.alibaba?.length?n.stt.alibaba:un,l=n?.stt?.openai?.length?n.stt.openai:dn;return(0,Y.jsxs)(`section`,{className:`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`,children:[(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(oe,{className:`size-4 text-accent`,strokeWidth:1.75}),e.stt.title]}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:e.stt.description})]}),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.stt.enable}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.stt.enableDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.enabled,onChange:e=>r({enabled:e.target.checked})})]}),t.enabled?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.provider}),(0,Y.jsxs)(`select`,{className:ln(),value:t.provider,onChange:e=>r({provider:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`alibaba`,children:e.stt.alibaba}),(0,Y.jsx)(`option`,{value:`openai`,children:e.stt.openai})]})]})}),t.provider===`alibaba`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.alibaba?.apiKey??``,onChange:e=>i({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (DASHSCOPE_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.alibaba?.model??``,onChange:e=>i({model:e.target.value}),children:c.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.openai?.apiKey??``,onChange:e=>o({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (OPENAI_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.openai?.model??``,onChange:e=>o({model:e.target.value}),children:l.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}),(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.stt.fallback}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.stt.fallbackDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.fallback?.enabled??!0,onChange:e=>s({enabled:e.target.checked})})]})]}):null]})]})}function xn({v:e,tts:t,models:n,updateTts:r,updateTtsAlibaba:i,updateTtsOpenai:o,updateTtsEdge:s,updateTtsMinimax:c}){let l=t=>t===`off`?e.tts.triggerDescOff:t===`always`?e.tts.triggerDescAlways:t===`inbound`?e.tts.triggerDescInbound:t===`tagged`?e.tts.triggerDescTagged:``,u=n?.tts?.openai?.length?n.tts.openai:fn,d=n?.ttsVoices?.openai?.length?n.ttsVoices.openai:pn,f=n?.tts?.alibaba?.length?n.tts.alibaba:mn,p=n?.ttsVoices?.alibaba?.length?n.ttsVoices.alibaba:hn,m=n?.ttsVoices?.edge?.length?n.ttsVoices.edge:gn,h=n?.tts?.minimax?.length?n.tts.minimax:_n,g=n?.ttsVoices?.minimax?.length?n.ttsVoices.minimax:vn;return(0,Y.jsxs)(`section`,{className:`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`,children:[(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(fe,{className:`size-4 text-accent`,strokeWidth:1.75}),e.tts.title]}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:e.tts.description})]}),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.tts.enable}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.tts.enableDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.enabled,onChange:e=>r({enabled:e.target.checked})})]}),t.enabled?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.trigger}),(0,Y.jsxs)(`select`,{className:ln(),value:t.trigger,onChange:e=>r({trigger:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`off`,children:e.tts.triggerOff}),(0,Y.jsx)(`option`,{value:`always`,children:e.tts.triggerAlways}),(0,Y.jsx)(`option`,{value:`inbound`,children:e.tts.triggerInbound}),(0,Y.jsx)(`option`,{value:`tagged`,children:e.tts.triggerTagged})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:l(t.trigger)})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.provider}),(0,Y.jsxs)(`select`,{className:ln(),value:t.provider,onChange:e=>r({provider:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`openai`,children:e.tts.providerOpenai}),(0,Y.jsx)(`option`,{value:`alibaba`,children:e.stt.alibaba}),(0,Y.jsx)(`option`,{value:`minimax`,children:`MiniMax`}),(0,Y.jsx)(`option`,{value:`edge`,children:e.tts.providerEdge})]})]})]}),t.provider===`openai`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.openai?.apiKey??``,onChange:e=>o({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (OPENAI_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.openai?.model??``,onChange:e=>o({model:e.target.value}),children:u.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.openai?.voice??``,onChange:e=>o({voice:e.target.value}),children:d.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):null,t.provider===`alibaba`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.alibaba?.apiKey??``,onChange:e=>i({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (DASHSCOPE_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.alibaba?.model??``,onChange:e=>i({model:e.target.value}),children:f.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.alibaba?.voice??``,onChange:e=>i({voice:e.target.value}),children:p.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):null,t.provider===`minimax`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.minimax?.apiKey??``,onChange:e=>c({apiKey:e.target.value}),placeholder:`eyJ...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (MINIMAX_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.minimax?.model??``,onChange:e=>c({model:e.target.value}),children:h.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.minimax?.voice??``,onChange:e=>c({voice:e.target.value}),children:g.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):null,t.provider===`edge`?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.edge?.voice??``,onChange:e=>s({voice:e.target.value}),children:m.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:e.tts.edgeHint})]}):null]}):null]})]})}function Z({children:e}){return(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e})}function Sn(e){let t=e&&typeof e==`object`&&`tools`in e?e.tools:void 0,n=t&&typeof t==`object`&&`web`in t?t.web:void 0,r=n&&typeof n==`object`&&`region`in n?n.region:void 0,i=r===`cn`||r===`global`?r:`auto`,a=n&&typeof n==`object`&&`search`in n?n.search:void 0,o=a&&typeof a==`object`?a:{},s=typeof o.maxResults==`number`&&Number.isFinite(o.maxResults)?Math.floor(o.maxResults):5,c=o.providers;return{regionMode:i,maxResults:s,providers:Array.isArray(c)?c.map(e=>{let t=e&&typeof e==`object`?e:{},n=t.type;return{type:n===`brave`||n===`tavily`||n===`bing`||n===`searxng`?n:`brave`,apiKey:typeof t.apiKey==`string`?t.apiKey:``,url:typeof t.url==`string`?t.url:``,disabled:t.disabled===!0}}):[]}}async function Cn(e){let t=e.regionMode===`auto`?`auto`:e.regionMode===`cn`?`cn`:`global`,n={maxResults:e.maxResults,providers:e.providers.map(e=>{let t={type:e.type,apiKey:e.apiKey};return e.type===`searxng`&&e.url.trim()&&(t.url=e.url.trim().replace(/\/+$/,``)),e.disabled&&(t.disabled=!0),t})};await G(q(`/api/config`),{method:`PATCH`,body:JSON.stringify({tools:{web:{region:t,search:n}}})}),N()}function wn({label:e,description:t,children:n}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e}),n,(0,Y.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-subtle`,children:t})]})}function Tn(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,u,`dark:border-edge`)}function En(){return a(O,I)}var Dn=[`brave`,`tavily`,`bing`,`searxng`];function On(){return{type:`brave`,apiKey:``,url:``,disabled:!1}}function kn(){let e=U(e=>e.language),t=Pe(e),n=t.webSearchSettings,r=t.logs,i=!!z(e=>e.token),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(!1),[d,f]=(0,X.useState)(null),[p,m]=(0,X.useState)(!1),g=(0,X.useRef)(!1),{data:_,error:v,isLoading:y,mutate:b}=Ne(i),x=(0,X.useMemo)(()=>_?.payload?.config===void 0?null:Sn(_.payload.config),[_]);(0,X.useEffect)(()=>{if(!i){o(null),c(null),g.current=!1;return}x!==null&&(g.current||(o(x),c(x)))},[i,x]);let S=!!(i&&y&&_===void 0&&!v),C=v instanceof Error?v.message:v?String(v):null,w=(0,X.useMemo)(()=>!a||!s?!1:JSON.stringify(a)!==JSON.stringify(s),[a,s]),T=(0,X.useCallback)(e=>{g.current=!0,o(t=>t?{...t,...e}:null)},[]),E=(0,X.useCallback)(async()=>{if(!(!a||l)){u(!0),f(null),m(!1);try{await Cn(a),g.current=!1,m(!0),window.setTimeout(()=>m(!1),2500)}catch(e){f(e instanceof Error?e.message:n.saveError)}finally{u(!1)}}},[a,l,n.saveError]);return i?S?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col items-center gap-3 px-4 py-8`,children:[(0,Y.jsx)(K,{className:`size-8 animate-spin text-fg-muted`,"aria-hidden":!0}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.loading})]}):a?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:n.title}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:H(e,`gateway`),target:`_blank`,rel:`noreferrer`,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`,children:[n.docsLink,(0,Y.jsx)(h,{className:`size-3.5`})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[p?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,(0,Y.jsx)(k,{type:`button`,variant:`primary`,disabled:!w||l,onClick:()=>void E(),children:l?n.saving:n.save})]})]}),w?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,d?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:d}):null,(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:A,title:n.sectionRegion,subtitle:n.sectionRegionHint}),(0,Y.jsx)(`div`,{className:`flex max-w-md flex-col gap-4`,children:(0,Y.jsx)(wn,{label:n.regionLabel,description:n.regionDesc,children:(0,Y.jsxs)(`select`,{className:En(),value:a.regionMode,onChange:e=>T({regionMode:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`auto`,children:n.regionAuto}),(0,Y.jsx)(`option`,{value:`cn`,children:n.regionCn}),(0,Y.jsx)(`option`,{value:`global`,children:n.regionGlobal})]})})})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:A,title:n.sectionSearch,subtitle:n.sectionSearchHint}),(0,Y.jsxs)(`div`,{className:`flex max-w-xl flex-col gap-6`,children:[(0,Y.jsx)(wn,{label:n.maxResultsLabel,description:n.maxResultsDesc,children:(0,Y.jsx)(`input`,{type:`number`,min:1,max:50,className:Tn(),value:a.maxResults,onChange:e=>T({maxResults:Math.max(1,Math.min(50,Number(e.target.value)||5))})})}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:n.providersTitle}),a.providers.map((e,t)=>(0,Y.jsx)(An,{row:e,labels:n,onChange:e=>{let n=[...a.providers];n[t]=e,T({providers:n})},onRemove:()=>{T({providers:a.providers.filter((e,n)=>n!==t)})}},t)),(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`w-fit gap-1.5 text-sm`,onClick:()=>T({providers:[...a.providers,On()]}),children:[(0,Y.jsx)(se,{className:`size-4`}),n.addProvider]})]})]})]}),(0,Y.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-subtle`,children:n.footerHint})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:d??C??n.loadError}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>void b(),children:r.refresh})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-6`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:n.title}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function An({row:e,labels:t,onChange:n,onRemove:r}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel/60 p-4 dark:border-edge-subtle`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Y.jsx)(`select`,{className:a(En(),`min-w-[8rem]`),value:e.type,onChange:t=>n({...e,type:t.target.value,url:t.target.value===`searxng`?e.url:``}),children:Dn.map(e=>(0,Y.jsx)(`option`,{value:e,children:t.providerTypes[e]},e))}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-1.5 text-xs text-fg-muted`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`size-3.5 rounded border-edge`,checked:e.disabled,onChange:t=>n({...e,disabled:t.target.checked})}),t.disabled]}),(0,Y.jsx)(k,{type:`button`,variant:`ghost`,className:`h-8 px-2 text-fg-muted`,onClick:r,children:(0,Y.jsx)(b,{className:`size-4`})})]})]}),e.type===`searxng`?(0,Y.jsx)(wn,{label:t.urlLabel,description:t.urlDesc,children:(0,Y.jsx)(`input`,{type:`url`,className:Tn(),value:e.url,placeholder:`http://localhost:8080`,onChange:t=>n({...e,url:t.target.value})})}):null,(0,Y.jsx)(wn,{label:t.apiKeyLabel,description:t.apiKeyDesc,children:(0,Y.jsx)(`input`,{type:`password`,autoComplete:`off`,className:Tn(),value:ye(e.apiKey)?``:e.apiKey,placeholder:ye(e.apiKey)?t.keyPlaceholderMasked:t.keyPlaceholder,onChange:t=>n({...e,apiKey:t.target.value})})})]})}var jn=[{key:`fullDisk`,pane:`fullDisk`},{key:`screen`,pane:`screen`},{key:`microphone`,pane:`microphone`},{key:`accessibility`,pane:`accessibility`},{key:`automation`,pane:`automation`},{key:`notifications`,pane:`notifications`},{key:`location`,pane:`location`}];function Mn(e,t){let n=Pe(e).systemSettings.status;return t===`granted`?{label:n.granted,className:`text-emerald-600 dark:text-emerald-400`}:t===`denied`?{label:n.denied,className:`text-amber-600 dark:text-amber-400`}:{label:n.unknown,className:`text-fg-muted`}}function Nn(){let e=U(e=>e.language),t=Pe(e).systemSettings,[n,r]=(0,X.useState)(null),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(null),c=typeof window<`u`?window.electronAPI?.system:void 0,l=(0,X.useCallback)(async()=>{if(c){s(null);try{r(await c.getBehavior()),a(await c.getPermissions())}catch(e){s(e instanceof Error?e.message:String(e))}}},[c]);if((0,X.useEffect)(()=>{x()&&c&&l()},[c,l]),!x()||!c)return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.title}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:t.desktopOnlyTitle}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:t.desktopOnlyBody})]})]});let u=async e=>{try{let{behavior:t}=await c.setBehavior(e);r(t)}catch(e){s(e instanceof Error?e.message:String(e))}},d=async e=>{try{(await c.openPrivacy(e)).ok||s(`open_privacy failed`)}catch(e){s(e instanceof Error?e.message:String(e))}},f=n?n.platform===`win32`?t.permissionsHintWin:n.platform===`linux`?t.permissionsHintLinux:n.platform===`darwin`?t.permissionsHintDarwin:t.permissionsHint:t.permissionsHint;return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,Y.jsx)(`div`,{children:(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.title})}),o?(0,Y.jsx)(`p`,{className:`text-sm text-amber-600 dark:text-amber-400`,role:`alert`,children:o}):null,(0,Y.jsxs)(Ge,{children:[(0,Y.jsxs)(`div`,{className:`mb-4 flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(re,{className:`size-4 text-accent`,strokeWidth:1.75}),t.behaviorGroup]}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.openAtLogin}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.openAtLoginDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.openAtLogin,onChange:e=>{u({openAtLogin:e.target.checked})}})]}),(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.keepAwake}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.keepAwakeDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.keepAwakePreferred,onChange:e=>{u({keepAwakePreferred:e.target.checked})}})]}),(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.notifyDesktop}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.notifyDesktopDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.notifyEnabled,onChange:e=>{u({notifyEnabled:e.target.checked})}})]}),(0,Y.jsxs)(`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`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.notifySound}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.notifySoundDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.notifySoundEnabled,onChange:e=>{u({notifySoundEnabled:e.target.checked})}})]})]})]}),n&&i?(0,Y.jsxs)(`section`,{className:J(),children:[(0,Y.jsxs)(`div`,{className:`mb-4 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t.permissionsTitle}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:f})]}),(0,Y.jsx)(`button`,{type:`button`,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`,onClick:()=>void l(),children:t.refresh})]}),(0,Y.jsx)(`ul`,{className:`space-y-3`,children:jn.map(({key:r,pane:o})=>{let l=Mn(e,i[r]),u=t.perm[r];return u?(0,Y.jsxs)(`li`,{className:`flex flex-col gap-2 rounded-xl border border-edge-subtle bg-surface-panel/60 px-3 py-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:u.title}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:u.desc}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs font-medium ${l.className}`,children:l.label})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[r===`microphone`&&n?.platform===`darwin`?(0,Y.jsx)(`button`,{type:`button`,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`,onClick:()=>{(async()=>{try{await c.requestMicrophone(),a(await c.getPermissions())}catch(e){s(e instanceof Error?e.message:String(e))}})()},children:e===`zh`?`请求访问`:`Request`}):null,(0,Y.jsxs)(`button`,{type:`button`,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`,onClick:()=>void d(o),children:[t.openSettings,(0,Y.jsx)(h,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0})]})]})]},r):null})})]}):null]})}function Pn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Fn={enabled:!0,cron:`0 */6 * * *`,lookbackDays:1,limit:50,dedupeSimilarity:.85},In={enabled:!0,cron:`0 3 * * *`,minScore:.8,minRecallCount:3,limit:10,recencyHalfLifeDays:14,maxAgeDays:30},Ln={enabled:!0,cron:`0 5 * * 0`,lookbackDays:7,limit:20,minPatternStrength:.6},Rn={enabled:!1,frequency:`0 3 * * *`,timezone:``,deepEnabled:!0,minScore:.8,minRecallCount:3,limit:10,light:Fn,deep:In,rem:Ln};function zn(e,t){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):t}function Bn(e,t){let n=typeof e==`string`?Number(e):e;return Number.isFinite(n)?Math.max(0,Math.floor(n)):t}function Vn(e,t){let n=typeof e==`string`?Number(e):e;return Number.isFinite(n)?n:t}function Hn(e){let t=Pn(e)?e:{},n=Pn(t.agents)?t.agents:{},r=Pn(n.defaults)?n.defaults:{},i=Pn(r.memory)?r.memory:{},a=Pn(i.dreaming)?i.dreaming:{},o=Pn(a.phases)?a.phases:{},s=Pn(o.light)?o.light:{},c=Pn(o.deep)?o.deep:{},l=Pn(o.rem)?o.rem:{};return{enabled:a.enabled===!0,frequency:typeof a.frequency==`string`&&a.frequency.trim()?a.frequency.trim():Rn.frequency,timezone:typeof a.timezone==`string`?a.timezone:``,deepEnabled:c.enabled!==!1,minScore:zn(typeof c.minScore==`number`?c.minScore:Number(c.minScore),Rn.minScore),minRecallCount:Math.max(1,Bn(c.minRecallCount,Rn.minRecallCount)),limit:Bn(c.limit,Rn.limit),light:{enabled:s.enabled!==!1,cron:typeof s.cron==`string`&&s.cron.trim()?s.cron.trim():Fn.cron,lookbackDays:Math.max(1,Bn(s.lookbackDays,Fn.lookbackDays)),limit:Bn(s.limit,Fn.limit),dedupeSimilarity:zn(Vn(s.dedupeSimilarity,Fn.dedupeSimilarity),Fn.dedupeSimilarity)},deep:{enabled:c.enabled!==!1,cron:typeof c.cron==`string`&&c.cron.trim()?c.cron.trim():In.cron,minScore:zn(Vn(c.minScore,In.minScore),In.minScore),minRecallCount:Math.max(1,Bn(c.minRecallCount,In.minRecallCount)),limit:Bn(c.limit,In.limit),recencyHalfLifeDays:Math.max(1,Vn(c.recencyHalfLifeDays,In.recencyHalfLifeDays)),maxAgeDays:Math.max(1,Vn(c.maxAgeDays,In.maxAgeDays))},rem:{enabled:l.enabled!==!1,cron:typeof l.cron==`string`&&l.cron.trim()?l.cron.trim():Ln.cron,lookbackDays:Math.max(1,Bn(l.lookbackDays,Ln.lookbackDays)),limit:Bn(l.limit,Ln.limit),minPatternStrength:zn(Vn(l.minPatternStrength,Ln.minPatternStrength),Ln.minPatternStrength)}}}async function Un(e){let t=e.frequency.trim(),n=e.timezone.trim();await G(q(`/api/config`),{method:`PATCH`,body:JSON.stringify({agents:{defaults:{memory:{dreaming:{enabled:!!e.enabled,frequency:t||null,timezone:n||null,phases:{light:{enabled:!!e.light.enabled,cron:e.light.cron.trim()||null,lookbackDays:Math.max(1,Math.floor(e.light.lookbackDays)),limit:Math.max(0,Math.floor(e.light.limit)),dedupeSimilarity:zn(e.light.dedupeSimilarity,Fn.dedupeSimilarity)},deep:{enabled:!!e.deep.enabled,cron:e.deep.cron.trim()||null,minScore:zn(e.deep.minScore,In.minScore),minRecallCount:Math.max(1,Math.floor(e.deep.minRecallCount)),limit:Math.max(0,Math.floor(e.deep.limit)),recencyHalfLifeDays:Math.max(1,e.deep.recencyHalfLifeDays),maxAgeDays:Math.max(1,e.deep.maxAgeDays)},rem:{enabled:!!e.rem.enabled,cron:e.rem.cron.trim()||null,lookbackDays:Math.max(1,Math.floor(e.rem.lookbackDays)),limit:Math.max(0,Math.floor(e.rem.limit)),minPatternStrength:zn(e.rem.minPatternStrength,Ln.minPatternStrength)}}}}}}})}),N()}function Q(){return`text-xs font-medium text-fg-muted`}function $(){return`text-sm font-medium text-fg`}function Wn(e){return e?e.replace(`T`,` `).replace(`Z`,``):`—`}function Gn(e){return e===void 0||!Number.isFinite(e)||e<0?`—`:e<1e3?`${Math.round(e)} ms`:`${(e/1e3).toFixed(2)} s`}function Kn({label:e,children:t,className:n}){return(0,Y.jsxs)(`div`,{className:a(`space-y-2`,n),children:[(0,Y.jsx)(`h3`,{className:`text-[0.7rem] font-semibold uppercase tracking-wider text-fg-muted`,children:e}),t]})}function qn({icon:e,label:t,enabled:n,cron:r,details:i,t:o}){return(0,Y.jsxs)(`div`,{className:a(J(),`space-y-1.5`),children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e,(0,Y.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:t}),(0,Y.jsx)(`span`,{className:a(`ml-auto text-xs font-medium`,n?`text-emerald-600 dark:text-emerald-400`:`text-fg-muted`),children:n?o.on:o.off})]}),(0,Y.jsx)(`div`,{className:`font-mono text-xs text-fg-muted`,children:r}),(0,Y.jsx)(`div`,{className:`text-xs text-fg-muted`,children:i})]})}function Jn({label:e,lastRun:t,t:n}){return(0,Y.jsx)(Kn,{label:e,children:t?.exists?(0,Y.jsxs)(`details`,{className:`group rounded-lg border border-edge-subtle`,children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer list-none px-3 py-2 text-xs font-medium text-fg-muted marker:hidden [&::-webkit-details-marker]:hidden`,children:(0,Y.jsx)(`span`,{className:`underline decoration-edge underline-offset-2 group-open:text-fg`,children:n.lastRunRaw})}),(0,Y.jsx)(`pre`,{className:`max-h-[12rem] overflow-auto border-t border-edge-subtle p-3 text-xs text-fg-muted`,children:JSON.stringify(t.raw,null,2)})]}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.phaseLastRunEmpty})})}function Yn({t:e,r:t}){let n=t.deep?.skipped;return(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunStatus}),(0,Y.jsx)(`div`,{className:a($(),t.ok?`text-emerald-600 dark:text-emerald-400`:`text-amber-600 dark:text-amber-400`),children:t.ok?e.lastRunSuccess:e.lastRunFailure})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunDuration}),(0,Y.jsx)(`div`,{className:$(),children:Gn(t.durationMs)})]}),(0,Y.jsxs)(`div`,{className:a(J(),`sm:col-span-2`),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunReason}),(0,Y.jsx)(`div`,{className:$(),children:t.reason}),t.errorMessage?(0,Y.jsx)(`div`,{className:`mt-1 text-xs text-amber-600 dark:text-amber-400`,children:`${e.lastRunError}: ${t.errorMessage}`}):null]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunRanked}),(0,Y.jsx)(`div`,{className:$(),children:String(t.deep?.candidatesRanked??`—`)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunApplied}),(0,Y.jsx)(`div`,{className:$(),children:String(t.deep?.applied??`—`)})]}),n?(0,Y.jsxs)(`div`,{className:`sm:col-span-2`,children:[(0,Y.jsx)(`div`,{className:`mb-2 text-xs font-medium text-fg`,children:e.lastRunSkipped}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipKey}),(0,Y.jsx)(`div`,{className:$(),children:String(n.alreadyPromotedKey)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipRehydrate}),(0,Y.jsx)(`div`,{className:$(),children:String(n.rehydrateFailed)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipContaminated}),(0,Y.jsx)(`div`,{className:$(),children:String(n.contaminated)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipHash}),(0,Y.jsx)(`div`,{className:$(),children:String(n.hashDuplicate)})]})]})]}):null]})}function Xn(e,t){return e.locked?{text:t.lockValueLocked,className:`text-amber-600 dark:text-amber-400`}:{text:t.lockValueUnlocked,className:`text-emerald-600 dark:text-emerald-400`}}function Zn(){let e=Pe(U(e=>e.language)).dreamingSettings,t=!!z(e=>e.token),{data:n}=Ne(t),[i,o]=(0,X.useState)(null),[c,l]=(0,X.useState)(null),[u,d]=(0,X.useState)(!1),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(!1),[g,_]=(0,X.useState)(null),[x,S]=(0,X.useState)(`deep`),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(null),[D,ee]=(0,X.useState)(!1),[O,ne]=(0,X.useState)(!1),[re,A]=(0,X.useState)(null),[j,ie]=(0,X.useState)(!1),[N,P]=(0,X.useState)(null),[F,I]=(0,X.useState)(null),[ae,R]=(0,X.useState)(!1),[oe,B]=(0,X.useState)(null),[V,se]=(0,X.useState)(null),{data:H,error:ce,isLoading:le,mutate:W}=r(t?He():null,Ue,{revalidateOnFocus:!1}),ue=(0,X.useMemo)(()=>H?Xn(H.lock,e):null,[H,e]),de=(0,X.useMemo)(()=>{let e=[];return ce&&e.push(ce instanceof Error?ce.message:String(ce)),c&&e.push(c),g&&e.push(g),N&&e.push(N),oe&&e.push(oe),re&&e.push(re),e},[ce,c,g,N,oe,re]),fe=(0,X.useMemo)(()=>{let t=[];return O&&t.push(e.configSaved),m&&t.push(e.runQueued),u&&t.push(e.actionOk),t},[O,m,u,e]),pe=(0,X.useCallback)(async()=>{d(!1),l(null),h(!1),_(null),ne(!1),A(null),P(null),await W()},[W]),me=(0,X.useCallback)(async()=>{ie(!0),P(null);try{I((await Je(20)).items??[])}catch(e){P(e instanceof Error?e.message:String(e))}finally{ie(!1)}},[]),he=(0,X.useCallback)(async()=>{R(!0),B(null);try{se(await Ke(50))}catch(e){B(e instanceof Error?e.message:String(e))}finally{R(!1)}},[]),ge=(0,X.useCallback)(async(e=`deep`)=>{p(!0),h(!1),_(null);try{await Xe(e),h(!0),await W()}catch(e){_(e instanceof Error?e.message:String(e))}finally{p(!1)}},[W]),_e=(0,X.useCallback)(async e=>{o(e),l(null),d(!1);try{await We(e),d(!0),await W()}catch(e){l(e instanceof Error?e.message:String(e))}finally{o(null)}},[W]),G=!t||le||!!i,ve=(0,X.useMemo)(()=>{let e=n?.payload?.config;return Hn(e??{})},[n]);(0,X.useEffect)(()=>{if(t){if(!T){E(ve),w(ve);return}JSON.stringify(ve)!==JSON.stringify(T)&&(E(ve),w(ve))}},[T,ve,t]);let ye=(0,X.useMemo)(()=>!C||!T?!1:JSON.stringify(C)!==JSON.stringify(T),[C,T]),be=(0,X.useCallback)(async()=>{if(C){ee(!0),ne(!1),A(null);try{await Un(C),E(C),ne(!0),await W()}catch(e){A(e instanceof Error?e.message:String(e))}finally{ee(!1)}}},[C,W]);return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:e.title}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:e.subtitle})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center justify-end gap-2`,children:[(0,Y.jsxs)(`select`,{className:`rounded-lg border border-edge bg-surface-panel px-2 py-1.5 text-xs text-fg`,value:x,onChange:e=>S(e.target.value),disabled:!t||f,children:[(0,Y.jsx)(`option`,{value:`light`,children:`Light`}),(0,Y.jsx)(`option`,{value:`deep`,children:`Deep`}),(0,Y.jsx)(`option`,{value:`rem`,children:`REM`})]}),(0,Y.jsxs)(k,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||f,onClick:()=>void ge(x),title:e.runNowHint,children:[f?(0,Y.jsx)(K,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(xe,{className:`mr-2 size-4`,"aria-hidden":!0}),e.runNow]}),(0,Y.jsxs)(k,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t,onClick:()=>void pe(),children:[(0,Y.jsx)(te,{className:`mr-2 size-4`,"aria-hidden":!0}),e.refresh]})]})]}),de.length>0?(0,Y.jsx)(`div`,{className:`space-y-1.5 rounded-2xl border border-amber-500/20 bg-amber-500/5 px-4 py-3`,role:`alert`,children:de.map((e,t)=>(0,Y.jsx)(`p`,{className:`text-sm text-amber-800 dark:text-amber-200/90`,children:e},t))}):null,fe.length>0?(0,Y.jsx)(`div`,{className:`space-y-1.5 rounded-2xl border border-emerald-500/20 bg-emerald-500/5 px-4 py-3`,role:`status`,children:fe.map((e,t)=>(0,Y.jsx)(`p`,{className:`text-sm text-emerald-800 dark:text-emerald-200/90`,children:e},t))}):null,(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsxs)(Ge,{className:`min-w-0`,children:[(0,Y.jsx)(qe,{icon:v,title:e.configTitle,subtitle:e.configHint,trailing:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(k,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||!C||D||!ye,onClick:()=>void be(),children:[D?(0,Y.jsx)(K,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,e.saveConfig]}),(0,Y.jsx)(k,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||!C||D||!ye,onClick:()=>{ne(!1),A(null),w(T)},children:e.resetConfig})]})}),C?(0,Y.jsxs)(`div`,{className:`space-y-5`,children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:C.enabled,onChange:e=>w({...C,enabled:e.target.checked})}),(0,Y.jsx)(`span`,{children:C.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configFrequency}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle dark:border-edge`,value:C.frequency,onChange:e=>w({...C,frequency:e.target.value}),placeholder:`0 3 * * *`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configTimezone}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle dark:border-edge`,value:C.timezone,onChange:e=>w({...C,timezone:e.target.value}),placeholder:`Asia/Shanghai`})]})]}),(0,Y.jsxs)(Kn,{label:e.configPhaseLight,children:[(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.configPhaseLightHint}),(0,Y.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:C.light.enabled,onChange:e=>w({...C,light:{...C.light,enabled:e.target.checked}})}),(0,Y.jsx)(`span`,{children:C.light.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseCron}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.light.cron,onChange:e=>w({...C,light:{...C.light,cron:e.target.value}}),placeholder:`0 */6 * * *`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configLightLookbackDays}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.light.lookbackDays,onChange:e=>w({...C,light:{...C.light,lookbackDays:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configLightLimit}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:0,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.light.limit,onChange:e=>w({...C,light:{...C.light,limit:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configLightDedupe}),(0,Y.jsx)(`input`,{type:`number`,step:`0.01`,min:0,max:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.light.dedupeSimilarity,onChange:e=>w({...C,light:{...C.light,dedupeSimilarity:Number(e.target.value)}})})]})]})]}),(0,Y.jsxs)(Kn,{label:e.configPhaseDeep,children:[(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.configPhaseDeepHint}),(0,Y.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:C.deep.enabled,onChange:e=>w({...C,deep:{...C.deep,enabled:e.target.checked}})}),(0,Y.jsx)(`span`,{children:C.deep.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseCron}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.deep.cron,onChange:e=>w({...C,deep:{...C.deep,cron:e.target.value}}),placeholder:`0 3 * * *`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepMinScore}),(0,Y.jsx)(`input`,{type:`number`,step:`0.01`,min:0,max:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.deep.minScore,onChange:e=>w({...C,deep:{...C.deep,minScore:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepMinRecallCount}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.deep.minRecallCount,onChange:e=>w({...C,deep:{...C.deep,minRecallCount:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepLimit}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:0,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.deep.limit,onChange:e=>w({...C,deep:{...C.deep,limit:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepHalfLife}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.deep.recencyHalfLifeDays,onChange:e=>w({...C,deep:{...C.deep,recencyHalfLifeDays:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepMaxAge}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.deep.maxAgeDays,onChange:e=>w({...C,deep:{...C.deep,maxAgeDays:Number(e.target.value)}})})]})]})]}),(0,Y.jsxs)(Kn,{label:e.configPhaseRem,children:[(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.configPhaseRemHint}),(0,Y.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:C.rem.enabled,onChange:e=>w({...C,rem:{...C.rem,enabled:e.target.checked}})}),(0,Y.jsx)(`span`,{children:C.rem.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseCron}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.rem.cron,onChange:e=>w({...C,rem:{...C.rem,cron:e.target.value}}),placeholder:`0 5 * * 0`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configRemLookbackDays}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.rem.lookbackDays,onChange:e=>w({...C,rem:{...C.rem,lookbackDays:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configRemLimit}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:0,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.rem.limit,onChange:e=>w({...C,rem:{...C.rem,limit:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configRemMinStrength}),(0,Y.jsx)(`input`,{type:`number`,step:`0.01`,min:0,max:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:C.rem.minPatternStrength,onChange:e=>w({...C,rem:{...C.rem,minPatternStrength:Number(e.target.value)}})})]})]})]})]}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.configLoading})]}),(0,Y.jsxs)(Ge,{className:`min-w-0`,children:[(0,Y.jsx)(qe,{icon:L,title:e.runtimeTitle,subtitle:e.runtimeHint,trailing:le?(0,Y.jsx)(K,{className:`size-4 shrink-0 animate-spin text-fg-muted`,"aria-hidden":!0}):null}),(0,Y.jsxs)(`div`,{className:`space-y-6`,children:[(0,Y.jsx)(Kn,{label:e.subsectionSchedule,children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.enabled}),(0,Y.jsx)(`div`,{className:$(),children:H?H.config.enabled?e.on:e.off:`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lock}),(0,Y.jsx)(`div`,{className:a($(),ue?.className),children:ue?ue.text:`—`})]}),(0,Y.jsxs)(`div`,{className:a(J(),`sm:col-span-2`),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.schedule}),(0,Y.jsx)(`div`,{className:`mt-1 break-all font-mono text-sm text-fg`,children:H?H.config.frequency:`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.timezone}),(0,Y.jsx)(`div`,{className:$(),children:H?H.config.timezone:`—`})]})]})}),(0,Y.jsx)(Kn,{label:e.subsectionStore,children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storeEntries}),(0,Y.jsx)(`div`,{className:$(),children:H?String(H.store.entryCount):`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storePromoted}),(0,Y.jsx)(`div`,{className:$(),children:H?String(H.store.promotedCount):`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storeUpdatedAt}),(0,Y.jsx)(`div`,{className:$(),children:H?Wn(H.store.updatedAt):`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storeLastPromotedAt}),(0,Y.jsx)(`div`,{className:$(),children:H?Wn(H.store.lastPromotedAt):`—`})]})]})}),H?.config?.phases?(0,Y.jsx)(Kn,{label:e.subsectionPhases,children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,Y.jsx)(qn,{icon:(0,Y.jsx)(Le,{className:`size-4 text-amber-500`}),label:`Light`,enabled:H.config.phases.light.enabled,cron:H.config.phases.light.cron,details:`lookback=${H.config.phases.light.lookbackDays}d, limit=${H.config.phases.light.limit}, dedupe=${H.config.phases.light.dedupeSimilarity}`,t:e}),(0,Y.jsx)(qn,{icon:(0,Y.jsx)(ke,{className:`size-4 text-indigo-500`}),label:`Deep`,enabled:H.config.phases.deep.enabled,cron:H.config.phases.deep.cron,details:`minScore=${H.config.phases.deep.minScore}, recalls≥${H.config.phases.deep.minRecallCount}, limit=${H.config.phases.deep.limit}, halfLife=${H.config.phases.deep.recencyHalfLifeDays}d`,t:e}),(0,Y.jsx)(qn,{icon:(0,Y.jsx)(y,{className:`size-4 text-purple-500`}),label:`REM`,enabled:H.config.phases.rem.enabled,cron:H.config.phases.rem.cron,details:`lookback=${H.config.phases.rem.lookbackDays}d, limit=${H.config.phases.rem.limit}, strength≥${H.config.phases.rem.minPatternStrength}`,t:e})]})}):null,(0,Y.jsxs)(Kn,{label:e.subsectionLastRun,children:[(0,Y.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:e.lastRunBlockHint}),H?.lastRun?.exists?(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[H.lastRun.parseError?(0,Y.jsxs)(`p`,{className:`text-sm text-amber-600 dark:text-amber-400`,role:`alert`,children:[e.lastRunParseError,`: `,H.lastRun.parseError]}):null,H.lastRun.record?(0,Y.jsx)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/40 p-2 sm:p-3`,children:(0,Y.jsx)(Yn,{t:e,r:H.lastRun.record})}):null,H.lastRun.raw!==void 0&&H.lastRun.raw!==null?(0,Y.jsxs)(`details`,{className:`group rounded-lg border border-edge-subtle`,children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer list-none px-3 py-2 text-xs font-medium text-fg-muted marker:hidden [&::-webkit-details-marker]:hidden`,children:(0,Y.jsx)(`span`,{className:`underline decoration-edge underline-offset-2 group-open:text-fg`,children:e.lastRunRaw})}),(0,Y.jsx)(`pre`,{className:`max-h-[12rem] overflow-auto border-t border-edge-subtle p-3 text-xs text-fg-muted`,children:JSON.stringify(H.lastRun.raw,null,2)})]}):null]}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.lastRunEmpty})]}),(0,Y.jsx)(Jn,{label:e.subsectionLightLastRun,lastRun:H?.lightLastRun,t:e}),(0,Y.jsx)(Jn,{label:e.subsectionRemLastRun,lastRun:H?.remLastRun,t:e})]})]})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:M,title:e.previewTitle,subtitle:e.previewHint,trailing:(0,Y.jsxs)(k,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||j,onClick:()=>void me(),children:[j?(0,Y.jsx)(K,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,e.previewLoad]})}),F?F.length>0?(0,Y.jsx)(`div`,{className:`space-y-2`,children:F.map(t=>{let n=`${t.path}:${t.startLine}-${t.endLine}`,r=t.skippedReason;return(0,Y.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/60 px-3 py-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-muted`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-fg`,children:n}),(0,Y.jsxs)(`span`,{children:[`score=`,t.score.toFixed(3)]}),(0,Y.jsxs)(`span`,{children:[`recalls=`,t.recallCount]}),(0,Y.jsxs)(`span`,{children:[`avg=`,t.avgScore.toFixed(3)]}),(0,Y.jsxs)(`span`,{children:[`decay=`,t.recencyDecay?.toFixed(3)??`—`]}),r?(0,Y.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:r}):(0,Y.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:e.previewEligible})]}),t.snippet?(0,Y.jsx)(`div`,{className:`mt-2 text-sm text-fg`,children:t.snippet}):null]},`${t.key}:${t.hash}:${n}`)})}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.previewEmpty}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.previewNotLoaded})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:L,title:e.eventsTitle,subtitle:e.eventsHint,trailing:(0,Y.jsxs)(k,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||ae,onClick:()=>void he(),children:[ae?(0,Y.jsx)(K,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,e.eventsLoad]})}),V?V.length>0?(0,Y.jsx)(`div`,{className:`space-y-1.5`,children:V.map((e,t)=>{let n=e.phase===`light`?`☀️`:e.phase===`rem`?`✨`:`🌙`,r=e.phase===`light`?`scanned=${e.scannedEntries??0} new=${e.newSignals??0} deduped=${e.deduped??0}`:e.phase===`rem`?`patterns=${e.patternsDiscovered??0} analyzed=${e.entriesAnalyzed??0}`:`candidates=${e.candidates??0} applied=${e.applied??0}`;return(0,Y.jsxs)(`div`,{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`,children:[(0,Y.jsx)(`span`,{children:n}),(0,Y.jsx)(`span`,{className:`font-medium text-fg`,children:e.phase}),(0,Y.jsx)(`span`,{className:a(`font-medium`,e.ok?`text-emerald-600 dark:text-emerald-400`:`text-amber-600 dark:text-amber-400`),children:e.ok?`OK`:`FAIL`}),(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:r}),(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:Gn(e.durationMs)}),(0,Y.jsx)(`span`,{className:`ml-auto text-fg-subtle`,children:Wn(e.timestamp)})]},`${e.timestamp}:${e.phase}:${t}`)})}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.eventsEmpty}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.eventsNotLoaded})]}),(0,Y.jsxs)(Ge,{className:`max-w-2xl`,children:[(0,Y.jsx)(qe,{icon:s,title:e.maintenanceTitle,subtitle:e.maintenanceHint}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,Y.jsxs)(k,{variant:`secondary`,disabled:G,onClick:()=>{confirm(e.confirmResetStore)&&_e(`reset_store`)},children:[i===`reset_store`?(0,Y.jsx)(K,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(b,{className:`mr-2 size-4`,"aria-hidden":!0}),e.resetStore]}),(0,Y.jsxs)(k,{variant:`secondary`,disabled:G,onClick:()=>{confirm(e.confirmClearLock)&&_e(`clear_lock`)},children:[i===`clear_lock`?(0,Y.jsx)(K,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(we,{className:`mr-2 size-4`,"aria-hidden":!0}),e.clearLock]})]})]})]})}async function Qn(e){let t=await R(q(`/api/auth/oauth-async/start`),{method:`POST`,body:JSON.stringify({provider:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||`OAuth start failed: ${t.status}`)}return(await t.json()).payload}async function $n(e){let t=await R(q(`/api/auth/oauth-async/${encodeURIComponent(e)}/status`));if(!t.ok)throw Error(`OAuth status: ${t.status}`);return(await t.json()).payload}async function er(e,t){let n=await R(q(`/api/auth/oauth-async/${encodeURIComponent(e)}/code`),{method:`POST`,body:JSON.stringify({code:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`Submit code failed: ${n.status}`)}}async function tr(e){let t=await R(q(`/api/auth/oauth-async/${encodeURIComponent(e)}/cancel`),{method:`POST`});if(!t.ok)throw Error(`Cancel OAuth failed: ${t.status}`)}async function nr(e){let t=await R(q(`/api/auth/oauth-async/${encodeURIComponent(e)}`),{method:`DELETE`});if(!t.ok)throw Error(`Cleanup session failed: ${t.status}`)}async function rr(e){let t=await R(q(`/api/auth/oauth/${encodeURIComponent(e)}`),{method:`DELETE`});if(!t.ok)throw Error(`Revoke OAuth failed: ${t.status}`)}function ir({providerId:e,language:t}){let n=Oe[e];if(!n)return null;let r=t===`zh`,i=r&&n.descriptionZh?n.descriptionZh:n.description;return i?(0,Y.jsxs)(ee,{children:[(0,Y.jsx)(g,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,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`,"aria-label":r?`${e} 详情`:`${e} info`,children:(0,Y.jsx)(Fe,{className:`size-3.5`,"aria-hidden":!0})})}),(0,Y.jsx)(w,{children:(0,Y.jsxs)(S,{side:`right`,align:`start`,sideOffset:6,className:a(`z-50 w-64 rounded-xl border border-edge bg-surface-panel p-3 shadow-md`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`),children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Y.jsx)(`p`,{className:`text-xs font-semibold text-fg`,children:e}),(0,Y.jsx)(pe,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,className:`shrink-0 rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,"aria-label":r?`关闭`:`Close`,children:(0,Y.jsx)(me,{className:`size-3.5`,"aria-hidden":!0})})})]}),(0,Y.jsx)(`p`,{className:`mt-1.5 text-xs leading-relaxed text-fg-muted`,children:i}),n.bestFor&&n.bestFor.length>0?(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r?`适合场景`:`Best for`}),(0,Y.jsx)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:n.bestFor.map(e=>(0,Y.jsx)(`span`,{className:`rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium text-fg-muted`,children:e},e))})]}):null,n.freeTier===void 0?null:(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r?`免费额度`:`Free tier`}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:n.freeTier?n.freeTierNote??(r?`有免费额度`:`Available`):r?`无免费额度(按量付费)`:`None (pay-as-you-go)`})]}),n.pricingUrl||n.docsUrl?(0,Y.jsxs)(`div`,{className:`mt-2.5 flex gap-3`,children:[n.pricingUrl?(0,Y.jsxs)(`a`,{href:n.pricingUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-0.5 text-xs text-accent-fg hover:underline`,children:[r?`定价`:`Pricing`,(0,Y.jsx)(h,{className:`size-3`,"aria-hidden":!0})]}):null,n.docsUrl?(0,Y.jsxs)(`a`,{href:n.docsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-0.5 text-xs text-accent-fg hover:underline`,children:[r?`文档`:`Docs`,(0,Y.jsx)(h,{className:`size-3`,"aria-hidden":!0})]}):null]}):null,(0,Y.jsx)(c,{className:`fill-edge`})]})})]}):null}var ar=[`common`,`specialty`,`enterprise`,`oauth`,`extension`];function or(e){let t=new Map;for(let e of ar)t.set(e,[]);for(let n of e){let e=n.category||`specialty`,r=t.get(e)??[];r.push(n),t.set(e,r)}return t}function sr(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}function cr(e,t){switch(t){case`agent`:return e.sourceAgent;case`gateway`:return e.sourceGateway;case`oauth`:return e.sourceOauth;case`env`:return e.sourceEnv;case`models_json`:return e.sourceModelsJson;case`extension`:return e.sourceExtension;default:return e.sourceNone}}function lr(){let e=U(e=>e.language),t=Pe(e),n=t.providersSettings,i=!!z(e=>e.token),[s,c]=(0,X.useState)({}),[l,f]=(0,X.useState)({}),[p,m]=(0,X.useState)(!1),[h,g]=(0,X.useState)(null),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(()=>new Set([`common`])),[x,S]=(0,X.useState)(``),[C,w]=(0,X.useState)(!1),[T,E]=(0,X.useState)(()=>new Set),D=(0,X.useRef)(``),ee=q(`/api/providers/meta`),te=(0,X.useCallback)(async e=>(await G(e)).payload?.providers??[],[]),{data:O,error:ne,isLoading:re,mutate:j}=Ne(i),{data:M,error:ie,isLoading:N,mutate:F}=r(i?ee:null,te,{revalidateOnFocus:!1}),{data:I,mutate:ae}=r(i?W:null,()=>le(),{revalidateOnFocus:!1}),L=(0,X.useMemo)(()=>!M||O===void 0?null:De(M,P(O.payload?.config),I??[]),[M,O,I]),R=ne instanceof Error?ne.message:ne?String(ne):ie instanceof Error?ie.message:ie?String(ie):null,oe=!!(i&&L===null&&(re||N)&&!R),B=(0,X.useMemo)(()=>JSON.stringify(s)!==JSON.stringify(l),[s,l]);(0,X.useEffect)(()=>{if(!B)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[B]),(0,X.useEffect)(()=>{if(!(!i||L===null)&&!B){let e={};for(let t of L)e[t.id]=t.apiKey;c(e),f({...e})}},[i,L,B]);let V=L??[],se=(0,X.useMemo)(()=>{let e=V,t=x.trim().toLowerCase();return t&&(e=e.filter(e=>{let n=Oe[e.id]?.aliases??[];return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)||n.some(e=>e.toLowerCase().includes(t))})),C&&(e=e.filter(e=>!e.configured)),e},[V,x,C]),ce=(0,X.useMemo)(()=>or(se),[se]);(0,X.useEffect)(()=>{let e=D.current;if(D.current=x,x.trim()){let e=new Set;for(let t of ar)(ce.get(t)??[]).length>0&&e.add(t);b(e);return}e.trim()&&b(new Set([`common`]))},[x,ce]);let ue=(0,X.useCallback)(async()=>{if(p)return;let e={};for(let t of Object.keys(s)){let n=s[t]?.trim()??``;!n||ye(n)||(e[t]=n)}if(Object.keys(e).length===0){f({...s}),v(`noChanges`),window.setTimeout(()=>v(null),2500);return}m(!0),g(null),v(null);try{await de(e),E(new Set(Object.keys(e)));let t=await ae(le(!0))??I??[],[n,r]=await Promise.all([j(),F()]),i=Array.isArray(r)?r:M??[],a=n??O;if(a?.payload){let e=De(i,P(a.payload.config),t),n={};for(let t of e)n[t.id]=t.apiKey;c(n),f({...n})}v(`saved`),window.setTimeout(()=>v(null),2500)}catch(e){g(e instanceof Error?e.message:n.saveError)}finally{m(!1)}},[O,s,M,I,j,F,ae,n.saveError,p]),fe=(0,X.useCallback)(()=>{c({...l}),g(null),v(null),E(new Set)},[l]),pe=e=>{b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},me=(0,X.useCallback)(()=>{j(),F()},[j,F]),he=!!(x.trim()||C);return i?oe?(0,Y.jsxs)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-8`,children:[(0,Y.jsx)(`div`,{className:`h-8 w-48 animate-pulse rounded bg-surface-hover`}),(0,Y.jsx)(`div`,{className:`mt-6 h-32 animate-pulse rounded-xl bg-surface-hover`}),(0,Y.jsx)(`p`,{className:`mt-4 text-sm text-fg-muted`,children:t.logs.loading})]}):V.length===0?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:[(0,Y.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-base px-4 py-3`,children:[(0,Y.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.loadError}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:h??R??n.empty})]}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>{j(),F()},children:t.logs.refresh})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.providers}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:n.rotateHint})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[_===`saved`?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,_===`noChanges`?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.noChangesSaved}):null,(0,Y.jsx)(k,{type:`button`,variant:`secondary`,disabled:!B||p,onClick:fe,children:n.discard}),(0,Y.jsx)(k,{type:`button`,variant:`primary`,disabled:!B||p,onClick:()=>void ue(),children:p?n.saving:n.save})]})]}),B?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,(0,Y.jsxs)(`p`,{className:`text-sm leading-relaxed text-fg-muted`,children:[n.intro,` `,(0,Y.jsx)(`a`,{href:H(e,`models`),target:`_blank`,rel:`noopener noreferrer`,className:`font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:n.docsLink}),` · `,(0,Y.jsx)(_e,{to:`/settings/models`,className:`font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:n.modelsLink})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center`,children:[(0,Y.jsxs)(`div`,{className:`relative min-w-0 flex-1 sm:max-w-md`,children:[(0,Y.jsx)(A,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`,strokeWidth:1.75,"aria-hidden":!0}),(0,Y.jsx)(`input`,{type:`search`,value:x,onChange:e=>S(e.target.value),placeholder:n.searchPlaceholder,autoComplete:`off`,className:a(`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-10 pr-3 text-sm text-fg placeholder:text-fg-subtle`,u,`dark:border-edge`),"aria-label":n.searchPlaceholder})]}),(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:C,onChange:e=>w(e.target.checked),className:`size-4 rounded border-edge text-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}),n.unconfiguredOnly]}),he?(0,Y.jsx)(k,{type:`button`,variant:`ghost`,className:`h-9 w-fit self-start text-fg-muted`,onClick:()=>{S(``),w(!1)},children:n.clearFilters}):null]}),h?(0,Y.jsx)(`div`,{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`,role:`alert`,children:h}):null,se.length===0?(0,Y.jsxs)(`div`,{className:`rounded-xl border border-dashed border-edge-subtle bg-surface-base px-4 py-8 text-center text-sm text-fg-muted`,children:[(0,Y.jsx)(`p`,{children:n.noMatches}),(0,Y.jsx)(k,{type:`button`,variant:`secondary`,className:`mt-4`,onClick:()=>{S(``),w(!1)},children:n.clearFilters})]}):(0,Y.jsx)(`div`,{className:`flex flex-col gap-3`,children:ar.map(t=>{let r=ce.get(t)??[];if(r.length===0)return null;let i=y.has(t),u=r.filter(e=>e.configured).length,d=`providers-cat-${t}`;return(0,Y.jsxs)(`section`,{className:`overflow-hidden rounded-2xl bg-surface-base`,children:[(0,Y.jsxs)(`button`,{type:`button`,id:`${d}-trigger`,"aria-expanded":i,"aria-controls":d,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`,onClick:()=>pe(t),children:[(0,Y.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(`span`,{className:`truncate`,children:n.categories[t]}),(0,Y.jsx)(`span`,{className:`shrink-0 rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r.length})]}),(0,Y.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[u>0?(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-fg-subtle`,children:[(0,Y.jsx)(Ee,{className:`size-3.5 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}),sr(n.configuredCount,{count:String(u)})]}):null,(0,Y.jsx)(o,{className:a(`size-4 text-fg-subtle transition-transform`,i&&`rotate-180`),"aria-hidden":!0})]})]}),i?(0,Y.jsx)(`div`,{id:d,role:`region`,"aria-labelledby":`${d}-trigger`,className:`divide-y divide-edge-subtle`,children:r.map(t=>(0,Y.jsx)(`div`,{id:`provider-row-${t.id}`,children:(0,Y.jsx)(dr,{row:t,value:s[t.id]??``,rowDirty:(s[t.id]??``)!==(l[t.id]??``),labels:n,language:e,onChange:(e,t)=>c(n=>({...n,[e]:t})),onReload:me,justSaved:T.has(t.id),availableModels:I??[]})},t.id))}):null]},t)})})]}):(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-3 rounded-2xl bg-surface-base p-6`,children:[(0,Y.jsx)(d,{className:`mt-0.5 size-5 shrink-0 text-fg-subtle`,strokeWidth:1.75}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-base font-semibold text-fg`,children:t.settingsSections.providers}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.needToken})]})]})})}function ur({envVar:e,labels:t}){let[n,r]=(0,X.useState)(!1),i=async()=>{try{await navigator.clipboard.writeText(e),r(!0),window.setTimeout(()=>r(!1),2e3)}catch{}};return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`rounded bg-surface-hover px-1.5 py-0.5 font-mono text-[11px] text-fg-muted`,children:e}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void i(),className:`rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,title:n?t.copied:t.copy,"aria-label":n?t.copied:t.copy,children:n?(0,Y.jsx)(Ee,{className:`size-3.5 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}):(0,Y.jsx)(l,{className:`size-3.5`,"aria-hidden":!0})})]})}function dr({row:e,value:t,rowDirty:n,labels:r,language:i,onChange:s,onReload:c,justSaved:f,availableModels:p}){let[m,g]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),[x,S]=(0,X.useState)(!1),[w,T]=(0,X.useState)(null),[E,ee]=(0,X.useState)(!1),[te,O]=(0,X.useState)(null),[ne,re]=(0,X.useState)(!1),A=ye(t),M=A&&!v?``:t,ie=e.configured&&!A&&!!t,[N,P]=(0,X.useState)(!1),[F,I]=(0,X.useState)(),[L,R]=(0,X.useState)(),[oe,z]=(0,X.useState)(),[V,se]=(0,X.useState)(),[H,le]=(0,X.useState)(),[U,W]=(0,X.useState)(``),[ue,de]=(0,X.useState)(!1),[fe,pe]=(0,X.useState)(null),[he,_e]=(0,X.useState)(null),G=e.activeKeySource??`none`,ve=(0,X.useMemo)(()=>ae(e.id,i),[e.id,i]);(0,X.useEffect)(()=>()=>{F&&nr(F).catch(()=>{})},[F]),(0,X.useEffect)(()=>{if(!F||!N)return;let e=window.setInterval(()=>{(async()=>{try{let t=await $n(F);z(t.message),se(t.authUrl),le(t.instructions),t.status===`waiting_auth`||t.status===`waiting_code`?R(t.status===`waiting_code`?`waiting_code`:`waiting`):t.status===`completed`?(window.clearInterval(e),P(!1),R(`success`),z(t.message),window.setTimeout(()=>c(),800)):(t.status===`failed`||t.status===`cancelled`)&&(window.clearInterval(e),P(!1),R(`error`),z(t.error||t.message||`OAuth failed`))}catch{}})()},1e3);return()=>window.clearInterval(e)},[F,N,c]);let be=async()=>{P(!0),R(`waiting`),z(r.oauthStarting),I(void 0),se(void 0),le(void 0);try{I((await Qn(e.id)).sessionId)}catch(e){R(`error`),z(e instanceof Error?e.message:`OAuth failed`),P(!1)}},xe=async()=>{if(F){try{await tr(F)}catch{}I(void 0),P(!1),R(`idle`),z(void 0)}},Ce=async()=>{if(!(!F||!U.trim()))try{await er(F,U.trim()),W(``),z(r.oauthProcessingCode)}catch(e){R(`error`),z(e instanceof Error?e.message:`Failed`)}},we=()=>{window.confirm(sr(r.revokeConfirm,{name:e.name}))&&(T(null),rr(e.id).then(()=>c()).catch(e=>T(e instanceof Error?e.message:r.revokeFailed)))},Te=async()=>{re(!1),ee(!0),O(null);try{await Ae(e.id),O(r.removeKeySuccess),s(e.id,``),window.setTimeout(()=>c(),600)}catch(e){O(e instanceof Error?e.message:r.removeKeyFailed)}finally{ee(!1)}},De=e.configured&&A&&G!==`env`&&G!==`extension`&&G!==`models_json`,q=async()=>{if(!(!t||A))try{await navigator.clipboard.writeText(t),S(!0),window.setTimeout(()=>S(!1),2e3)}catch{}},ke=async()=>{let e=t.trim();if(!(!e||ye(e))){de(!0),pe(null),_e(null);try{let t=await Se(e);if(t.error){_e(!1),pe(`${r.testFailed} ${t.error}`);return}_e(!0),t.type===`env`?pe(r.testOkEnv):t.type===`command`?pe(r.testOkCommand):pe(r.testOkLiteral)}catch(e){_e(!1),pe(e instanceof Error?e.message:r.testFailed)}finally{de(!1)}}},Me=n?r.metaWillSave:e.configured?A?`${r.metaMasked} · ${r.runtimeLabelPrefix} ${cr(r,G)}`:`${r.runtimeLabelPrefix} ${cr(r,G)}`:r.metaNotConfigured,Ne=`provider-details-${e.id}`;return(0,Y.jsxs)(`div`,{className:`bg-surface-panel`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-3 sm:px-4`,children:[(0,Y.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-md bg-surface-hover/80 dark:bg-surface-hover/50`,"aria-hidden":!0,children:e.configured?(0,Y.jsx)(Ee,{className:`size-4 text-emerald-600 dark:text-emerald-400`}):(0,Y.jsx)(d,{className:`size-4 text-fg-subtle`,strokeWidth:1.75})}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-semibold text-fg`,children:e.name}),(0,Y.jsx)(ir,{providerId:e.id,language:i}),(0,Y.jsx)(`span`,{className:`rounded bg-surface-hover px-1.5 py-0.5 font-mono text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:e.id}),(0,Y.jsx)(`span`,{className:`rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:e.category})]}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:Me})]}),(0,Y.jsx)(k,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-expanded":m,"aria-controls":Ne,"aria-label":r.expandRowDetails,onClick:()=>g(e=>!e),children:(0,Y.jsx)(o,{className:a(`size-4 transition-transform`,m&&`rotate-180`),"aria-hidden":!0})})]}),m?(0,Y.jsxs)(`div`,{id:Ne,role:`region`,className:`space-y-3 border-t border-edge-subtle bg-surface-base/40 px-3 py-3 dark:bg-surface-base/20 sm:px-4`,children:[e.supportsApiKey===!1?null:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative flex flex-col gap-2 sm:flex-row sm:gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,Y.jsx)(`input`,{type:v||!A?`text`:`password`,className:a(`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-3 pr-20 font-mono text-sm text-fg`,`placeholder:text-fg-subtle`,u,`dark:border-edge`),value:M,placeholder:A?r.placeholderOverride:e.configured?r.placeholderKeep:r.placeholderKey,disabled:N,onChange:t=>s(e.id,t.target.value),autoComplete:`off`,spellCheck:!1}),(0,Y.jsxs)(`div`,{className:`absolute right-1 top-1/2 flex -translate-y-1/2 gap-0.5`,children:[t&&!A?(0,Y.jsx)(`button`,{type:`button`,className:a(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,_.transition,_.press,_.focusRingPanel),title:x?r.copied:r.copy,"aria-label":x?r.copied:r.copy,onClick:()=>void q(),children:x?(0,Y.jsx)(Ee,{className:`size-4`}):(0,Y.jsx)(l,{className:`size-4`})}):null,(0,Y.jsx)(`button`,{type:`button`,className:a(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg disabled:opacity-40`,_.transition,_.press,_.focusRingPanel),title:v?r.hide:r.show,"aria-label":v?r.hide:r.show,disabled:A,onClick:()=>y(e=>!e),children:v?(0,Y.jsx)(D,{className:`size-4`}):(0,Y.jsx)(C,{className:`size-4`})})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2 sm:shrink-0`,children:[(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1`,disabled:N||ue||!t.trim()||ye(t),onClick:()=>void ke(),children:[ue?(0,Y.jsx)(K,{className:`size-4 animate-spin`,"aria-hidden":!0}):null,ue?r.testingKey:r.testKey]}),e.supportsOAuth?ie?(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1 text-red-600 dark:text-red-400`,onClick:we,children:[(0,Y.jsx)(B,{className:`size-4`,"aria-hidden":!0}),r.revoke]}):(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1`,disabled:N,onClick:()=>void be(),children:[N?(0,Y.jsx)(K,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(ce,{className:`size-4`,"aria-hidden":!0}),r.oauth]}):null,De?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1 text-red-600 dark:text-red-400`,disabled:E,onClick:()=>re(!0),children:[E?(0,Y.jsx)(K,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(b,{className:`size-4`,"aria-hidden":!0}),r.removeKey]}),(0,Y.jsx)(je,{open:ne,title:r.removeKey,description:sr(r.removeKeyConfirm,{name:e.name}),confirmLabel:r.removeKey,cancelLabel:r.cancelOAuth,destructive:!0,onConfirm:()=>void Te(),onCancel:()=>re(!1)})]}):null]})]}),fe?(0,Y.jsx)(`p`,{className:a(`text-xs`,he===!1?`text-red-600 dark:text-red-400`:`text-fg-muted`),role:`status`,children:fe}):null,ve.length>0?(0,Y.jsx)(`div`,{className:`flex flex-col gap-1`,children:ve.map(e=>(0,Y.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,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`,children:[ge(e.kind,r),(0,Y.jsx)(h,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null]}),oe?(0,Y.jsxs)(`div`,{className:a(`flex gap-2 rounded-md px-3 py-2 text-xs`,L===`error`?`border border-red-200 bg-red-50 text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`:`bg-surface-base text-fg-muted`),children:[L===`error`?(0,Y.jsx)(j,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}):L===`success`?(0,Y.jsx)(Ee,{className:`mt-0.5 size-4 shrink-0 text-emerald-600`,"aria-hidden":!0}):(0,Y.jsx)(Fe,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:oe})]}):null,w?(0,Y.jsxs)(`div`,{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`,role:`alert`,children:[(0,Y.jsx)(j,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:w})]}):null,te?(0,Y.jsxs)(`div`,{className:a(`flex gap-2 rounded-md px-3 py-2 text-xs`,te===r.removeKeySuccess?`bg-surface-hover/60 text-fg-muted dark:bg-surface-hover/40`:`border border-red-200 bg-red-50 text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`),role:`status`,children:[te===r.removeKeySuccess?(0,Y.jsx)(Ee,{className:`mt-0.5 size-4 shrink-0 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}):(0,Y.jsx)(j,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:te})]}):null,(L===`waiting`||L===`waiting_code`)&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[V?(0,Y.jsxs)(`a`,{href:V,target:`_blank`,rel:`noopener noreferrer`,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`,children:[(0,Y.jsx)(h,{className:`size-4`,"aria-hidden":!0}),r.openAuthPage]}):null,(0,Y.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1`,onClick:()=>void xe(),children:[(0,Y.jsx)(me,{className:`size-4`,"aria-hidden":!0}),r.cancelOAuth]})]}),H?(0,Y.jsxs)(`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`,children:[(0,Y.jsx)(Fe,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:H})]}):null,L===`waiting_code`?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,Y.jsx)(`input`,{type:`text`,className:a(`min-w-0 flex-1 rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,u,`dark:border-edge`),value:U,placeholder:r.pasteRedirectUrl,onChange:e=>W(e.target.value),onKeyDown:e=>e.key===`Enter`&&void Ce()}),(0,Y.jsx)(k,{type:`button`,variant:`primary`,className:`shrink-0`,onClick:()=>void Ce(),children:r.submitCode})]}):null,A?(0,Y.jsxs)(`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`,children:[(0,Y.jsx)(Fe,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:G===`env`?r.envHint:r.maskedStoredHint})]}):null,e.supportsOAuth&&!A&&!ie?(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:r.oauthHint}):null,f?(0,Y.jsxs)(`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`,children:[(0,Y.jsx)(Ee,{className:`mt-0.5 size-3.5 shrink-0 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:(()=>{let t=p.filter(t=>t.provider===e.id);if(t.length===0)return r.savedNoModels;let n=t.slice(0,3).map(e=>e.name||e.id).join(`, `),i=t.length>3?`… (+${t.length-3})`:``;return`${t.length} ${r.savedModelsAvailable}: ${n}${i}`})()})]}):null,(Oe[e.id]?.envVars??[]).length>0?(0,Y.jsxs)(`details`,{children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer select-none list-none text-xs text-fg-subtle hover:text-fg-muted`,children:r.envVarAlt}),(0,Y.jsx)(`div`,{className:`mt-1.5 flex flex-col gap-1`,children:(Oe[e.id]?.envVars??[]).map(e=>(0,Y.jsx)(ur,{envVar:e,labels:r},e))})]}):null]}):null]})}var fr=[`appearance`,`system`,`agent-defaults`,`providers`,`models`,`voice`,`gateway`,`heartbeat`,`search`,`dreams`];function pr(){let{section:e}=Ce(),t=U(e=>e.language),n=Pe(t);if(e===`agent`||e===`agents`)return(0,Y.jsx)(Me,{to:`/agents`,replace:!0});if(!e||!fr.includes(e))return(0,Y.jsx)(Me,{to:`/settings/appearance`,replace:!0});let r=e,i=n.settingsSections[r];return r===`appearance`?(0,Y.jsx)(tt,{}):r===`system`?(0,Y.jsx)(Nn,{}):r===`agent-defaults`?(0,Y.jsx)(Ye,{}):r===`providers`?(0,Y.jsx)(lr,{}):r===`models`?(0,Y.jsx)(Zt,{}):r===`voice`?(0,Y.jsx)(yn,{}):r===`gateway`?(0,Y.jsx)(ot,{}):r===`heartbeat`?(0,Y.jsx)(wt,{}):r===`search`?(0,Y.jsx)(kn,{}):r===`dreams`?(0,Y.jsx)(Zn,{}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:i}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t===`zh`?`设置 · ${i}(即将推出)。`:`Settings · ${i} (coming soon).`})]})}export{pr as SettingsPage};
|
|
2
|
-
//# sourceMappingURL=settings-page-CleZrGHy.js.map
|