@jingyi0605/codingns 0.6.1 → 0.7.0
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/bin/codingns.mjs +225 -0
- package/dist/public/assets/AdaptiveButlerPage-B8mg25ze.js +3 -0
- package/dist/public/assets/{App-Dsf3ooXU.js → App-C2lNmeKL.js} +6 -6
- package/dist/public/assets/{BootstrapPage-CE0m1qSR.js → BootstrapPage-CAVA-a8h.js} +1 -1
- package/dist/public/assets/ConversationPage-B6BGOX4C.js +6 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-Dxarr_Wf.js → DesktopDetachPreviewPage-B37DUL15.js} +1 -1
- package/dist/public/assets/{DesktopWindowPage-VytPwJ4c.js → DesktopWindowPage-CDA6l7lm.js} +1 -1
- package/dist/public/assets/{FileContextPanel-DwFzLsOp.js → FileContextPanel-CMGTtAB6.js} +1 -1
- package/dist/public/assets/{GitSidebar-CH6WqTrM.js → GitSidebar--DCqBiGL.js} +1 -1
- package/dist/public/assets/{MobileCreateSessionSheet-DcxKM00P.js → MobileCreateSessionSheet-THIrIzJ3.js} +1 -1
- package/dist/public/assets/{MobileTopHeaderFrame-C5rIKQT6.js → MobileTopHeaderFrame-D-X7pVnV.js} +1 -1
- package/dist/public/assets/{MobileWorkspaceSwitcherHeader-CfUnHgv_.js → MobileWorkspaceSwitcherHeader-Cczi7RYu.js} +1 -1
- package/dist/public/assets/{RelayConnectEntryPage-CgMvVZwa.js → RelayConnectEntryPage-D417tgWj.js} +1 -1
- package/dist/public/assets/{ServerSettingsModal-CFul__z1.js → ServerSettingsModal-BdTxbRbU.js} +1 -1
- package/dist/public/assets/SessionIndexPage-D5iefVcc.js +1 -0
- package/dist/public/assets/SettingsPage-iCFe_DHP.js +2 -0
- package/dist/public/assets/{TerminalManagerPanel-BbORd-ee.js → TerminalManagerPanel-CtldwWz8.js} +1 -1
- package/dist/public/assets/{TerminalPage-DWHv6mlu.js → TerminalPage-DAzQTmQC.js} +19 -19
- package/dist/public/assets/{TerminalRuntimeFallbackModal-B29YxbQe.js → TerminalRuntimeFallbackModal-DLOhAvaq.js} +1 -1
- package/dist/public/assets/{ToolFilesPage-Dx9cv9hu.js → ToolFilesPage-D7thcDEv.js} +1 -1
- package/dist/public/assets/{ToolGitPage-D7H3vAia.js → ToolGitPage-uPRsxdcn.js} +1 -1
- package/dist/public/assets/{ToolProcessesPage-PqQWxsy-.js → ToolProcessesPage-B1uOk0Ef.js} +1 -1
- package/dist/public/assets/{ToolsHomePage-CX05Pe_4.js → ToolsHomePage-rU3V8mmh.js} +1 -1
- package/dist/public/assets/{WorkbenchLandingPage-CchkAC75.js → WorkbenchLandingPage-BudM2C69.js} +1 -1
- package/dist/public/assets/WorkbenchLayout-Dybarc1V.js +244 -0
- package/dist/public/assets/WorkbenchModal-DMQutm1x.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-Cy4WBbzq.js +1 -0
- package/dist/public/assets/{WorkbenchShellRoute-RGZpA0_J.css → WorkbenchShellRoute-DhQo_0vu.css} +1 -1
- package/dist/public/assets/{WorkspaceDebugDetailPage-Deqy2_pO.js → WorkspaceDebugDetailPage-CHqo-uDf.js} +1 -1
- package/dist/public/assets/{WorkspaceDetailPage-Cvf-ZdlB.js → WorkspaceDetailPage-CGkAH1W-.js} +1 -1
- package/dist/public/assets/{WorkspaceHomePage-Dsyvqyk1.js → WorkspaceHomePage-CfuPVITd.js} +1 -1
- package/dist/public/assets/{client-runtime-manager-DROQJ9v3.js → client-runtime-manager-CKbtaemV.js} +1 -1
- package/dist/public/assets/file-tree-icon-Bc0KADEl.js +3 -0
- package/dist/public/assets/index-DNRyROOG.css +1 -0
- package/dist/public/assets/index-oGylLBIX.js +42 -0
- package/dist/public/assets/{login-direct-candidate-resolver-DotM530R.js → login-direct-candidate-resolver-DjJMbqB7.js} +1 -1
- package/dist/public/assets/model-switch-api-T55eW6D4.js +1 -0
- package/dist/public/assets/{preferences-service-BG6GKG29.js → preferences-service-BTKBl5xM.js} +1 -1
- package/dist/public/assets/realtime-client-ww7MnbTD.js +1 -0
- package/dist/public/assets/{relay-entry-pmr-c42O.js → relay-entry-sdeFnTbY.js} +1 -1
- package/dist/public/assets/styles-BjPytabP.css +1 -0
- package/dist/public/assets/{terminal-runtime-meta-8_uRZf7h.js → terminal-runtime-meta-Cvt1ID92.js} +1 -1
- package/dist/public/assets/{useRegisteredDebugTemplates-DWX7LXQu.js → useRegisteredDebugTemplates-O-ymgLd9.js} +1 -1
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.js +21 -1
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/config/opencode-base-url-resolver.d.ts +16 -0
- package/dist/server/config/opencode-base-url-resolver.js +154 -0
- package/dist/server/config/opencode-base-url-resolver.js.map +1 -1
- package/dist/server/helpers/wechat-claw-runtime/main.d.ts +1 -0
- package/dist/server/helpers/wechat-claw-runtime/main.js +38 -0
- package/dist/server/helpers/wechat-claw-runtime/main.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.d.ts +5 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.js +32 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/errors.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.d.ts +16 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js +209 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/login-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.d.ts +18 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js +135 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/poll-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.d.ts +34 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js +394 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/runtime-state-store.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.d.ts +9 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js +64 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/send-service.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.d.ts +167 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.js +3 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/types.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.d.ts +34 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js +160 -0
- package/dist/server/helpers/wechat-claw-runtime/modules/wechat-api-client.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.d.ts +9 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js +24 -0
- package/dist/server/helpers/wechat-claw-runtime/routes/accounts.js.map +1 -0
- package/dist/server/helpers/wechat-claw-runtime/server.d.ts +5 -0
- package/dist/server/helpers/wechat-claw-runtime/server.js +36 -0
- package/dist/server/helpers/wechat-claw-runtime/server.js.map +1 -0
- package/dist/server/middlewares/auth-guard.js +4 -1
- package/dist/server/middlewares/auth-guard.js.map +1 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +4 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js +12 -1
- package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
- package/dist/server/modules/butler/butler-control-session-service.d.ts +20 -2
- package/dist/server/modules/butler/butler-control-session-service.js +121 -74
- package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
- package/dist/server/modules/butler/butler-profile-service.d.ts +3 -1
- package/dist/server/modules/butler/butler-profile-service.js +16 -4
- package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
- package/dist/server/modules/butler/butler-session-service.js +44 -15
- package/dist/server/modules/butler/butler-session-service.js.map +1 -1
- package/dist/server/modules/channels/channel-bridge-service.d.ts +55 -0
- package/dist/server/modules/channels/channel-bridge-service.js +340 -0
- package/dist/server/modules/channels/channel-bridge-service.js.map +1 -0
- package/dist/server/modules/channels/channel-controller.d.ts +52 -0
- package/dist/server/modules/channels/channel-controller.js +54 -0
- package/dist/server/modules/channels/channel-controller.js.map +1 -0
- package/dist/server/modules/channels/channel-delivery-service.d.ts +63 -0
- package/dist/server/modules/channels/channel-delivery-service.js +429 -0
- package/dist/server/modules/channels/channel-delivery-service.js.map +1 -0
- package/dist/server/modules/channels/channel-gateway-controller.d.ts +15 -0
- package/dist/server/modules/channels/channel-gateway-controller.js +16 -0
- package/dist/server/modules/channels/channel-gateway-controller.js.map +1 -0
- package/dist/server/modules/channels/channel-gateway-service.d.ts +24 -0
- package/dist/server/modules/channels/channel-gateway-service.js +56 -0
- package/dist/server/modules/channels/channel-gateway-service.js.map +1 -0
- package/dist/server/modules/channels/channel-platform-adapters.d.ts +46 -0
- package/dist/server/modules/channels/channel-platform-adapters.js +315 -0
- package/dist/server/modules/channels/channel-platform-adapters.js.map +1 -0
- package/dist/server/modules/channels/channel-platform-catalog.d.ts +3 -0
- package/dist/server/modules/channels/channel-platform-catalog.js +42 -0
- package/dist/server/modules/channels/channel-platform-catalog.js.map +1 -0
- package/dist/server/modules/channels/channel-polling-scheduler.d.ts +31 -0
- package/dist/server/modules/channels/channel-polling-scheduler.js +93 -0
- package/dist/server/modules/channels/channel-polling-scheduler.js.map +1 -0
- package/dist/server/modules/channels/channel-polling-service.d.ts +46 -0
- package/dist/server/modules/channels/channel-polling-service.js +176 -0
- package/dist/server/modules/channels/channel-polling-service.js.map +1 -0
- package/dist/server/modules/channels/channel-service.d.ts +108 -0
- package/dist/server/modules/channels/channel-service.js +397 -0
- package/dist/server/modules/channels/channel-service.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-client.d.ts +51 -0
- package/dist/server/modules/channels/wechat-claw-client.js +245 -0
- package/dist/server/modules/channels/wechat-claw-client.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.d.ts +4 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.js +13 -0
- package/dist/server/modules/channels/wechat-claw-runtime-boundary.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.d.ts +14 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.js +95 -0
- package/dist/server/modules/channels/wechat-claw-runtime-client.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.d.ts +16 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.js +133 -0
- package/dist/server/modules/channels/wechat-claw-runtime-manager.js.map +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.d.ts +1 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.js +2 -0
- package/dist/server/modules/channels/wechat-claw-runtime-types.js.map +1 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.d.ts +12 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js +125 -0
- package/dist/server/modules/opencli/opencli-bridge-skill-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-catalog-service.d.ts +50 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js +345 -0
- package/dist/server/modules/opencli/opencli-catalog-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-controller.d.ts +13 -0
- package/dist/server/modules/opencli/opencli-controller.js +30 -0
- package/dist/server/modules/opencli/opencli-controller.js.map +1 -0
- package/dist/server/modules/opencli/opencli-health-service.d.ts +28 -0
- package/dist/server/modules/opencli/opencli-health-service.js +106 -0
- package/dist/server/modules/opencli/opencli-health-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-install-discovery.d.ts +23 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js +130 -0
- package/dist/server/modules/opencli/opencli-install-discovery.js.map +1 -0
- package/dist/server/modules/opencli/opencli-management-service.d.ts +59 -0
- package/dist/server/modules/opencli/opencli-management-service.js +152 -0
- package/dist/server/modules/opencli/opencli-management-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js +214 -0
- package/dist/server/modules/opencli/opencli-runtime-builder.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.d.ts +3 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js +11 -0
- package/dist/server/modules/opencli/opencli-runtime-layout.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js +104 -0
- package/dist/server/modules/opencli/opencli-runtime-profile-service.js.map +1 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.d.ts +29 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js +110 -0
- package/dist/server/modules/opencli/opencli-runtime-resolver.js.map +1 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.d.ts +11 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js +66 -0
- package/dist/server/modules/opencli/opencli-session-prompt-service.js.map +1 -0
- package/dist/server/modules/provider/provider-catalog-service.d.ts +45 -0
- package/dist/server/modules/provider/provider-catalog-service.js +204 -0
- package/dist/server/modules/provider/provider-catalog-service.js.map +1 -0
- package/dist/server/modules/provider/provider-controller.d.ts +16 -2
- package/dist/server/modules/provider/provider-controller.js +49 -6
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-disabled.d.ts +8 -0
- package/dist/server/modules/provider/provider-disabled.js +45 -0
- package/dist/server/modules/provider/provider-disabled.js.map +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +1 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +3 -3
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.d.ts +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +12 -8
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/provider/provider-runtime-state-service.d.ts +24 -0
- package/dist/server/modules/provider/provider-runtime-state-service.js +141 -0
- package/dist/server/modules/provider/provider-runtime-state-service.js.map +1 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.d.ts +16 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js +91 -0
- package/dist/server/modules/sessions/claude-compatible-provider-registry.js.map +1 -0
- package/dist/server/modules/sessions/session-history-service.d.ts +9 -3
- package/dist/server/modules/sessions/session-history-service.js +198 -62
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-router-service.js +9 -4
- package/dist/server/modules/sessions/session-live-runtime-router-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +8 -4
- package/dist/server/modules/sessions/session-live-runtime-service.js +99 -88
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-permission-request-service.d.ts +5 -2
- package/dist/server/modules/sessions/session-permission-request-service.js +26 -27
- package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.d.ts +18 -1
- package/dist/server/modules/sessions/session-provider-config-service.js +142 -17
- package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-error-mapper.js +7 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/skills/skill-manager-service.d.ts +5 -0
- package/dist/server/modules/skills/skill-manager-service.js +26 -0
- package/dist/server/modules/skills/skill-manager-service.js.map +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.d.ts +1 -0
- package/dist/server/modules/tasks/task-helper-process-handlers.js +1 -1
- package/dist/server/modules/tasks/task-helper-process-handlers.js.map +1 -1
- package/dist/server/modules/tasks/task-types.d.ts +2 -0
- package/dist/server/modules/tasks/task-types.js +2 -0
- package/dist/server/modules/tasks/task-types.js.map +1 -1
- package/dist/server/routes/channels.d.ts +3 -0
- package/dist/server/routes/channels.js +16 -0
- package/dist/server/routes/channels.js.map +1 -0
- package/dist/server/routes/opencli.d.ts +3 -0
- package/dist/server/routes/opencli.js +7 -0
- package/dist/server/routes/opencli.js.map +1 -0
- package/dist/server/routes/providers.js +5 -2
- package/dist/server/routes/providers.js.map +1 -1
- package/dist/server/routes/public.d.ts +2 -1
- package/dist/server/routes/public.js +3 -1
- package/dist/server/routes/public.js.map +1 -1
- package/dist/server/server/create-server.d.ts +30 -0
- package/dist/server/server/create-server.js +104 -12
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/shared/http/error-handler.js +59 -3
- package/dist/server/shared/http/error-handler.js.map +1 -1
- package/dist/server/storage/repositories/channel-account-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-account-repository.js +153 -0
- package/dist/server/storage/repositories/channel-account-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-delivery-repository.d.ts +13 -0
- package/dist/server/storage/repositories/channel-delivery-repository.js +156 -0
- package/dist/server/storage/repositories/channel-delivery-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.js +144 -0
- package/dist/server/storage/repositories/channel-inbound-event-repository.js.map +1 -0
- package/dist/server/storage/repositories/channel-thread-repository.d.ts +12 -0
- package/dist/server/storage/repositories/channel-thread-repository.js +152 -0
- package/dist/server/storage/repositories/channel-thread-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.d.ts +9 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js +85 -0
- package/dist/server/storage/repositories/opencli-catalog-entry-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-provider-repository.d.ts +8 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js +88 -0
- package/dist/server/storage/repositories/opencli-provider-repository.js.map +1 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.d.ts +11 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js +127 -0
- package/dist/server/storage/repositories/opencli-runtime-profile-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-control-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-control-repository.js +51 -0
- package/dist/server/storage/repositories/provider-control-repository.js.map +1 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.d.ts +9 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.js +50 -0
- package/dist/server/storage/repositories/provider-runtime-state-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +53 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +180 -0
- package/dist/server/types/domain.d.ts +132 -0
- package/dist/server/ws/workbench-ws-hub.js +8 -2
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +28 -11
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +61 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +5 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +94 -21
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/AdaptiveButlerPage-Dw72U3hG.js +0 -3
- package/dist/public/assets/ConversationPage-8wOY7SX-.js +0 -4
- package/dist/public/assets/SessionIndexPage-B-tRhBXC.js +0 -1
- package/dist/public/assets/SettingsPage-C9LGxSQZ.js +0 -1
- package/dist/public/assets/WorkbenchLayout-pOZvEqp7.js +0 -3
- package/dist/public/assets/WorkbenchModal-ColqvV6a.js +0 -1
- package/dist/public/assets/WorkbenchShellRoute-C0_h4lP6.js +0 -1
- package/dist/public/assets/file-tree-icon-Bp3Ntt7u.js +0 -31
- package/dist/public/assets/index-B84Po2NA.css +0 -1
- package/dist/public/assets/index-C-0oeG_5.js +0 -42
- package/dist/public/assets/model-switch-api-Bh9nYslz.js +0 -1
- package/dist/public/assets/session-runtime-machine-YN84QBlr.js +0 -21
- package/dist/public/assets/styles-CsEMfdaS.css +0 -1
- /package/dist/public/assets/{styles-DRVvx_kv.js → styles-lhQGDlPF.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as c,j as e,t as s,C as I,c as be,e as Q,w as Cs,A as fe,Q as ie,S as Xe,T as ct,U as Me,V as ot,W as Je,h as dt,f as ut,X as Pe,q as gt,n as mt,d as Le,m as ht}from"./index-C-0oeG_5.js";import{g as pt,i as es,k as bt,l as ft,n as xt,o as vt,e as Ge,f as jt,p as yt,u as Ds,j as Nt,c as wt,L as Ms,T as Ps,q as Ls}from"./App-Dsf3ooXU.js";import{o as ss,aj as St,ad as Tt,t as te,f as le,M as Rs,l as kt,m as Ct,k as Re,h as pe,i as As,j as Dt,u as de,ak as ue}from"./model-switch-api-Bh9nYslz.js";import{M as Mt,W as re,D as Pt}from"./WorkbenchModal-ColqvV6a.js";import{M as Lt}from"./MobileTopHeaderFrame-C5rIKQT6.js";const ts=2e4,Rt=1e3,At=5e3;function Et({isOpen:t,onClose:a}){const[n,i]=c.useState(null),[r,d]=c.useState(null),[j,f]=c.useState(!1),[p,P]=c.useState(!1),[h,T]=c.useState(null),C=c.useRef(null);if(c.useEffect(()=>{if(!t)return;let u=!1;async function m(){f(!0),T(null),d(null);try{const y=await I.request("/api/observability/runtime/session",{method:"POST",body:JSON.stringify({ttlMs:ts})});if(u){await Ae(y.sessionId);return}C.current=y.sessionId,i(y);const M=await ns(y.sessionId);if(u){await Ae(y.sessionId);return}d(M)}catch(y){u||T(Ee(y))}finally{u||f(!1)}}return m(),()=>{u=!0;const y=C.current;C.current=null,i(null),d(null),f(!1),P(!1),T(null),y&&Ae(y)}},[t]),c.useEffect(()=>{const u=(n==null?void 0:n.sessionId)??null;if(!t||!u)return;const m=u;let y=!1;async function M(){P(!0);try{const l=await ns(m);y||(d(l),T(null))}catch(l){y||T(Ee(l))}finally{y||P(!1)}}const b=window.setInterval(()=>{M()},Rt);return()=>{y=!0,window.clearInterval(b)}},[t,n==null?void 0:n.sessionId]),c.useEffect(()=>{const u=(n==null?void 0:n.sessionId)??null;if(!t||!u)return;const m=u;let y=!1;async function M(){try{const l=await I.request(`/api/observability/runtime/session/${m}/heartbeat`,{method:"POST",body:JSON.stringify({ttlMs:ts})});y||i(l)}catch(l){y||T(Ee(l))}}const b=window.setInterval(()=>{M()},At);return()=>{y=!0,window.clearInterval(b)}},[t,n==null?void 0:n.sessionId]),!t||typeof document>"u")return null;const x=Object.entries((r==null?void 0:r.backgroundTasks.taskTypes)??{}),L=Object.entries((r==null?void 0:r.schedulers.schedulers)??{}),v=Object.entries((r==null?void 0:r.backgroundTasks.totals)??{});return pt.createPortal(e.jsxs("div",{className:"workbench-modal-layer parallel-task-debug-modal-layer","aria-hidden":!t,children:[e.jsx("button",{type:"button",className:"workbench-modal-backdrop parallel-task-debug-modal-backdrop","aria-label":s("settings.parallelTaskDebugClose"),onClick:a}),e.jsxs("div",{className:"workbench-modal-card surface-card parallel-task-debug-modal-card",role:"dialog","aria-modal":"true","aria-labelledby":"parallel-task-debug-title",children:[e.jsxs("div",{className:"workbench-modal-header",children:[e.jsxs("div",{className:"workbench-modal-title-wrap",children:[e.jsx("h2",{id:"parallel-task-debug-title",children:s("settings.parallelTaskDebugModalTitle")}),e.jsx("p",{children:s("settings.parallelTaskDebugModalDescription")})]}),e.jsxs("div",{className:"workbench-modal-header-actions",children:[e.jsx("span",{className:"parallel-task-debug-status-chip","data-tone":h?"error":"active",children:h?s("settings.parallelTaskDebugStatusError"):s("settings.parallelTaskDebugStatusActive")}),e.jsx(Mt,{onClick:a,"aria-label":s("settings.parallelTaskDebugClose")})]})]}),e.jsxs("div",{className:"workbench-modal-body parallel-task-debug-body",children:[e.jsxs("div",{className:"parallel-task-debug-meta-grid",children:[e.jsxs("div",{className:"parallel-task-debug-meta-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugObservedAt")}),e.jsx("strong",{children:Ue(r==null?void 0:r.observedAt)})]}),e.jsxs("div",{className:"parallel-task-debug-meta-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugSessionExpireAt")}),e.jsx("strong",{children:Ue(n==null?void 0:n.expiresAt)})]}),e.jsxs("div",{className:"parallel-task-debug-meta-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugSessionTtl")}),e.jsx("strong",{children:Ut((n==null?void 0:n.ttlMs)??null)})]}),e.jsxs("div",{className:"parallel-task-debug-meta-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugCollectorState")}),e.jsx("strong",{children:r!=null&&r.eventLoop.enabled?s("settings.parallelTaskDebugCollectorEnabled"):s("settings.parallelTaskDebugCollectorDisabled")})]})]}),j?e.jsx("div",{className:"parallel-task-debug-empty",children:s("settings.parallelTaskDebugLoading")}):null,!j&&h?e.jsx("div",{className:"parallel-task-debug-error",children:h}):null,!j&&!h&&r?e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"parallel-task-debug-section",children:[e.jsxs("div",{className:"parallel-task-debug-section-header",children:[e.jsx("h3",{children:s("settings.parallelTaskDebugCountersTitle")}),e.jsx("span",{children:p?s("common.loading"):s("settings.parallelTaskDebugAutoRefresh")})]}),e.jsx("div",{className:"parallel-task-debug-counter-grid",children:v.map(([u,m])=>e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:It(u)}),e.jsx("strong",{children:m})]},u))})]}),e.jsxs("section",{className:"parallel-task-debug-section",children:[e.jsxs("div",{className:"parallel-task-debug-section-header",children:[e.jsx("h3",{children:s("settings.parallelTaskDebugTaskMetricsTitle")}),e.jsx("span",{children:x.length})]}),x.length>0?e.jsx("div",{className:"parallel-task-debug-grid",children:x.map(([u,m])=>e.jsxs("article",{className:"parallel-task-debug-panel",children:[e.jsxs("div",{className:"parallel-task-debug-panel-header",children:[e.jsx("strong",{children:u}),e.jsx("span",{children:as(m.executionLane)})]}),e.jsxs("div",{className:"parallel-task-debug-panel-body",children:[e.jsxs("span",{children:[s("settings.parallelTaskDebugWaitAvg"),": ",K(m.waitMs.avg)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugRunAvg"),": ",K(m.runMs.avg)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugRunMax"),": ",K(m.runMs.max)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugStartedCount"),": ",m.counters.started??0]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugFinishedCount"),": ",m.counters.finished??0]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugFailedCount"),": ",m.counters.failed??0]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugCacheHitCount"),": ",m.counters.cache_hit??0]})]})]},u))}):e.jsx("div",{className:"parallel-task-debug-empty",children:s("settings.parallelTaskDebugEmpty")})]}),e.jsxs("section",{className:"parallel-task-debug-section",children:[e.jsxs("div",{className:"parallel-task-debug-section-header",children:[e.jsx("h3",{children:s("settings.parallelTaskDebugSchedulerTitle")}),e.jsx("span",{children:L.length})]}),L.length>0?e.jsx("div",{className:"parallel-task-debug-grid",children:L.map(([u,m])=>e.jsxs("article",{className:"parallel-task-debug-panel",children:[e.jsxs("div",{className:"parallel-task-debug-panel-header",children:[e.jsx("strong",{children:u}),e.jsx("span",{children:m.lastIdle?s("settings.parallelTaskDebugIdle"):s("settings.parallelTaskDebugBusy")})]}),e.jsxs("div",{className:"parallel-task-debug-panel-body",children:[e.jsxs("span",{children:[s("settings.parallelTaskDebugTickTotal"),": ",m.tickTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugIdleTickTotal"),": ",m.idleTickTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugTaskCountTotal"),": ",m.taskCountTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugSchedulerErrorTotal"),": ",m.errorTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugLastDuration"),": ",K(m.lastDurationMs)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugNextDelay"),": ",K(m.nextDelayMs)]})]})]},u))}):e.jsx("div",{className:"parallel-task-debug-empty",children:s("settings.parallelTaskDebugEmpty")})]}),e.jsxs("section",{className:"parallel-task-debug-section",children:[e.jsxs("div",{className:"parallel-task-debug-section-header",children:[e.jsx("h3",{children:s("settings.parallelTaskDebugEventLoopTitle")}),e.jsx("span",{children:r.eventLoop.enabled?s("settings.parallelTaskDebugCollectorEnabled"):s("settings.parallelTaskDebugCollectorDisabled")})]}),e.jsxs("div",{className:"parallel-task-debug-counter-grid",children:[e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopResolution")}),e.jsx("strong",{children:K(r.eventLoop.resolutionMs)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopMean")}),e.jsx("strong",{children:K(r.eventLoop.meanMs)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopP95")}),e.jsx("strong",{children:K(r.eventLoop.p95Ms)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopP99")}),e.jsx("strong",{children:K(r.eventLoop.p99Ms)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopMax")}),e.jsx("strong",{children:K(r.eventLoop.maxMs)})]})]})]}),e.jsxs("section",{className:"parallel-task-debug-section",children:[e.jsxs("div",{className:"parallel-task-debug-section-header",children:[e.jsx("h3",{children:s("settings.parallelTaskDebugRecentActivitiesTitle")}),e.jsx("span",{children:r.recentTaskActivities.length})]}),r.recentTaskActivities.length>0?e.jsx("div",{className:"parallel-task-debug-activity-list",children:r.recentTaskActivities.map(u=>e.jsxs("article",{className:"parallel-task-debug-activity-item",children:[e.jsxs("div",{className:"parallel-task-debug-activity-main",children:[e.jsxs("div",{className:"parallel-task-debug-activity-title-row",children:[e.jsx("strong",{children:u.taskType}),e.jsx("span",{children:Ot(u.eventType)}),e.jsx("span",{children:as(u.executionLane)})]}),e.jsxs("p",{children:[s("settings.parallelTaskDebugTaskKey"),": ",u.key]}),e.jsxs("p",{children:[s("settings.parallelTaskDebugStatus"),": ",u.status?Ft(u.status):"-"]})]}),e.jsxs("div",{className:"parallel-task-debug-activity-meta",children:[e.jsx("span",{children:Ue(u.recordedAt)}),e.jsxs("span",{children:[s("settings.parallelTaskDebugAttempt"),": ",u.attempt??"-"]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugWaitMs"),": ",K(u.waitMs)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugRunMs"),": ",K(u.runMs)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugSource"),": ",u.source??"-"]}),u.errorMessage?e.jsxs("span",{children:[s("settings.parallelTaskDebugError"),": ",u.errorMessage]}):null]})]},u.eventId))}):e.jsx("div",{className:"parallel-task-debug-empty",children:s("settings.parallelTaskDebugEmpty")})]})]}):null]})]})]}),document.body)}async function ns(t){return await I.request(`/api/observability/runtime?sessionId=${encodeURIComponent(t)}`)}async function Ae(t){try{await I.request(`/api/observability/runtime/session/${t}`,{method:"DELETE"})}catch{}}function Ee(t){return t instanceof Error&&t.message?t.message:s("settings.parallelTaskDebugLoadFailed")}function Ue(t){if(!t)return"-";const a=new Date(t);return Number.isNaN(a.getTime())?t:a.toLocaleString()}function K(t){return t==null||Number.isNaN(t)?"-":`${Math.round(t*100)/100} ms`}function Ut(t){return t===null||Number.isNaN(t)?"-":`${Math.round(t/1e3)} s`}function It(t){switch(t){case"enqueue":return s("settings.parallelTaskDebugMetricEnqueue");case"dedupe":return s("settings.parallelTaskDebugMetricDedupe");case"started":return s("settings.parallelTaskDebugMetricStarted");case"finished":return s("settings.parallelTaskDebugMetricFinished");case"failed":return s("settings.parallelTaskDebugMetricFailed");case"cancelled":return s("settings.parallelTaskDebugMetricCancelled");case"timeout":return s("settings.parallelTaskDebugMetricTimeout");case"cache_hit":return s("settings.parallelTaskDebugMetricCacheHit");default:return t}}function as(t){switch(t){case"host_background":return s("settings.parallelTaskDebugLaneHostBackground");case"helper_process":return s("settings.parallelTaskDebugLaneHelperProcess");case"external_process":return s("settings.parallelTaskDebugLaneExternalProcess");default:return s("settings.parallelTaskDebugLaneRequestMainThread")}}function Ot(t){switch(t){case"enqueued":return s("settings.parallelTaskDebugEventEnqueued");case"deduped":return s("settings.parallelTaskDebugEventDeduped");case"started":return s("settings.parallelTaskDebugEventStarted");case"finished":return s("settings.parallelTaskDebugEventFinished");case"failed":return s("settings.parallelTaskDebugEventFailed");case"cancelled":return s("settings.parallelTaskDebugEventCancelled");case"timeout":return s("settings.parallelTaskDebugEventTimeout");case"cache_hit":return s("settings.parallelTaskDebugEventCacheHit");default:return t}}function Ft(t){switch(t){case"queued":return s("settings.parallelTaskDebugTaskStatusQueued");case"running":return s("settings.parallelTaskDebugTaskStatusRunning");case"succeeded":return s("settings.parallelTaskDebugTaskStatusSucceeded");case"failed":return s("settings.parallelTaskDebugTaskStatusFailed");case"cancelled":return s("settings.parallelTaskDebugTaskStatusCancelled");case"timeout":return s("settings.parallelTaskDebugTaskStatusTimeout");default:return t}}async function is(){const t=be(),a=Q.getState(),n=await t.bridge.getAndroidRuntimeInfo();if(!n.ok||!n.value)throw new Error(n.detail??"读取 Android 运行时信息失败。");const i=await I.request(`/api/client/release-manifest?channel=${encodeURIComponent(a.releaseChannel)}&platform=android-apk`),r=i.versionCode>n.value.versionCode;return{checkedAt:new Date().toISOString(),currentVersion:n.value.version,currentVersionCode:n.value.versionCode,hasUpdate:r,manifest:i,runtimeInfo:n.value}}async function Bt(t){return be().bridge.installAndroidUpdate(t)}function Vt(){const[t,a]=c.useState(!1),[n,i]=c.useState(!1),[r,d]=c.useState(null),[j,f]=c.useState(null),[p,P]=c.useState(null),[h,T]=c.useState(!1),[C,x]=c.useState(null),L=c.useRef(!1);c.useEffect(()=>{if(C===null){L.current=!1;return}const m=C;async function y(){if(!L.current){L.current=!0;try{const l=await is();if(P(l.manifest),f(l.currentVersion),T(l.hasUpdate),!l.hasUpdate||l.currentVersionCode>=m){d(s("settings.androidInstallSucceeded"));return}d(s("settings.androidInstallCancelled"))}catch(l){d(l instanceof Error?l.message:s("settings.releaseCheckFailed"))}finally{x(null)}}}function M(){y()}function b(){document.visibilityState==="visible"&&y()}return window.addEventListener("focus",M),document.addEventListener("visibilitychange",b),()=>{window.removeEventListener("focus",M),document.removeEventListener("visibilitychange",b)}},[C]);async function v(){a(!0),d(null),x(null);try{const m=await is();P(m.manifest),f(m.currentVersion),T(m.hasUpdate),d(m.hasUpdate?s("settings.releaseUpdateReady"):s("settings.releaseUpToDate"))}catch(m){d(m instanceof Error?m.message:s("settings.releaseCheckFailed"))}finally{a(!1)}}async function u(){if(p){i(!0),d(null),x(null);try{const m=await Bt(p);if(m.status==="installer_started"){d(s("settings.androidInstallerStarted")),x(p.versionCode);return}if(m.status==="permission_required"){d(m.detail??s("settings.androidInstallPermissionRequired")),x(null);return}if(m.status==="already_up_to_date"){d(s("settings.releaseUpToDate")),T(!1),x(null);return}d(m.detail??s("settings.releaseInstallFailed")),x(null)}catch(m){d(m instanceof Error?m.message:s("settings.releaseInstallFailed")),x(null)}finally{i(!1)}}}return e.jsxs("div",{className:"settings-update-card",children:[e.jsxs("div",{className:"settings-update-summary",children:[e.jsxs("div",{className:"settings-update-field",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.releaseCurrentVersion")}),e.jsx("strong",{className:"settings-update-value",children:j??s("settings.releaseUnknownVersion")})]}),e.jsxs("div",{className:"settings-update-field",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.releaseTargetVersion")}),e.jsx("strong",{className:"settings-update-value",children:(p==null?void 0:p.version)??"-"})]})]}),r?e.jsx("p",{className:"settings-update-status","data-tone":h?"warning":"success",children:r}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:t||n,onClick:v,children:t?s("common.loading"):s("settings.releaseCheckNow")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!p||!h||n,onClick:u,children:n?s("common.loading"):s("settings.releaseInstallNow")})]})]})}function Ht(){const t=be(),a=t.isDesktop,[n,i]=c.useState(!1),[r,d]=c.useState(!1),[j,f]=c.useState(!1),[p,P]=c.useState(null),[h,T]=c.useState(null),C=es(w=>w.latestState),x=es(w=>w.pendingRestartVersion),L=(C==null?void 0:C.currentVersion)??null,v=(C==null?void 0:C.manifest)??null,u=(C==null?void 0:C.hasUpdate)??!1,m=!!x,y=m&&h!==x;async function M(){if(!m){i(!0),P(null);try{const w=await bt({notify:"always"});P(ls(w.manifest,w.hasUpdate))}catch(w){P(w instanceof Error?w.message:s("settings.releaseCheckFailed"))}finally{i(!1)}}}async function b(){if(!(!v||!u||m)){d(!0),P(null);try{const w=await ft();if(!w.ok){P(w.detail??s("settings.releaseInstallFailed"));return}xt(v.version),T(null),P(s("settings.releaseRestartRequired"))}catch(w){P(w instanceof Error?w.message:s("settings.releaseInstallFailed"))}finally{d(!1)}}}async function l(){if(v!=null&&v.htmlUrl){f(!0);try{const w=await t.bridge.openExternal(v.htmlUrl);w.ok||P(w.detail??s("settings.releasePageOpenFailed"))}catch(w){P(w instanceof Error?w.message:s("settings.releasePageOpenFailed"))}finally{f(!1)}}}const k=!!(a&&v&&u&&!m),D=p??(a?m?s("settings.releaseRestartRequired"):C?ls(C.manifest,C.hasUpdate):null:s("settings.clientUpdateUnsupported"));return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-update-card",children:[e.jsxs("div",{className:"settings-update-summary",children:[e.jsxs("div",{className:"settings-update-field",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.releaseCurrentVersion")}),e.jsx("strong",{className:"settings-update-value",children:L??s("settings.releaseUnknownVersion")})]}),e.jsxs("div",{className:"settings-update-field",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.releaseTargetVersion")}),e.jsx("strong",{className:"settings-update-value",children:(v==null?void 0:v.version)??x??"-"})]})]}),D?e.jsx("p",{className:"settings-update-status","data-tone":qt(v,u,D,m),children:D}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:!a||n||r||m,onClick:M,children:n?s("common.loading"):s("settings.releaseCheckNow")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!k||r,onClick:b,children:r?s("common.loading"):s("settings.releaseInstallNow")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:!(v!=null&&v.htmlUrl)||n||r||j,onClick:l,children:j?s("common.loading"):s("settings.releaseOpenPage")})]})]}),e.jsx(_t,{open:y,version:x,onClose:()=>T(x)})]})}function ls(t,a){return a?s("settings.releaseUpdateReady"):s("settings.releaseUpToDate")}function qt(t,a,n,i){return n===s("settings.clientUpdateUnsupported")?"neutral":i||a?"warning":"success"}function _t({open:t,version:a,onClose:n}){const[i,r]=c.useState(!1),[d,j]=c.useState(null);async function f(){r(!0),j(null);try{await vt()}catch(p){j(p instanceof Error?p.message:s("settings.releaseRestartFailed")),r(!1)}}return e.jsx(re,{open:t,title:s("settings.releaseRestartDialogTitle"),description:s("settings.releaseRestartDialogDescription",{version:a??"-"}),onClose:()=>{i||n()},children:e.jsxs("div",{className:"settings-update-card",children:[d?e.jsx("p",{className:"settings-update-status","data-tone":"danger",children:d}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:i,onClick:n,children:s("settings.releaseRestartLater")}),e.jsx("button",{className:"primary-button",type:"button",disabled:i,onClick:f,children:i?s("common.loading"):s("settings.releaseRestartConfirm")})]})]})})}function Es(){const t=be();return t.platform==="desktop"?e.jsx(Ht,{}):t.platform==="android"?e.jsx(Vt,{}):e.jsx("div",{className:"settings-update-card",children:e.jsx("p",{className:"settings-update-status","data-tone":"neutral",children:s("settings.clientUpdateUnsupported")})})}const zt="https://github.com/SaladDay/cc-switch-cli",$t="当前机器未安装 cc-switch-cli。这里集成的是 CC-Switch 的衍生 CLI 版本,不是 CC-Switch UI 版本。请先安装:",Wt=/(https?:\/\/[^\s]+)/i;function Us(){const t=Cs(l=>{var k;return((k=l.session)==null?void 0:k.accessToken)??null}),[a,n]=c.useState(null),[i,r]=c.useState(!0),[d,j]=c.useState(null),[f,p]=c.useState(null),[P,h]=c.useState(null),[T,C]=c.useState(!1),[x,L]=c.useState("codex");c.useEffect(()=>{let l=!0;if(!t){n(null),p(null),h(null),r(!1);return}return(async()=>{r(!0);try{const D=await ss();if(!l)return;n(D),p(null),L(w=>cs(D,w))}catch(D){if(!l)return;p(Ie(D))}finally{l&&r(!1)}})(),()=>{l=!1}},[t]);async function v(){const l=await ss();n(l),p(null),L(k=>cs(l,k))}async function u(){if(t){j("refresh"),p(null),h(null);try{await v(),h(s("settings.modelManagementRefreshSuccess"))}catch(l){p(Ie(l))}finally{j(null)}}}async function m(l,k){if(!t||k.isCurrent)return;const D=rs(l,k.id);j(D),p(null),h(null);try{const w=await St({app:l,presetId:k.id});Tt(),n(O=>Kt(O,w)),h(s("settings.modelManagementSwitchSuccess",{app:w.displayName,preset:w.currentPresetName??k.name}))}catch(w){p(Ie(w))}finally{j(null)}}const y=(a==null?void 0:a.items)??[],M=y.find(l=>l.app===x)??y[0]??null,b=Gt(y);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"settings-model-panel",children:e.jsxs("div",{className:"settings-release-card",children:[P?e.jsx("p",{className:"settings-release-status",children:P}):null,f?e.jsx("p",{className:"settings-release-status",children:f}):null,b?e.jsxs("section",{className:"settings-model-missing-state",children:[e.jsx("p",{className:"settings-model-missing-copy",children:b.message}),e.jsx("a",{className:"settings-tailscale-link settings-model-missing-link",href:b.url,rel:"noreferrer",target:"_blank",children:b.url})]}):y.length>0?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"settings-model-grid",children:y.map(l=>e.jsxs("section",{className:"settings-model-card",children:[e.jsxs("div",{className:"settings-model-card-main",children:[e.jsxs("div",{className:"settings-model-card-copy",children:[e.jsx("strong",{className:"settings-model-card-title",children:l.displayName}),e.jsx("span",{className:"settings-model-card-status","data-status":l.status,children:Jt(l.status)})]}),e.jsxs("div",{className:"settings-model-value-line",children:[e.jsx("strong",{className:"settings-model-preset-value",children:l.currentPresetName??s("settings.modelManagementPresetMissing")}),e.jsx("strong",{className:"settings-model-current-value",children:l.currentModel??s("settings.modelManagementModelUnknown")})]})]}),l.statusText?e.jsx("p",{className:"settings-model-card-note",children:l.statusText}):null]},l.app))}),e.jsx("div",{className:"settings-model-panel-actions",children:e.jsx("button",{className:"secondary-button settings-model-open-action",type:"button",disabled:!t||i,onClick:()=>{C(!0)},children:s("settings.modelManagementOpenSwitcher")})})]}):e.jsx("div",{className:"settings-model-empty",children:s("settings.modelManagementOptionsEmpty")})]})}),e.jsxs(re,{open:T&&!b,title:s("settings.modelManagementModalTitle"),description:s("settings.modelManagementModalDescription"),className:"settings-model-modal",headerActions:e.jsx("button",{className:"secondary-button",type:"button",disabled:!t||i||d!==null,onClick:()=>{u()},children:d==="refresh"?s("common.loading"):s("settings.modelManagementRefresh")}),onClose:()=>C(!1),children:[e.jsx("div",{className:"settings-model-tabs",role:"tablist","aria-label":s("settings.modelManagementTabsLabel"),children:y.map(l=>{const k=(M==null?void 0:M.app)===l.app;return e.jsx("button",{type:"button",role:"tab",className:"settings-model-tab","aria-selected":k,"data-active":k?"true":"false",onClick:()=>L(l.app),children:l.displayName},l.app)})}),M?e.jsxs("section",{className:"settings-model-modal-panel",children:[e.jsxs("div",{className:"settings-model-modal-summary",children:[e.jsxs("div",{className:"settings-model-modal-summary-row",children:[e.jsx("span",{children:s("settings.modelManagementCurrentProfile")}),e.jsx("strong",{children:M.currentPresetName??s("settings.modelManagementPresetMissing")})]}),e.jsxs("div",{className:"settings-model-modal-summary-row",children:[e.jsx("span",{children:s("settings.modelManagementCurrentModel")}),e.jsx("strong",{children:M.currentModel??s("settings.modelManagementModelUnknown")})]})]}),M.statusText?e.jsx("p",{className:"settings-model-modal-note",children:M.statusText}):null,M.options.length>0?e.jsx("div",{className:"settings-model-switcher-list",children:M.options.map(l=>{const k=rs(M.app,l.id);return e.jsxs("div",{className:"settings-model-switcher-item","data-current":l.isCurrent?"true":"false",children:[e.jsxs("div",{className:"settings-model-switcher-item-main",children:[e.jsx("strong",{children:l.name}),e.jsx("span",{children:l.model??s("settings.modelManagementModelUnknown")})]}),e.jsx("div",{className:"settings-model-switcher-item-actions",children:l.isCurrent?e.jsx("span",{className:"settings-model-card-status","data-status":"ready",children:s("settings.modelManagementCurrentTag")}):e.jsx("button",{className:"secondary-button settings-model-option-action",type:"button",disabled:i||d!==null||M.status!=="ready",onClick:()=>{m(M.app,l)},children:d===k?s("common.loading"):s("settings.modelManagementSwitchAction")})})]},`${M.app}:${l.id}`)})}):e.jsx("div",{className:"settings-model-empty",children:M.statusText??s("settings.modelManagementOptionsEmpty")})]}):e.jsx("div",{className:"settings-model-empty",children:s("settings.modelManagementOptionsEmpty")})]})]})}function rs(t,a){return`switch:${t}:${a}`}function Kt(t,a){return t&&{...t,scannedAt:new Date().toISOString(),items:t.items.map(n=>n.app===a.app?a:n)}}function cs(t,a){var i;return t.items.some(r=>r.app===a)?a:((i=t.items[0])==null?void 0:i.app)??"codex"}function Jt(t){switch(t){case"unconfigured":return s("settings.modelManagementStatusUnconfigured");case"unavailable":return s("settings.modelManagementStatusUnavailable");case"error":return s("settings.modelManagementStatusError");default:return s("settings.modelManagementStatusReady")}}function Ie(t){return t instanceof fe?t.message||s("settings.modelManagementLoadFailed"):t instanceof Error?t.message:s("settings.modelManagementLoadFailed")}function Gt(t){var i,r,d;if(t.length===0||!t.every(j=>j.status==="unavailable"&&!j.cliAvailable&&!!j.statusText))return null;const n=((d=(((r=(i=t[0])==null?void 0:i.statusText)==null?void 0:r.trim())??"").match(Wt))==null?void 0:d[1])??zt;return{message:$t,url:n}}var Is={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},os=ie.createContext&&ie.createContext(Is),Zt=["attr","size","title"];function Qt(t,a){if(t==null)return{};var n,i,r=Yt(t,a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(t);for(i=0;i<d.length;i++)n=d[i],a.indexOf(n)===-1&&{}.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}function Yt(t,a){if(t==null)return{};var n={};for(var i in t)if({}.hasOwnProperty.call(t,i)){if(a.indexOf(i)!==-1)continue;n[i]=t[i]}return n}function Te(){return Te=Object.assign?Object.assign.bind():function(t){for(var a=1;a<arguments.length;a++){var n=arguments[a];for(var i in n)({}).hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},Te.apply(null,arguments)}function ds(t,a){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);a&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),n.push.apply(n,i)}return n}function ke(t){for(var a=1;a<arguments.length;a++){var n=arguments[a]!=null?arguments[a]:{};a%2?ds(Object(n),!0).forEach(function(i){Xt(t,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ds(Object(n)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(n,i))})}return t}function Xt(t,a,n){return(a=en(a))in t?Object.defineProperty(t,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[a]=n,t}function en(t){var a=sn(t,"string");return typeof a=="symbol"?a:a+""}function sn(t,a){if(typeof t!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var i=n.call(t,a);if(typeof i!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(a==="string"?String:Number)(t)}function Os(t){return t&&t.map((a,n)=>ie.createElement(a.tag,ke({key:n},a.attr),Os(a.child)))}function xe(t){return a=>ie.createElement(tn,Te({attr:ke({},t.attr)},a),Os(t.child))}function tn(t){var a=n=>{var{attr:i,size:r,title:d}=t,j=Qt(t,Zt),f=r||n.size||"1em",p;return n.className&&(p=n.className),t.className&&(p=(p?p+" ":"")+t.className),ie.createElement("svg",Te({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},n.attr,i,j,{className:p,style:ke(ke({color:t.color||n.color},n.style),t.style),height:f,width:f,xmlns:"http://www.w3.org/2000/svg"}),d&&ie.createElement("title",null,d),t.children)};return os!==void 0?ie.createElement(os.Consumer,null,n=>a(n)):a(Is)}function nn(t){return xe({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M20 3H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h6v2H8v2h8v-2h-2v-2h6c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2"},child:[]}]})(t)}function an(t){return xe({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm6.93 6h-2.95a15.65 15.65 0 0 0-1.38-3.56A8.03 8.03 0 0 1 18.92 8zM12 4.04c.83 1.2 1.48 2.53 1.91 3.96h-3.82c.43-1.43 1.08-2.76 1.91-3.96zM4.26 14C4.1 13.36 4 12.69 4 12s.1-1.36.26-2h3.38c-.08.66-.14 1.32-.14 2 0 .68.06 1.34.14 2H4.26zm.82 2h2.95c.32 1.25.78 2.45 1.38 3.56A7.987 7.987 0 0 1 5.08 16zm2.95-8H5.08a7.987 7.987 0 0 1 4.33-3.56A15.65 15.65 0 0 0 8.03 8zM12 19.96c-.83-1.2-1.48-2.53-1.91-3.96h3.82c-.43 1.43-1.08 2.76-1.91 3.96zM14.34 14H9.66c-.09-.66-.16-1.32-.16-2 0-.68.07-1.35.16-2h4.68c.09.65.16 1.32.16 2 0 .68-.07 1.34-.16 2zm.25 5.56c.6-1.11 1.06-2.31 1.38-3.56h2.95a8.03 8.03 0 0 1-4.33 3.56zM16.36 14c.08-.66.14-1.32.14-2 0-.68-.06-1.34-.14-2h3.38c.16.64.26 1.31.26 2s-.1 1.36-.26 2h-3.38z"},child:[]}]})(t)}function us(t){return xe({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"},child:[]},{tag:"path",attr:{d:"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"},child:[]}]})(t)}function ln(t){return xe({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"},child:[]},{tag:"path",attr:{d:"M15.5 1h-8A2.5 2.5 0 0 0 5 3.5v17A2.5 2.5 0 0 0 7.5 23h8a2.5 2.5 0 0 0 2.5-2.5v-17A2.5 2.5 0 0 0 15.5 1zm-4 21c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5-4H7V4h9v14z"},child:[]}]})(t)}function rn(t){return xe({attr:{role:"img",viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M18.4395 5.5586c-.675 1.1664-1.352 2.3318-2.0274 3.498-.0366-.0155-.0742-.0286-.1113-.043-1.8249-.6957-3.484-.8-4.42-.787-1.8551.0185-3.3544.4643-4.2597.8203-.084-.1494-1.7526-3.021-2.0215-3.4864a1.1451 1.1451 0 0 0-.1406-.1914c-.3312-.364-.9054-.4859-1.379-.203-.475.282-.7136.9361-.3886 1.5019 1.9466 3.3696-.0966-.2158 1.9473 3.3593.0172.031-.4946.2642-1.3926 1.0177C2.8987 12.176.452 14.772 0 18.9902h24c-.119-1.1108-.3686-2.099-.7461-3.0683-.7438-1.9118-1.8435-3.2928-2.7402-4.1836a12.1048 12.1048 0 0 0-2.1309-1.6875c.6594-1.122 1.312-2.2559 1.9649-3.3848.2077-.3615.1886-.7956-.0079-1.1191a1.1001 1.1001 0 0 0-.8515-.5332c-.5225-.0536-.9392.3128-1.0488.5449zm-.0391 8.461c.3944.5926.324 1.3306-.1563 1.6503-.4799.3197-1.188.0985-1.582-.4941-.3944-.5927-.324-1.3307.1563-1.6504.4727-.315 1.1812-.1086 1.582.4941zM7.207 13.5273c.4803.3197.5506 1.0577.1563 1.6504-.394.5926-1.1038.8138-1.584.4941-.48-.3197-.5503-1.0577-.1563-1.6504.4008-.6021 1.1087-.8106 1.584-.4941z"},child:[]}]})(t)}function gs(){return I.request("/api/auth/devices")}function cn(t){return I.request("/api/auth/devices/current/primary",{method:"POST",body:JSON.stringify(t)})}function on(t){return I.request(`/api/auth/devices/${t}/logout`,{method:"POST"})}function Fs({compact:t=!1}){const a=Cs(g=>{var F;return((F=g.session)==null?void 0:F.accessToken)??null}),[n,i]=c.useState(null),[r,d]=c.useState(!1),[j,f]=c.useState(!1),[p,P]=c.useState(!1),[h,T]=c.useState(null),[C,x]=c.useState(null),[L,v]=c.useState(null),[u,m]=c.useState(null),[y,M]=c.useState(null),[b,l]=c.useState(""),[k,D]=c.useState(null);c.useEffect(()=>{let g=!0;if(!j){d(!1);return}if(!a){i(null),d(!1),v(null),m(null);return}return(async()=>{d(!0);try{const S=await gs();if(!g)return;i(S),m(null)}catch(S){if(!g)return;m(Oe(S))}finally{g&&d(!1)}})(),()=>{g=!1}},[a,j]);async function w(){const g=await gs();i(g),m(null)}function O(){f(!0),P(!1),v(null),m(null)}function J(){h!=="primary"&&(f(!1),P(!1),M(null),l(""),D(null))}function q(g){M(g),l(""),D(null)}async function $(){if(y){T("primary"),D(null),m(null),v(null);try{await cn({password:b,primary:y==="enable"}),await w(),v(y==="enable"?s("settings.authDevicePrimaryEnabled"):s("settings.authDevicePrimaryDisabled")),M(null),l("")}catch(g){const F=Oe(g);D(F),m(F)}finally{T(null)}}}async function U(g){if(g.deviceId){x(g.deviceId),m(null),v(null);try{const F=await on(g.deviceId);await w(),v(s("settings.authDeviceLogoutDeviceSuccess",{device:we(g),count:String(F.revokedSessionCount)}))}catch(F){m(Oe(F))}finally{x(null)}}}const A=(n==null?void 0:n.currentDevice)??null,_=(n==null?void 0:n.otherActiveDevices.filter(g=>!g.isLegacy))??[],B=(n==null?void 0:n.otherActiveDevices.filter(g=>g.isLegacy))??[],W=(n==null?void 0:n.recentLoginRecords.filter(g=>!g.isLegacy))??[],z=(n==null?void 0:n.recentLoginRecords.filter(g=>g.isLegacy))??[],N=B.length+z.length,E=A!==null&&!A.isLegacy,R=(A==null?void 0:A.isPrimary)===!0;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`settings-device-panel${t?" settings-device-panel-compact":""}`,children:e.jsx("div",{className:"settings-device-entry-actions",children:e.jsx("button",{className:"settings-button",type:"button",disabled:!a,onClick:O,children:s("settings.authDeviceOpenManager")})})}),e.jsx(re,{open:j,title:s("settings.authDeviceManagement"),description:s("settings.authDeviceManagementDescription"),className:"settings-device-browser-modal",onClose:J,children:e.jsxs(e.Fragment,{children:[L?e.jsx("p",{className:"settings-release-status",children:L}):null,u?e.jsx("p",{className:"settings-release-status",children:u}):null,r?e.jsx("div",{className:"settings-device-empty",children:s("common.loading")}):e.jsxs(e.Fragment,{children:[N>0?e.jsx("section",{className:"settings-device-section",children:e.jsxs("div",{className:"settings-device-compat-banner",children:[e.jsx("p",{className:"settings-device-inline-note",children:s("settings.authDeviceLegacyHiddenHint",{count:String(N)})}),e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>P(g=>!g),children:p?s("settings.authDeviceLegacyHide"):s("settings.authDeviceLegacyReveal")})]})}):null,e.jsxs("section",{className:"settings-device-section",children:[e.jsx("div",{className:"settings-device-section-header",children:e.jsx("strong",{children:s("settings.authDeviceCurrentTitle")})}),A?e.jsx(ge,{current:!0,title:we(A),clientType:A.clientType,browserName:A.browserName,browserVersion:A.browserVersion,osName:A.osName,osVersion:A.osVersion,timeLabelKey:"settings.authDeviceLastSeen",timestamp:A.lastSeenAt,sourceAddress:A.lastSourceAddress,badges:e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"settings-device-tag","data-tone":"current",children:s("settings.authDeviceCurrentTag")}),A.isPrimary?e.jsx("span",{className:"settings-device-tag","data-tone":"primary",children:s("settings.authDevicePrimaryTag")}):null]}),actions:e.jsx(e.Fragment,{children:e.jsx("button",{className:"secondary-button","data-variant":"device-neutral",type:"button",disabled:!E||h!==null,onClick:()=>q(A.isPrimary?"disable":"enable"),children:A.isPrimary?s("settings.authDeviceDisablePrimary"):s("settings.authDeviceEnablePrimary")})}),note:E?null:s("settings.authDevicePrimaryUnavailable")}):e.jsx("div",{className:"settings-device-empty",children:s("settings.authDeviceCurrentEmpty")})]}),e.jsxs("section",{className:"settings-device-section",children:[e.jsx("div",{className:"settings-device-section-header",children:e.jsx("strong",{children:s("settings.authDeviceOthersTitle")})}),_.length>0?e.jsx("div",{className:"settings-device-list",children:_.map((g,F)=>e.jsx(ge,{title:we(g),clientType:g.clientType,browserName:g.browserName,browserVersion:g.browserVersion,osName:g.osName,osVersion:g.osVersion,timeLabelKey:"settings.authDeviceLastSeen",timestamp:g.lastSeenAt,sourceAddress:g.lastSourceAddress,badges:e.jsxs(e.Fragment,{children:[g.isPrimary?e.jsx("span",{className:"settings-device-tag","data-tone":"primary",children:s("settings.authDevicePrimaryTag")}):null,g.isLegacy?e.jsx("span",{className:"settings-device-tag","data-tone":"legacy",children:s("settings.authDeviceLegacyTag")}):null]}),actions:g.deviceId?e.jsx("button",{className:"settings-button settings-button-danger","data-variant":"device-danger",type:"button",disabled:!R||h!==null||C!==null,onClick:()=>{U(g)},children:C===g.deviceId?s("common.loading"):s("settings.authDeviceLogoutDevice")}):null},`${g.deviceId??"legacy"}-${g.lastSeenAt}-${F}`))}):e.jsx("div",{className:"settings-device-empty",children:s("settings.authDeviceOthersEmpty")})]}),e.jsxs("section",{className:"settings-device-section",children:[e.jsx("div",{className:"settings-device-section-header",children:e.jsx("strong",{children:s("settings.authDeviceRecentTitle")})}),W.length>0?e.jsx("div",{className:"settings-device-list",children:W.map(g=>e.jsx(ge,{title:ms(g),clientType:g.clientType,browserName:g.browserName,browserVersion:g.browserVersion,osName:g.osName,osVersion:g.osVersion,timeLabelKey:"settings.authDeviceLoginAt",timestamp:g.occurredAt,sourceAddress:g.sourceAddress,badges:g.isCurrentDevice?e.jsx("span",{className:"settings-device-tag","data-tone":"current",children:s("settings.authDeviceCurrentTag")}):null},g.id))}):e.jsx("div",{className:"settings-device-empty",children:s("settings.authDeviceRecentEmpty")})]}),p&&B.length>0?e.jsxs("section",{className:"settings-device-section",children:[e.jsx("div",{className:"settings-device-section-header",children:e.jsx("strong",{children:s("settings.authDeviceLegacyDevicesTitle")})}),e.jsx("div",{className:"settings-device-list",children:B.map((g,F)=>e.jsx(ge,{title:we(g),clientType:g.clientType,browserName:g.browserName,browserVersion:g.browserVersion,osName:g.osName,osVersion:g.osVersion,timeLabelKey:"settings.authDeviceLastSeen",timestamp:g.lastSeenAt,sourceAddress:g.lastSourceAddress,badges:e.jsx("span",{className:"settings-device-tag","data-tone":"legacy",children:s("settings.authDeviceLegacyTag")})},`legacy-device-${g.lastSeenAt}-${F}`))})]}):null,p&&z.length>0?e.jsxs("section",{className:"settings-device-section",children:[e.jsx("div",{className:"settings-device-section-header",children:e.jsx("strong",{children:s("settings.authDeviceLegacyRecentTitle")})}),e.jsx("div",{className:"settings-device-list",children:z.map(g=>e.jsx(ge,{title:ms(g),clientType:g.clientType,browserName:g.browserName,browserVersion:g.browserVersion,osName:g.osName,osVersion:g.osVersion,timeLabelKey:"settings.authDeviceLoginAt",timestamp:g.occurredAt,sourceAddress:g.sourceAddress,badges:e.jsx("span",{className:"settings-device-tag","data-tone":"legacy",children:s("settings.authDeviceLegacyTag")})},g.id))})]}):null]})]})}),e.jsx(re,{open:y!==null,title:y==="enable"?s("settings.authDeviceEnablePrimaryModalTitle"):s("settings.authDeviceDisablePrimaryModalTitle"),description:y==="enable"?s("settings.authDeviceEnablePrimaryModalDescription"):s("settings.authDeviceDisablePrimaryModalDescription"),className:"settings-device-modal",onClose:()=>{h!=="primary"&&(M(null),l(""),D(null))},children:e.jsxs("div",{className:"settings-device-modal-body",children:[e.jsxs("label",{className:"settings-device-password-field",children:[e.jsx("span",{children:s("settings.authDevicePasswordLabel")}),e.jsx("input",{type:"password",className:"settings-text-input",value:b,onChange:g=>l(g.target.value)})]}),k?e.jsx("p",{className:"settings-release-status",children:k}):null,e.jsxs("div",{className:"settings-device-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:h==="primary",onClick:()=>{M(null),l(""),D(null)},children:s("common.cancel")}),e.jsx("button",{className:"settings-button",type:"button",disabled:b.trim().length===0||h==="primary",onClick:()=>{$()},children:h==="primary"?s("common.loading"):y==="enable"?s("settings.authDeviceEnablePrimary"):s("settings.authDeviceDisablePrimary")})]})]})})]})}function we(t){var a;return t.isLegacy?s("settings.authDeviceLegacyLabel"):((a=t.displayName)==null?void 0:a.trim())||Bs(t.clientType)}function ms(t){var a;return t.isLegacy?s("settings.authDeviceLegacyLabel"):((a=t.displayName)==null?void 0:a.trim())||Bs(t.clientType)}function dn(t){return e.jsxs("div",{className:"settings-device-identity",children:[e.jsx("span",{className:"settings-device-identity-icon","aria-hidden":"true",children:e.jsx(fn,{kind:bn(t.clientType)})}),e.jsx("div",{className:"settings-device-identity-body",children:e.jsx("strong",{children:t.title})})]})}function ge(t){const a=pn(t.browserName,t.browserVersion,t.osName,t.osVersion,t.timeLabelKey,t.timestamp,t.sourceAddress);return e.jsx("article",{className:"settings-device-item","data-current":t.current?"true":void 0,children:e.jsxs("div",{className:"settings-device-item-main",children:[e.jsxs("div",{className:"settings-device-item-content",children:[e.jsx(dn,{title:t.title,clientType:t.clientType}),e.jsx("div",{className:"settings-device-meta",children:a.map(n=>e.jsx("span",{children:n},n))}),t.note?e.jsx("p",{className:"settings-device-inline-note",children:t.note}):null]}),t.badges||t.actions?e.jsxs("div",{className:"settings-device-item-controls",children:[t.badges?e.jsx("div",{className:"settings-device-badges",children:t.badges}):null,t.actions?e.jsx("div",{className:"settings-device-actions",children:t.actions}):null]}):null]})})}function Bs(t){switch(t){case"desktop":return s("settings.authDeviceClientDesktop");case"web":return s("settings.authDeviceClientWeb");case"ios":return s("settings.authDeviceClientIos");case"android":return s("settings.authDeviceClientAndroid");default:return s("settings.authDeviceClientUnknown")}}function un(t,a){return s(t,{value:new Date(a).toLocaleString()})}function gn(t){return t?s("settings.authDeviceSourceAddressValue",{value:t}):s("settings.authDeviceSourceAddressUnknown")}function mn(t,a){return t?s("settings.authDeviceBrowserValue",{value:Vs(t,a)}):null}function hn(t,a){return t?s("settings.authDeviceOsValue",{value:Vs(t,a)}):null}function pn(t,a,n,i,r,d,j){return[mn(t,a),hn(n,i),un(r,d),gn(j)].filter(f=>!!f)}function bn(t){switch(t){case"desktop":return"desktop";case"web":return"web";case"ios":return"ios";case"android":return"android";default:return"unknown"}}function Vs(t,a){return a!=null&&a.trim()?`${t} ${a}`:t}function fn({kind:t}){const a=xn(t),n=a.icon;return e.jsx(n,{color:a.color})}function xn(t){switch(t){case"desktop":return{icon:nn,color:"#2563eb"};case"web":return{icon:an,color:"#0f766e"};case"ios":return{icon:ln,color:"#111827"};case"android":return{icon:rn,color:"#3ddc84"};case"unknown":return{icon:us,color:"#64748b"};default:return{icon:us,color:"#64748b"}}}function Oe(t){return t instanceof fe||t instanceof Error?t.message:s("settings.authDeviceLoadFailed")}async function Fe(){const t=Q.getState();return I.request(`/api/client/service-update?channel=${encodeURIComponent(t.releaseChannel)}`)}async function vn(t){const a=Q.getState();return I.request("/api/client/service-update/install",{method:"POST",body:JSON.stringify({packageName:t,channel:a.releaseChannel})})}async function jn(t){return I.request(`/api/client/service-update/tasks/${encodeURIComponent(t)}`)}const yn=1500,hs=2e3,Nn=2500;function Hs(){const t=be(),[a,n]=c.useState(!1),[i,r]=c.useState(!1),[d,j]=c.useState(!1),[f,p]=c.useState(!1),[P,h]=c.useState(null),[T,C]=c.useState(null),[x,L]=c.useState(null),v=(T==null?void 0:T.packages[0])??null,u=d||!!((x==null?void 0:x.status)==="succeeded"&&x.restartScheduled);c.useEffect(()=>{if(!x||!Ve(x.status))return;let b=!1;const l=window.setTimeout(async()=>{var k;try{const D=await jn(x.taskId);if(b)return;if(L(D),h(Ke(D)),!Ve(D.status)){if(r(!1),D.status==="succeeded"&&D.restartScheduled){j(!0),t.bridge.showNotification(s("settings.serverRestarting"),s("settings.serverInstallWarning"));return}const w=await Fe();if(b)return;C(w),L(((k=w.packages[0])==null?void 0:k.installTask)??D),h(Be(w.packages[0]??null,D)),D.restartRequired&&await t.bridge.showNotification(s("settings.serverRestartRequired"),D.targetVersion??"-")}}catch(D){if(b)return;r(!1),h(D instanceof Error?D.message:s("settings.serverInstallFailed"))}},yn);return()=>{b=!0,window.clearTimeout(l)}},[t.bridge,x]),c.useEffect(()=>{if(!d||!x||x.status!=="succeeded"||!x.restartScheduled)return;let b=!1,l=0;const k=async()=>{try{const D=await Fe();if(b)return;const w=D.packages[0]??null;if(!Sn(x,w)){l=window.setTimeout(k,hs);return}j(!1),C(D),L((w==null?void 0:w.installTask)??null),h(Be(w,(w==null?void 0:w.installTask)??null))}catch{if(b)return;h(s("settings.serverRestarting")),l=window.setTimeout(k,hs)}};return h(s("settings.serverRestarting")),l=window.setTimeout(k,Math.max(x.restartDelayMs??0,Nn)),()=>{b=!0,window.clearTimeout(l)}},[d,x]);async function m(){n(!0),h(null);try{const b=await Fe(),l=b.packages[0]??null;C(b),L((l==null?void 0:l.installTask)??null),h(Be(l,(l==null?void 0:l.installTask)??null)),l!=null&&l.hasUpdate&&await t.bridge.showNotification(s("settings.serverUpdateReady"),`${s("settings.serverTargetVersion")}: ${l.latestVersion??"-"}`)}catch(b){h(b instanceof Error?b.message:s("settings.serverCheckFailed"))}finally{n(!1)}}async function y(){if(v!=null&&v.packageName){p(!1),j(!1),r(!0),h(null);try{const b=await vn(v.packageName);L(b),h(Ke(b))}catch(b){r(!1),h(b instanceof Error?b.message:s("settings.serverInstallFailed"))}}}const M=!!(v&&v.checkStatus!=="check_failed"&&v.hasUpdate&&!v.restartRequired&&!Ve(x==null?void 0:x.status)&&!u);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-update-card",children:[e.jsxs("div",{className:"settings-update-summary",children:[e.jsxs("div",{className:"settings-update-field",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.serverCurrentVersion")}),e.jsx("strong",{className:"settings-update-value",children:(v==null?void 0:v.currentVersion)??"-"})]}),e.jsxs("div",{className:"settings-update-field",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.serverTargetVersion")}),e.jsx("strong",{className:"settings-update-value",children:(v==null?void 0:v.latestVersion)??"-"})]})]}),v!=null&&v.hasUpdate&&!u?e.jsx("p",{className:"settings-update-note","data-tone":"warning",children:s("settings.serverInstallWarning")}):null,P?e.jsx("p",{className:"settings-update-status","data-tone":wn(v,x,u),children:P}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:a||i||u,onClick:m,children:a?s("common.loading"):s("settings.serverCheckNow")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!M||a||i||u,onClick:()=>p(!0),children:i?s("common.loading"):s("settings.serverInstallNow")})]})]}),e.jsx(Tn,{open:f,busy:i,mobile:t.isMobile,targetVersion:(v==null?void 0:v.latestVersion)??null,onClose:()=>p(!1),onConfirm:()=>{y()}})]})}function Be(t,a){return a?Ke(a):t?t.restartRequired?s("settings.serverRestartRequired"):t.checkStatus==="check_failed"?t.checkError??s("settings.serverCheckFailed"):t.latestVersion?t.hasUpdate?s("settings.serverUpdateReady"):s("settings.serverUpToDate"):s("settings.serverLatestUnknown"):s("settings.serverCheckNow")}function Ke(t){switch(t.status){case"queued":return s("settings.serverInstallQueued");case"running":return s("settings.serverInstalling");case"succeeded":return t.restartScheduled?s("settings.serverRestarting"):t.restartRequired?s("settings.serverRestartRequired"):s("settings.serverInstallSucceeded");case"cancelled":return s("settings.serverInstallCancelled");case"timeout":return s("settings.serverInstallTimeout");case"failed":return t.errorMessage??s("settings.serverInstallFailed");default:return t.errorMessage??s("settings.serverInstallFailed")}}function wn(t,a,n){if(n)return"warning";if(a)switch(a.status){case"queued":case"running":return"warning";case"succeeded":return a.restartRequired?"warning":"success";case"failed":case"cancelled":case"timeout":return"danger";default:return"neutral"}return t?t.checkStatus==="check_failed"?"danger":t.restartRequired||t.hasUpdate?"warning":"success":"neutral"}function Ve(t){return t==="queued"||t==="running"}function Sn(t,a){return a?t.targetVersion?ps(a.currentVersion)===ps(t.targetVersion):!a.hasUpdate:!1}function ps(t){return(t??"").trim().replace(/^v/i,"")}function Tn({open:t,busy:a,mobile:n,targetVersion:i,onClose:r,onConfirm:d}){const j=e.jsxs(te,{children:[e.jsx("button",{type:"button",className:"secondary-button",disabled:a,onClick:r,children:s("common.cancel")}),e.jsx("button",{type:"button",className:"primary-button",disabled:a,onClick:d,children:a?s("common.loading"):s("settings.serverInstallConfirmAction")})]}),f=e.jsxs(le,{className:"settings-update-confirm-section",children:[e.jsx("p",{className:"settings-update-confirm-warning",children:s("settings.serverInstallWarning")}),e.jsxs("div",{className:"settings-update-confirm-meta",children:[e.jsx("span",{className:"settings-update-label",children:s("settings.serverTargetVersion")}),e.jsx("strong",{className:"settings-update-value",children:i??"-"})]})]});return n?e.jsx(Rs,{open:t,title:s("settings.serverInstallConfirmTitle"),description:s("settings.serverInstallConfirmDescription"),height:"auto",kind:"form",dismissible:!a,footer:j,onClose:r,children:f}):e.jsx(Pt,{open:t,title:s("settings.serverInstallConfirmTitle"),description:s("settings.serverInstallConfirmDescription"),size:"compact",layout:"confirm",bodyClassName:"settings-update-confirm-body",dismissible:!a,footer:j,onClose:r,children:f})}async function kn(){return await I.request("/api/system/relay-tunnel/status")}async function He(t){return await I.request("/api/system/relay-tunnel/config",{method:"PUT",body:JSON.stringify(t)})}async function Cn(t){return await I.request("/api/system/relay-tunnel/control/login",{method:"POST",body:JSON.stringify(t)})}async function Dn(){return await I.request("/api/system/relay-tunnel/control/logout",{method:"POST"})}async function Mn(t){const a=t.hostLabel.trim(),n=`/api/system/relay-tunnel/control/host-label-availability?hostLabel=${encodeURIComponent(a)}`;return await I.request(n)}async function Pn(t){return await I.request("/api/system/relay-tunnel/control/bind",{method:"POST",body:JSON.stringify(t)})}async function Ln(){return await I.request("/api/system/relay-tunnel/control/wallet")}async function bs(){return await I.request("/api/system/relay-tunnel/enable",{method:"POST"})}async function Rn(){return await I.request("/api/system/relay-tunnel/disable",{method:"POST"})}async function An(){return await I.request("/api/system/relay-tunnel/unbind",{method:"POST"})}function En(){const t=Ge(),{showToast:a}=jt(),[n,i]=c.useState(null),[r,d]=c.useState(""),[j,f]=c.useState(()=>Xe()),[p,P]=c.useState(()=>ct()),[h,T]=c.useState(""),[C,x]=c.useState(""),[L,v]=c.useState(null),[u,m]=c.useState({status:"idle"}),[y,M]=c.useState(!0),[b,l]=c.useState(null),[k,D]=c.useState(null),[w,O]=c.useState(null),[J,q]=c.useState(null),[$,U]=c.useState(null),A=c.useRef(!0),_=Me(n==null?void 0:n.controlBaseUrl),B=ot(j),W=B??_,z=Me(B??(n==null?void 0:n.controlBaseUrl)),N=r.trim(),E=B!==null&&B!==_,R=(n==null?void 0:n.activated)??!1,g=h.trim().length>0&&C.trim().length>0,F=!!(n!=null&&n.controlAccountEmail),S=n!=null&&n.bindingId?!0:u.status==="available"&&u.hostLabel===N,G=!!(n!=null&&n.bindingId)||F&&N.length>0&&S,X=fs({controlBaseUrl:z,tunnelDomain:n==null?void 0:n.tunnelDomain,hostLabel:r}),ne=!!(n!=null&&n.controlAccountEmail||n!=null&&n.bindingId),ce=!!(n!=null&&n.bindingId||S),ve=!!(n!=null&&n.enabled&&(n!=null&&n.bindingId)),Ws=!!(n!=null&&n.bindingId)||G,Ks=L?me(L.grantedBytes):s("settings.tailscaleUnavailable"),Js=me(L?L.usedBytes:n==null?void 0:n.trafficUsedBytes),Gs=me(L?L.remainingBytes:n==null?void 0:n.trafficRemainingBytes),Ce=Je(Q.getState()),Y=kt(),oe=Y?s(Ct(Y.kind)):null,je=Y?In(Y):null;c.useEffect(()=>(A.current=!0,ye(!1),()=>{A.current=!1}),[]),c.useEffect(()=>{if(!R)return;const o=window.setInterval(()=>{ye(!0)},5e3);return()=>{window.clearInterval(o)}},[R]),c.useEffect(()=>{!R||!F||Ne()},[R,F]),c.useEffect(()=>{n!=null&&n.bindingId||u.status!=="idle"&&u.hostLabel!==N&&m({status:"idle"})},[u,N,n==null?void 0:n.bindingId]),c.useEffect(()=>{f(_)},[_]);async function ye(o,V){o||M(!0);try{const ae=await kn();if(!A.current)return;Z(ae,V),D(null)}catch(ae){A.current&&D($e(ae,"status",Ce))}finally{A.current&&!o&&M(!1)}}function Z(o,V){i(o),U(null),o.controlAccountEmail||v(null),o.tunnelDomain&&r.trim().length===0&&d(qs(o.tunnelDomain)),((V==null?void 0:V.syncProfile)??!0)&<(o)}async function Ne(){try{const o=await Ln();if(!A.current)return;v(o.wallet)}catch(o){A.current&&U(ee(o))}}async function Zs(){if(g){l("login-control"),U(null);try{const o=await Cn({email:h.trim(),password:C});q(null),Z(o),await Ne()}catch(o){q($e(o,"login",Ce))}finally{l(null)}}}async function Qs(){l("logout-control"),U(null);try{const o=await Dn();Z(o),v(null),m({status:"idle"})}catch(o){U(ee(o))}finally{l(null)}}async function Ze(){if(!N)throw new Error(s("settings.relayTunnelHostLabelRequired"));if(u.status==="available"&&u.hostLabel===N)return{hostLabel:u.hostLabel,tunnelDomain:u.tunnelDomain,available:!0,reason:"available"};m({status:"checking",hostLabel:N});const o=await Mn({hostLabel:N});if(!o.available||!o.tunnelDomain){const V=On(o);throw m({status:"error",hostLabel:N,message:V}),new Error(V)}return m({status:"available",hostLabel:N,tunnelDomain:o.tunnelDomain}),o}async function Ys(){if(!(!ne||n!=null&&n.bindingId)){l("check-host-label"),U(null);try{await Ze()}catch{}finally{l(null)}}}async function Xs(){l("learn-service"),U(null);try{await We(t.bridge.openExternal,z)}catch(o){U(ee(o))}finally{l(null)}}async function et(){l("manage-account"),U(null);try{await We(t.bridge.openExternal,z)}catch(o){U(ee(o))}finally{l(null)}}async function st(){if(X)try{await Bn(X,t),a({title:s("settings.relayTunnelAccessUrlCopied"),tone:"success"})}catch(o){a({title:o instanceof Error?o.message:s("settings.relayTunnelCopyAccessUrlFailed"),tone:"error"})}}async function tt(){if(X)try{await We(t.bridge.openExternal,X)}catch(o){a({title:o instanceof Error?o.message:s("settings.relayTunnelOpenAccessUrlFailed"),tone:"error"})}}async function nt(){if(G){l("enable"),U(null);try{let o=n;if(o!=null&&o.activated||(o=await He({activated:!0,controlBaseUrl:W}),Z(o)),o!=null&&o.bindingId||(await Ze(),o=await Pn({hostLabel:N}),Z(o),await Ne()),!(o!=null&&o.enabled)){const V=await bs();Z(V)}}catch(o){U(ee(o))}finally{l(null)}}}async function at(){if(n!=null&&n.bindingId){l("reconnect"),U(null);try{n!=null&&n.enabled&&await Rn();const o=await bs();Z(o),o.controlAccountEmail&&await Ne()}catch(o){const V=ee(o);await ye(!0,{syncProfile:!1}),U(V)}finally{l(null)}}}async function Qe(){l("disconnect-device"),U(null);try{if(n!=null&&n.bindingId||n!=null&&n.accountId){const o=await An();Z(o)}if(n!=null&&n.activated){const o=await He({activated:!1});Z(o)}v(null),T(""),d(""),x(""),m({status:"idle"})}catch(o){U(ee(o))}finally{l(null)}}async function it(){if(!B){O(s("settings.serverInvalid"));return}l("save-config"),O(null);try{const o=await He({controlBaseUrl:B});O(null),Z(o)}catch(o){O($e(o,"config",Ce))}finally{l(null)}}return e.jsxs("div",{className:"settings-relay-tunnel-panel",children:[y&&!n?e.jsx(le,{heading:s("settings.relayTunnelWizardTitle"),description:s("settings.relayTunnelWizardDescription"),children:e.jsx("p",{className:"settings-remote-access-panel-note",children:s("common.loading")})}):null,!y&&!ve?e.jsxs(le,{heading:s("settings.relayTunnelWizardTitle"),description:s("settings.relayTunnelWizardDescription"),actions:e.jsx("button",{className:"secondary-button",disabled:b!==null,type:"button",onClick:()=>void Xs(),children:s("settings.relayTunnelLearnService")}),children:[k?e.jsx(qe,{title:s("settings.relayTunnelStatusErrorTitle"),message:k,action:e.jsx("button",{className:"secondary-button",disabled:y||b!==null,type:"button",onClick:()=>void ye(!1),children:s("common.retry")})}):null,e.jsxs("div",{className:"settings-relay-tunnel-step-list",children:[e.jsxs("section",{className:"settings-relay-tunnel-step","data-state":_e(ne,!0),children:[e.jsxs("div",{className:"settings-relay-tunnel-step-header",children:[e.jsx("span",{className:"settings-relay-tunnel-step-badge",children:"1"}),e.jsxs("div",{className:"settings-relay-tunnel-step-copy",children:[e.jsx("strong",{className:"settings-relay-tunnel-step-title",children:s("settings.relayTunnelStepLoginTitle")}),e.jsx("p",{className:"settings-relay-tunnel-step-description",children:s("settings.relayTunnelStepLoginDescription")})]}),e.jsx(Re,{className:"settings-relay-tunnel-step-tag",children:s(ze(ne,!0))})]}),e.jsx("div",{className:"settings-relay-tunnel-step-body",children:ne?e.jsxs(e.Fragment,{children:[n!=null&&n.controlAccountEmail?e.jsx("p",{className:"settings-relay-tunnel-success",children:s("settings.relayTunnelLoggedInAs",{email:n.controlAccountEmail})}):e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelStepLoginConnected")}),e.jsx(te,{align:"start",children:e.jsx("button",{className:"secondary-button",disabled:b!==null,type:"button",onClick:()=>{if(n!=null&&n.bindingId){Qe();return}Qs()},children:s("common.logout")})})]}):e.jsx(e.Fragment,{children:e.jsxs("div",{className:"settings-relay-tunnel-form",children:[e.jsx(pe,{label:s("settings.relayTunnelAccountEmail"),children:e.jsx("input",{"aria-label":s("settings.relayTunnelAccountEmail"),className:"settings-text-input",type:"email",value:h,onChange:o=>{T(o.target.value),q(null)},placeholder:s("settings.relayTunnelAccountEmailPlaceholder")})}),e.jsx(pe,{label:s("settings.relayTunnelAccountPassword"),children:e.jsx("input",{"aria-label":s("settings.relayTunnelAccountPassword"),className:"settings-text-input",type:"password",value:C,onChange:o=>{x(o.target.value),q(null)},placeholder:s("settings.relayTunnelAccountPasswordPlaceholder")})}),J?e.jsx(qe,{title:s("settings.relayTunnelLoginErrorTitle"),message:J}):null,e.jsxs(te,{align:"start",children:[e.jsx("button",{className:"settings-button",disabled:b!==null||!g,type:"button",onClick:()=>void Zs(),children:b==="login-control"?s("common.loading"):s("settings.relayTunnelLoginAccount")}),e.jsx("button",{className:"secondary-button",disabled:b!==null,type:"button",onClick:()=>{P(o=>!o),O(null)},children:p?s("settings.relayTunnelAdvancedSettingsHide"):s("settings.relayTunnelAdvancedSettings")})]}),p?e.jsxs("div",{className:"settings-relay-tunnel-inline-stack",children:[e.jsx(pe,{label:s("settings.relayTunnelControlBaseUrl"),description:s("settings.relayTunnelServerAddressHint"),children:e.jsx("input",{"aria-label":s("settings.relayTunnelControlBaseUrl"),className:"settings-text-input",type:"url",value:j,onChange:o=>{f(o.target.value),O(null)},placeholder:Xe()})}),e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelAdvancedSettingsDescription")}),w?e.jsx(qe,{title:s("settings.relayTunnelConfigErrorTitle"),message:w}):null,e.jsx(te,{align:"start",children:e.jsx("button",{className:"settings-button",disabled:y||b!==null||!E,type:"button",onClick:()=>void it(),children:b==="save-config"?s("common.loading"):s("common.save")})})]}):null]})})})]}),e.jsxs("section",{className:"settings-relay-tunnel-step","data-state":_e(ce,ne),children:[e.jsxs("div",{className:"settings-relay-tunnel-step-header",children:[e.jsx("span",{className:"settings-relay-tunnel-step-badge",children:"2"}),e.jsxs("div",{className:"settings-relay-tunnel-step-copy",children:[e.jsx("strong",{className:"settings-relay-tunnel-step-title",children:s("settings.relayTunnelStepHostLabelTitle")}),e.jsx("p",{className:"settings-relay-tunnel-step-description",children:s("settings.relayTunnelStepHostLabelDescription")})]}),e.jsx(Re,{className:"settings-relay-tunnel-step-tag",children:s(ze(ce,ne))})]}),e.jsx("div",{className:"settings-relay-tunnel-step-body",children:ne?n!=null&&n.bindingId?e.jsx("p",{className:"settings-relay-tunnel-success",children:s("settings.relayTunnelHostLabelAvailable",{domain:X??n.tunnelDomain??s("settings.relayTunnelUnbound")})}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-relay-tunnel-domain-row",children:[e.jsx("input",{"aria-label":s("settings.relayTunnelHostLabel"),className:"settings-text-input settings-relay-tunnel-domain-prefix",value:r,onChange:o=>d(o.target.value),placeholder:s("settings.relayTunnelHostLabelPlaceholder")}),e.jsx("span",{className:"settings-relay-tunnel-domain-suffix",children:s("settings.relayTunnelHostLabelSuffix")}),e.jsx("button",{className:"settings-button settings-relay-tunnel-domain-check",disabled:b!==null||N.length===0,type:"button",onClick:()=>void Ys(),children:b==="check-host-label"?s("common.loading"):s("settings.relayTunnelHostLabelCheck")})]}),e.jsxs("div",{className:"settings-relay-tunnel-inline-stack",children:[u.status==="available"&&u.hostLabel===N?e.jsx("p",{className:"settings-relay-tunnel-success",children:s("settings.relayTunnelHostLabelAvailable",{domain:fs({controlBaseUrl:W,tunnelDomain:u.tunnelDomain,hostLabel:u.hostLabel})??u.tunnelDomain})}):null,u.status==="checking"&&u.hostLabel===N?e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelHostLabelChecking")}):null,u.status==="error"&&u.hostLabel===N?e.jsx("p",{className:"settings-relay-tunnel-error",children:u.message}):null]})]}):e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelStepLocked")})})]}),e.jsxs("section",{className:"settings-relay-tunnel-step","data-state":_e(ve,ce),children:[e.jsxs("div",{className:"settings-relay-tunnel-step-header",children:[e.jsx("span",{className:"settings-relay-tunnel-step-badge",children:"3"}),e.jsxs("div",{className:"settings-relay-tunnel-step-copy",children:[e.jsx("strong",{className:"settings-relay-tunnel-step-title",children:s("settings.relayTunnelStepStartTitle")}),e.jsx("p",{className:"settings-relay-tunnel-step-description",children:s("settings.relayTunnelStepStartDescription")})]}),e.jsx(Re,{className:"settings-relay-tunnel-step-tag",children:s(ze(ve,ce))})]}),e.jsx("div",{className:"settings-relay-tunnel-step-body",children:ce?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:R?s("settings.relayTunnelStepStartReady"):s("settings.relayTunnelActivationHint")}),e.jsx(te,{align:"start",children:e.jsx("button",{className:"settings-button",disabled:b!==null||!Ws,type:"button",onClick:()=>void nt(),children:b==="enable"?s("common.loading"):s("settings.relayTunnelStartAction")})})]}):e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelStepLocked")})})]})]}),e.jsxs("div",{className:"settings-relay-tunnel-inline-stack",children:[Y&&oe&&je?e.jsx(Un,{hint:je,label:oe,url:Y.url}):null,e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelTrustBoundaryNotice")}),n!=null&&n.lastError?e.jsx("p",{className:"settings-relay-tunnel-error",children:s("settings.relayTunnelRecentError",{message:n.lastError})}):null,$?e.jsx("p",{className:"settings-relay-tunnel-error",children:$}):null]})]}):null,!y&&ve?e.jsxs(le,{heading:s("settings.relayTunnelReadyTitle"),description:s("settings.relayTunnelReadyDescription"),children:[e.jsxs(As,{compact:!0,children:[Y&&oe?e.jsxs(e.Fragment,{children:[e.jsx(se,{label:s("settings.relayTunnelClientRouteLabel"),value:oe}),e.jsx(se,{label:s("settings.relayTunnelClientRouteAddressLabel"),value:Y.url})]}):null,e.jsx(se,{className:"settings-relay-tunnel-summary-line-access-url",label:s("settings.relayTunnelAccessUrlLabel"),trailing:X?e.jsxs("div",{className:"settings-relay-tunnel-access-url",children:[e.jsx("span",{className:"settings-relay-tunnel-access-url-text",title:X,children:X}),e.jsxs("span",{className:"settings-relay-tunnel-access-url-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>void st(),children:s("settings.relayTunnelCopyAccessUrl")}),e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>void tt(),children:s("settings.relayTunnelOpenAccessUrl")})]})]}):e.jsx("span",{className:"settings-relay-tunnel-summary-value",children:s("settings.relayTunnelUnbound")})}),e.jsx(se,{label:s("settings.relayTunnelTrafficGranted"),value:Ks}),e.jsx(se,{label:s("settings.relayTunnelTrafficUsed"),value:Js}),e.jsx(se,{label:s("settings.relayTunnelTrafficRemaining"),value:Gs})]}),e.jsxs(te,{align:"start",className:"settings-relay-tunnel-ready-actions",children:[e.jsx("button",{className:"secondary-button",disabled:b!==null||!(n!=null&&n.bindingId),type:"button",onClick:()=>void at(),children:b==="reconnect"?s("common.loading"):s("settings.relayTunnelReconnectAction")}),e.jsx("button",{className:"secondary-button",disabled:b!==null,type:"button",onClick:()=>void et(),children:b==="manage-account"?s("common.loading"):s("settings.relayTunnelManageAccountAction")}),e.jsx("button",{className:"settings-button settings-button-danger",disabled:b!==null,type:"button",onClick:()=>void Qe(),children:b==="disconnect-device"?s("common.loading"):s("settings.relayTunnelDisconnectDeviceAction")})]}),e.jsxs("div",{className:"settings-relay-tunnel-inline-stack",children:[Y&&oe&&je?e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:je}):null,e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelTrustBoundaryNotice")}),n!=null&&n.lastError?e.jsx("p",{className:"settings-relay-tunnel-error",children:s("settings.relayTunnelRecentError",{message:n.lastError})}):null,$?e.jsx("p",{className:"settings-relay-tunnel-error",children:$}):null]})]}):null]});function lt(o){const V=Q.getState(),ae=dt(V);if(!ae)return;const Ye=rt(o);Vn(ae.relayTunnel??null,Ye)||Q.update({hosts:V.hosts.map(De=>De.id===ae.id?{...De,relayTunnel:Ye,updatedAt:new Date().toISOString()}:De)})}function rt(o){return!(o!=null&&o.bindingId)||!o.tunnelDomain?null:{provider:"codingns_relay",enabled:o.enabled,tunnelDomain:o.tunnelDomain.trim().toLowerCase(),controlBaseUrl:Me(o.controlBaseUrl),bindingId:o.bindingId,hostFingerprint:o.hostFingerprint,candidateEndpoints:o.candidateEndpoints}}}function Un({label:t,url:a,hint:n}){return e.jsxs(e.Fragment,{children:[e.jsxs(As,{compact:!0,children:[e.jsx(se,{label:s("settings.relayTunnelClientRouteLabel"),value:t}),e.jsx(se,{label:s("settings.relayTunnelClientRouteAddressLabel"),value:a})]}),e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:n})]})}function se({label:t,value:a,trailing:n,className:i}){return e.jsx(Dt,{className:i,label:t,trailing:n??e.jsx("span",{className:"settings-relay-tunnel-summary-value",children:a})})}function In(t){if(t.probeInProgress)return s("settings.relayTunnelClientRouteHintRelayProbing");switch(t.kind){case"relay":return s("settings.relayTunnelClientRouteHintRelay");case"lan":return s("settings.relayTunnelClientRouteHintLan");case"loopback":return s("settings.relayTunnelClientRouteHintLoopback");case"tailscale":return s("settings.relayTunnelClientRouteHintTailscale");default:return s("settings.relayTunnelClientRouteHintDirect")}}function qe({title:t,message:a,action:n}){return e.jsxs("div",{className:"settings-relay-tunnel-feedback-banner",role:"alert",children:[e.jsxs("div",{className:"settings-relay-tunnel-feedback-copy",children:[e.jsx("strong",{children:t}),e.jsx("span",{children:a})]}),n?e.jsx("div",{className:"settings-relay-tunnel-feedback-action",children:n}):null]})}function _e(t,a){return t?"done":a?"current":"pending"}function ze(t,a){return t?"settings.relayTunnelStepDone":a?"settings.relayTunnelStepCurrent":"settings.relayTunnelStepPending"}function On(t){switch(t.reason){case"reserved":return s("settings.relayTunnelHostLabelReserved");case"occupied":return s("settings.relayTunnelHostLabelOccupied");case"available":return t.tunnelDomain?s("settings.relayTunnelHostLabelAvailable",{domain:t.tunnelDomain}):s("settings.relayTunnelHostLabelUnavailable");default:return s("settings.relayTunnelHostLabelUnavailable")}}function ee(t){return t instanceof fe||t instanceof Error?t.message:s("settings.relayTunnelLoadFailed")}function $e(t,a,n){if(t instanceof fe&&t.errorCode==="NETWORK_ERROR"){const i=(n==null?void 0:n.trim())||s("common.unknown");return a==="login"?s("settings.relayTunnelLoginNetworkError",{address:i}):a==="config"?s("settings.relayTunnelConfigNetworkError",{address:i}):s("settings.relayTunnelStatusNetworkError",{address:i})}return ee(t)}function me(t){if(!t)return s("settings.tailscaleUnavailable");const a=Number(t);return!Number.isFinite(a)||a<1024?`${t} B`:a<1024**2?`${(a/1024).toFixed(1)} KB`:a<1024**3?`${(a/1024**2).toFixed(1)} MB`:`${(a/1024**3).toFixed(2)} GB`}function qs(t){return t?t.split(".")[0]||s("common.unknown"):s("common.unknown")}function fs(t){var i,r,d,j;const a=xs(t.hostLabel)??xs(qs(t.tunnelDomain));if(!a)return((i=t.tunnelDomain)==null?void 0:i.trim())??null;const n=(r=t.controlBaseUrl)==null?void 0:r.trim();if(!n)return((d=t.tunnelDomain)==null?void 0:d.trim())??null;try{const f=new URL(n);return f.hostname=`${a}.${f.hostname}`,f.pathname="/",f.search="",f.hash="",f.origin}catch{return((j=t.tunnelDomain)==null?void 0:j.trim())??null}}function xs(t){const a=(t==null?void 0:t.trim().toLowerCase())??"";return!a||a===s("common.unknown").toLowerCase()?null:a}async function We(t,a){!(await t(a)).ok&&typeof window<"u"&&window.open(a,"_blank","noopener,noreferrer")}function Fn(t){var i;if(typeof document>"u")return!1;const a=(i=document.execCommand)==null?void 0:i.bind(document);if(typeof a!="function")return!1;const n=document.createElement("textarea");n.value=t,n.setAttribute("readonly","true"),n.style.position="fixed",n.style.top="-9999px",n.style.opacity="0",document.body.append(n),n.select();try{return a("copy")}catch{return!1}finally{n.remove()}}async function Bn(t,a){var n;if(a.bridge.supported)try{if((await a.bridge.writeClipboardText(t)).ok)return}catch{}if(typeof navigator<"u"&&((n=navigator.clipboard)!=null&&n.writeText))try{await navigator.clipboard.writeText(t);return}catch{}if(!Fn(t))throw new Error(s("settings.relayTunnelCopyAccessUrlFailed"))}function Vn(t,a){return t===a?!0:!t||!a?!1:t.provider===a.provider&&t.enabled===a.enabled&&t.tunnelDomain===a.tunnelDomain&&t.controlBaseUrl===a.controlBaseUrl&&(t.bindingId??null)===(a.bindingId??null)&&(t.hostFingerprint??null)===(a.hostFingerprint??null)&&JSON.stringify(t.candidateEndpoints??[])===JSON.stringify(a.candidateEndpoints??[])}async function vs(){return await I.request("/api/system/tailscale/status")}async function js(t){return await I.request("/api/system/tailscale/config",{method:"PUT",body:JSON.stringify(t)})}async function Hn(){return await I.request("/api/system/tailscale/enable",{method:"POST"})}async function qn(){return await I.request("/api/system/tailscale/disable",{method:"POST"})}async function _n(){return await I.request("/api/system/tailscale/login",{method:"POST"})}async function zn(){return await I.request("/api/system/tailscale/logout",{method:"POST"})}function $n({children:t}){return e.jsx("div",{className:"settings-remote-access-metrics",children:t})}function Se({label:t,value:a}){return e.jsxs("article",{className:"settings-remote-access-metric-card",children:[e.jsx("span",{className:"settings-remote-access-metric-label",children:t}),e.jsx("strong",{className:"settings-remote-access-metric-value",children:a})]})}function Wn({checked:t,label:a,disabled:n,onChange:i}){return e.jsxs("div",{className:"settings-remote-access-switch",children:[e.jsx("span",{className:"settings-remote-access-switch-label",children:a}),e.jsxs("label",{className:"settings-mobile-switch","data-disabled":n?"true":void 0,onClick:r=>{if(n){r.preventDefault();return}r.target instanceof HTMLInputElement||(r.preventDefault(),i(!t))},children:[e.jsx("input",{type:"checkbox","aria-label":a,checked:t,disabled:n,onChange:r=>i(r.target.checked)}),e.jsx("span",{className:"settings-mobile-switch-track","aria-hidden":"true",children:e.jsx("span",{className:"settings-mobile-switch-thumb"})})]})]})}function Kn({configMode:t="modal"}){const a=Ge(),[n,i]=c.useState(null),[r,d]=c.useState(""),[j,f]=c.useState(""),[p,P]=c.useState(!0),[h,T]=c.useState(null),[C,x]=c.useState(null),[L,v]=c.useState(!1),[u,m]=c.useState(!1),y=c.useRef(!0),M=c.useRef(!1),b=c.useRef(async()=>{}),l=t==="inline",k=(n==null?void 0:n.activated)??!1;M.current=u;function D(N){if(i(N),d(N.controlServerUrl??""),f(N.hostname??""),x(null),!N.activated){m(!1),v(!1);return}M.current&&!ws(N.lastError)&&m(!1)}b.current=async N=>{N||P(!0);try{const E=await vs();if(!y.current)return;D(E)}catch(E){if(!y.current)return;x(he(E))}finally{y.current&&!N&&P(!1)}},c.useEffect(()=>(y.current=!0,b.current(!1),()=>{y.current=!1}),[]),c.useEffect(()=>{if(!k)return;const N=window.setInterval(()=>{b.current(!0)},5e3);return()=>{window.clearInterval(N)}},[k]),c.useEffect(()=>{if(!u||!k)return;function N(){b.current(!0)}function E(){document.visibilityState==="visible"&&b.current(!0)}return window.addEventListener("focus",N),document.addEventListener("visibilitychange",E),()=>{window.removeEventListener("focus",N),document.removeEventListener("visibilitychange",E)}},[k,u]);const w=((n==null?void 0:n.controlServerUrl)??"")!==r.trim()||((n==null?void 0:n.hostname)??"")!==j.trim(),O=k&&ws(n==null?void 0:n.lastError),J=k&&Zn(a.ui.osFamily)&&O;async function q(){const N=await js({controlServerUrl:Ns(r),hostname:Ns(j)});return D(N),N}async function $(N){T("toggle-activation"),x(null);try{const E=await js({activated:N});D(E)}catch(E){x(he(E))}finally{T(null),P(!1)}}async function U(N){T(N),x(null);try{w&&N!=="disable"&&N!=="logout"&&await q();const E=N==="enable"?await Hn():N==="disable"?await qn():N==="login"?await _n():await zn();D(E)}catch(E){x(he(E))}finally{T(null)}}async function A(){T("save"),x(null);try{await q(),v(!1)}catch(N){x(he(N))}finally{T(null)}}async function _(){T("refresh"),x(null);try{const N=await vs();D(N)}catch(N){x(he(N))}finally{T(null),P(!1)}}async function B(){const N=Qn(a.ui.osFamily);if(N){T("install"),x(null);try{const E=await a.bridge.openExternal(N);if(!E.ok){x(E.detail??s("settings.tailscaleInstallOpenFailed"));return}m(!0)}catch(E){x(E instanceof Error?E.message:s("settings.tailscaleInstallOpenFailed"))}finally{T(null)}}}function W(){h!=="save"&&v(!1)}const z=k?e.jsxs("span",{className:"settings-tailscale-status-indicator","data-tone":Yn((n==null?void 0:n.phase)??"disabled"),children:[e.jsx("span",{className:"settings-tailscale-status-dot","aria-hidden":"true"}),Gn((n==null?void 0:n.phase)??"disabled")]}):s("settings.remoteAccessFeatureDisabledValue");return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-tailscale-panel",children:[e.jsx(le,{heading:s("settings.tailscaleSectionTitle"),description:s("settings.tailscaleSectionDescription"),actions:e.jsx(Wn,{checked:k,label:s("settings.tailscaleMasterSwitchLabel"),disabled:h!==null,onChange:N=>{$(N)}}),children:p&&!n?e.jsx("p",{className:"settings-remote-access-panel-note",children:s("common.loading")}):e.jsxs(e.Fragment,{children:[e.jsxs($n,{children:[e.jsx(Se,{label:s("settings.tailscaleStatusIndicator"),value:z}),e.jsx(Se,{label:s("settings.tailscaleServerAddress"),value:k?(n==null?void 0:n.reachableBaseUrl)??s("settings.tailscaleUnavailable"):s("settings.tailscaleUnavailable")}),e.jsx(Se,{label:s("settings.tailscaleAccountName"),value:k?(n==null?void 0:n.accountName)??s("settings.tailscaleUnavailable"):s("settings.tailscaleUnavailable")}),e.jsx(Se,{label:s("settings.tailscaleIpAddress"),value:k?Jn(n):s("settings.tailscaleUnavailable")})]}),k?null:e.jsx("p",{className:"settings-remote-access-panel-note",children:s("settings.tailscaleActivationHint")}),k&&(n==null?void 0:n.phase)==="needs_login"&&n.loginUrl?e.jsx("p",{className:"settings-tailscale-login-url",children:e.jsx("a",{className:"settings-tailscale-link",href:n.loginUrl,rel:"noreferrer",target:"_blank",children:n.loginUrl})}):null,C||n!=null&&n.lastError?e.jsx("p",{className:"settings-relay-tunnel-error",children:C??(n==null?void 0:n.lastError)}):null,k?e.jsxs(te,{align:"start",children:[J?e.jsx("button",{className:"settings-button",type:"button",disabled:p||h!==null,onClick:()=>{B()},children:h==="install"?s("common.loading"):s("settings.tailscaleInstallAction")}):null,l?null:e.jsx("button",{className:"secondary-button",type:"button",disabled:p||h!==null,onClick:()=>v(!0),children:s("settings.tailscaleConfigure")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:p||h!==null,onClick:()=>{_()},children:h==="refresh"?s("common.loading"):s("settings.tailscaleRefresh")}),n!=null&&n.enabled?e.jsx("button",{className:"secondary-button",type:"button",disabled:p||h!==null||O,onClick:()=>{U("disable")},children:h==="disable"?s("common.loading"):s("settings.tailscaleDisable")}):e.jsx("button",{className:"secondary-button",type:"button",disabled:p||h!==null||O,onClick:()=>{U("enable")},children:h==="enable"?s("common.loading"):s("settings.tailscaleEnable")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:p||h!==null||!(n!=null&&n.enabled)||O,onClick:()=>{U("login")},children:h==="login"?s("common.loading"):s("settings.tailscaleLogin")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:p||h!==null||!(n!=null&&n.enabled)||O,onClick:()=>{U("logout")},children:h==="logout"?s("common.loading"):s("settings.tailscaleLogout")})]}):null]})}),l&&k?e.jsx(le,{heading:s("settings.tailscaleConfigModalTitle"),description:s("settings.tailscaleConfigModalDescription"),children:e.jsx(ys,{controlServerUrlDraft:r,hostnameDraft:j,pendingAction:h,configDirty:w,onControlServerUrlChange:d,onHostnameChange:f,onSave:()=>{A()}})}):null]}),e.jsx(re,{open:!l&&k&&L,title:s("settings.tailscaleConfigModalTitle"),description:s("settings.tailscaleConfigModalDescription"),size:"regular",onClose:W,children:e.jsx(ys,{controlServerUrlDraft:r,hostnameDraft:j,pendingAction:h,configDirty:w,footer:e.jsx("div",{className:"settings-tailscale-modal-actions",children:e.jsx("button",{className:"secondary-button",type:"button",disabled:h==="save",onClick:W,children:s("common.cancel")})}),onControlServerUrlChange:d,onHostnameChange:f,onSave:()=>{A()}})})]})}function ys({controlServerUrlDraft:t,hostnameDraft:a,pendingAction:n,configDirty:i,footer:r,onControlServerUrlChange:d,onHostnameChange:j,onSave:f}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-tailscale-form",children:[e.jsx(pe,{label:s("settings.tailscaleControlServer"),children:e.jsx("input",{"aria-label":s("settings.tailscaleControlServer"),className:"settings-text-input",placeholder:s("settings.tailscaleControlServerPlaceholder"),value:t,onChange:p=>d(p.target.value)})}),e.jsx(pe,{label:s("settings.tailscaleHostname"),children:e.jsx("input",{"aria-label":s("settings.tailscaleHostname"),className:"settings-text-input",placeholder:s("settings.tailscaleHostnamePlaceholder"),value:a,onChange:p=>j(p.target.value)})})]}),e.jsxs(te,{align:"start",className:"settings-tailscale-config-actions",children:[r,e.jsx("button",{className:"settings-button",type:"button",disabled:n!==null||!i,onClick:f,children:n==="save"?s("common.loading"):s("common.save")})]})]})}function Ns(t){const a=t.trim();return a.length>0?a:null}function he(t){return t instanceof fe||t instanceof Error?t.message:s("settings.tailscaleLoadFailed")}function Jn(t){if(!t)return s("settings.tailscaleUnavailable");const a=[t.tailnetIpv4,t.tailnetIpv6].filter(n=>!!n);return a.length>0?a.join(" / "):s("settings.tailscaleUnavailable")}function Gn(t){switch(t){case"blocked_uninitialized":return s("settings.tailscalePhaseBlockedUninitialized");case"starting":return s("settings.tailscalePhaseStarting");case"needs_login":return s("settings.tailscalePhaseNeedsLogin");case"running":return s("settings.tailscalePhaseRunning");case"stopping":return s("settings.tailscalePhaseStopping");case"error":return s("settings.tailscalePhaseError");case"disabled":default:return s("settings.tailscalePhaseDisabled")}}function ws(t){return t?t.includes("Tailscale CLI"):!1}function Zn(t){return t==="macos"||t==="windows"}function Qn(t){switch(t){case"macos":return"https://tailscale.com/download/mac";case"windows":return"https://tailscale.com/download/windows";default:return null}}function Yn(t){switch(t){case"running":return"green";case"starting":case"needs_login":case"error":return"yellow";case"disabled":case"blocked_uninitialized":case"stopping":default:return"gray"}}function _s({open:t,mobile:a,onClose:n}){const[i,r]=c.useState("tunnel"),d=c.useId(),j=[{id:"tunnel",label:s("settings.remoteAccessTunnelTab")},{id:"tailscale",label:s("settings.remoteAccessTailscaleTab")}],f=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"settings-model-tabs",role:"tablist","aria-label":s("settings.remoteAccessTabsLabel"),children:j.map(p=>{const P=`${d}-${p.id}-tab`,h=`${d}-${p.id}-panel`,T=i===p.id;return e.jsx("button",{id:P,type:"button",role:"tab",className:"settings-model-tab","data-active":T?"true":void 0,"aria-selected":T,"aria-controls":h,onClick:()=>r(p.id),children:p.label},p.id)})}),i==="tunnel"?e.jsx("div",{id:`${d}-tunnel-panel`,"aria-labelledby":`${d}-tunnel-tab`,role:"tabpanel",children:e.jsx(En,{})}):e.jsx("div",{id:`${d}-tailscale-panel`,"aria-labelledby":`${d}-tailscale-tab`,role:"tabpanel",children:e.jsx(Kn,{configMode:"inline"})})]});return a?e.jsx(Rs,{open:t,title:s("settings.remoteAccessModalTitle"),description:s("settings.remoteAccessModalDescription"),height:"full",kind:"form",showHandle:!0,onClose:n,children:f}):e.jsx(re,{open:t,title:s("settings.remoteAccessModalTitle"),description:s("settings.remoteAccessModalDescription"),size:"wide",onClose:n,children:f})}function Ss({title:t,description:a,actions:n,content:i,className:r}){return e.jsx(Lt,{className:r,children:e.jsxs("section",{className:"mobile-workspace-home-header mobile-page-header",children:[e.jsx("h1",{className:"mobile-workspace-switcher-heading",children:t}),e.jsxs("div",{className:"mobile-workspace-home-toolbar-top mobile-page-header-main",children:[e.jsx("div",{className:"mobile-page-header-copy",children:e.jsx("div",{className:"mobile-workspace-home-switcher mobile-page-header-static-title",children:e.jsx("span",{className:"mobile-workspace-home-switcher-label",children:t})})}),n?e.jsx("div",{className:"mobile-workspace-home-toolbar-actions mobile-page-header-actions",children:n}):null]}),a?e.jsx("p",{className:"mobile-workspace-home-path mobile-page-header-description",children:a}):null,i?e.jsx("div",{className:"mobile-page-header-content",children:i}):null]})})}const zs={start:43e3,end:47999};function Xn(t){return t==="appearance"||t==="model-management"||t==="server-connection"||t==="remote-access"||t==="security-privacy"||t==="software-update"}function ea(t){return t==="en-US"?s("locale.enUS"):s("locale.zhCN")}function sa(t){return t==="beta"?s("settings.releaseBeta"):s("settings.releaseStable")}function ta(t){switch(t){case"acceptEdits":return s("settings.permissionModeAcceptEdits");case"bypassPermissions":return s("settings.permissionModeBypassPermissions");default:return s("settings.permissionModeDefault")}}function na(){const t=Ds(),{theme:a,selectedTheme:n,autoTheme:i,setTheme:r,setAutoTheme:d}=Nt(),j=ut(S=>S),f=Pe(S=>S.profile.language),p=Pe(S=>S.profile.defaultPermissionMode),P=de(S=>S.sessionDisplaySortMode),h=de(S=>S.showSystemFiles),T=de(S=>S.notificationPreferences.notifyOnPermissionRequest),C=de(S=>S.notificationPreferences.notifyOnSessionCompleted),x=de(S=>S.notificationPreferences.notifyOnSessionFailed),L={language:f,defaultPermissionMode:p,debugPortPools:Pe(S=>S.profile.debugPortPools)??zs},v=Ge(),u=gt(j.platform),m=u,y=Je(j)??"",[M,b]=c.useState(y);c.useEffect(()=>{b(y)},[y]);function l(){ht.clear(),Le.resetToLocalFallback(),t("/login",{replace:!0})}function k(S){r(S)}function D(S){d(S)}function w(S){try{return mt(S)}catch{return null}}const O=w(M),J=O!==null&&O!==y;function q(S){S.preventDefault(),O&&Q.update({hosts:j.hosts.map(G=>G.id===j.activeHostId?{...G,baseUrl:O,updatedAt:new Date().toISOString()}:G)})}const $=[{value:"default",label:s("settings.permissionModeDefault")},{value:"acceptEdits",label:s("settings.permissionModeAcceptEdits")},{value:"bypassPermissions",label:s("settings.permissionModeBypassPermissions")}],U=[{value:"createdAt",label:s("settings.sessionSortModeCreatedAt")},{value:"updatedAt",label:s("settings.sessionSortModeUpdatedAt")},{value:"title",label:s("settings.sessionSortModeTitle")}];function A(S){Q.update({releaseChannel:S==="beta"?"beta":"stable"})}function _(S){Q.update({autoReconnect:S})}function B(S){Q.update({autoCheckUpdate:S})}function W(S){const G=S==="acceptEdits"||S==="bypassPermissions"?S:"default";Le.updateProfile({defaultPermissionMode:G}).catch(()=>{})}function z(S){const G=S==="updatedAt"||S==="title"?S:"createdAt";ue.setSessionDisplaySortMode(G)}function N(S){ue.setShowSystemFiles(S)}function E(S){ue.setNotificationPreferences({notifyOnPermissionRequest:S})}function R(S){ue.setNotificationPreferences({notifyOnSessionCompleted:S})}function g(S){ue.setNotificationPreferences({notifyOnSessionFailed:S})}async function F(S){await Le.updateProfile({debugPortPools:S})}return{platform:v,theme:a,selectedTheme:n,autoTheme:i,applyTheme:k,applyAutoTheme:D,runtimeConfig:j,accountPreferences:L,sessionDisplaySortMode:P,showSystemFiles:h,notifyOnPermissionRequest:T,notifyOnSessionCompleted:C,notifyOnSessionFailed:x,showServerSettings:m,canConfigureServerAddress:u,hostBaseUrlDraft:M,setHostBaseUrlDraft:b,canSaveHostBaseUrl:J,permissionModeOptions:$,sessionDisplaySortModeOptions:U,handleHostBaseUrlSubmit:q,handleLogout:l,updateReleaseChannel:A,updateAutoReconnect:_,updateAutoCheckUpdate:B,updateDefaultPermissionMode:W,updateSessionDisplaySortMode:z,updateShowSystemFiles:N,updateNotifyOnPermissionRequest:E,updateNotifyOnSessionCompleted:R,updateNotifyOnSessionFailed:g,updateDebugPortPools:F}}function ka(){const t=na(),a=yt();return t.platform.isMobile?e.jsx(ia,{model:t,appVersion:a}):e.jsx(aa,{model:t,appVersion:a})}function aa({model:t,appVersion:a}){const[n,i]=c.useState(!1),[r,d]=c.useState(!1),{theme:j,selectedTheme:f,autoTheme:p,applyTheme:P,applyAutoTheme:h,runtimeConfig:T,accountPreferences:C,sessionDisplaySortMode:x,showSystemFiles:L,notifyOnPermissionRequest:v,notifyOnSessionCompleted:u,notifyOnSessionFailed:m,showServerSettings:y,hostBaseUrlDraft:M,setHostBaseUrlDraft:b,canSaveHostBaseUrl:l,permissionModeOptions:k,sessionDisplaySortModeOptions:D,platform:w,handleHostBaseUrlSubmit:O,handleLogout:J,updateReleaseChannel:q,updateAutoReconnect:$,updateAutoCheckUpdate:U,updateDefaultPermissionMode:A,updateSessionDisplaySortMode:_,updateShowSystemFiles:B,updateNotifyOnPermissionRequest:W,updateNotifyOnSessionCompleted:z,updateNotifyOnSessionFailed:N,updateDebugPortPools:E}=t;return e.jsxs("div",{className:"settings-page",children:[e.jsxs("div",{className:"settings-container",children:[e.jsx("h1",{className:"settings-title",children:s("settings.title")}),e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.appearance")}),e.jsxs("div",{className:"settings-card",children:[e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.language")}),e.jsx("span",{className:"settings-row-description",children:s("settings.languageDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx(Ms,{})})]}),e.jsxs("div",{className:"settings-row settings-row-theme",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.theme")}),e.jsx("span",{className:"settings-row-description",children:s("settings.themeDescription")})]}),e.jsxs("div",{className:"settings-row-control settings-row-control-stretch",children:[e.jsxs("div",{className:"settings-theme-panel",children:[e.jsxs("div",{className:"settings-theme-toggle-row",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.autoTheme")}),e.jsx(H,{checked:p,label:s("settings.autoTheme"),onChange:h})]}),e.jsx("span",{className:"settings-theme-note",children:s("settings.autoThemeDescription")})]}),e.jsx("div",{className:"theme-selector",children:Ps.map(R=>e.jsxs("button",{type:"button",className:`theme-card ${f===R.id&&!p?"active":""}`,"aria-pressed":f===R.id&&!p,disabled:p,onClick:()=>P(R.id),children:[e.jsx("span",{className:"theme-preview",style:{background:R.color}}),e.jsx("span",{className:"theme-label",children:Ls(R)}),f===R.id&&!p?e.jsx("span",{className:"theme-check",children:"✓"}):null]},R.id))})]})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.workspaceSessionSortMode")}),e.jsx("span",{className:"settings-row-description",children:s("settings.workspaceSessionSortModeDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx("select",{"aria-label":s("settings.workspaceSessionSortMode"),className:"settings-select",value:x,onChange:R=>_(R.target.value),children:D.map(R=>e.jsx("option",{value:R.value,children:R.label},R.value))})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.showSystemFiles")}),e.jsx("span",{className:"settings-row-description",children:s("settings.showSystemFilesDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx(H,{checked:L,label:s("settings.showSystemFiles"),onChange:B})})]})]})]}),y?e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.serverConnection")}),e.jsxs("div",{className:"settings-card",children:[e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.serverAddress")}),e.jsx("span",{className:"settings-row-description",children:s("settings.serverDescription")})]}),e.jsx("div",{className:"settings-row-control settings-row-control-stretch",children:e.jsxs("form",{className:"settings-inline-form",onSubmit:O,children:[e.jsx("input",{"aria-label":s("settings.serverAddress"),className:"settings-text-input",value:M,onChange:R=>b(R.target.value)}),e.jsx("button",{className:"settings-button",disabled:!l,type:"submit",children:s("common.save")})]})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.autoReconnect")}),e.jsx("span",{className:"settings-row-description",children:s("settings.autoReconnectDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx(H,{checked:T.autoReconnect,label:s("settings.autoReconnect"),onChange:$})})]})]})]}):null,e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.modelManagement")}),e.jsx("div",{className:"settings-card",children:e.jsx("div",{className:"settings-row",children:e.jsx("div",{className:"settings-row-control settings-row-control-stretch",children:e.jsx(Us,{})})})})]}),e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.remoteAccess")}),e.jsx("div",{className:"settings-card",children:e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.remoteAccessManageTitle")}),e.jsx("span",{className:"settings-row-description",children:s("settings.remoteAccessManageDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx("button",{className:"settings-button",type:"button",onClick:()=>d(!0),children:s("settings.remoteAccessManageAction")})})]})})]}),e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.securityPrivacy")}),e.jsxs("div",{className:"settings-card",children:[e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.defaultPermissionMode")}),e.jsx("span",{className:"settings-row-description",children:s("settings.defaultPermissionModeDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx("select",{"aria-label":s("settings.defaultPermissionMode"),className:"settings-select",value:C.defaultPermissionMode,onChange:R=>A(R.target.value),children:k.map(R=>e.jsx("option",{value:R.value,children:R.label},R.value))})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.authDeviceManagement")}),e.jsx("span",{className:"settings-row-description",children:s("settings.authDeviceManagementDescription")})]}),e.jsx("div",{className:"settings-row-control settings-row-control-stretch",children:e.jsx(Fs,{})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.notifyOnPermissionRequest")}),e.jsx("span",{className:"settings-row-description",children:s("settings.notifyOnPermissionRequestDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx(H,{checked:v,label:s("settings.notifyOnPermissionRequest"),onChange:W})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.notifyOnSessionCompleted")}),e.jsx("span",{className:"settings-row-description",children:s("settings.notifyOnSessionCompletedDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx(H,{checked:u,label:s("settings.notifyOnSessionCompleted"),onChange:z})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.notifyOnSessionFailed")}),e.jsx("span",{className:"settings-row-description",children:s("settings.notifyOnSessionFailedDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx(H,{checked:m,label:s("settings.notifyOnSessionFailed"),onChange:N})})]})]})]}),e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.debugPortPool")}),e.jsx("div",{className:"settings-card",children:e.jsx($s,{value:C.debugPortPools,onSave:E})})]}),e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.softwareUpdate")}),e.jsxs("div",{className:"settings-card",children:[e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.releaseChannel")}),e.jsx("span",{className:"settings-row-description",children:s("settings.releaseChannelDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsxs("select",{"aria-label":s("settings.releaseChannel"),className:"settings-select",value:T.releaseChannel,onChange:R=>q(R.target.value),children:[e.jsx("option",{value:"stable",children:s("settings.releaseStable")}),e.jsx("option",{value:"beta",children:s("settings.releaseBeta")})]})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsx("div",{className:"settings-row-label",children:e.jsx("span",{className:"settings-row-title",children:s("settings.serverUpdate")})}),e.jsx("div",{className:"settings-row-control settings-row-control-stretch",children:e.jsx(Hs,{})})]}),w.isWeb?null:e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-row",children:[e.jsx("div",{className:"settings-row-label",children:e.jsx("span",{className:"settings-row-title",children:s("settings.autoCheckUpdate")})}),e.jsx("div",{className:"settings-row-control",children:e.jsx(H,{checked:T.autoCheckUpdate,label:s("settings.autoCheckUpdate"),onChange:U})})]}),e.jsxs("div",{className:"settings-row",children:[e.jsx("div",{className:"settings-row-label",children:e.jsx("span",{className:"settings-row-title",children:s("settings.clientUpdate")})}),e.jsx("div",{className:"settings-row-control settings-row-control-stretch",children:e.jsx(Es,{})})]})]})]})]}),e.jsxs("section",{className:"settings-section",children:[e.jsx("h2",{className:"settings-section-title",children:s("settings.advancedSettings")}),e.jsx("div",{className:"settings-card",children:e.jsxs("div",{className:"settings-row",children:[e.jsxs("div",{className:"settings-row-label",children:[e.jsx("span",{className:"settings-row-title",children:s("settings.parallelTaskDebug")}),e.jsx("span",{className:"settings-row-description",children:s("settings.parallelTaskDebugDescription")})]}),e.jsx("div",{className:"settings-row-control",children:e.jsx("button",{className:"settings-button",type:"button",onClick:()=>i(!0),children:s("settings.parallelTaskDebugAction")})})]})})]}),e.jsxs("div",{className:"settings-footer settings-footer-with-logout",children:[e.jsxs("span",{className:"settings-version",children:["CodingNS v",a]}),e.jsx("button",{className:"settings-button settings-button-danger settings-button-sticky",onClick:J,type:"button",children:s("common.logout")})]})]}),e.jsx(Et,{isOpen:n,onClose:()=>i(!1)}),e.jsx(_s,{open:r,mobile:!1,onClose:()=>d(!1)})]})}function ia({model:t,appVersion:a}){const n=Ds(),{section:i}=wt(),r=Xn(i)?i:null,d=[{id:"appearance",title:s("settings.appearance"),description:s("settings.appearanceSectionSummary"),value:ea(t.accountPreferences.language),icon:e.jsx(ma,{})}];return t.showServerSettings&&d.push({id:"server-connection",title:s("settings.serverConnection"),description:s("settings.serverConnectionSectionSummary"),value:Je(t.runtimeConfig)??"",icon:e.jsx(ha,{})}),d.push({id:"model-management",title:s("settings.modelManagement"),description:s("settings.modelManagementSectionSummary"),value:s("settings.modelManagementNavValue"),icon:e.jsx(fa,{})},{id:"remote-access",title:s("settings.remoteAccess"),description:s("settings.remoteAccessSectionSummary"),value:s("settings.remoteAccessNavValue"),icon:e.jsx(ba,{})},{id:"security-privacy",title:s("settings.securityPrivacy"),description:s("settings.securityPrivacySectionSummary"),value:ta(t.accountPreferences.defaultPermissionMode),icon:e.jsx(xa,{})},{id:"software-update",title:s("settings.softwareUpdate"),description:s("settings.softwareUpdateSectionSummary"),value:sa(t.runtimeConfig.releaseChannel),icon:e.jsx(pa,{})}),(r?d.find(f=>f.id===r)??null:null)?e.jsxs("div",{className:"settings-page settings-page-mobile mobile-page-scroll-root mobile-page-with-top-header",children:[e.jsx(Ss,{title:s("settings.title")}),e.jsxs("div",{className:"settings-mobile-container",children:[r==="appearance"?e.jsx(la,{model:t}):null,r==="model-management"?e.jsx(ua,{}):null,r==="server-connection"&&t.showServerSettings?e.jsx(ra,{model:t}):null,r==="remote-access"?e.jsx(da,{model:t}):null,r==="security-privacy"?e.jsx(ca,{model:t}):null,r==="software-update"?e.jsx(ga,{model:t}):null]}),e.jsx(ks,{onLogout:t.handleLogout})]}):e.jsxs("div",{className:"settings-page settings-page-mobile mobile-page-scroll-root mobile-page-with-top-header",children:[e.jsx(Ss,{title:s("settings.title")}),e.jsxs("div",{className:"settings-mobile-container",children:[e.jsx("section",{className:"settings-mobile-group-section",children:e.jsx("div",{className:"settings-mobile-list",children:d.map(f=>e.jsxs("button",{type:"button",className:"settings-mobile-nav-row",onClick:()=>n(`/settings/${f.id}`),children:[e.jsx("span",{className:"settings-mobile-nav-icon",children:f.icon}),e.jsxs("span",{className:"settings-mobile-nav-copy",children:[e.jsx("span",{className:"settings-mobile-nav-title",children:f.title}),e.jsx("span",{className:"settings-mobile-nav-description",children:f.description})]}),e.jsxs("span",{className:"settings-mobile-nav-trailing",children:[f.value?e.jsx("span",{className:"settings-mobile-nav-value",children:f.value}):null,e.jsx(va,{})]})]},f.id))})}),e.jsx("div",{className:"settings-footer settings-footer-mobile",children:e.jsxs("span",{className:"settings-version",children:["CodingNS v",a]})})]}),e.jsx(ks,{onLogout:t.handleLogout})]})}function la({model:t}){return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.language")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.languageDescription")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsx("div",{className:"settings-mobile-row-copy",children:e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.language")})}),e.jsx(Ms,{variant:"compact",className:"settings-mobile-language-switcher"})]})})]}),e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.theme")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.themeDescription")}),e.jsxs("div",{className:"settings-mobile-list",children:[e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.autoTheme")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.autoThemeDescription")})]}),e.jsx(H,{checked:t.autoTheme,label:s("settings.autoTheme"),onChange:t.applyAutoTheme})]}),Ps.map(a=>{const n=t.selectedTheme===a.id&&!t.autoTheme;return e.jsxs("button",{type:"button",className:`settings-mobile-choice-row${n?" active":""}`,"aria-pressed":n,disabled:t.autoTheme,onClick:()=>t.applyTheme(a.id),children:[e.jsxs("span",{className:"settings-mobile-choice-leading",children:[e.jsx("span",{className:"settings-mobile-choice-dot",style:{background:a.color},"aria-hidden":"true"}),e.jsx("span",{className:"settings-mobile-choice-label",children:Ls(a)})]}),e.jsx("span",{className:"settings-mobile-choice-indicator","aria-hidden":"true",children:n?e.jsx(ja,{}):null})]},a.id)})]})]}),e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.fileManager")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.workspaceSessionSortModeDescription")}),e.jsxs("div",{className:"settings-mobile-list",children:[e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.workspaceSessionSortMode")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.workspaceSessionSortModeDescription")})]}),e.jsx("select",{"aria-label":s("settings.workspaceSessionSortMode"),className:"settings-select settings-mobile-select",value:t.sessionDisplaySortMode,onChange:a=>t.updateSessionDisplaySortMode(a.target.value),children:t.sessionDisplaySortModeOptions.map(a=>e.jsx("option",{value:a.value,children:a.label},a.value))})]}),e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.showSystemFiles")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.showSystemFilesDescription")})]}),e.jsx(H,{checked:t.showSystemFiles,label:s("settings.showSystemFiles"),onChange:t.updateShowSystemFiles})]})]})]})]})}function ra({model:t}){return e.jsxs(e.Fragment,{children:[t.canConfigureServerAddress?e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.serverAddress")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.serverDescription")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("form",{className:"settings-mobile-form-stack",onSubmit:t.handleHostBaseUrlSubmit,children:[e.jsx("input",{"aria-label":s("settings.serverAddress"),className:"settings-text-input settings-mobile-input",value:t.hostBaseUrlDraft,onChange:a=>t.setHostBaseUrlDraft(a.target.value)}),e.jsx("button",{className:"settings-mobile-primary-button",disabled:!t.canSaveHostBaseUrl,type:"submit",children:s("common.save")})]})})]}):null,e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.serverConnection")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.autoReconnect")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.autoReconnectDescription")})]}),e.jsx(H,{checked:t.runtimeConfig.autoReconnect,label:s("settings.autoReconnect"),onChange:t.updateAutoReconnect})]})})]})]})}function ca({model:t}){return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.securityPrivacy")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.securityPrivacySectionSummary")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.defaultPermissionMode")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.defaultPermissionModeDescription")})]}),e.jsx("select",{"aria-label":s("settings.defaultPermissionMode"),className:"settings-select settings-mobile-select",value:t.accountPreferences.defaultPermissionMode,onChange:a=>t.updateDefaultPermissionMode(a.target.value),children:t.permissionModeOptions.map(a=>e.jsx("option",{value:a.value,children:a.label},a.value))})]})})]}),e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.authDeviceManagement")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.authDeviceManagementDescription")}),e.jsx("div",{className:"settings-mobile-panel-shell",children:e.jsx(Fs,{compact:!0})})]}),e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.debugPortPool")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsx($s,{value:t.accountPreferences.debugPortPools,onSave:t.updateDebugPortPools,compact:!0})})]}),e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.notificationSettings")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.notificationSettingsDescription")}),e.jsxs("div",{className:"settings-mobile-list",children:[e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.notifyOnPermissionRequest")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.notifyOnPermissionRequestDescription")})]}),e.jsx(H,{checked:t.notifyOnPermissionRequest,label:s("settings.notifyOnPermissionRequest"),onChange:t.updateNotifyOnPermissionRequest})]}),e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.notifyOnSessionCompleted")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.notifyOnSessionCompletedDescription")})]}),e.jsx(H,{checked:t.notifyOnSessionCompleted,label:s("settings.notifyOnSessionCompleted"),onChange:t.updateNotifyOnSessionCompleted})]}),e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.notifyOnSessionFailed")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.notifyOnSessionFailedDescription")})]}),e.jsx(H,{checked:t.notifyOnSessionFailed,label:s("settings.notifyOnSessionFailed"),onChange:t.updateNotifyOnSessionFailed})]})]})]})]})}function $s(t){const[a,n]=c.useState(()=>Ts(t.value)),[i,r]=c.useState(!1),[d,j]=c.useState(null),[f,p]=c.useState(!1);c.useEffect(()=>{n(Ts(t.value))},[t.value]);async function P(){j(null),p(!1);let h;try{h=oa(a)}catch(T){j(T instanceof Error?T.message:s("settings.debugPortPoolSaveFailed"));return}try{r(!0),await t.onSave(h),p(!0)}catch(T){j(T instanceof Error?T.message:s("settings.debugPortPoolSaveFailed"))}finally{r(!1)}}return e.jsxs("div",{className:t.compact?"settings-mobile-form-stack":"settings-debug-port-pool-editor",children:[e.jsxs("div",{className:t.compact?"settings-mobile-form-row":"settings-row",children:[e.jsx("div",{className:t.compact?"settings-mobile-row-copy":"settings-row-label settings-debug-port-pool-label",children:e.jsx("span",{className:t.compact?"settings-mobile-row-title":"settings-row-title",children:s("settings.debugPortPoolRangeLabel")})}),e.jsx("div",{className:t.compact?"settings-mobile-form-stack":"settings-row-control settings-row-control-stretch",children:e.jsxs("div",{className:"settings-inline-form",children:[e.jsx("input",{"aria-label":`${s("settings.debugPortPool")} ${s("settings.debugPortPoolStart")}`,className:"settings-text-input",inputMode:"numeric",value:a.start,onChange:h=>{const T=h.target.value;n(C=>({...C,start:T}))}}),e.jsx("span",{children:s("settings.debugPortPoolRangeSeparator")}),e.jsx("input",{"aria-label":`${s("settings.debugPortPool")} ${s("settings.debugPortPoolEnd")}`,className:"settings-text-input",inputMode:"numeric",value:a.end,onChange:h=>{const T=h.target.value;n(C=>({...C,end:T}))}}),e.jsx("button",{type:"button",className:t.compact?"settings-mobile-primary-button":"settings-button",disabled:i,onClick:()=>{P()},children:i?s("common.loading"):s("common.save")}),f?e.jsx("span",{children:s("settings.debugPortPoolSaved")}):null]})})]}),d?e.jsx("p",{className:"status-text settings-debug-port-pool-feedback","data-tone":"error",children:d}):null]})}function Ts(t){const a=t??zs;return{start:String(a.start),end:String(a.end)}}function oa(t){const a=Number.parseInt(t.start,10),n=Number.parseInt(t.end,10);if(!Number.isInteger(a)||!Number.isInteger(n))throw new Error(s("settings.debugPortPoolValidationInteger"));if(a<1024||n>65535||a>=n)throw new Error(s("settings.debugPortPoolValidationRange"));return{start:a,end:n}}function da({model:t}){const[a,n]=c.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.remoteAccess")}),e.jsx("p",{className:"settings-mobile-group-note",children:s("settings.remoteAccessManageDescription")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.remoteAccessManageTitle")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.remoteAccessSectionSummary")})]}),e.jsx("button",{className:"settings-mobile-primary-button",type:"button",onClick:()=>n(!0),children:s("settings.remoteAccessManageAction")})]})})]}),e.jsx(_s,{open:a,mobile:!0,onClose:()=>n(!1)})]})}function ua(){return e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.modelManagement")}),e.jsx("div",{className:"settings-mobile-panel-shell settings-mobile-model-shell",children:e.jsx(Us,{})})]})}function ga({model:t}){return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.softwareUpdate")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsxs("div",{className:"settings-mobile-row-copy",children:[e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.releaseChannel")}),e.jsx("span",{className:"settings-mobile-row-description",children:s("settings.releaseChannelDescription")})]}),e.jsxs("select",{"aria-label":s("settings.releaseChannel"),className:"settings-select settings-mobile-select",value:t.runtimeConfig.releaseChannel,onChange:a=>t.updateReleaseChannel(a.target.value),children:[e.jsx("option",{value:"stable",children:s("settings.releaseStable")}),e.jsx("option",{value:"beta",children:s("settings.releaseBeta")})]})]})})]}),e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.serverUpdate")}),e.jsx("div",{className:"settings-mobile-panel-shell settings-mobile-update-shell",children:e.jsx(Hs,{})})]}),t.platform.isWeb?null:e.jsxs("section",{className:"settings-mobile-group-section",children:[e.jsx("h2",{className:"settings-mobile-group-title",children:s("settings.clientUpdate")}),e.jsx("div",{className:"settings-mobile-list",children:e.jsxs("div",{className:"settings-mobile-form-row",children:[e.jsx("div",{className:"settings-mobile-row-copy",children:e.jsx("span",{className:"settings-mobile-row-title",children:s("settings.autoCheckUpdate")})}),e.jsx(H,{checked:t.runtimeConfig.autoCheckUpdate,label:s("settings.autoCheckUpdate"),onChange:t.updateAutoCheckUpdate})]})}),e.jsx("div",{className:"settings-mobile-panel-shell settings-mobile-update-shell",children:e.jsx(Es,{})})]})]})}function ks({onLogout:t}){return e.jsx("div",{className:"settings-mobile-sticky-footer",children:e.jsx("button",{type:"button",className:"settings-mobile-danger-button settings-mobile-danger-button-sticky",onClick:t,children:s("common.logout")})})}function H({checked:t,label:a,onChange:n}){return e.jsxs("label",{className:"settings-mobile-switch","aria-label":a,onClick:i=>{i.target instanceof HTMLInputElement||(i.preventDefault(),n(!t))},children:[e.jsx("input",{type:"checkbox","aria-label":a,checked:t,onChange:i=>n(i.target.checked)}),e.jsx("span",{className:"settings-mobile-switch-track","aria-hidden":"true",children:e.jsx("span",{className:"settings-mobile-switch-thumb"})})]})}function ma(){return e.jsxs("svg",{viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:[e.jsx("path",{d:"M10 3.5a6.5 6.5 0 1 0 6.5 6.5c0-.8-.6-1.4-1.4-1.4h-1.6A1.5 1.5 0 0 1 12 7.1V5.5c0-1.1-.9-2-2-2Z"}),e.jsx("circle",{cx:"6.6",cy:"9.2",r:".8",fill:"currentColor",stroke:"none"}),e.jsx("circle",{cx:"8.8",cy:"6.8",r:".8",fill:"currentColor",stroke:"none"}),e.jsx("circle",{cx:"12.1",cy:"6.6",r:".8",fill:"currentColor",stroke:"none"})]})}function ha(){return e.jsxs("svg",{viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:[e.jsx("path",{d:"M4 7.5 10 4l6 3.5v5L10 16l-6-3.5v-5Z"}),e.jsx("path",{d:"M10 9.5V16"}),e.jsx("path",{d:"M4 7.5 10 11l6-3.5"})]})}function pa(){return e.jsxs("svg",{viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:[e.jsx("rect",{x:"3.5",y:"4",width:"13",height:"9.5",rx:"2.2"}),e.jsx("path",{d:"M7 16h6"}),e.jsx("path",{d:"M10 13.5V16"}),e.jsx("path",{d:"m8 8 2 2 3-3"})]})}function ba(){return e.jsxs("svg",{viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:[e.jsx("circle",{cx:"10",cy:"10",r:"5.8"}),e.jsx("path",{d:"M10 4.2c1.5 1.3 2.4 3.5 2.4 5.8s-.9 4.5-2.4 5.8c-1.5-1.3-2.4-3.5-2.4-5.8s.9-4.5 2.4-5.8Z"}),e.jsx("path",{d:"M4.6 8.1h10.8"}),e.jsx("path",{d:"M4.6 11.9h10.8"})]})}function fa(){return e.jsxs("svg",{viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.7","aria-hidden":"true",children:[e.jsx("rect",{x:"3.5",y:"4",width:"13",height:"12",rx:"2.5"}),e.jsx("path",{d:"M6.2 8.1h7.6M6.2 11.9h4.1",strokeLinecap:"round"}),e.jsx("path",{d:"m12.8 11.3 1.3 1.3 2-2.2",strokeLinecap:"round",strokeLinejoin:"round"})]})}function xa(){return e.jsxs("svg",{viewBox:"0 0 20 20",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:[e.jsx("path",{d:"M10 3.2 15 5v4.4c0 3-1.9 5.8-5 7.4-3.1-1.6-5-4.4-5-7.4V5l5-1.8Z"}),e.jsx("path",{d:"m8.3 9.8 1.2 1.2 2.4-2.5"})]})}function va(){return e.jsx("svg",{viewBox:"0 0 12 12",fill:"none",stroke:"currentColor",strokeWidth:"1.8","aria-hidden":"true",children:e.jsx("path",{d:"m4 2 4 4-4 4"})})}function ja(){return e.jsx("svg",{viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"2","aria-hidden":"true",children:e.jsx("path",{d:"m3.5 8.2 2.6 2.6 6-6"})})}export{ka as SettingsPage};
|