@xopcai/xopc 0.0.66 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-JiJR38n1.js → agents-CmhOU0fB.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-JiJR38n1.js.map → agents-CmhOU0fB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js → apps-page-CzS9A_6L.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-aBDyr7Im.js.map → apps-page-CzS9A_6L.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js → channels-settings-Bn0YSztA.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-DXxfgG4N.js.map → channels-settings-Bn0YSztA.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js → cron-dreaming-jobs-bAYsiHdF.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-3--QJSP5.js.map → cron-dreaming-jobs-bAYsiHdF.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js → cron-page-CKqDtScu.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-CCn-JwBy.js.map → cron-page-CKqDtScu.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js → dist-CUMhnSuX.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-BS-cwfHQ.js.map → dist-CUMhnSuX.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js → extension-debug-page-BDls5xp3.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-M8JS4Jid.js.map → extension-debug-page-BDls5xp3.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js → extension-page-BSfv53OO.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-C8gjVE_t.js.map → extension-page-BSfv53OO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js → extension-settings-page-B0nkVsLi.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-DeY2M2di.js.map → extension-settings-page-B0nkVsLi.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js → heartbeat-config-api-P5zdbIBw.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-DWmeyjyR.js.map → heartbeat-config-api-P5zdbIBw.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-Cc57jhuG.js → index-DAglRwh4.js} +5 -5
- package/dist/gateway/static/root/assets/{index-Cc57jhuG.js.map → index-DAglRwh4.js.map} +1 -1
- package/dist/gateway/static/root/assets/index-DHj3Cf9B.css +1 -0
- package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js → logs-page-CfGDv4k7.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js.map → logs-page-CfGDv4k7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js → sessions-page-DoGE8N-O.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-Da9gjMh7.js.map → sessions-page-DoGE8N-O.js.map} +1 -1
- package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js +3 -0
- package/dist/gateway/static/root/assets/settings-page-C5VrwDoO.js.map +1 -0
- package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js → skills-page-ADUi69Fa.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-B_msZcLx.js.map → skills-page-ADUi69Fa.js.map} +1 -1
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js → use-image-provider-credentials-C4x4dNv2.js} +2 -2
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-Bs8xl2E3.js.map → use-image-provider-credentials-C4x4dNv2.js.map} +1 -1
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/package.js +1 -1
- package/dist/src/cli/commands/tunnel.js +69 -8
- package/dist/src/cli/commands/tunnel.js.map +1 -1
- package/dist/src/config/schema.d.ts +2 -0
- package/dist/src/config/schema.js +2 -0
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -5
- package/dist/src/gateway/hono/lib/config-payload.js +3 -5
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/routes/tunnel.js +12 -10
- package/dist/src/gateway/hono/routes/tunnel.js.map +1 -1
- package/dist/src/tunnel/acme-client.d.ts +11 -0
- package/dist/src/tunnel/acme-client.js +54 -10
- package/dist/src/tunnel/acme-client.js.map +1 -1
- package/dist/src/tunnel/env.d.ts +14 -3
- package/dist/src/tunnel/env.js +34 -5
- package/dist/src/tunnel/env.js.map +1 -1
- package/dist/src/tunnel/frpc-binary.d.ts +6 -1
- package/dist/src/tunnel/frpc-binary.js +66 -40
- package/dist/src/tunnel/frpc-binary.js.map +1 -1
- package/dist/src/tunnel/frpc-extract.d.ts +10 -0
- package/dist/src/tunnel/frpc-extract.js +129 -0
- package/dist/src/tunnel/frpc-extract.js.map +1 -0
- package/dist/src/tunnel/gateway-lifecycle.d.ts +3 -1
- package/dist/src/tunnel/gateway-lifecycle.js +6 -4
- package/dist/src/tunnel/gateway-lifecycle.js.map +1 -1
- package/dist/src/tunnel/index.d.ts +3 -1
- package/dist/src/tunnel/index.js +2 -2
- package/dist/src/tunnel/tls-server.js +5 -0
- package/dist/src/tunnel/tls-server.js.map +1 -1
- package/dist/src/tunnel/tunnel-config.js +11 -1
- package/dist/src/tunnel/tunnel-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-e2e-config.d.ts +4 -1
- package/dist/src/tunnel/tunnel-e2e-config.js +10 -3
- package/dist/src/tunnel/tunnel-e2e-config.js.map +1 -1
- package/dist/src/tunnel/tunnel-service.d.ts +4 -0
- package/dist/src/tunnel/tunnel-service.js +66 -5
- package/dist/src/tunnel/tunnel-service.js.map +1 -1
- package/dist/src/tunnel/tunnel-types.d.ts +16 -0
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/index-B5gp15_q.css +0 -1
- package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js +0 -3
- package/dist/gateway/static/root/assets/settings-page-B0spIRVS.js.map +0 -1
package/dist/gateway/static/root/assets/{logs-page-kIsSDMqb.js.map → logs-page-CfGDv4k7.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-page-kIsSDMqb.js","names":["fetchJson","apiUrl","LogEntry","LogFile","LogQuery","LogStats","buildQueryString","query","params","URLSearchParams","level","length","set","join","from","to","q","module","limit","String","offset","qs","toString","queryLogs","Promise","logs","count","getLogFiles","result","files","getLogModules","modules","getLogStats","raw","Partial","byLevel","getLogDir","dir","LogLevel","LOG_LEVELS","LogEntry","timestamp","level","message","module","prefix","service","extension","requestId","sessionId","userId","meta","Record","key","LogQuery","from","to","q","limit","offset","LogFile","name","size","modified","LogStats","byLevel","Partial","LOG_LEVELS","LogEntry","LogLevel","logEntryTimeMs","entry","t","Date","String","timestamp","getTime","Number","isFinite","sortLogsByTimeDesc","entries","sort","a","b","PAGE_LIMIT","REFRESH_MS","LOG_LEVEL_SET","Set","LevelPreset","LevelSegmentValue","Exclude","PRESET_ERRORS","PRESET_WARN_PLUS","PRESET_INFO_PLUS","parseLogLevelsParam","raw","out","part","split","level","trim","has","add","isSameLogLevelSet","size","setMatchesLevels","s","levels","length","every","l","derivePreset","segmentValueFromLevels","p","levelsForPreset","preset","interpolate","template","params","Record","replace","_","key","moduleLabel","log","module","prefix","service","extension","messagePreview","message","JSON","stringify","formatTimeCompact","date","toLocaleTimeString","undefined","hour","minute","second","hour12","formatTimestampFull","toLocaleString","formatFileSize","bytes","toFixed","requestIdPreview","id","slice","levelLabel","toLowerCase","formatStatsLine","byLevel","Partial","labels","parts","lv","n","push","join","useCallback","useEffect","useMemo","useReducer","useRef","useState","useSearchParams","getLogDir","getLogFiles","getLogModules","getLogStats","queryLogs","LogEntry","LogFile","LogLevel","LevelSegmentValue","isSameLogLevelSet","levelsForPreset","PAGE_LIMIT","parseLogLevelsParam","REFRESH_MS","segmentValueFromLevels","sortLogsByTimeDesc","messages","StoredLanguage","useGatewayStore","Stats","Awaited","ReturnType","Filters","searchInput","debouncedSearch","selectedLevels","Set","moduleFilter","dateFrom","dateTo","autoRefresh","FiltersAction","type","value","level","payload","Omit","filtersReducer","state","action","next","has","delete","add","p","same","Data","logs","loading","error","hasMore","modules","files","stats","logDir","DataAction","message","resetLogs","initialData","dataReducer","useLogsPage","language","L","token","st","hasToken","Boolean","searchParams","setSearchParams","searchParamsInitRef","filters","dispatchFilters","undefined","sp","current","initialSearch","get","trim","data","dispatchData","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","copiedDetail","setCopiedDetail","setSearchInput","setSelectedLevels","setModuleFilter","setDateFrom","setDateTo","setAutoRefresh","levelSegment","handleLevelSegment","hasActiveFilters","length","size","activeFilterCount","t","setTimeout","clearTimeout","nextQ","params","URLSearchParams","set","Array","from","sort","join","toString","replace","queryParams","q","module","to","limit","cancelled","result","offset","e","Error","loadError","mods","fileList","Promise","all","list","dir","id","window","setInterval","clearInterval","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","LogEntry","levelLabel","moduleLabel","LogsMessages","LogDetailLabels","Pick","Props","log","labels","LogDetailBody","t0","$","_c","lv","level","rid","requestId","sid","sessionId","t1","message","t2","t3","t4","t5","time","t6","timestamp","t7","t8","t9","t10","module","t11","t12","t13","t14","t15","t16","metadata","meta","Object","keys","length","JSON","stringify","t17","Dialog","ClipboardCopy","X","Button","LogDetailBody","LogEntry","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","log","onClose","copiedDetail","onCopiedMessage","onCopiedJson","LogsDetailDrawer","t0","$","_c","t1","t2","open","t3","Symbol","for","t4","t5","details","t6","copied","copyJson","copyMessage","text","message","navigator","clipboard","writeText","then","JSON","stringify","t7","t8","close","t9","t10","t11","level","metadata","module","requestId","sessionId","time","t12","t13","undefined","t14","Dialog","Folder","X","Button","LogFile","formatFileSize","formatTimestampFull","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","files","logDir","LogsFilesDialog","t0","$","_c","t1","Symbol","for","t2","t3","t4","logFiles","t5","t6","close","t7","t8","filesEmpty","length","map","_temp","t9","t10","t11","f","name","size","modified","Dialog","X","Button","LOG_LEVELS","LogLevel","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","dateFrom","onDateFromChange","v","dateTo","onDateToChange","selectedLevels","Set","onToggleLevel","level","LogsFiltersDialog","t0","$","_c","t1","Symbol","for","t2","t3","filtersDialogTitle","t4","t5","close","t6","t7","filtersDialogDesc","t8","timeRange","t9","from","t10","e","target","value","t11","t12","t13","to","t14","e_0","t15","t16","t17","t18","levelCustom","t19","levelCustomHint","t20","t21","levelNames","map","active","has","t22","t23","t24","t25","filtersDone","t26","t27","ListFilter","Search","X","SlidingSegmented","Button","bareInputFocusClass","selectControlBaseClass","cn","LevelSegmentValue","LogsMessages","Props","L","levelSegment","onLevelSegment","v","searchInput","onSearchInputChange","moduleFilter","onModuleFilterChange","modules","onOpenFilters","activeFilterCount","hasActiveFilters","onClearFilters","autoRefresh","LogsFiltersSection","t0","$","_c","t1","filters","t2","presetAll","value","label","t3","presetErrors","t4","presetWarnPlus","t5","presetInfoPlus","t6","presetVerbose","t7","presetOther","t8","t9","levelPresetAria","t10","searchPlaceholder","t11","Symbol","for","t12","e","target","t13","t14","t15","t16","t17","e_0","t18","module","t19","t20","t21","allModules","t22","map","_temp","t23","t24","t25","t26","filtersMore","t27","clear","t28","t29","t30","liveHint","t31","mod","ChevronDown","FileText","RefreshCw","Button","cn","LogEntry","interpolate","levelLabel","messagePreview","moduleLabel","requestIdPreview","formatTimeCompact","LogsMessages","Props","L","logs","loading","hasMore","onSelectLog","log","onLoadMore","onRefreshAll","LogsListSection","t0","$","_c","t1","length","Array","from","map","_temp","t2","noLogs","noLogsDescription","refresh","t3","showingCount","count","String","moreAvailable","lv","level","rid","requestId","trim","timestamp","message","undefined","loadMore","t4","_","i","Terminal","LogsMessages","Props","L","LogsNoToken","t0","$","_c","t1","Symbol","for","t2","title","t3","needToken","t4","Folder","RefreshCw","SlidingSegmented","Button","cn","LogsMessages","Props","L","autoRefresh","onAutoRefreshChange","live","fileCount","onOpenFiles","loading","onRefreshAll","LogsPageHeader","t0","$","_c","t1","title","t2","subtitle","t3","t4","t5","v","t6","refreshManual","value","label","t7","refreshLive","t8","t9","refreshModeAria","t10","Symbol","for","t11","t12","logFiles","t13","refresh","t14","t15","t16","t17","t18","t19","t20","t21","Popover","formatStatsLine","LOG_LEVELS","LogStats","LogsMessages","cn","SETTINGS_SHELL_POPOVER_Z","Props","L","stats","LogsStatsPopover","t0","$","_c","t1","byLevel","t2","levelNames","statsLine","t3","statsRegion","t4","Symbol","for","t5","t6","t7","t8","statsDetailTitle","t9","statsHint","t10","map","lv","n","t11","t12","t13","useLogsPage","LogsDetailDrawer","LogsFilesDialog","LogsFiltersDialog","LogsFiltersSection","LogsListSection","LogsNoToken","LogsPageHeader","LogsStatsPopover","useLocaleStore","LogsPage","$","_c","language","_temp","L","hasToken","logs","loading","error","hasMore","searchInput","setSearchInput","selectedLevels","moduleFilter","setModuleFilter","dateFrom","setDateFrom","dateTo","setDateTo","modules","files","stats","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","logDir","autoRefresh","setAutoRefresh","copiedDetail","setCopiedDetail","hasActiveFilters","activeFilterCount","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","levelSegment","handleLevelSegment","t0","t1","length","t2","t3","t4","t5","t6","t7","t8","t10","t9","t11","t12","t13","s"],"sources":["../../../../../web/src/features/logs/log-api.ts","../../../../../web/src/features/logs/log.types.ts","../../../../../web/src/features/logs/logs-page-lib.ts","../../../../../web/src/features/logs/hooks/use-logs-page.ts","../../../../../web/src/features/logs/log-detail-body.tsx","../../../../../web/src/features/logs/logs-detail-drawer.tsx","../../../../../web/src/features/logs/logs-files-dialog.tsx","../../../../../web/src/features/logs/logs-filters-dialog.tsx","../../../../../web/src/features/logs/logs-filters-section.tsx","../../../../../web/src/features/logs/logs-list-section.tsx","../../../../../web/src/features/logs/logs-no-token.tsx","../../../../../web/src/features/logs/logs-page-header.tsx","../../../../../web/src/features/logs/logs-stats-popover.tsx","../../../../../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 { LOG_LEVELS, type LogEntry, type LogLevel } from '@/features/logs/log.types';\n\nfunction logEntryTimeMs(entry: LogEntry): number {\n const t = new Date(String(entry.timestamp)).getTime();\n return Number.isFinite(t) ? t : 0;\n}\n\n/** Newest first (descending by timestamp). */\nexport function sortLogsByTimeDesc(entries: readonly LogEntry[]): LogEntry[] {\n return [...entries].sort((a, b) => logEntryTimeMs(b) - logEntryTimeMs(a));\n}\n\nexport const PAGE_LIMIT = 50;\nexport const REFRESH_MS = 5000;\n\nexport const LOG_LEVEL_SET = new Set<LogLevel>(LOG_LEVELS);\n\nexport type LevelPreset = 'all' | 'errors' | 'warnPlus' | 'infoPlus' | 'verbose' | 'custom';\nexport type 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\nexport function 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\nexport function 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\nexport function 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\nexport function segmentValueFromLevels(levels: Set<LogLevel>): LevelSegmentValue {\n const p = derivePreset(levels);\n return p === 'custom' ? 'other' : p;\n}\n\nexport function 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\nexport function interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nexport function moduleLabel(log: LogEntry): string {\n return String(log.module || log.prefix || log.service || log.extension || '—');\n}\n\nexport function 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\nexport function 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\nexport function formatTimestampFull(timestamp: string): string {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n}\n\nexport function 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\nexport function requestIdPreview(id: string): string {\n const t = id.trim();\n if (t.length <= 10) return t;\n return `${t.slice(0, 8)}…`;\n}\n\nexport function levelLabel(level: string): string {\n return String(level).toLowerCase();\n}\n\nexport function 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","import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\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 type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport {\n isSameLogLevelSet,\n levelsForPreset,\n PAGE_LIMIT,\n parseLogLevelsParam,\n REFRESH_MS,\n segmentValueFromLevels,\n sortLogsByTimeDesc,\n} from '@/features/logs/logs-page-lib';\nimport { messages } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { useGatewayStore } from '@/stores/gateway-store';\n\ntype Stats = Awaited<ReturnType<typeof getLogStats>>;\n\ntype Filters = {\n searchInput: string;\n debouncedSearch: string;\n selectedLevels: Set<LogLevel>;\n moduleFilter: string;\n dateFrom: string;\n dateTo: string;\n autoRefresh: boolean;\n};\n\ntype FiltersAction =\n | { type: 'setSearchInput'; value: string }\n | { type: 'setDebouncedSearch'; value: string }\n | { type: 'setLevels'; value: Set<LogLevel> }\n | { type: 'toggleLevel'; level: LogLevel }\n | { type: 'setModule'; value: string }\n | { type: 'setDateFrom'; value: string }\n | { type: 'setDateTo'; value: string }\n | { type: 'setAutoRefresh'; value: boolean }\n | { type: 'syncFromUrl'; payload: Omit<Filters, 'debouncedSearch'> & { debouncedSearch: string } }\n | { type: 'clearAll' };\n\nfunction filtersReducer(state: Filters, action: FiltersAction): Filters {\n switch (action.type) {\n case 'setSearchInput':\n return state.searchInput === action.value ? state : { ...state, searchInput: action.value };\n case 'setDebouncedSearch':\n return state.debouncedSearch === action.value ? state : { ...state, debouncedSearch: action.value };\n case 'setLevels':\n return isSameLogLevelSet(state.selectedLevels, action.value) ? state : { ...state, selectedLevels: action.value };\n case 'toggleLevel': {\n const next = new Set(state.selectedLevels);\n if (next.has(action.level)) next.delete(action.level);\n else next.add(action.level);\n return { ...state, selectedLevels: next };\n }\n case 'setModule':\n return state.moduleFilter === action.value ? state : { ...state, moduleFilter: action.value };\n case 'setDateFrom':\n return state.dateFrom === action.value ? state : { ...state, dateFrom: action.value };\n case 'setDateTo':\n return state.dateTo === action.value ? state : { ...state, dateTo: action.value };\n case 'setAutoRefresh':\n return state.autoRefresh === action.value ? state : { ...state, autoRefresh: action.value };\n case 'syncFromUrl': {\n const p = action.payload;\n const same =\n state.searchInput === p.searchInput &&\n state.debouncedSearch === p.debouncedSearch &&\n isSameLogLevelSet(state.selectedLevels, p.selectedLevels) &&\n state.moduleFilter === p.moduleFilter &&\n state.dateFrom === p.dateFrom &&\n state.dateTo === p.dateTo &&\n state.autoRefresh === p.autoRefresh;\n return same ? state : { ...state, ...p };\n }\n case 'clearAll':\n return {\n searchInput: '',\n debouncedSearch: '',\n selectedLevels: new Set(),\n moduleFilter: '',\n dateFrom: '',\n dateTo: '',\n autoRefresh: state.autoRefresh,\n };\n }\n}\n\ntype Data = {\n logs: LogEntry[];\n loading: boolean;\n error: string | null;\n hasMore: boolean;\n modules: string[];\n files: LogFile[];\n stats: Stats | null;\n logDir: string | null;\n};\n\ntype DataAction =\n | { type: 'queryStart' }\n | { type: 'querySuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'queryError'; message: string; resetLogs?: boolean }\n | { type: 'appendSuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'metaSuccess'; modules: string[]; stats: Stats; files: LogFile[] }\n | { type: 'filesSuccess'; files: LogFile[]; logDir: string | null }\n | { type: 'filesClear' }\n | { type: 'liveTick'; logs: LogEntry[]; hasMore: boolean; stats: Stats }\n | { type: 'refreshAllSuccess'; logs: LogEntry[]; hasMore: boolean; stats: Stats; files: LogFile[] };\n\nconst initialData: Data = {\n logs: [],\n loading: false,\n error: null,\n hasMore: false,\n modules: [],\n files: [],\n stats: null,\n logDir: null,\n};\n\nfunction dataReducer(state: Data, action: DataAction): Data {\n switch (action.type) {\n case 'queryStart':\n return { ...state, loading: true, error: null, logs: [] };\n case 'querySuccess':\n return { ...state, loading: false, logs: sortLogsByTimeDesc(action.logs), hasMore: action.hasMore };\n case 'queryError':\n return action.resetLogs\n ? { ...state, loading: false, error: action.message, logs: [], hasMore: false }\n : { ...state, loading: false, error: action.message };\n case 'appendSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc([...state.logs, ...action.logs]),\n hasMore: action.hasMore,\n };\n case 'metaSuccess':\n return { ...state, modules: action.modules, stats: action.stats, files: action.files };\n case 'filesSuccess':\n return { ...state, files: action.files, logDir: action.logDir };\n case 'filesClear':\n return { ...state, files: [] };\n case 'liveTick':\n return {\n ...state,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n };\n case 'refreshAllSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n files: action.files,\n };\n }\n}\n\nexport function useLogsPage(language: StoredLanguage) {\n const L = messages(language).logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const searchParamsInitRef = useRef(searchParams);\n const [filters, dispatchFilters] = useReducer(filtersReducer, undefined as never, (): Filters => {\n const sp = searchParamsInitRef.current;\n const initialSearch = sp.get('q') ?? '';\n return {\n searchInput: initialSearch,\n debouncedSearch: initialSearch.trim(),\n selectedLevels: parseLogLevelsParam(sp.get('level')),\n moduleFilter: sp.get('module') ?? '',\n dateFrom: sp.get('from') ?? '',\n dateTo: sp.get('to') ?? '',\n autoRefresh: sp.get('live') === '1',\n };\n });\n const [data, dispatchData] = useReducer(dataReducer, initialData);\n\n const [selectedLog, setSelectedLog] = useState<LogEntry | null>(null);\n const [filesOpen, setFilesOpen] = useState(false);\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [copiedDetail, setCopiedDetail] = useState<'json' | 'message' | null>(null);\n\n const { searchInput, debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo, autoRefresh } = filters;\n const { logs, loading, error, hasMore, modules, files, stats, logDir } = data;\n\n const setSearchInput = useCallback((value: string) => dispatchFilters({ type: 'setSearchInput', value }), []);\n const setSelectedLevels = useCallback(\n (value: Set<LogLevel>) => dispatchFilters({ type: 'setLevels', value }),\n [],\n );\n const setModuleFilter = useCallback((value: string) => dispatchFilters({ type: 'setModule', value }), []);\n const setDateFrom = useCallback((value: string) => dispatchFilters({ type: 'setDateFrom', value }), []);\n const setDateTo = useCallback((value: string) => dispatchFilters({ type: 'setDateTo', value }), []);\n const setAutoRefresh = useCallback((value: boolean) => dispatchFilters({ type: 'setAutoRefresh', value }), []);\n\n const levelSegment = useMemo(() => segmentValueFromLevels(selectedLevels), [selectedLevels]);\n\n const handleLevelSegment = (value: LevelSegmentValue) => {\n if (value === 'other') {\n setFiltersOpen(true);\n return;\n }\n dispatchFilters({ type: 'setLevels', value: levelsForPreset(value) });\n };\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(() => dispatchFilters({ type: 'setDebouncedSearch', value: searchInput.trim() }), 300);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n useEffect(() => {\n const nextQ = searchParams.get('q') ?? '';\n dispatchFilters({\n type: 'syncFromUrl',\n payload: {\n searchInput: nextQ,\n debouncedSearch: nextQ.trim(),\n selectedLevels: parseLogLevelsParam(searchParams.get('level')),\n moduleFilter: searchParams.get('module') ?? '',\n dateFrom: searchParams.get('from') ?? '',\n dateTo: searchParams.get('to') ?? '',\n autoRefresh: searchParams.get('live') === '1',\n },\n });\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 dispatchData({ type: 'queryStart' });\n (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n if (cancelled) return;\n dispatchData({ type: 'querySuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n if (!cancelled) {\n dispatchData({\n type: 'queryError',\n message: e instanceof Error ? e.message : L.loadError,\n resetLogs: true,\n });\n }\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) dispatchData({ type: 'metaSuccess', modules: mods, stats: st, files: fileList });\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) dispatchData({ type: 'filesSuccess', files: list, logDir: dir });\n } catch {\n if (!cancelled) dispatchData({ type: 'filesClear' });\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 const st = await getLogStats();\n dispatchData({ type: 'liveTick', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT, stats: 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 = () => dispatchFilters({ type: 'clearAll' });\n const toggleDialogLevel = (level: LogLevel) => dispatchFilters({ type: 'toggleLevel', level });\n\n const handleLoadMore = () => {\n if (loading || !hasMore) return;\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: logs.length });\n dispatchData({ type: 'appendSuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n const refreshAll = () => {\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n const [st, fileList] = await Promise.all([getLogStats(), getLogFiles()]);\n dispatchData({\n type: 'refreshAllSuccess',\n logs: result.logs,\n hasMore: result.logs.length === PAGE_LIMIT,\n stats: st,\n files: fileList,\n });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n return {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n setSelectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n };\n}\n","import type { LogEntry } from '@/features/logs/log.types';\nimport { levelLabel, moduleLabel } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\nexport type LogDetailLabels = Pick<\n LogsMessages,\n 'time' | 'level' | 'module' | 'message' | 'metadata' | 'requestId' | 'sessionId'\n>;\n\ntype Props = {\n log: LogEntry;\n labels: LogDetailLabels;\n};\n\nexport function LogDetailBody({ log, labels }: Props) {\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","import * as Dialog from '@radix-ui/react-dialog';\nimport { ClipboardCopy, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LogDetailBody } from '@/features/logs/log-detail-body';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n log: LogEntry | null;\n onClose: () => void;\n copiedDetail: 'json' | 'message' | null;\n onCopiedMessage: () => void;\n onCopiedJson: () => void;\n};\n\nexport function LogsDetailDrawer({ L, log, onClose, copiedDetail, onCopiedMessage, onCopiedJson }: Props) {\n return (\n <Dialog.Root open={log !== null} onOpenChange={(open) => !open && onClose()}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 flex size-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\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 {log ? (\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 log.message === 'string' ? log.message : '';\n void navigator.clipboard.writeText(text).then(onCopiedMessage);\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.writeText(JSON.stringify(log, null, 2)).then(onCopiedJson);\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=\"size-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 p-4 font-mono text-sm leading-relaxed\">\n {log ? (\n <LogDetailBody\n log={log}\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}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Folder, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { LogFile } from '@/features/logs/log.types';\nimport { formatFileSize, formatTimestampFull } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n files: LogFile[];\n logDir: string | null;\n};\n\nexport function LogsFilesDialog({ L, open, onOpenChange, files, logDir }: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 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 SETTINGS_SHELL_CONTENT_Z,\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=\"size-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\">\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 );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LOG_LEVELS, type LogLevel } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n dateFrom: string;\n onDateFromChange: (v: string) => void;\n dateTo: string;\n onDateToChange: (v: string) => void;\n selectedLevels: Set<LogLevel>;\n onToggleLevel: (level: LogLevel) => void;\n};\n\nexport function LogsFiltersDialog({\n L,\n open,\n onOpenChange,\n dateFrom,\n onDateFromChange,\n dateTo,\n onDateToChange,\n selectedLevels,\n onToggleLevel,\n}: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 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 SETTINGS_SHELL_CONTENT_Z,\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=\"size-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 p-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) => onDateFromChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-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) => onDateToChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-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={() => onToggleLevel(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={() => onOpenChange(false)}>\n {L.filtersDone}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { ListFilter, Search, X } from 'lucide-react';\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 type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n levelSegment: LevelSegmentValue;\n onLevelSegment: (v: LevelSegmentValue) => void;\n searchInput: string;\n onSearchInputChange: (v: string) => void;\n moduleFilter: string;\n onModuleFilterChange: (v: string) => void;\n modules: string[];\n onOpenFilters: () => void;\n activeFilterCount: number;\n hasActiveFilters: boolean;\n onClearFilters: () => void;\n autoRefresh: boolean;\n};\n\nexport function LogsFiltersSection({\n L,\n levelSegment,\n onLevelSegment,\n searchInput,\n onSearchInputChange,\n moduleFilter,\n onModuleFilterChange,\n modules,\n onOpenFilters,\n activeFilterCount,\n hasActiveFilters,\n onClearFilters,\n autoRefresh,\n}: Props) {\n return (\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={onLevelSegment}\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) => onSearchInputChange(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) => onModuleFilterChange(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={onOpenFilters}\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={onClearFilters}>\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}","import { ChevronDown, FileText, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport {\n interpolate,\n levelLabel,\n messagePreview,\n moduleLabel,\n requestIdPreview,\n formatTimeCompact,\n} from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n logs: LogEntry[];\n loading: boolean;\n hasMore: boolean;\n onSelectLog: (log: LogEntry) => void;\n onLoadMore: () => void;\n onRefreshAll: () => void;\n};\n\nexport function LogsListSection({ L, logs, loading, hasMore, onSelectLog, onLoadMore, onRefreshAll }: Props) {\n return (\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={onRefreshAll}>\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 >\n {logs.map((log) => {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId.trim() : '';\n return (\n <li key={`${log.timestamp}-${log.requestId ?? log.message ?? ''}`}>\n <button\n type=\"button\"\n onClick={() => onSelectLog(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 type=\"button\" variant=\"secondary\" className=\"gap-2\" disabled={loading} onClick={onLoadMore}>\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 );\n}\n","import { Terminal } from 'lucide-react';\n\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = { L: LogsMessages };\n\nexport function LogsNoToken({ L }: Props) {\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","import { Folder, RefreshCw } from 'lucide-react';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n autoRefresh: boolean;\n onAutoRefreshChange: (live: boolean) => void;\n fileCount: number;\n onOpenFiles: () => void;\n loading: boolean;\n onRefreshAll: () => void;\n};\n\nexport function LogsPageHeader({\n L,\n autoRefresh,\n onAutoRefreshChange,\n fileCount,\n onOpenFiles,\n loading,\n onRefreshAll,\n}: Props) {\n return (\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) => onAutoRefreshChange(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={onOpenFiles}\n >\n <Folder className=\"size-4\" strokeWidth={1.75} />\n {fileCount > 0 ? (\n <span className=\"rounded-full bg-surface-hover px-1.5 text-xs text-fg-muted\">{fileCount}</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={onRefreshAll}\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}\n","import * as Popover from '@radix-ui/react-popover';\n\nimport { formatStatsLine } from '@/features/logs/logs-page-lib';\nimport { LOG_LEVELS, type LogStats } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_POPOVER_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n stats: LogStats;\n};\n\nexport function LogsStatsPopover({ L, stats }: Props) {\n const statsLine = formatStatsLine(stats.byLevel ?? {}, L.levelNames);\n if (!statsLine) return null;\n\n return (\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 'w-[min(calc(100vw-2rem),20rem)] rounded-xl border border-edge bg-surface-panel p-3 shadow-popover outline-none',\n SETTINGS_SHELL_POPOVER_Z,\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\">\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 );\n}\n","import { useLogsPage } from '@/features/logs/hooks/use-logs-page';\nimport { LogsDetailDrawer } from '@/features/logs/logs-detail-drawer';\nimport { LogsFilesDialog } from '@/features/logs/logs-files-dialog';\nimport { LogsFiltersDialog } from '@/features/logs/logs-filters-dialog';\nimport { LogsFiltersSection } from '@/features/logs/logs-filters-section';\nimport { LogsListSection } from '@/features/logs/logs-list-section';\nimport { LogsNoToken } from '@/features/logs/logs-no-token';\nimport { LogsPageHeader } from '@/features/logs/logs-page-header';\nimport { LogsStatsPopover } from '@/features/logs/logs-stats-popover';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nexport function LogsPage() {\n const language = useLocaleStore((s) => s.language);\n const {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n } = useLogsPage(language);\n\n if (!hasToken) {\n return <LogsNoToken L={L} />;\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 <LogsPageHeader\n L={L}\n autoRefresh={autoRefresh}\n onAutoRefreshChange={setAutoRefresh}\n fileCount={files.length}\n onOpenFiles={() => setFilesOpen(true)}\n loading={loading}\n onRefreshAll={refreshAll}\n />\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 ? <LogsStatsPopover L={L} stats={stats} /> : null}\n\n <LogsFiltersSection\n L={L}\n levelSegment={levelSegment}\n onLevelSegment={handleLevelSegment}\n searchInput={searchInput}\n onSearchInputChange={setSearchInput}\n moduleFilter={moduleFilter}\n onModuleFilterChange={setModuleFilter}\n modules={modules}\n onOpenFilters={() => setFiltersOpen(true)}\n activeFilterCount={activeFilterCount}\n hasActiveFilters={hasActiveFilters}\n onClearFilters={clearFilters}\n autoRefresh={autoRefresh}\n />\n\n <LogsListSection\n L={L}\n logs={logs}\n loading={loading}\n hasMore={hasMore}\n onSelectLog={setSelectedLog}\n onLoadMore={handleLoadMore}\n onRefreshAll={refreshAll}\n />\n\n <LogsFiltersDialog\n L={L}\n open={filtersOpen}\n onOpenChange={setFiltersOpen}\n dateFrom={dateFrom}\n onDateFromChange={setDateFrom}\n dateTo={dateTo}\n onDateToChange={setDateTo}\n selectedLevels={selectedLevels}\n onToggleLevel={toggleDialogLevel}\n />\n\n <LogsDetailDrawer\n L={L}\n log={selectedLog}\n onClose={() => setSelectedLog(null)}\n copiedDetail={copiedDetail}\n onCopiedMessage={() => setCopiedDetail('message')}\n onCopiedJson={() => setCopiedDetail('json')}\n />\n\n <LogsFilesDialog L={L} open={filesOpen} onOpenChange={setFilesOpen} files={files} logDir={logDir} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"logs-page-CfGDv4k7.js","names":["fetchJson","apiUrl","LogEntry","LogFile","LogQuery","LogStats","buildQueryString","query","params","URLSearchParams","level","length","set","join","from","to","q","module","limit","String","offset","qs","toString","queryLogs","Promise","logs","count","getLogFiles","result","files","getLogModules","modules","getLogStats","raw","Partial","byLevel","getLogDir","dir","LogLevel","LOG_LEVELS","LogEntry","timestamp","level","message","module","prefix","service","extension","requestId","sessionId","userId","meta","Record","key","LogQuery","from","to","q","limit","offset","LogFile","name","size","modified","LogStats","byLevel","Partial","LOG_LEVELS","LogEntry","LogLevel","logEntryTimeMs","entry","t","Date","String","timestamp","getTime","Number","isFinite","sortLogsByTimeDesc","entries","sort","a","b","PAGE_LIMIT","REFRESH_MS","LOG_LEVEL_SET","Set","LevelPreset","LevelSegmentValue","Exclude","PRESET_ERRORS","PRESET_WARN_PLUS","PRESET_INFO_PLUS","parseLogLevelsParam","raw","out","part","split","level","trim","has","add","isSameLogLevelSet","size","setMatchesLevels","s","levels","length","every","l","derivePreset","segmentValueFromLevels","p","levelsForPreset","preset","interpolate","template","params","Record","replace","_","key","moduleLabel","log","module","prefix","service","extension","messagePreview","message","JSON","stringify","formatTimeCompact","date","toLocaleTimeString","undefined","hour","minute","second","hour12","formatTimestampFull","toLocaleString","formatFileSize","bytes","toFixed","requestIdPreview","id","slice","levelLabel","toLowerCase","formatStatsLine","byLevel","Partial","labels","parts","lv","n","push","join","useCallback","useEffect","useMemo","useReducer","useRef","useState","useSearchParams","getLogDir","getLogFiles","getLogModules","getLogStats","queryLogs","LogEntry","LogFile","LogLevel","LevelSegmentValue","isSameLogLevelSet","levelsForPreset","PAGE_LIMIT","parseLogLevelsParam","REFRESH_MS","segmentValueFromLevels","sortLogsByTimeDesc","messages","StoredLanguage","useGatewayStore","Stats","Awaited","ReturnType","Filters","searchInput","debouncedSearch","selectedLevels","Set","moduleFilter","dateFrom","dateTo","autoRefresh","FiltersAction","type","value","level","payload","Omit","filtersReducer","state","action","next","has","delete","add","p","same","Data","logs","loading","error","hasMore","modules","files","stats","logDir","DataAction","message","resetLogs","initialData","dataReducer","useLogsPage","language","L","token","st","hasToken","Boolean","searchParams","setSearchParams","searchParamsInitRef","filters","dispatchFilters","undefined","sp","current","initialSearch","get","trim","data","dispatchData","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","copiedDetail","setCopiedDetail","setSearchInput","setSelectedLevels","setModuleFilter","setDateFrom","setDateTo","setAutoRefresh","levelSegment","handleLevelSegment","hasActiveFilters","length","size","activeFilterCount","t","setTimeout","clearTimeout","nextQ","params","URLSearchParams","set","Array","from","sort","join","toString","replace","queryParams","q","module","to","limit","cancelled","result","offset","e","Error","loadError","mods","fileList","Promise","all","list","dir","id","window","setInterval","clearInterval","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","LogEntry","levelLabel","moduleLabel","LogsMessages","LogDetailLabels","Pick","Props","log","labels","LogDetailBody","t0","$","_c","lv","level","rid","requestId","sid","sessionId","t1","message","t2","t3","t4","t5","time","t6","timestamp","t7","t8","t9","t10","module","t11","t12","t13","t14","t15","t16","metadata","meta","Object","keys","length","JSON","stringify","t17","Dialog","ClipboardCopy","X","Button","LogDetailBody","LogEntry","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","log","onClose","copiedDetail","onCopiedMessage","onCopiedJson","LogsDetailDrawer","t0","$","_c","t1","t2","open","t3","Symbol","for","t4","t5","details","t6","copied","copyJson","copyMessage","text","message","navigator","clipboard","writeText","then","JSON","stringify","t7","t8","close","t9","t10","t11","level","metadata","module","requestId","sessionId","time","t12","t13","undefined","t14","Dialog","Folder","X","Button","LogFile","formatFileSize","formatTimestampFull","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","files","logDir","LogsFilesDialog","t0","$","_c","t1","Symbol","for","t2","t3","t4","logFiles","t5","t6","close","t7","t8","filesEmpty","length","map","_temp","t9","t10","t11","f","name","size","modified","Dialog","X","Button","LOG_LEVELS","LogLevel","LogsMessages","cn","SETTINGS_SHELL_CONTENT_Z","SETTINGS_SHELL_OVERLAY_Z","Props","L","open","onOpenChange","dateFrom","onDateFromChange","v","dateTo","onDateToChange","selectedLevels","Set","onToggleLevel","level","LogsFiltersDialog","t0","$","_c","t1","Symbol","for","t2","t3","filtersDialogTitle","t4","t5","close","t6","t7","filtersDialogDesc","t8","timeRange","t9","from","t10","e","target","value","t11","t12","t13","to","t14","e_0","t15","t16","t17","t18","levelCustom","t19","levelCustomHint","t20","t21","levelNames","map","active","has","t22","t23","t24","t25","filtersDone","t26","t27","ListFilter","Search","X","SlidingSegmented","Button","bareInputFocusClass","selectControlBaseClass","cn","LevelSegmentValue","LogsMessages","Props","L","levelSegment","onLevelSegment","v","searchInput","onSearchInputChange","moduleFilter","onModuleFilterChange","modules","onOpenFilters","activeFilterCount","hasActiveFilters","onClearFilters","autoRefresh","LogsFiltersSection","t0","$","_c","t1","filters","t2","presetAll","value","label","t3","presetErrors","t4","presetWarnPlus","t5","presetInfoPlus","t6","presetVerbose","t7","presetOther","t8","t9","levelPresetAria","t10","searchPlaceholder","t11","Symbol","for","t12","e","target","t13","t14","t15","t16","t17","e_0","t18","module","t19","t20","t21","allModules","t22","map","_temp","t23","t24","t25","t26","filtersMore","t27","clear","t28","t29","t30","liveHint","t31","mod","ChevronDown","FileText","RefreshCw","Button","cn","LogEntry","interpolate","levelLabel","messagePreview","moduleLabel","requestIdPreview","formatTimeCompact","LogsMessages","Props","L","logs","loading","hasMore","onSelectLog","log","onLoadMore","onRefreshAll","LogsListSection","t0","$","_c","t1","length","Array","from","map","_temp","t2","noLogs","noLogsDescription","refresh","t3","showingCount","count","String","moreAvailable","lv","level","rid","requestId","trim","timestamp","message","undefined","loadMore","t4","_","i","Terminal","LogsMessages","Props","L","LogsNoToken","t0","$","_c","t1","Symbol","for","t2","title","t3","needToken","t4","Folder","RefreshCw","SlidingSegmented","Button","cn","LogsMessages","Props","L","autoRefresh","onAutoRefreshChange","live","fileCount","onOpenFiles","loading","onRefreshAll","LogsPageHeader","t0","$","_c","t1","title","t2","subtitle","t3","t4","t5","v","t6","refreshManual","value","label","t7","refreshLive","t8","t9","refreshModeAria","t10","Symbol","for","t11","t12","logFiles","t13","refresh","t14","t15","t16","t17","t18","t19","t20","t21","Popover","formatStatsLine","LOG_LEVELS","LogStats","LogsMessages","cn","SETTINGS_SHELL_POPOVER_Z","Props","L","stats","LogsStatsPopover","t0","$","_c","t1","byLevel","t2","levelNames","statsLine","t3","statsRegion","t4","Symbol","for","t5","t6","t7","t8","statsDetailTitle","t9","statsHint","t10","map","lv","n","t11","t12","t13","useLogsPage","LogsDetailDrawer","LogsFilesDialog","LogsFiltersDialog","LogsFiltersSection","LogsListSection","LogsNoToken","LogsPageHeader","LogsStatsPopover","useLocaleStore","LogsPage","$","_c","language","_temp","L","hasToken","logs","loading","error","hasMore","searchInput","setSearchInput","selectedLevels","moduleFilter","setModuleFilter","dateFrom","setDateFrom","dateTo","setDateTo","modules","files","stats","selectedLog","setSelectedLog","filesOpen","setFilesOpen","filtersOpen","setFiltersOpen","logDir","autoRefresh","setAutoRefresh","copiedDetail","setCopiedDetail","hasActiveFilters","activeFilterCount","clearFilters","toggleDialogLevel","handleLoadMore","refreshAll","levelSegment","handleLevelSegment","t0","t1","length","t2","t3","t4","t5","t6","t7","t8","t10","t9","t11","t12","t13","s"],"sources":["../../../../../web/src/features/logs/log-api.ts","../../../../../web/src/features/logs/log.types.ts","../../../../../web/src/features/logs/logs-page-lib.ts","../../../../../web/src/features/logs/hooks/use-logs-page.ts","../../../../../web/src/features/logs/log-detail-body.tsx","../../../../../web/src/features/logs/logs-detail-drawer.tsx","../../../../../web/src/features/logs/logs-files-dialog.tsx","../../../../../web/src/features/logs/logs-filters-dialog.tsx","../../../../../web/src/features/logs/logs-filters-section.tsx","../../../../../web/src/features/logs/logs-list-section.tsx","../../../../../web/src/features/logs/logs-no-token.tsx","../../../../../web/src/features/logs/logs-page-header.tsx","../../../../../web/src/features/logs/logs-stats-popover.tsx","../../../../../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 { LOG_LEVELS, type LogEntry, type LogLevel } from '@/features/logs/log.types';\n\nfunction logEntryTimeMs(entry: LogEntry): number {\n const t = new Date(String(entry.timestamp)).getTime();\n return Number.isFinite(t) ? t : 0;\n}\n\n/** Newest first (descending by timestamp). */\nexport function sortLogsByTimeDesc(entries: readonly LogEntry[]): LogEntry[] {\n return [...entries].sort((a, b) => logEntryTimeMs(b) - logEntryTimeMs(a));\n}\n\nexport const PAGE_LIMIT = 50;\nexport const REFRESH_MS = 5000;\n\nexport const LOG_LEVEL_SET = new Set<LogLevel>(LOG_LEVELS);\n\nexport type LevelPreset = 'all' | 'errors' | 'warnPlus' | 'infoPlus' | 'verbose' | 'custom';\nexport type 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\nexport function 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\nexport function 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\nexport function 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\nexport function segmentValueFromLevels(levels: Set<LogLevel>): LevelSegmentValue {\n const p = derivePreset(levels);\n return p === 'custom' ? 'other' : p;\n}\n\nexport function 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\nexport function interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nexport function moduleLabel(log: LogEntry): string {\n return String(log.module || log.prefix || log.service || log.extension || '—');\n}\n\nexport function 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\nexport function 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\nexport function formatTimestampFull(timestamp: string): string {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n}\n\nexport function 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\nexport function requestIdPreview(id: string): string {\n const t = id.trim();\n if (t.length <= 10) return t;\n return `${t.slice(0, 8)}…`;\n}\n\nexport function levelLabel(level: string): string {\n return String(level).toLowerCase();\n}\n\nexport function 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","import { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\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 type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport {\n isSameLogLevelSet,\n levelsForPreset,\n PAGE_LIMIT,\n parseLogLevelsParam,\n REFRESH_MS,\n segmentValueFromLevels,\n sortLogsByTimeDesc,\n} from '@/features/logs/logs-page-lib';\nimport { messages } from '@/i18n/messages';\nimport type { StoredLanguage } from '@/lib/storage';\nimport { useGatewayStore } from '@/stores/gateway-store';\n\ntype Stats = Awaited<ReturnType<typeof getLogStats>>;\n\ntype Filters = {\n searchInput: string;\n debouncedSearch: string;\n selectedLevels: Set<LogLevel>;\n moduleFilter: string;\n dateFrom: string;\n dateTo: string;\n autoRefresh: boolean;\n};\n\ntype FiltersAction =\n | { type: 'setSearchInput'; value: string }\n | { type: 'setDebouncedSearch'; value: string }\n | { type: 'setLevels'; value: Set<LogLevel> }\n | { type: 'toggleLevel'; level: LogLevel }\n | { type: 'setModule'; value: string }\n | { type: 'setDateFrom'; value: string }\n | { type: 'setDateTo'; value: string }\n | { type: 'setAutoRefresh'; value: boolean }\n | { type: 'syncFromUrl'; payload: Omit<Filters, 'debouncedSearch'> & { debouncedSearch: string } }\n | { type: 'clearAll' };\n\nfunction filtersReducer(state: Filters, action: FiltersAction): Filters {\n switch (action.type) {\n case 'setSearchInput':\n return state.searchInput === action.value ? state : { ...state, searchInput: action.value };\n case 'setDebouncedSearch':\n return state.debouncedSearch === action.value ? state : { ...state, debouncedSearch: action.value };\n case 'setLevels':\n return isSameLogLevelSet(state.selectedLevels, action.value) ? state : { ...state, selectedLevels: action.value };\n case 'toggleLevel': {\n const next = new Set(state.selectedLevels);\n if (next.has(action.level)) next.delete(action.level);\n else next.add(action.level);\n return { ...state, selectedLevels: next };\n }\n case 'setModule':\n return state.moduleFilter === action.value ? state : { ...state, moduleFilter: action.value };\n case 'setDateFrom':\n return state.dateFrom === action.value ? state : { ...state, dateFrom: action.value };\n case 'setDateTo':\n return state.dateTo === action.value ? state : { ...state, dateTo: action.value };\n case 'setAutoRefresh':\n return state.autoRefresh === action.value ? state : { ...state, autoRefresh: action.value };\n case 'syncFromUrl': {\n const p = action.payload;\n const same =\n state.searchInput === p.searchInput &&\n state.debouncedSearch === p.debouncedSearch &&\n isSameLogLevelSet(state.selectedLevels, p.selectedLevels) &&\n state.moduleFilter === p.moduleFilter &&\n state.dateFrom === p.dateFrom &&\n state.dateTo === p.dateTo &&\n state.autoRefresh === p.autoRefresh;\n return same ? state : { ...state, ...p };\n }\n case 'clearAll':\n return {\n searchInput: '',\n debouncedSearch: '',\n selectedLevels: new Set(),\n moduleFilter: '',\n dateFrom: '',\n dateTo: '',\n autoRefresh: state.autoRefresh,\n };\n }\n}\n\ntype Data = {\n logs: LogEntry[];\n loading: boolean;\n error: string | null;\n hasMore: boolean;\n modules: string[];\n files: LogFile[];\n stats: Stats | null;\n logDir: string | null;\n};\n\ntype DataAction =\n | { type: 'queryStart' }\n | { type: 'querySuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'queryError'; message: string; resetLogs?: boolean }\n | { type: 'appendSuccess'; logs: LogEntry[]; hasMore: boolean }\n | { type: 'metaSuccess'; modules: string[]; stats: Stats; files: LogFile[] }\n | { type: 'filesSuccess'; files: LogFile[]; logDir: string | null }\n | { type: 'filesClear' }\n | { type: 'liveTick'; logs: LogEntry[]; hasMore: boolean; stats: Stats }\n | { type: 'refreshAllSuccess'; logs: LogEntry[]; hasMore: boolean; stats: Stats; files: LogFile[] };\n\nconst initialData: Data = {\n logs: [],\n loading: false,\n error: null,\n hasMore: false,\n modules: [],\n files: [],\n stats: null,\n logDir: null,\n};\n\nfunction dataReducer(state: Data, action: DataAction): Data {\n switch (action.type) {\n case 'queryStart':\n return { ...state, loading: true, error: null, logs: [] };\n case 'querySuccess':\n return { ...state, loading: false, logs: sortLogsByTimeDesc(action.logs), hasMore: action.hasMore };\n case 'queryError':\n return action.resetLogs\n ? { ...state, loading: false, error: action.message, logs: [], hasMore: false }\n : { ...state, loading: false, error: action.message };\n case 'appendSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc([...state.logs, ...action.logs]),\n hasMore: action.hasMore,\n };\n case 'metaSuccess':\n return { ...state, modules: action.modules, stats: action.stats, files: action.files };\n case 'filesSuccess':\n return { ...state, files: action.files, logDir: action.logDir };\n case 'filesClear':\n return { ...state, files: [] };\n case 'liveTick':\n return {\n ...state,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n };\n case 'refreshAllSuccess':\n return {\n ...state,\n loading: false,\n logs: sortLogsByTimeDesc(action.logs),\n hasMore: action.hasMore,\n stats: action.stats,\n files: action.files,\n };\n }\n}\n\nexport function useLogsPage(language: StoredLanguage) {\n const L = messages(language).logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const searchParamsInitRef = useRef(searchParams);\n const [filters, dispatchFilters] = useReducer(filtersReducer, undefined as never, (): Filters => {\n const sp = searchParamsInitRef.current;\n const initialSearch = sp.get('q') ?? '';\n return {\n searchInput: initialSearch,\n debouncedSearch: initialSearch.trim(),\n selectedLevels: parseLogLevelsParam(sp.get('level')),\n moduleFilter: sp.get('module') ?? '',\n dateFrom: sp.get('from') ?? '',\n dateTo: sp.get('to') ?? '',\n autoRefresh: sp.get('live') === '1',\n };\n });\n const [data, dispatchData] = useReducer(dataReducer, initialData);\n\n const [selectedLog, setSelectedLog] = useState<LogEntry | null>(null);\n const [filesOpen, setFilesOpen] = useState(false);\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [copiedDetail, setCopiedDetail] = useState<'json' | 'message' | null>(null);\n\n const { searchInput, debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo, autoRefresh } = filters;\n const { logs, loading, error, hasMore, modules, files, stats, logDir } = data;\n\n const setSearchInput = useCallback((value: string) => dispatchFilters({ type: 'setSearchInput', value }), []);\n const setSelectedLevels = useCallback(\n (value: Set<LogLevel>) => dispatchFilters({ type: 'setLevels', value }),\n [],\n );\n const setModuleFilter = useCallback((value: string) => dispatchFilters({ type: 'setModule', value }), []);\n const setDateFrom = useCallback((value: string) => dispatchFilters({ type: 'setDateFrom', value }), []);\n const setDateTo = useCallback((value: string) => dispatchFilters({ type: 'setDateTo', value }), []);\n const setAutoRefresh = useCallback((value: boolean) => dispatchFilters({ type: 'setAutoRefresh', value }), []);\n\n const levelSegment = useMemo(() => segmentValueFromLevels(selectedLevels), [selectedLevels]);\n\n const handleLevelSegment = (value: LevelSegmentValue) => {\n if (value === 'other') {\n setFiltersOpen(true);\n return;\n }\n dispatchFilters({ type: 'setLevels', value: levelsForPreset(value) });\n };\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(() => dispatchFilters({ type: 'setDebouncedSearch', value: searchInput.trim() }), 300);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n useEffect(() => {\n const nextQ = searchParams.get('q') ?? '';\n dispatchFilters({\n type: 'syncFromUrl',\n payload: {\n searchInput: nextQ,\n debouncedSearch: nextQ.trim(),\n selectedLevels: parseLogLevelsParam(searchParams.get('level')),\n moduleFilter: searchParams.get('module') ?? '',\n dateFrom: searchParams.get('from') ?? '',\n dateTo: searchParams.get('to') ?? '',\n autoRefresh: searchParams.get('live') === '1',\n },\n });\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 dispatchData({ type: 'queryStart' });\n (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n if (cancelled) return;\n dispatchData({ type: 'querySuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n if (!cancelled) {\n dispatchData({\n type: 'queryError',\n message: e instanceof Error ? e.message : L.loadError,\n resetLogs: true,\n });\n }\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) dispatchData({ type: 'metaSuccess', modules: mods, stats: st, files: fileList });\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) dispatchData({ type: 'filesSuccess', files: list, logDir: dir });\n } catch {\n if (!cancelled) dispatchData({ type: 'filesClear' });\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 const st = await getLogStats();\n dispatchData({ type: 'liveTick', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT, stats: 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 = () => dispatchFilters({ type: 'clearAll' });\n const toggleDialogLevel = (level: LogLevel) => dispatchFilters({ type: 'toggleLevel', level });\n\n const handleLoadMore = () => {\n if (loading || !hasMore) return;\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: logs.length });\n dispatchData({ type: 'appendSuccess', logs: result.logs, hasMore: result.logs.length === PAGE_LIMIT });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n const refreshAll = () => {\n void (async () => {\n dispatchData({ type: 'queryStart' });\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n const [st, fileList] = await Promise.all([getLogStats(), getLogFiles()]);\n dispatchData({\n type: 'refreshAllSuccess',\n logs: result.logs,\n hasMore: result.logs.length === PAGE_LIMIT,\n stats: st,\n files: fileList,\n });\n } catch (e) {\n dispatchData({ type: 'queryError', message: e instanceof Error ? e.message : L.loadError });\n }\n })();\n };\n\n return {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n setSelectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n };\n}\n","import type { LogEntry } from '@/features/logs/log.types';\nimport { levelLabel, moduleLabel } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\nexport type LogDetailLabels = Pick<\n LogsMessages,\n 'time' | 'level' | 'module' | 'message' | 'metadata' | 'requestId' | 'sessionId'\n>;\n\ntype Props = {\n log: LogEntry;\n labels: LogDetailLabels;\n};\n\nexport function LogDetailBody({ log, labels }: Props) {\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","import * as Dialog from '@radix-ui/react-dialog';\nimport { ClipboardCopy, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LogDetailBody } from '@/features/logs/log-detail-body';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n log: LogEntry | null;\n onClose: () => void;\n copiedDetail: 'json' | 'message' | null;\n onCopiedMessage: () => void;\n onCopiedJson: () => void;\n};\n\nexport function LogsDetailDrawer({ L, log, onClose, copiedDetail, onCopiedMessage, onCopiedJson }: Props) {\n return (\n <Dialog.Root open={log !== null} onOpenChange={(open) => !open && onClose()}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 flex size-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n SETTINGS_SHELL_CONTENT_Z,\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 {log ? (\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 log.message === 'string' ? log.message : '';\n void navigator.clipboard.writeText(text).then(onCopiedMessage);\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.writeText(JSON.stringify(log, null, 2)).then(onCopiedJson);\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=\"size-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 p-4 font-mono text-sm leading-relaxed\">\n {log ? (\n <LogDetailBody\n log={log}\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}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { Folder, X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport type { LogFile } from '@/features/logs/log.types';\nimport { formatFileSize, formatTimestampFull } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n files: LogFile[];\n logDir: string | null;\n};\n\nexport function LogsFilesDialog({ L, open, onOpenChange, files, logDir }: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 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 SETTINGS_SHELL_CONTENT_Z,\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=\"size-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\">\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 );\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { LOG_LEVELS, type LogLevel } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_CONTENT_Z, SETTINGS_SHELL_OVERLAY_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n dateFrom: string;\n onDateFromChange: (v: string) => void;\n dateTo: string;\n onDateToChange: (v: string) => void;\n selectedLevels: Set<LogLevel>;\n onToggleLevel: (level: LogLevel) => void;\n};\n\nexport function LogsFiltersDialog({\n L,\n open,\n onOpenChange,\n dateFrom,\n onDateFromChange,\n dateTo,\n onDateToChange,\n selectedLevels,\n onToggleLevel,\n}: Props) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay\n className={cn('xopc-dialog-overlay fixed inset-0 bg-scrim', SETTINGS_SHELL_OVERLAY_Z)}\n />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 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 SETTINGS_SHELL_CONTENT_Z,\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=\"size-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 p-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) => onDateFromChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-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) => onDateToChange(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base p-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={() => onToggleLevel(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={() => onOpenChange(false)}>\n {L.filtersDone}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","import { ListFilter, Search, X } from 'lucide-react';\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 type { LevelSegmentValue } from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n levelSegment: LevelSegmentValue;\n onLevelSegment: (v: LevelSegmentValue) => void;\n searchInput: string;\n onSearchInputChange: (v: string) => void;\n moduleFilter: string;\n onModuleFilterChange: (v: string) => void;\n modules: string[];\n onOpenFilters: () => void;\n activeFilterCount: number;\n hasActiveFilters: boolean;\n onClearFilters: () => void;\n autoRefresh: boolean;\n};\n\nexport function LogsFiltersSection({\n L,\n levelSegment,\n onLevelSegment,\n searchInput,\n onSearchInputChange,\n moduleFilter,\n onModuleFilterChange,\n modules,\n onOpenFilters,\n activeFilterCount,\n hasActiveFilters,\n onClearFilters,\n autoRefresh,\n}: Props) {\n return (\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={onLevelSegment}\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) => onSearchInputChange(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) => onModuleFilterChange(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={onOpenFilters}\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={onClearFilters}>\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}","import { ChevronDown, FileText, RefreshCw } from 'lucide-react';\n\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogEntry } from '@/features/logs/log.types';\nimport {\n interpolate,\n levelLabel,\n messagePreview,\n moduleLabel,\n requestIdPreview,\n formatTimeCompact,\n} from '@/features/logs/logs-page-lib';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n logs: LogEntry[];\n loading: boolean;\n hasMore: boolean;\n onSelectLog: (log: LogEntry) => void;\n onLoadMore: () => void;\n onRefreshAll: () => void;\n};\n\nexport function LogsListSection({ L, logs, loading, hasMore, onSelectLog, onLoadMore, onRefreshAll }: Props) {\n return (\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={onRefreshAll}>\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 >\n {logs.map((log) => {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId.trim() : '';\n return (\n <li key={`${log.timestamp}-${log.requestId ?? log.message ?? ''}`}>\n <button\n type=\"button\"\n onClick={() => onSelectLog(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 type=\"button\" variant=\"secondary\" className=\"gap-2\" disabled={loading} onClick={onLoadMore}>\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 );\n}\n","import { Terminal } from 'lucide-react';\n\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = { L: LogsMessages };\n\nexport function LogsNoToken({ L }: Props) {\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","import { Folder, RefreshCw } from 'lucide-react';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { cn } from '@/lib/cn';\nimport type { LogsMessages } from '@/i18n/messages';\n\ntype Props = {\n L: LogsMessages;\n autoRefresh: boolean;\n onAutoRefreshChange: (live: boolean) => void;\n fileCount: number;\n onOpenFiles: () => void;\n loading: boolean;\n onRefreshAll: () => void;\n};\n\nexport function LogsPageHeader({\n L,\n autoRefresh,\n onAutoRefreshChange,\n fileCount,\n onOpenFiles,\n loading,\n onRefreshAll,\n}: Props) {\n return (\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) => onAutoRefreshChange(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={onOpenFiles}\n >\n <Folder className=\"size-4\" strokeWidth={1.75} />\n {fileCount > 0 ? (\n <span className=\"rounded-full bg-surface-hover px-1.5 text-xs text-fg-muted\">{fileCount}</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={onRefreshAll}\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}\n","import * as Popover from '@radix-ui/react-popover';\n\nimport { formatStatsLine } from '@/features/logs/logs-page-lib';\nimport { LOG_LEVELS, type LogStats } from '@/features/logs/log.types';\nimport type { LogsMessages } from '@/i18n/messages';\nimport { cn } from '@/lib/cn';\nimport { SETTINGS_SHELL_POPOVER_Z } from '@/lib/settings-shell-dialog-layer';\n\ntype Props = {\n L: LogsMessages;\n stats: LogStats;\n};\n\nexport function LogsStatsPopover({ L, stats }: Props) {\n const statsLine = formatStatsLine(stats.byLevel ?? {}, L.levelNames);\n if (!statsLine) return null;\n\n return (\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 'w-[min(calc(100vw-2rem),20rem)] rounded-xl border border-edge bg-surface-panel p-3 shadow-popover outline-none',\n SETTINGS_SHELL_POPOVER_Z,\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\">\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 );\n}\n","import { useLogsPage } from '@/features/logs/hooks/use-logs-page';\nimport { LogsDetailDrawer } from '@/features/logs/logs-detail-drawer';\nimport { LogsFilesDialog } from '@/features/logs/logs-files-dialog';\nimport { LogsFiltersDialog } from '@/features/logs/logs-filters-dialog';\nimport { LogsFiltersSection } from '@/features/logs/logs-filters-section';\nimport { LogsListSection } from '@/features/logs/logs-list-section';\nimport { LogsNoToken } from '@/features/logs/logs-no-token';\nimport { LogsPageHeader } from '@/features/logs/logs-page-header';\nimport { LogsStatsPopover } from '@/features/logs/logs-stats-popover';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nexport function LogsPage() {\n const language = useLocaleStore((s) => s.language);\n const {\n L,\n hasToken,\n logs,\n loading,\n error,\n hasMore,\n searchInput,\n setSearchInput,\n selectedLevels,\n moduleFilter,\n setModuleFilter,\n dateFrom,\n setDateFrom,\n dateTo,\n setDateTo,\n modules,\n files,\n stats,\n selectedLog,\n setSelectedLog,\n filesOpen,\n setFilesOpen,\n filtersOpen,\n setFiltersOpen,\n logDir,\n autoRefresh,\n setAutoRefresh,\n copiedDetail,\n setCopiedDetail,\n hasActiveFilters,\n activeFilterCount,\n clearFilters,\n toggleDialogLevel,\n handleLoadMore,\n refreshAll,\n levelSegment,\n handleLevelSegment,\n } = useLogsPage(language);\n\n if (!hasToken) {\n return <LogsNoToken L={L} />;\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 <LogsPageHeader\n L={L}\n autoRefresh={autoRefresh}\n onAutoRefreshChange={setAutoRefresh}\n fileCount={files.length}\n onOpenFiles={() => setFilesOpen(true)}\n loading={loading}\n onRefreshAll={refreshAll}\n />\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 ? <LogsStatsPopover L={L} stats={stats} /> : null}\n\n <LogsFiltersSection\n L={L}\n levelSegment={levelSegment}\n onLevelSegment={handleLevelSegment}\n searchInput={searchInput}\n onSearchInputChange={setSearchInput}\n moduleFilter={moduleFilter}\n onModuleFilterChange={setModuleFilter}\n modules={modules}\n onOpenFilters={() => setFiltersOpen(true)}\n activeFilterCount={activeFilterCount}\n hasActiveFilters={hasActiveFilters}\n onClearFilters={clearFilters}\n autoRefresh={autoRefresh}\n />\n\n <LogsListSection\n L={L}\n logs={logs}\n loading={loading}\n hasMore={hasMore}\n onSelectLog={setSelectedLog}\n onLoadMore={handleLoadMore}\n onRefreshAll={refreshAll}\n />\n\n <LogsFiltersDialog\n L={L}\n open={filtersOpen}\n onOpenChange={setFiltersOpen}\n dateFrom={dateFrom}\n onDateFromChange={setDateFrom}\n dateTo={dateTo}\n onDateToChange={setDateTo}\n selectedLevels={selectedLevels}\n onToggleLevel={toggleDialogLevel}\n />\n\n <LogsDetailDrawer\n L={L}\n log={selectedLog}\n onClose={() => setSelectedLog(null)}\n copiedDetail={copiedDetail}\n onCopiedMessage={() => setCopiedDetail('message')}\n onCopiedJson={() => setCopiedDetail('json')}\n />\n\n <LogsFilesDialog L={L} open={filesOpen} onOpenChange={setFilesOpen} files={files} logDir={logDir} />\n </div>\n );\n}\n"],"mappings":"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"}
|