@jingyi0605/codingns 0.5.5 → 0.6.1
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 +15 -2
- package/dist/public/assets/{AdaptiveButlerPage-CUyNL98E.js → AdaptiveButlerPage-Dw72U3hG.js} +3 -3
- package/dist/public/assets/App-CcDXqFl1.css +1 -0
- package/dist/public/assets/{App-BFP7LCSC.js → App-Dsf3ooXU.js} +3 -3
- package/dist/public/assets/{BootstrapPage-G74dX2Us.js → BootstrapPage-CE0m1qSR.js} +1 -1
- package/dist/public/assets/ConversationPage-8wOY7SX-.js +4 -0
- package/dist/public/assets/{DesktopDetachPreviewPage-IV7oEdOX.js → DesktopDetachPreviewPage-Dxarr_Wf.js} +1 -1
- package/dist/public/assets/DesktopWindowPage-VytPwJ4c.js +2 -0
- package/dist/public/assets/FileContextPanel-DwFzLsOp.js +1 -0
- package/dist/public/assets/GitSidebar-CH6WqTrM.js +6 -0
- package/dist/public/assets/MobileCreateSessionSheet-DcxKM00P.js +1 -0
- package/dist/public/assets/{MobileTopHeaderFrame-COTc7cRr.js → MobileTopHeaderFrame-C5rIKQT6.js} +1 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-CfUnHgv_.js +1 -0
- package/dist/public/assets/RelayConnectEntryPage-CgMvVZwa.js +1 -0
- package/dist/public/assets/ServerSettingsModal-CFul__z1.js +1 -0
- package/dist/public/assets/SessionIndexPage-B-tRhBXC.js +1 -0
- package/dist/public/assets/SettingsPage-C9LGxSQZ.js +1 -0
- package/dist/public/assets/TerminalManagerPanel-BbORd-ee.js +1 -0
- package/dist/public/assets/{TerminalPage-DpsvQQVR.js → TerminalPage-DWHv6mlu.js} +19 -19
- package/dist/public/assets/TerminalRuntimeFallbackModal-B29YxbQe.js +1 -0
- package/dist/public/assets/ToolFilesPage-Dx9cv9hu.js +1 -0
- package/dist/public/assets/ToolGitPage-D7H3vAia.js +1 -0
- package/dist/public/assets/ToolProcessesPage-PqQWxsy-.js +1 -0
- package/dist/public/assets/ToolsHomePage-CX05Pe_4.js +1 -0
- package/dist/public/assets/WorkbenchLandingPage-CchkAC75.js +1 -0
- package/dist/public/assets/WorkbenchLayout-pOZvEqp7.js +3 -0
- package/dist/public/assets/{WorkbenchModal-CbDxaCOR.js → WorkbenchModal-ColqvV6a.js} +1 -1
- package/dist/public/assets/WorkbenchShellRoute-C0_h4lP6.js +1 -0
- package/dist/public/assets/WorkbenchShellRoute-RGZpA0_J.css +1 -0
- package/dist/public/assets/WorkspaceDebugDetailPage-Deqy2_pO.js +1 -0
- package/dist/public/assets/WorkspaceDetailPage-Cvf-ZdlB.js +1 -0
- package/dist/public/assets/WorkspaceHomePage-Dsyvqyk1.js +1 -0
- package/dist/public/assets/client-runtime-manager-DROQJ9v3.js +1 -0
- package/dist/public/assets/{file-tree-icon-BMKuc5pw.js → file-tree-icon-Bp3Ntt7u.js} +7 -7
- package/dist/public/assets/index-B84Po2NA.css +1 -0
- package/dist/public/assets/index-C-0oeG_5.js +42 -0
- package/dist/public/assets/legna-code-6TqgZ4Ls.png +0 -0
- package/dist/public/assets/login-direct-candidate-resolver-DotM530R.js +1 -0
- package/dist/public/assets/model-switch-api-Bh9nYslz.js +1 -0
- package/dist/public/assets/{preferences-service-gv_9vGKz.js → preferences-service-BG6GKG29.js} +1 -1
- package/dist/public/assets/relay-entry-pmr-c42O.js +1 -0
- package/dist/public/assets/session-runtime-machine-YN84QBlr.js +21 -0
- package/dist/public/assets/{styles-BWPBZvze.css → styles-CsEMfdaS.css} +1 -1
- package/dist/public/assets/{terminal-runtime-meta-B9xJGY__.js → terminal-runtime-meta-8_uRZf7h.js} +1 -1
- package/dist/public/assets/useRegisteredDebugTemplates-DWX7LXQu.js +1 -0
- package/dist/public/assets/window-BVUB8gMK.js +1 -0
- package/dist/public/index.html +2 -2
- package/dist/server/config/env.d.ts +3 -0
- package/dist/server/config/env.js +10 -0
- package/dist/server/config/env.js.map +1 -1
- package/dist/server/modules/client/npm-global-package-service.d.ts +7 -1
- package/dist/server/modules/client/npm-global-package-service.js +149 -43
- package/dist/server/modules/client/npm-global-package-service.js.map +1 -1
- package/dist/server/modules/client/service-update-task-service.js +6 -2
- package/dist/server/modules/client/service-update-task-service.js.map +1 -1
- package/dist/server/modules/client/service-update-types.d.ts +2 -0
- package/dist/server/modules/git/git-controller.d.ts +3 -0
- package/dist/server/modules/git/git-controller.js +3 -0
- package/dist/server/modules/git/git-controller.js.map +1 -1
- package/dist/server/modules/git/git-read-service.js +47 -1
- package/dist/server/modules/git/git-read-service.js.map +1 -1
- package/dist/server/modules/git/git-write-service.d.ts +4 -0
- package/dist/server/modules/git/git-write-service.js +24 -0
- package/dist/server/modules/git/git-write-service.js.map +1 -1
- package/dist/server/modules/git/types.d.ts +1 -0
- package/dist/server/modules/git/workspace-repo-guard.d.ts +2 -0
- package/dist/server/modules/git/workspace-repo-guard.js +24 -10
- package/dist/server/modules/git/workspace-repo-guard.js.map +1 -1
- package/dist/server/modules/model-switch/cc-switch-adapter.d.ts +7 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js +17 -0
- package/dist/server/modules/model-switch/cc-switch-adapter.js.map +1 -1
- package/dist/server/modules/parallel-sessions/parallel-session-controller.d.ts +57 -0
- package/dist/server/modules/parallel-sessions/parallel-session-controller.js +77 -0
- package/dist/server/modules/parallel-sessions/parallel-session-controller.js.map +1 -0
- package/dist/server/modules/parallel-sessions/parallel-session-group-service.d.ts +88 -0
- package/dist/server/modules/parallel-sessions/parallel-session-group-service.js +625 -0
- package/dist/server/modules/parallel-sessions/parallel-session-group-service.js.map +1 -0
- package/dist/server/modules/parallel-sessions/session-isolated-workspace-service.d.ts +56 -0
- package/dist/server/modules/parallel-sessions/session-isolated-workspace-service.js +483 -0
- package/dist/server/modules/parallel-sessions/session-isolated-workspace-service.js.map +1 -0
- package/dist/server/modules/provider/opencode-model-options.d.ts +1 -0
- package/dist/server/modules/provider/opencode-model-options.js +54 -12
- package/dist/server/modules/provider/opencode-model-options.js.map +1 -1
- package/dist/server/modules/provider/provider-controller.d.ts +6 -1
- package/dist/server/modules/provider/provider-controller.js +24 -2
- package/dist/server/modules/provider/provider-controller.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +2 -0
- package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js +1 -1
- package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js +5 -1
- package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
- package/dist/server/modules/relay-tunnel/relay-tunnel-candidate-endpoints.d.ts +2 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-candidate-endpoints.js +129 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-candidate-endpoints.js.map +1 -0
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js +12 -9
- package/dist/server/modules/relay-tunnel/relay-tunnel-runtime-adapter.js.map +1 -1
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js +1 -128
- package/dist/server/modules/relay-tunnel/relay-tunnel-service.js.map +1 -1
- package/dist/server/modules/sessions/claude-runtime-helper-client.d.ts +1 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js +14 -0
- package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-client.d.ts +4 -0
- package/dist/server/modules/sessions/codex-app-server-helper-client.js +66 -45
- package/dist/server/modules/sessions/codex-app-server-helper-client.js.map +1 -1
- package/dist/server/modules/sessions/codex-app-server-helper-process.js +21 -2
- package/dist/server/modules/sessions/codex-app-server-helper-process.js.map +1 -1
- package/dist/server/modules/sessions/provider-session-delete-cli.js +2 -0
- package/dist/server/modules/sessions/provider-session-delete-cli.js.map +1 -1
- package/dist/server/modules/sessions/session-controller.d.ts +7 -0
- package/dist/server/modules/sessions/session-controller.js +22 -0
- package/dist/server/modules/sessions/session-controller.js.map +1 -1
- package/dist/server/modules/sessions/session-history-service.d.ts +21 -2
- package/dist/server/modules/sessions/session-history-service.js +425 -29
- package/dist/server/modules/sessions/session-history-service.js.map +1 -1
- package/dist/server/modules/sessions/session-live-runtime-service.d.ts +23 -2
- package/dist/server/modules/sessions/session-live-runtime-service.js +472 -74
- package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
- package/dist/server/modules/sessions/session-message-attachment-service.js +2 -2
- package/dist/server/modules/sessions/session-message-attachment-service.js.map +1 -1
- package/dist/server/modules/sessions/session-provider-config-service.d.ts +66 -0
- package/dist/server/modules/sessions/session-provider-config-service.js +821 -0
- package/dist/server/modules/sessions/session-provider-config-service.js.map +1 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.d.ts +2 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js +42 -0
- package/dist/server/modules/sessions/session-provider-error-mapper.js.map +1 -1
- package/dist/server/modules/workbench/codex-archive-watcher.d.ts +16 -0
- package/dist/server/modules/workbench/codex-archive-watcher.js +50 -0
- package/dist/server/modules/workbench/codex-archive-watcher.js.map +1 -0
- package/dist/server/modules/workbench/workbench-service.d.ts +11 -2
- package/dist/server/modules/workbench/workbench-service.js +37 -8
- package/dist/server/modules/workbench/workbench-service.js.map +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +1 -1
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +26 -3
- package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
- package/dist/server/modules/workspace/workspace-service.d.ts +3 -1
- package/dist/server/modules/workspace/workspace-service.js +10 -2
- package/dist/server/modules/workspace/workspace-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-base-ref-resolver.d.ts +20 -0
- package/dist/server/modules/worktree/worktree-base-ref-resolver.js +111 -0
- package/dist/server/modules/worktree/worktree-base-ref-resolver.js.map +1 -0
- package/dist/server/modules/worktree/worktree-cleanup-service.js +9 -3
- package/dist/server/modules/worktree/worktree-cleanup-service.js.map +1 -1
- package/dist/server/modules/worktree/worktree-manager.d.ts +0 -1
- package/dist/server/modules/worktree/worktree-manager.js +14 -20
- package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
- package/dist/server/routes/git.js +1 -0
- package/dist/server/routes/git.js.map +1 -1
- package/dist/server/routes/parallel-groups.d.ts +3 -0
- package/dist/server/routes/parallel-groups.js +9 -0
- package/dist/server/routes/parallel-groups.js.map +1 -0
- package/dist/server/server/create-server.d.ts +8 -0
- package/dist/server/server/create-server.js +48 -11
- package/dist/server/server/create-server.js.map +1 -1
- package/dist/server/server/workbench-runtime-terminal-sync.d.ts +14 -0
- package/dist/server/server/workbench-runtime-terminal-sync.js +17 -0
- package/dist/server/server/workbench-runtime-terminal-sync.js.map +1 -0
- package/dist/server/storage/repositories/parallel-session-group-repository.d.ts +11 -0
- package/dist/server/storage/repositories/parallel-session-group-repository.js +131 -0
- package/dist/server/storage/repositories/parallel-session-group-repository.js.map +1 -0
- package/dist/server/storage/repositories/parallel-session-member-repository.d.ts +12 -0
- package/dist/server/storage/repositories/parallel-session-member-repository.js +150 -0
- package/dist/server/storage/repositories/parallel-session-member-repository.js.map +1 -0
- package/dist/server/storage/repositories/session-binding-repository.js +44 -5
- package/dist/server/storage/repositories/session-binding-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-index-repository.js +6 -0
- package/dist/server/storage/repositories/session-index-repository.js.map +1 -1
- package/dist/server/storage/repositories/session-isolated-workspace-repository.d.ts +15 -0
- package/dist/server/storage/repositories/session-isolated-workspace-repository.js +230 -0
- package/dist/server/storage/repositories/session-isolated-workspace-repository.js.map +1 -0
- package/dist/server/storage/sqlite/client.js +19 -0
- package/dist/server/storage/sqlite/client.js.map +1 -1
- package/dist/server/storage/sqlite/schema.sql +78 -0
- package/dist/server/types/domain.d.ts +78 -0
- package/dist/server/ws/workbench-ws-hub.d.ts +3 -1
- package/dist/server/ws/workbench-ws-hub.js +23 -4
- package/dist/server/ws/workbench-ws-hub.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.d.ts +5 -2
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js +40 -8
- package/node_modules/@codingns/session-sync-core/dist/claude-message-utils.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/index.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js +2 -0
- package/node_modules/@codingns/session-sync-core/dist/index.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +10 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +110 -35
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.d.ts +11 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js +105 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/claude-session-store.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +34 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +131 -39
- package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.d.ts +9 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js +17 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/legna-code.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.d.ts +8 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js +19 -6
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode-shared.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +1 -0
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +13 -8
- package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.d.ts +3 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js +46 -22
- package/node_modules/@codingns/session-sync-core/dist/runtime/active-run-registry.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.d.ts +5 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +103 -51
- package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.d.ts +2 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +528 -301
- package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js +32 -8
- package/node_modules/@codingns/session-sync-core/dist/runtime/gemini-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.d.ts +10 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js +16 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/legna-runtime.js.map +1 -0
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js +196 -15
- package/node_modules/@codingns/session-sync-core/dist/runtime/opencode-runtime.js.map +1 -1
- package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +2 -0
- package/node_modules/@codingns/session-sync-core/dist/types.d.ts +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.js +1 -1
- package/node_modules/@codingns/session-sync-core/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/public/assets/App-DUAg5urj.css +0 -1
- package/dist/public/assets/ConversationPage-Bz0_tvvM.js +0 -2
- package/dist/public/assets/DesktopWindowPage-BBmHyRg5.js +0 -2
- package/dist/public/assets/FileContextPanel--FVTxDrq.js +0 -1
- package/dist/public/assets/GitSidebar-DAiSi9oc.js +0 -6
- package/dist/public/assets/MobileCreateSessionSheet-DqVwz_Hp.js +0 -1
- package/dist/public/assets/MobileSheet-D1lMrcvD.js +0 -1
- package/dist/public/assets/MobileWorkspaceSwitcherHeader-DJPV9ym2.js +0 -1
- package/dist/public/assets/RelayConnectEntryPage-dSwU8VzK.js +0 -1
- package/dist/public/assets/ServerSettingsModal-B34ms3ze.js +0 -1
- package/dist/public/assets/SessionIndexPage-D3tG1gmM.js +0 -1
- package/dist/public/assets/SettingsPage-B3-6-5GL.js +0 -1
- package/dist/public/assets/TerminalManagerPanel-DhuTEdzV.js +0 -1
- package/dist/public/assets/TerminalRuntimeFallbackModal-CNzOt5v5.js +0 -1
- package/dist/public/assets/ToolFilesPage-BX9QDi9Y.js +0 -1
- package/dist/public/assets/ToolGitPage-4VtFox3p.js +0 -1
- package/dist/public/assets/ToolProcessesPage-DZJC6Qnt.js +0 -1
- package/dist/public/assets/ToolsHomePage-D7JbrAWv.js +0 -1
- package/dist/public/assets/WorkbenchLandingPage-C0yqnzqh.js +0 -1
- package/dist/public/assets/WorkbenchLayout-Brlj8K3i.js +0 -3
- package/dist/public/assets/WorkbenchShellRoute-BMcnFadA.css +0 -1
- package/dist/public/assets/WorkbenchShellRoute-puGpdDFY.js +0 -1
- package/dist/public/assets/WorkspaceDebugDetailPage-fTGweC9N.js +0 -1
- package/dist/public/assets/WorkspaceDetailPage-BtaIzSDB.js +0 -1
- package/dist/public/assets/WorkspaceHomePage-CUmmYDrM.js +0 -1
- package/dist/public/assets/client-runtime-manager-RHFa_iWo.js +0 -1
- package/dist/public/assets/default-session-permission-mode-Cu5SreTG.js +0 -1
- package/dist/public/assets/index-Cq3ue0za.css +0 -1
- package/dist/public/assets/index-DEbFT-Aq.js +0 -42
- package/dist/public/assets/session-runtime-machine-Bfnxkk9B.js +0 -17
- package/dist/public/assets/useRegisteredDebugTemplates-CDfl54Wt.js +0 -1
- package/dist/public/assets/window-BWqRixxq.js +0 -1
- /package/dist/public/assets/{styles-CSUx5LGe.js → styles-DRVvx_kv.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as r,j as e,t as s,C as E,c as me,e as Z,w as Ns,A as he,P as te,Q as le,S as ke,T as st,U as He,h as tt,V as nt,f as at,W as Ce,q as it,n as lt,d as De,m as rt}from"./index-DEbFT-Aq.js";import{g as ct,i as We,k as ot,l as dt,n as ut,o as gt,e as Ve,f as mt,p as ht,u as ws,j as pt,c as bt,L as Ss,T as Ts,q as ks}from"./App-BFP7LCSC.js";import{a7 as ft,l as xt,m as vt,f as ge,k as Me,x as ne,h as Ne,i as Cs,j as jt,M as yt,u as re,ad as ce}from"./MobileSheet-D1lMrcvD.js";import{M as Nt,W as ae}from"./WorkbenchModal-CbDxaCOR.js";import{M as wt}from"./MobileTopHeaderFrame-COTc7cRr.js";const Ke=2e4,St=1e3,Tt=5e3;function kt({isOpen:t,onClose:a}){const[n,i]=r.useState(null),[l,d]=r.useState(null),[x,v]=r.useState(!1),[p,w]=r.useState(!1),[f,b]=r.useState(null),T=r.useRef(null);if(r.useEffect(()=>{if(!t)return;let h=!1;async function g(){v(!0),b(null),d(null);try{const u=await E.request("/api/observability/runtime/session",{method:"POST",body:JSON.stringify({ttlMs:Ke})});if(h){await Pe(u.sessionId);return}T.current=u.sessionId,i(u);const j=await Je(u.sessionId);if(h){await Pe(u.sessionId);return}d(j)}catch(u){h||b(Le(u))}finally{h||v(!1)}}return g(),()=>{h=!0;const u=T.current;T.current=null,i(null),d(null),v(!1),w(!1),b(null),u&&Pe(u)}},[t]),r.useEffect(()=>{const h=(n==null?void 0:n.sessionId)??null;if(!t||!h)return;const g=h;let u=!1;async function j(){w(!0);try{const m=await Je(g);u||(d(m),b(null))}catch(m){u||b(Le(m))}finally{u||w(!1)}}const P=window.setInterval(()=>{j()},St);return()=>{u=!0,window.clearInterval(P)}},[t,n==null?void 0:n.sessionId]),r.useEffect(()=>{const h=(n==null?void 0:n.sessionId)??null;if(!t||!h)return;const g=h;let u=!1;async function j(){try{const m=await E.request(`/api/observability/runtime/session/${g}/heartbeat`,{method:"POST",body:JSON.stringify({ttlMs:Ke})});u||i(m)}catch(m){u||b(Le(m))}}const P=window.setInterval(()=>{j()},Tt);return()=>{u=!0,window.clearInterval(P)}},[t,n==null?void 0:n.sessionId]),!t||typeof document>"u")return null;const S=Object.entries((l==null?void 0:l.backgroundTasks.taskTypes)??{}),C=Object.entries((l==null?void 0:l.schedulers.schedulers)??{}),N=Object.entries((l==null?void 0:l.backgroundTasks.totals)??{});return ct.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":f?"error":"active",children:f?s("settings.parallelTaskDebugStatusError"):s("settings.parallelTaskDebugStatusActive")}),e.jsx(Nt,{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:Ae(l==null?void 0:l.observedAt)})]}),e.jsxs("div",{className:"parallel-task-debug-meta-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugSessionExpireAt")}),e.jsx("strong",{children:Ae(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:Ct((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:l!=null&&l.eventLoop.enabled?s("settings.parallelTaskDebugCollectorEnabled"):s("settings.parallelTaskDebugCollectorDisabled")})]})]}),x?e.jsx("div",{className:"parallel-task-debug-empty",children:s("settings.parallelTaskDebugLoading")}):null,!x&&f?e.jsx("div",{className:"parallel-task-debug-error",children:f}):null,!x&&!f&&l?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:N.map(([h,g])=>e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:Dt(h)}),e.jsx("strong",{children:g})]},h))})]}),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:S.length})]}),S.length>0?e.jsx("div",{className:"parallel-task-debug-grid",children:S.map(([h,g])=>e.jsxs("article",{className:"parallel-task-debug-panel",children:[e.jsxs("div",{className:"parallel-task-debug-panel-header",children:[e.jsx("strong",{children:h}),e.jsx("span",{children:Ge(g.executionLane)})]}),e.jsxs("div",{className:"parallel-task-debug-panel-body",children:[e.jsxs("span",{children:[s("settings.parallelTaskDebugWaitAvg"),": ",K(g.waitMs.avg)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugRunAvg"),": ",K(g.runMs.avg)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugRunMax"),": ",K(g.runMs.max)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugStartedCount"),": ",g.counters.started??0]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugFinishedCount"),": ",g.counters.finished??0]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugFailedCount"),": ",g.counters.failed??0]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugCacheHitCount"),": ",g.counters.cache_hit??0]})]})]},h))}):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:C.length})]}),C.length>0?e.jsx("div",{className:"parallel-task-debug-grid",children:C.map(([h,g])=>e.jsxs("article",{className:"parallel-task-debug-panel",children:[e.jsxs("div",{className:"parallel-task-debug-panel-header",children:[e.jsx("strong",{children:h}),e.jsx("span",{children:g.lastIdle?s("settings.parallelTaskDebugIdle"):s("settings.parallelTaskDebugBusy")})]}),e.jsxs("div",{className:"parallel-task-debug-panel-body",children:[e.jsxs("span",{children:[s("settings.parallelTaskDebugTickTotal"),": ",g.tickTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugIdleTickTotal"),": ",g.idleTickTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugTaskCountTotal"),": ",g.taskCountTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugSchedulerErrorTotal"),": ",g.errorTotal]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugLastDuration"),": ",K(g.lastDurationMs)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugNextDelay"),": ",K(g.nextDelayMs)]})]})]},h))}):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:l.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(l.eventLoop.resolutionMs)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopMean")}),e.jsx("strong",{children:K(l.eventLoop.meanMs)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopP95")}),e.jsx("strong",{children:K(l.eventLoop.p95Ms)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopP99")}),e.jsx("strong",{children:K(l.eventLoop.p99Ms)})]}),e.jsxs("div",{className:"parallel-task-debug-counter-card",children:[e.jsx("span",{children:s("settings.parallelTaskDebugEventLoopMax")}),e.jsx("strong",{children:K(l.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:l.recentTaskActivities.length})]}),l.recentTaskActivities.length>0?e.jsx("div",{className:"parallel-task-debug-activity-list",children:l.recentTaskActivities.map(h=>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:h.taskType}),e.jsx("span",{children:Mt(h.eventType)}),e.jsx("span",{children:Ge(h.executionLane)})]}),e.jsxs("p",{children:[s("settings.parallelTaskDebugTaskKey"),": ",h.key]}),e.jsxs("p",{children:[s("settings.parallelTaskDebugStatus"),": ",h.status?Pt(h.status):"-"]})]}),e.jsxs("div",{className:"parallel-task-debug-activity-meta",children:[e.jsx("span",{children:Ae(h.recordedAt)}),e.jsxs("span",{children:[s("settings.parallelTaskDebugAttempt"),": ",h.attempt??"-"]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugWaitMs"),": ",K(h.waitMs)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugRunMs"),": ",K(h.runMs)]}),e.jsxs("span",{children:[s("settings.parallelTaskDebugSource"),": ",h.source??"-"]}),h.errorMessage?e.jsxs("span",{children:[s("settings.parallelTaskDebugError"),": ",h.errorMessage]}):null]})]},h.eventId))}):e.jsx("div",{className:"parallel-task-debug-empty",children:s("settings.parallelTaskDebugEmpty")})]})]}):null]})]})]}),document.body)}async function Je(t){return await E.request(`/api/observability/runtime?sessionId=${encodeURIComponent(t)}`)}async function Pe(t){try{await E.request(`/api/observability/runtime/session/${t}`,{method:"DELETE"})}catch{}}function Le(t){return t instanceof Error&&t.message?t.message:s("settings.parallelTaskDebugLoadFailed")}function Ae(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 Ct(t){return t===null||Number.isNaN(t)?"-":`${Math.round(t/1e3)} s`}function Dt(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 Ge(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 Mt(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 Pt(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 Ze(){const t=me(),a=Z.getState(),n=await t.bridge.getAndroidRuntimeInfo();if(!n.ok||!n.value)throw new Error(n.detail??"读取 Android 运行时信息失败。");const i=await E.request(`/api/client/release-manifest?channel=${encodeURIComponent(a.releaseChannel)}&platform=android-apk`),l=i.versionCode>n.value.versionCode;return{checkedAt:new Date().toISOString(),currentVersion:n.value.version,currentVersionCode:n.value.versionCode,hasUpdate:l,manifest:i,runtimeInfo:n.value}}async function Lt(t){return me().bridge.installAndroidUpdate(t)}function At(){const[t,a]=r.useState(!1),[n,i]=r.useState(!1),[l,d]=r.useState(null),[x,v]=r.useState(null),[p,w]=r.useState(null),[f,b]=r.useState(!1),[T,S]=r.useState(null),C=r.useRef(!1);r.useEffect(()=>{if(T===null){C.current=!1;return}const g=T;async function u(){if(!C.current){C.current=!0;try{const m=await Ze();if(w(m.manifest),v(m.currentVersion),b(m.hasUpdate),!m.hasUpdate||m.currentVersionCode>=g){d(s("settings.androidInstallSucceeded"));return}d(s("settings.androidInstallCancelled"))}catch(m){d(m instanceof Error?m.message:s("settings.releaseCheckFailed"))}finally{S(null)}}}function j(){u()}function P(){document.visibilityState==="visible"&&u()}return window.addEventListener("focus",j),document.addEventListener("visibilitychange",P),()=>{window.removeEventListener("focus",j),document.removeEventListener("visibilitychange",P)}},[T]);async function N(){a(!0),d(null),S(null);try{const g=await Ze();w(g.manifest),v(g.currentVersion),b(g.hasUpdate),d(g.hasUpdate?s("settings.releaseUpdateReady"):s("settings.releaseUpToDate"))}catch(g){d(g instanceof Error?g.message:s("settings.releaseCheckFailed"))}finally{a(!1)}}async function h(){if(p){i(!0),d(null),S(null);try{const g=await Lt(p);if(g.status==="installer_started"){d(s("settings.androidInstallerStarted")),S(p.versionCode);return}if(g.status==="permission_required"){d(g.detail??s("settings.androidInstallPermissionRequired")),S(null);return}if(g.status==="already_up_to_date"){d(s("settings.releaseUpToDate")),b(!1),S(null);return}d(g.detail??s("settings.releaseInstallFailed")),S(null)}catch(g){d(g instanceof Error?g.message:s("settings.releaseInstallFailed")),S(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:x??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)??"-"})]})]}),l?e.jsx("p",{className:"settings-update-status","data-tone":f?"warning":"success",children:l}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:t||n,onClick:N,children:t?s("common.loading"):s("settings.releaseCheckNow")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!p||!f||n,onClick:h,children:n?s("common.loading"):s("settings.releaseInstallNow")})]})]})}function Et(){const t=me(),a=t.isDesktop,[n,i]=r.useState(!1),[l,d]=r.useState(!1),[x,v]=r.useState(!1),[p,w]=r.useState(null),[f,b]=r.useState(null),T=We(D=>D.latestState),S=We(D=>D.pendingRestartVersion),C=(T==null?void 0:T.currentVersion)??null,N=(T==null?void 0:T.manifest)??null,h=(T==null?void 0:T.hasUpdate)??!1,g=!!S,u=g&&f!==S;async function j(){if(!g){i(!0),w(null);try{const D=await ot({notify:"always"});w(Qe(D.manifest,D.hasUpdate))}catch(D){w(D instanceof Error?D.message:s("settings.releaseCheckFailed"))}finally{i(!1)}}}async function P(){if(!(!N||!h||g)){d(!0),w(null);try{const D=await dt();if(!D.ok){w(D.detail??s("settings.releaseInstallFailed"));return}ut(N.version),b(null),w(s("settings.releaseRestartRequired"))}catch(D){w(D instanceof Error?D.message:s("settings.releaseInstallFailed"))}finally{d(!1)}}}async function m(){if(N!=null&&N.htmlUrl){v(!0);try{const D=await t.bridge.openExternal(N.htmlUrl);D.ok||w(D.detail??s("settings.releasePageOpenFailed"))}catch(D){w(D instanceof Error?D.message:s("settings.releasePageOpenFailed"))}finally{v(!1)}}}const M=!!(a&&N&&h&&!g),R=p??(a?g?s("settings.releaseRestartRequired"):T?Qe(T.manifest,T.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:C??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:(N==null?void 0:N.version)??S??"-"})]})]}),R?e.jsx("p",{className:"settings-update-status","data-tone":Rt(N,h,R,g),children:R}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:!a||n||l||g,onClick:j,children:n?s("common.loading"):s("settings.releaseCheckNow")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!M||l,onClick:P,children:l?s("common.loading"):s("settings.releaseInstallNow")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:!(N!=null&&N.htmlUrl)||n||l||x,onClick:m,children:x?s("common.loading"):s("settings.releaseOpenPage")})]})]}),e.jsx(Ut,{open:u,version:S,onClose:()=>b(S)})]})}function Qe(t,a){return a?s("settings.releaseUpdateReady"):s("settings.releaseUpToDate")}function Rt(t,a,n,i){return n===s("settings.clientUpdateUnsupported")?"neutral":i||a?"warning":"success"}function Ut({open:t,version:a,onClose:n}){const[i,l]=r.useState(!1),[d,x]=r.useState(null);async function v(){l(!0),x(null);try{await gt()}catch(p){x(p instanceof Error?p.message:s("settings.releaseRestartFailed")),l(!1)}}return e.jsx(ae,{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:v,children:i?s("common.loading"):s("settings.releaseRestartConfirm")})]})]})})}function Ds(){const t=me();return t.platform==="desktop"?e.jsx(Et,{}):t.platform==="android"?e.jsx(At,{}):e.jsx("div",{className:"settings-update-card",children:e.jsx("p",{className:"settings-update-status","data-tone":"neutral",children:s("settings.clientUpdateUnsupported")})})}async function Xe(){return await E.request("/api/system/model-switch")}async function It(t){return await E.request("/api/system/model-switch",{method:"POST",body:JSON.stringify(t)})}const Ot="https://github.com/SaladDay/cc-switch-cli",Ft="当前机器未安装 cc-switch-cli。这里集成的是 CC-Switch 的衍生 CLI 版本,不是 CC-Switch UI 版本。请先安装:",Bt=/(https?:\/\/[^\s]+)/i;function Ms(){const t=Ns(m=>{var M;return((M=m.session)==null?void 0:M.accessToken)??null}),[a,n]=r.useState(null),[i,l]=r.useState(!0),[d,x]=r.useState(null),[v,p]=r.useState(null),[w,f]=r.useState(null),[b,T]=r.useState(!1),[S,C]=r.useState("codex");r.useEffect(()=>{let m=!0;if(!t){n(null),p(null),f(null),l(!1);return}return(async()=>{l(!0);try{const R=await Xe();if(!m)return;n(R),p(null),C(D=>es(R,D))}catch(R){if(!m)return;p(Ee(R))}finally{m&&l(!1)}})(),()=>{m=!1}},[t]);async function N(){const m=await Xe();n(m),p(null),C(M=>es(m,M))}async function h(){if(t){x("refresh"),p(null),f(null);try{await N(),f(s("settings.modelManagementRefreshSuccess"))}catch(m){p(Ee(m))}finally{x(null)}}}async function g(m,M){if(!t||M.isCurrent)return;const R=Ye(m,M.id);x(R),p(null),f(null);try{const D=await It({app:m,presetId:M.id});ft(),n(B=>Ht(B,D)),f(s("settings.modelManagementSwitchSuccess",{app:D.displayName,preset:D.currentPresetName??M.name}))}catch(D){p(Ee(D))}finally{x(null)}}const u=(a==null?void 0:a.items)??[],j=u.find(m=>m.app===S)??u[0]??null,P=qt(u);return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"settings-model-panel",children:e.jsxs("div",{className:"settings-release-card",children:[w?e.jsx("p",{className:"settings-release-status",children:w}):null,v?e.jsx("p",{className:"settings-release-status",children:v}):null,P?e.jsxs("section",{className:"settings-model-missing-state",children:[e.jsx("p",{className:"settings-model-missing-copy",children:P.message}),e.jsx("a",{className:"settings-tailscale-link settings-model-missing-link",href:P.url,rel:"noreferrer",target:"_blank",children:P.url})]}):u.length>0?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"settings-model-grid",children:u.map(m=>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:m.displayName}),e.jsx("span",{className:"settings-model-card-status","data-status":m.status,children:Vt(m.status)})]}),e.jsxs("div",{className:"settings-model-value-line",children:[e.jsx("strong",{className:"settings-model-preset-value",children:m.currentPresetName??s("settings.modelManagementPresetMissing")}),e.jsx("strong",{className:"settings-model-current-value",children:m.currentModel??s("settings.modelManagementModelUnknown")})]})]}),m.statusText?e.jsx("p",{className:"settings-model-card-note",children:m.statusText}):null]},m.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:()=>{T(!0)},children:s("settings.modelManagementOpenSwitcher")})})]}):e.jsx("div",{className:"settings-model-empty",children:s("settings.modelManagementOptionsEmpty")})]})}),e.jsxs(ae,{open:b&&!P,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:()=>{h()},children:d==="refresh"?s("common.loading"):s("settings.modelManagementRefresh")}),onClose:()=>T(!1),children:[e.jsx("div",{className:"settings-model-tabs",role:"tablist","aria-label":s("settings.modelManagementTabsLabel"),children:u.map(m=>{const M=(j==null?void 0:j.app)===m.app;return e.jsx("button",{type:"button",role:"tab",className:"settings-model-tab","aria-selected":M,"data-active":M?"true":"false",onClick:()=>C(m.app),children:m.displayName},m.app)})}),j?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:j.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:j.currentModel??s("settings.modelManagementModelUnknown")})]})]}),j.statusText?e.jsx("p",{className:"settings-model-modal-note",children:j.statusText}):null,j.options.length>0?e.jsx("div",{className:"settings-model-switcher-list",children:j.options.map(m=>{const M=Ye(j.app,m.id);return e.jsxs("div",{className:"settings-model-switcher-item","data-current":m.isCurrent?"true":"false",children:[e.jsxs("div",{className:"settings-model-switcher-item-main",children:[e.jsx("strong",{children:m.name}),e.jsx("span",{children:m.model??s("settings.modelManagementModelUnknown")})]}),e.jsx("div",{className:"settings-model-switcher-item-actions",children:m.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||j.status!=="ready",onClick:()=>{g(j.app,m)},children:d===M?s("common.loading"):s("settings.modelManagementSwitchAction")})})]},`${j.app}:${m.id}`)})}):e.jsx("div",{className:"settings-model-empty",children:j.statusText??s("settings.modelManagementOptionsEmpty")})]}):e.jsx("div",{className:"settings-model-empty",children:s("settings.modelManagementOptionsEmpty")})]})]})}function Ye(t,a){return`switch:${t}:${a}`}function Ht(t,a){return t&&{...t,scannedAt:new Date().toISOString(),items:t.items.map(n=>n.app===a.app?a:n)}}function es(t,a){var i;return t.items.some(l=>l.app===a)?a:((i=t.items[0])==null?void 0:i.app)??"codex"}function Vt(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 Ee(t){return t instanceof he?t.message||s("settings.modelManagementLoadFailed"):t instanceof Error?t.message:s("settings.modelManagementLoadFailed")}function qt(t){var i,l,d;if(t.length===0||!t.every(x=>x.status==="unavailable"&&!x.cliAvailable&&!!x.statusText))return null;const n=((d=(((l=(i=t[0])==null?void 0:i.statusText)==null?void 0:l.trim())??"").match(Bt))==null?void 0:d[1])??Ot;return{message:Ft,url:n}}var Ps={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},ss=te.createContext&&te.createContext(Ps),_t=["attr","size","title"];function zt(t,a){if(t==null)return{};var n,i,l=$t(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)&&(l[n]=t[n])}return l}function $t(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 we(){return we=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},we.apply(null,arguments)}function ts(t,a){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);a&&(i=i.filter(function(l){return Object.getOwnPropertyDescriptor(t,l).enumerable})),n.push.apply(n,i)}return n}function Se(t){for(var a=1;a<arguments.length;a++){var n=arguments[a]!=null?arguments[a]:{};a%2?ts(Object(n),!0).forEach(function(i){Wt(t,i,n[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ts(Object(n)).forEach(function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(n,i))})}return t}function Wt(t,a,n){return(a=Kt(a))in t?Object.defineProperty(t,a,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[a]=n,t}function Kt(t){var a=Jt(t,"string");return typeof a=="symbol"?a:a+""}function Jt(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 Ls(t){return t&&t.map((a,n)=>te.createElement(a.tag,Se({key:n},a.attr),Ls(a.child)))}function pe(t){return a=>te.createElement(Gt,we({attr:Se({},t.attr)},a),Ls(t.child))}function Gt(t){var a=n=>{var{attr:i,size:l,title:d}=t,x=zt(t,_t),v=l||n.size||"1em",p;return n.className&&(p=n.className),t.className&&(p=(p?p+" ":"")+t.className),te.createElement("svg",we({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},n.attr,i,x,{className:p,style:Se(Se({color:t.color||n.color},n.style),t.style),height:v,width:v,xmlns:"http://www.w3.org/2000/svg"}),d&&te.createElement("title",null,d),t.children)};return ss!==void 0?te.createElement(ss.Consumer,null,n=>a(n)):a(Ps)}function Zt(t){return pe({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 Qt(t){return pe({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 ns(t){return pe({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 Xt(t){return pe({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 Yt(t){return pe({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 as(){return E.request("/api/auth/devices")}function en(t){return E.request("/api/auth/devices/current/primary",{method:"POST",body:JSON.stringify(t)})}function sn(t){return E.request(`/api/auth/devices/${t}/logout`,{method:"POST"})}function As({compact:t=!1}){const a=Ns(o=>{var F;return((F=o.session)==null?void 0:F.accessToken)??null}),[n,i]=r.useState(null),[l,d]=r.useState(!1),[x,v]=r.useState(!1),[p,w]=r.useState(!1),[f,b]=r.useState(null),[T,S]=r.useState(null),[C,N]=r.useState(null),[h,g]=r.useState(null),[u,j]=r.useState(null),[P,m]=r.useState(""),[M,R]=r.useState(null);r.useEffect(()=>{let o=!0;if(!x){d(!1);return}if(!a){i(null),d(!1),N(null),g(null);return}return(async()=>{d(!0);try{const y=await as();if(!o)return;i(y),g(null)}catch(y){if(!o)return;g(Re(y))}finally{o&&d(!1)}})(),()=>{o=!1}},[a,x]);async function D(){const o=await as();i(o),g(null)}function B(){v(!0),w(!1),N(null),g(null)}function $(){f!=="primary"&&(v(!1),w(!1),j(null),m(""),R(null))}function I(o){j(o),m(""),R(null)}async function H(){if(u){b("primary"),R(null),g(null),N(null);try{await en({password:P,primary:u==="enable"}),await D(),N(u==="enable"?s("settings.authDevicePrimaryEnabled"):s("settings.authDevicePrimaryDisabled")),j(null),m("")}catch(o){const F=Re(o);R(F),g(F)}finally{b(null)}}}async function W(o){if(o.deviceId){S(o.deviceId),g(null),N(null);try{const F=await sn(o.deviceId);await D(),N(s("settings.authDeviceLogoutDeviceSuccess",{device:je(o),count:String(F.revokedSessionCount)}))}catch(F){g(Re(F))}finally{S(null)}}}const U=(n==null?void 0:n.currentDevice)??null,J=(n==null?void 0:n.otherActiveDevices.filter(o=>!o.isLegacy))??[],G=(n==null?void 0:n.otherActiveDevices.filter(o=>o.isLegacy))??[],O=(n==null?void 0:n.recentLoginRecords.filter(o=>!o.isLegacy))??[],V=(n==null?void 0:n.recentLoginRecords.filter(o=>o.isLegacy))??[],k=G.length+V.length,L=U!==null&&!U.isLegacy,A=(U==null?void 0:U.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:B,children:s("settings.authDeviceOpenManager")})})}),e.jsx(ae,{open:x,title:s("settings.authDeviceManagement"),description:s("settings.authDeviceManagementDescription"),className:"settings-device-browser-modal",onClose:$,children:e.jsxs(e.Fragment,{children:[C?e.jsx("p",{className:"settings-release-status",children:C}):null,h?e.jsx("p",{className:"settings-release-status",children:h}):null,l?e.jsx("div",{className:"settings-device-empty",children:s("common.loading")}):e.jsxs(e.Fragment,{children:[k>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(k)})}),e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>w(o=>!o),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")})}),U?e.jsx(oe,{current:!0,title:je(U),clientType:U.clientType,browserName:U.browserName,browserVersion:U.browserVersion,osName:U.osName,osVersion:U.osVersion,timeLabelKey:"settings.authDeviceLastSeen",timestamp:U.lastSeenAt,sourceAddress:U.lastSourceAddress,badges:e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"settings-device-tag","data-tone":"current",children:s("settings.authDeviceCurrentTag")}),U.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:!L||f!==null,onClick:()=>I(U.isPrimary?"disable":"enable"),children:U.isPrimary?s("settings.authDeviceDisablePrimary"):s("settings.authDeviceEnablePrimary")})}),note:L?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")})}),J.length>0?e.jsx("div",{className:"settings-device-list",children:J.map((o,F)=>e.jsx(oe,{title:je(o),clientType:o.clientType,browserName:o.browserName,browserVersion:o.browserVersion,osName:o.osName,osVersion:o.osVersion,timeLabelKey:"settings.authDeviceLastSeen",timestamp:o.lastSeenAt,sourceAddress:o.lastSourceAddress,badges:e.jsxs(e.Fragment,{children:[o.isPrimary?e.jsx("span",{className:"settings-device-tag","data-tone":"primary",children:s("settings.authDevicePrimaryTag")}):null,o.isLegacy?e.jsx("span",{className:"settings-device-tag","data-tone":"legacy",children:s("settings.authDeviceLegacyTag")}):null]}),actions:o.deviceId?e.jsx("button",{className:"settings-button settings-button-danger","data-variant":"device-danger",type:"button",disabled:!A||f!==null||T!==null,onClick:()=>{W(o)},children:T===o.deviceId?s("common.loading"):s("settings.authDeviceLogoutDevice")}):null},`${o.deviceId??"legacy"}-${o.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")})}),O.length>0?e.jsx("div",{className:"settings-device-list",children:O.map(o=>e.jsx(oe,{title:is(o),clientType:o.clientType,browserName:o.browserName,browserVersion:o.browserVersion,osName:o.osName,osVersion:o.osVersion,timeLabelKey:"settings.authDeviceLoginAt",timestamp:o.occurredAt,sourceAddress:o.sourceAddress,badges:o.isCurrentDevice?e.jsx("span",{className:"settings-device-tag","data-tone":"current",children:s("settings.authDeviceCurrentTag")}):null},o.id))}):e.jsx("div",{className:"settings-device-empty",children:s("settings.authDeviceRecentEmpty")})]}),p&&G.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:G.map((o,F)=>e.jsx(oe,{title:je(o),clientType:o.clientType,browserName:o.browserName,browserVersion:o.browserVersion,osName:o.osName,osVersion:o.osVersion,timeLabelKey:"settings.authDeviceLastSeen",timestamp:o.lastSeenAt,sourceAddress:o.lastSourceAddress,badges:e.jsx("span",{className:"settings-device-tag","data-tone":"legacy",children:s("settings.authDeviceLegacyTag")})},`legacy-device-${o.lastSeenAt}-${F}`))})]}):null,p&&V.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:V.map(o=>e.jsx(oe,{title:is(o),clientType:o.clientType,browserName:o.browserName,browserVersion:o.browserVersion,osName:o.osName,osVersion:o.osVersion,timeLabelKey:"settings.authDeviceLoginAt",timestamp:o.occurredAt,sourceAddress:o.sourceAddress,badges:e.jsx("span",{className:"settings-device-tag","data-tone":"legacy",children:s("settings.authDeviceLegacyTag")})},o.id))})]}):null]})]})}),e.jsx(ae,{open:u!==null,title:u==="enable"?s("settings.authDeviceEnablePrimaryModalTitle"):s("settings.authDeviceDisablePrimaryModalTitle"),description:u==="enable"?s("settings.authDeviceEnablePrimaryModalDescription"):s("settings.authDeviceDisablePrimaryModalDescription"),className:"settings-device-modal",onClose:()=>{f!=="primary"&&(j(null),m(""),R(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:P,onChange:o=>m(o.target.value)})]}),M?e.jsx("p",{className:"settings-release-status",children:M}):null,e.jsxs("div",{className:"settings-device-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:f==="primary",onClick:()=>{j(null),m(""),R(null)},children:s("common.cancel")}),e.jsx("button",{className:"settings-button",type:"button",disabled:P.trim().length===0||f==="primary",onClick:()=>{H()},children:f==="primary"?s("common.loading"):u==="enable"?s("settings.authDeviceEnablePrimary"):s("settings.authDeviceDisablePrimary")})]})]})})]})}function je(t){var a;return t.isLegacy?s("settings.authDeviceLegacyLabel"):((a=t.displayName)==null?void 0:a.trim())||Es(t.clientType)}function is(t){var a;return t.isLegacy?s("settings.authDeviceLegacyLabel"):((a=t.displayName)==null?void 0:a.trim())||Es(t.clientType)}function tn(t){return e.jsxs("div",{className:"settings-device-identity",children:[e.jsx("span",{className:"settings-device-identity-icon","aria-hidden":"true",children:e.jsx(dn,{kind:on(t.clientType)})}),e.jsx("div",{className:"settings-device-identity-body",children:e.jsx("strong",{children:t.title})})]})}function oe(t){const a=cn(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(tn,{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 Es(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 nn(t,a){return s(t,{value:new Date(a).toLocaleString()})}function an(t){return t?s("settings.authDeviceSourceAddressValue",{value:t}):s("settings.authDeviceSourceAddressUnknown")}function ln(t,a){return t?s("settings.authDeviceBrowserValue",{value:Rs(t,a)}):null}function rn(t,a){return t?s("settings.authDeviceOsValue",{value:Rs(t,a)}):null}function cn(t,a,n,i,l,d,x){return[ln(t,a),rn(n,i),nn(l,d),an(x)].filter(v=>!!v)}function on(t){switch(t){case"desktop":return"desktop";case"web":return"web";case"ios":return"ios";case"android":return"android";default:return"unknown"}}function Rs(t,a){return a!=null&&a.trim()?`${t} ${a}`:t}function dn({kind:t}){const a=un(t),n=a.icon;return e.jsx(n,{color:a.color})}function un(t){switch(t){case"desktop":return{icon:Zt,color:"#2563eb"};case"web":return{icon:Qt,color:"#0f766e"};case"ios":return{icon:Xt,color:"#111827"};case"android":return{icon:Yt,color:"#3ddc84"};case"unknown":return{icon:ns,color:"#64748b"};default:return{icon:ns,color:"#64748b"}}}function Re(t){return t instanceof he||t instanceof Error?t.message:s("settings.authDeviceLoadFailed")}async function ls(){const t=Z.getState();return E.request(`/api/client/service-update?channel=${encodeURIComponent(t.releaseChannel)}`)}async function gn(t){const a=Z.getState();return E.request("/api/client/service-update/install",{method:"POST",body:JSON.stringify({packageName:t,channel:a.releaseChannel})})}async function mn(t){return E.request(`/api/client/service-update/tasks/${encodeURIComponent(t)}`)}const hn=1500;function Us(){const t=me(),[a,n]=r.useState(!1),[i,l]=r.useState(!1),[d,x]=r.useState(null),[v,p]=r.useState(null),[w,f]=r.useState(null),b=(v==null?void 0:v.packages[0])??null;r.useEffect(()=>{if(!w||!Ue(w.status))return;let N=!1;const h=window.setTimeout(async()=>{var g;try{const u=await mn(w.taskId);if(N)return;if(f(u),x(Be(u)),!Ue(u.status)){l(!1);const j=await ls();if(N)return;p(j),f(((g=j.packages[0])==null?void 0:g.installTask)??u),x(rs(j.packages[0]??null,u)),u.restartRequired&&await t.bridge.showNotification(s("settings.serverRestartRequired"),u.targetVersion??"-")}}catch(u){if(N)return;l(!1),x(u instanceof Error?u.message:s("settings.serverInstallFailed"))}},hn);return()=>{N=!0,window.clearTimeout(h)}},[t.bridge,w]);async function T(){n(!0),x(null);try{const N=await ls(),h=N.packages[0]??null;p(N),f((h==null?void 0:h.installTask)??null),x(rs(h,(h==null?void 0:h.installTask)??null)),h!=null&&h.hasUpdate&&await t.bridge.showNotification(s("settings.serverUpdateReady"),`${s("settings.serverTargetVersion")}: ${h.latestVersion??"-"}`)}catch(N){x(N instanceof Error?N.message:s("settings.serverCheckFailed"))}finally{n(!1)}}async function S(){if(b!=null&&b.packageName){l(!0),x(null);try{const N=await gn(b.packageName);f(N),x(Be(N))}catch(N){l(!1),x(N instanceof Error?N.message:s("settings.serverInstallFailed"))}}}const C=!!(b&&b.checkStatus!=="check_failed"&&b.hasUpdate&&!b.restartRequired&&!Ue(w==null?void 0:w.status));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.serverCurrentVersion")}),e.jsx("strong",{className:"settings-update-value",children:(b==null?void 0:b.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:(b==null?void 0:b.latestVersion)??"-"})]})]}),d?e.jsx("p",{className:"settings-update-status","data-tone":pn(b,w),children:d}):null,e.jsxs("div",{className:"settings-update-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:a||i,onClick:T,children:a?s("common.loading"):s("settings.serverCheckNow")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!C||a||i,onClick:S,children:i?s("common.loading"):s("settings.serverInstallNow")})]})]})}function rs(t,a){return a?Be(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 Be(t){switch(t.status){case"queued":return s("settings.serverInstallQueued");case"running":return s("settings.serverInstalling");case"succeeded":return 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 pn(t,a){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 Ue(t){return t==="queued"||t==="running"}async function bn(){return await E.request("/api/system/relay-tunnel/status")}async function cs(t){return await E.request("/api/system/relay-tunnel/config",{method:"PUT",body:JSON.stringify(t)})}async function fn(t){return await E.request("/api/system/relay-tunnel/control/login",{method:"POST",body:JSON.stringify(t)})}async function xn(){return await E.request("/api/system/relay-tunnel/control/logout",{method:"POST"})}async function vn(t){const a=t.hostLabel.trim(),n=`/api/system/relay-tunnel/control/host-label-availability?hostLabel=${encodeURIComponent(a)}`;return await E.request(n)}async function jn(t){return await E.request("/api/system/relay-tunnel/control/bind",{method:"POST",body:JSON.stringify(t)})}async function yn(){return await E.request("/api/system/relay-tunnel/control/wallet")}async function os(){return await E.request("/api/system/relay-tunnel/enable",{method:"POST"})}async function Nn(){return await E.request("/api/system/relay-tunnel/disable",{method:"POST"})}async function wn(){return await E.request("/api/system/relay-tunnel/unbind",{method:"POST"})}function Sn(){const t=Ve(),{showToast:a}=mt(),[n,i]=r.useState(null),[l,d]=r.useState(""),[x,v]=r.useState(()=>le()),[p,w]=r.useState(""),[f,b]=r.useState(""),[T,S]=r.useState(null),[C,N]=r.useState({status:"idle"}),[h,g]=r.useState(!0),[u,j]=r.useState(null),[P,m]=r.useState(null),[M,R]=r.useState(null),[D,B]=r.useState(null),[$,I]=r.useState(null),H=r.useRef(!0),W=nt(),U=ke(n==null?void 0:n.controlBaseUrl);st(x);const J=le(),G=ke(),O=l.trim(),V=(n==null?void 0:n.activated)??!1,k=p.trim().length>0&&f.trim().length>0,L=!!(n!=null&&n.controlAccountEmail),A=n!=null&&n.bindingId?!0:C.status==="available"&&C.hostLabel===O,o=!!(n!=null&&n.bindingId)||L&&O.length>0&&A,F=gs({controlBaseUrl:G,tunnelDomain:n==null?void 0:n.tunnelDomain,hostLabel:l}),y=!!(n!=null&&n.controlAccountEmail||n!=null&&n.bindingId),z=!!(n!=null&&n.bindingId||A),be=!!(n!=null&&n.enabled&&(n!=null&&n.bindingId)),Hs=!!(n!=null&&n.bindingId)||o,Vs=T?de(T.grantedBytes):s("settings.tailscaleUnavailable"),qs=de(T?T.usedBytes:n==null?void 0:n.trafficUsedBytes),_s=de(T?T.remainingBytes:n==null?void 0:n.trafficRemainingBytes),qe=He(Z.getState()),Q=xt(),ie=Q?s(vt(Q.kind)):null,fe=Q?kn(Q):null;r.useEffect(()=>(H.current=!0,xe(!1),()=>{H.current=!1}),[]),r.useEffect(()=>{if(!V)return;const c=window.setInterval(()=>{xe(!0)},5e3);return()=>{window.clearInterval(c)}},[V]),r.useEffect(()=>{!V||!L||ve()},[V,L]),r.useEffect(()=>{n!=null&&n.bindingId||C.status!=="idle"&&C.hostLabel!==O&&N({status:"idle"})},[C,O,n==null?void 0:n.bindingId]),r.useEffect(()=>{{v(le());return}},[W,U]);async function xe(c,q){c||g(!0);try{const se=await bn();if(!H.current)return;X(se,q),m(null)}catch(se){H.current&&m(us(se,"status",qe))}finally{H.current&&!c&&g(!1)}}function X(c,q){i(c),I(null),c.controlAccountEmail||S(null),c.tunnelDomain&&l.trim().length===0&&d(Is(c.tunnelDomain)),((q==null?void 0:q.syncProfile)??!0)&&Ys(c)}async function ve(){try{const c=await yn();if(!H.current)return;S(c.wallet)}catch(c){H.current&&I(Y(c))}}async function zs(){if(k){j("login-control"),I(null);try{const c=await fn({email:p.trim(),password:f});B(null),X(c),await ve()}catch(c){B(us(c,"login",qe))}finally{j(null)}}}async function $s(){j("logout-control"),I(null);try{const c=await xn();X(c),S(null),N({status:"idle"})}catch(c){I(Y(c))}finally{j(null)}}async function _e(){if(!O)throw new Error(s("settings.relayTunnelHostLabelRequired"));if(C.status==="available"&&C.hostLabel===O)return{hostLabel:C.hostLabel,tunnelDomain:C.tunnelDomain,available:!0,reason:"available"};N({status:"checking",hostLabel:O});const c=await vn({hostLabel:O});if(!c.available||!c.tunnelDomain){const q=Cn(c);throw N({status:"error",hostLabel:O,message:q}),new Error(q)}return N({status:"available",hostLabel:O,tunnelDomain:c.tunnelDomain}),c}async function Ws(){if(!(!y||n!=null&&n.bindingId)){j("check-host-label"),I(null);try{await _e()}catch{}finally{j(null)}}}async function Ks(){j("learn-service"),I(null);try{await Fe(t.bridge.openExternal,le())}catch(c){I(Y(c))}finally{j(null)}}async function Js(){j("manage-account"),I(null);try{await Fe(t.bridge.openExternal,le())}catch(c){I(Y(c))}finally{j(null)}}async function Gs(){if(F)try{await Mn(F,t),a({title:s("settings.relayTunnelAccessUrlCopied"),tone:"success"})}catch(c){a({title:c instanceof Error?c.message:s("settings.relayTunnelCopyAccessUrlFailed"),tone:"error"})}}async function Zs(){if(F)try{await Fe(t.bridge.openExternal,F)}catch(c){a({title:c instanceof Error?c.message:s("settings.relayTunnelOpenAccessUrlFailed"),tone:"error"})}}async function Qs(){if(o){j("enable"),I(null);try{let c=n;if(c!=null&&c.activated||(c=await cs({activated:!0,controlBaseUrl:J}),X(c)),c!=null&&c.bindingId||(await _e(),c=await jn({hostLabel:O}),X(c),await ve()),!(c!=null&&c.enabled)){const q=await os();X(q)}}catch(c){I(Y(c))}finally{j(null)}}}async function Xs(){if(n!=null&&n.bindingId){j("reconnect"),I(null);try{n!=null&&n.enabled&&await Nn();const c=await os();X(c),c.controlAccountEmail&&await ve()}catch(c){const q=Y(c);await xe(!0,{syncProfile:!1}),I(q)}finally{j(null)}}}async function ze(){j("disconnect-device"),I(null);try{if(n!=null&&n.bindingId||n!=null&&n.accountId){const c=await wn();X(c)}if(n!=null&&n.activated){const c=await cs({activated:!1});X(c)}S(null),w(""),d(""),b(""),N({status:"idle"})}catch(c){I(Y(c))}finally{j(null)}}return e.jsxs("div",{className:"settings-relay-tunnel-panel",children:[null,h&&!n?e.jsx(ge,{heading:s("settings.relayTunnelWizardTitle"),description:s("settings.relayTunnelWizardDescription"),children:e.jsx("p",{className:"settings-remote-access-panel-note",children:s("common.loading")})}):null,!h&&!be?e.jsxs(ge,{heading:s("settings.relayTunnelWizardTitle"),description:s("settings.relayTunnelWizardDescription"),actions:e.jsx("button",{className:"secondary-button",disabled:u!==null,type:"button",onClick:()=>void Ks(),children:s("settings.relayTunnelLearnService")}),children:[P?e.jsx(ds,{title:s("settings.relayTunnelStatusErrorTitle"),message:P,action:e.jsx("button",{className:"secondary-button",disabled:h||u!==null,type:"button",onClick:()=>void xe(!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":Ie(y,!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(Me,{className:"settings-relay-tunnel-step-tag",children:s(Oe(y,!0))})]}),e.jsx("div",{className:"settings-relay-tunnel-step-body",children:y?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(ne,{align:"start",children:e.jsx("button",{className:"secondary-button",disabled:u!==null,type:"button",onClick:()=>{if(n!=null&&n.bindingId){ze();return}$s()},children:s("common.logout")})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-relay-tunnel-form",children:[e.jsx(Ne,{label:s("settings.relayTunnelAccountEmail"),children:e.jsx("input",{"aria-label":s("settings.relayTunnelAccountEmail"),className:"settings-text-input",type:"email",value:p,onChange:c=>{w(c.target.value),B(null)},placeholder:s("settings.relayTunnelAccountEmailPlaceholder")})}),e.jsx(Ne,{label:s("settings.relayTunnelAccountPassword"),children:e.jsx("input",{"aria-label":s("settings.relayTunnelAccountPassword"),className:"settings-text-input",type:"password",value:f,onChange:c=>{b(c.target.value),B(null)},placeholder:s("settings.relayTunnelAccountPasswordPlaceholder")})}),D?e.jsx(ds,{title:s("settings.relayTunnelLoginErrorTitle"),message:D}):null]}),e.jsx(ne,{align:"start",children:e.jsx("button",{className:"settings-button",disabled:u!==null||!k,type:"button",onClick:()=>void zs(),children:u==="login-control"?s("common.loading"):s("settings.relayTunnelLoginAccount")})})]})})]}),e.jsxs("section",{className:"settings-relay-tunnel-step","data-state":Ie(z,y),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(Me,{className:"settings-relay-tunnel-step-tag",children:s(Oe(z,y))})]}),e.jsx("div",{className:"settings-relay-tunnel-step-body",children:y?n!=null&&n.bindingId?e.jsx("p",{className:"settings-relay-tunnel-success",children:s("settings.relayTunnelHostLabelAvailable",{domain:F??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:l,onChange:c=>d(c.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:u!==null||O.length===0,type:"button",onClick:()=>void Ws(),children:u==="check-host-label"?s("common.loading"):s("settings.relayTunnelHostLabelCheck")})]}),e.jsxs("div",{className:"settings-relay-tunnel-inline-stack",children:[C.status==="available"&&C.hostLabel===O?e.jsx("p",{className:"settings-relay-tunnel-success",children:s("settings.relayTunnelHostLabelAvailable",{domain:gs({controlBaseUrl:J,tunnelDomain:C.tunnelDomain,hostLabel:C.hostLabel})??C.tunnelDomain})}):null,C.status==="checking"&&C.hostLabel===O?e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:s("settings.relayTunnelHostLabelChecking")}):null,C.status==="error"&&C.hostLabel===O?e.jsx("p",{className:"settings-relay-tunnel-error",children:C.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":Ie(be,z),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(Me,{className:"settings-relay-tunnel-step-tag",children:s(Oe(be,z))})]}),e.jsx("div",{className:"settings-relay-tunnel-step-body",children:z?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:V?s("settings.relayTunnelStepStartReady"):s("settings.relayTunnelActivationHint")}),e.jsx(ne,{align:"start",children:e.jsx("button",{className:"settings-button",disabled:u!==null||!Hs,type:"button",onClick:()=>void Qs(),children:u==="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:[Q&&ie&&fe?e.jsx(Tn,{hint:fe,label:ie,url:Q.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,!h&&be?e.jsxs(ge,{heading:s("settings.relayTunnelReadyTitle"),description:s("settings.relayTunnelReadyDescription"),children:[e.jsxs(Cs,{compact:!0,children:[Q&&ie?e.jsxs(e.Fragment,{children:[e.jsx(ee,{label:s("settings.relayTunnelClientRouteLabel"),value:ie}),e.jsx(ee,{label:s("settings.relayTunnelClientRouteAddressLabel"),value:Q.url})]}):null,e.jsx(ee,{className:"settings-relay-tunnel-summary-line-access-url",label:s("settings.relayTunnelAccessUrlLabel"),trailing:F?e.jsxs("div",{className:"settings-relay-tunnel-access-url",children:[e.jsx("span",{className:"settings-relay-tunnel-access-url-text",title:F,children:F}),e.jsxs("span",{className:"settings-relay-tunnel-access-url-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>void Gs(),children:s("settings.relayTunnelCopyAccessUrl")}),e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>void Zs(),children:s("settings.relayTunnelOpenAccessUrl")})]})]}):e.jsx("span",{className:"settings-relay-tunnel-summary-value",children:s("settings.relayTunnelUnbound")})}),e.jsx(ee,{label:s("settings.relayTunnelTrafficGranted"),value:Vs}),e.jsx(ee,{label:s("settings.relayTunnelTrafficUsed"),value:qs}),e.jsx(ee,{label:s("settings.relayTunnelTrafficRemaining"),value:_s})]}),e.jsxs(ne,{align:"start",className:"settings-relay-tunnel-ready-actions",children:[e.jsx("button",{className:"secondary-button",disabled:u!==null||!(n!=null&&n.bindingId),type:"button",onClick:()=>void Xs(),children:u==="reconnect"?s("common.loading"):s("settings.relayTunnelReconnectAction")}),e.jsx("button",{className:"secondary-button",disabled:u!==null,type:"button",onClick:()=>void Js(),children:u==="manage-account"?s("common.loading"):s("settings.relayTunnelManageAccountAction")}),e.jsx("button",{className:"settings-button settings-button-danger",disabled:u!==null,type:"button",onClick:()=>void ze(),children:u==="disconnect-device"?s("common.loading"):s("settings.relayTunnelDisconnectDeviceAction")})]}),e.jsxs("div",{className:"settings-relay-tunnel-inline-stack",children:[Q&&ie&&fe?e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:fe}):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 Ys(c){const q=Z.getState(),se=tt(q);if(!se)return;const $e=et(c);Pn(se.relayTunnel??null,$e)||Z.update({hosts:q.hosts.map(Te=>Te.id===se.id?{...Te,relayTunnel:$e,updatedAt:new Date().toISOString()}:Te)})}function et(c){return!(c!=null&&c.bindingId)||!c.tunnelDomain?null:{provider:"codingns_relay",enabled:c.enabled,tunnelDomain:c.tunnelDomain.trim().toLowerCase(),controlBaseUrl:ke(c.controlBaseUrl),bindingId:c.bindingId,hostFingerprint:c.hostFingerprint,candidateEndpoints:c.candidateEndpoints}}}function Tn({label:t,url:a,hint:n}){return e.jsxs(e.Fragment,{children:[e.jsxs(Cs,{compact:!0,children:[e.jsx(ee,{label:s("settings.relayTunnelClientRouteLabel"),value:t}),e.jsx(ee,{label:s("settings.relayTunnelClientRouteAddressLabel"),value:a})]}),e.jsx("p",{className:"settings-relay-tunnel-inline-note",children:n})]})}function ee({label:t,value:a,trailing:n,className:i}){return e.jsx(jt,{className:i,label:t,trailing:n??e.jsx("span",{className:"settings-relay-tunnel-summary-value",children:a})})}function kn(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 ds({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 Ie(t,a){return t?"done":a?"current":"pending"}function Oe(t,a){return t?"settings.relayTunnelStepDone":a?"settings.relayTunnelStepCurrent":"settings.relayTunnelStepPending"}function Cn(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 Y(t){return t instanceof he||t instanceof Error?t.message:s("settings.relayTunnelLoadFailed")}function us(t,a,n){if(t instanceof he&&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 Y(t)}function de(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 Is(t){return t?t.split(".")[0]||s("common.unknown"):s("common.unknown")}function gs(t){var i,l,d,x;const a=ms(t.hostLabel)??ms(Is(t.tunnelDomain));if(!a)return((i=t.tunnelDomain)==null?void 0:i.trim())??null;const n=(l=t.controlBaseUrl)==null?void 0:l.trim();if(!n)return((d=t.tunnelDomain)==null?void 0:d.trim())??null;try{const v=new URL(n);return v.hostname=`${a}.${v.hostname}`,v.pathname="/",v.search="",v.hash="",v.origin}catch{return((x=t.tunnelDomain)==null?void 0:x.trim())??null}}function ms(t){const a=(t==null?void 0:t.trim().toLowerCase())??"";return!a||a===s("common.unknown").toLowerCase()?null:a}async function Fe(t,a){!(await t(a)).ok&&typeof window<"u"&&window.open(a,"_blank","noopener,noreferrer")}function Dn(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 Mn(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(!Dn(t))throw new Error(s("settings.relayTunnelCopyAccessUrlFailed"))}function Pn(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 hs(){return await E.request("/api/system/tailscale/status")}async function ps(t){return await E.request("/api/system/tailscale/config",{method:"PUT",body:JSON.stringify(t)})}async function Ln(){return await E.request("/api/system/tailscale/enable",{method:"POST"})}async function An(){return await E.request("/api/system/tailscale/disable",{method:"POST"})}async function En(){return await E.request("/api/system/tailscale/login",{method:"POST"})}async function Rn(){return await E.request("/api/system/tailscale/logout",{method:"POST"})}function Un({children:t}){return e.jsx("div",{className:"settings-remote-access-metrics",children:t})}function ye({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 In({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:l=>{if(n){l.preventDefault();return}l.target instanceof HTMLInputElement||(l.preventDefault(),i(!t))},children:[e.jsx("input",{type:"checkbox","aria-label":a,checked:t,disabled:n,onChange:l=>i(l.target.checked)}),e.jsx("span",{className:"settings-mobile-switch-track","aria-hidden":"true",children:e.jsx("span",{className:"settings-mobile-switch-thumb"})})]})]})}function On({configMode:t="modal"}){const a=Ve(),[n,i]=r.useState(null),[l,d]=r.useState(""),[x,v]=r.useState(""),[p,w]=r.useState(!0),[f,b]=r.useState(null),[T,S]=r.useState(null),[C,N]=r.useState(!1),[h,g]=r.useState(!1),u=r.useRef(!0),j=r.useRef(!1),P=r.useRef(async()=>{}),m=t==="inline",M=(n==null?void 0:n.activated)??!1;j.current=h;function R(k){if(i(k),d(k.controlServerUrl??""),v(k.hostname??""),S(null),!k.activated){g(!1),N(!1);return}j.current&&!xs(k.lastError)&&g(!1)}P.current=async k=>{k||w(!0);try{const L=await hs();if(!u.current)return;R(L)}catch(L){if(!u.current)return;S(ue(L))}finally{u.current&&!k&&w(!1)}},r.useEffect(()=>(u.current=!0,P.current(!1),()=>{u.current=!1}),[]),r.useEffect(()=>{if(!M)return;const k=window.setInterval(()=>{P.current(!0)},5e3);return()=>{window.clearInterval(k)}},[M]),r.useEffect(()=>{if(!h||!M)return;function k(){P.current(!0)}function L(){document.visibilityState==="visible"&&P.current(!0)}return window.addEventListener("focus",k),document.addEventListener("visibilitychange",L),()=>{window.removeEventListener("focus",k),document.removeEventListener("visibilitychange",L)}},[M,h]);const D=((n==null?void 0:n.controlServerUrl)??"")!==l.trim()||((n==null?void 0:n.hostname)??"")!==x.trim(),B=M&&xs(n==null?void 0:n.lastError),$=M&&Hn(a.ui.osFamily)&&B;async function I(){const k=await ps({controlServerUrl:fs(l),hostname:fs(x)});return R(k),k}async function H(k){b("toggle-activation"),S(null);try{const L=await ps({activated:k});R(L)}catch(L){S(ue(L))}finally{b(null),w(!1)}}async function W(k){b(k),S(null);try{D&&k!=="disable"&&k!=="logout"&&await I();const L=k==="enable"?await Ln():k==="disable"?await An():k==="login"?await En():await Rn();R(L)}catch(L){S(ue(L))}finally{b(null)}}async function U(){b("save"),S(null);try{await I(),N(!1)}catch(k){S(ue(k))}finally{b(null)}}async function J(){b("refresh"),S(null);try{const k=await hs();R(k)}catch(k){S(ue(k))}finally{b(null),w(!1)}}async function G(){const k=Vn(a.ui.osFamily);if(k){b("install"),S(null);try{const L=await a.bridge.openExternal(k);if(!L.ok){S(L.detail??s("settings.tailscaleInstallOpenFailed"));return}g(!0)}catch(L){S(L instanceof Error?L.message:s("settings.tailscaleInstallOpenFailed"))}finally{b(null)}}}function O(){f!=="save"&&N(!1)}const V=M?e.jsxs("span",{className:"settings-tailscale-status-indicator","data-tone":qn((n==null?void 0:n.phase)??"disabled"),children:[e.jsx("span",{className:"settings-tailscale-status-dot","aria-hidden":"true"}),Bn((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(ge,{heading:s("settings.tailscaleSectionTitle"),description:s("settings.tailscaleSectionDescription"),actions:e.jsx(In,{checked:M,label:s("settings.tailscaleMasterSwitchLabel"),disabled:f!==null,onChange:k=>{H(k)}}),children:p&&!n?e.jsx("p",{className:"settings-remote-access-panel-note",children:s("common.loading")}):e.jsxs(e.Fragment,{children:[e.jsxs(Un,{children:[e.jsx(ye,{label:s("settings.tailscaleStatusIndicator"),value:V}),e.jsx(ye,{label:s("settings.tailscaleServerAddress"),value:M?(n==null?void 0:n.reachableBaseUrl)??s("settings.tailscaleUnavailable"):s("settings.tailscaleUnavailable")}),e.jsx(ye,{label:s("settings.tailscaleAccountName"),value:M?(n==null?void 0:n.accountName)??s("settings.tailscaleUnavailable"):s("settings.tailscaleUnavailable")}),e.jsx(ye,{label:s("settings.tailscaleIpAddress"),value:M?Fn(n):s("settings.tailscaleUnavailable")})]}),M?null:e.jsx("p",{className:"settings-remote-access-panel-note",children:s("settings.tailscaleActivationHint")}),M&&(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,T||n!=null&&n.lastError?e.jsx("p",{className:"settings-relay-tunnel-error",children:T??(n==null?void 0:n.lastError)}):null,M?e.jsxs(ne,{align:"start",children:[$?e.jsx("button",{className:"settings-button",type:"button",disabled:p||f!==null,onClick:()=>{G()},children:f==="install"?s("common.loading"):s("settings.tailscaleInstallAction")}):null,m?null:e.jsx("button",{className:"secondary-button",type:"button",disabled:p||f!==null,onClick:()=>N(!0),children:s("settings.tailscaleConfigure")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:p||f!==null,onClick:()=>{J()},children:f==="refresh"?s("common.loading"):s("settings.tailscaleRefresh")}),n!=null&&n.enabled?e.jsx("button",{className:"secondary-button",type:"button",disabled:p||f!==null||B,onClick:()=>{W("disable")},children:f==="disable"?s("common.loading"):s("settings.tailscaleDisable")}):e.jsx("button",{className:"secondary-button",type:"button",disabled:p||f!==null||B,onClick:()=>{W("enable")},children:f==="enable"?s("common.loading"):s("settings.tailscaleEnable")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:p||f!==null||!(n!=null&&n.enabled)||B,onClick:()=>{W("login")},children:f==="login"?s("common.loading"):s("settings.tailscaleLogin")}),e.jsx("button",{className:"secondary-button",type:"button",disabled:p||f!==null||!(n!=null&&n.enabled)||B,onClick:()=>{W("logout")},children:f==="logout"?s("common.loading"):s("settings.tailscaleLogout")})]}):null]})}),m&&M?e.jsx(ge,{heading:s("settings.tailscaleConfigModalTitle"),description:s("settings.tailscaleConfigModalDescription"),children:e.jsx(bs,{controlServerUrlDraft:l,hostnameDraft:x,pendingAction:f,configDirty:D,onControlServerUrlChange:d,onHostnameChange:v,onSave:()=>{U()}})}):null]}),e.jsx(ae,{open:!m&&M&&C,title:s("settings.tailscaleConfigModalTitle"),description:s("settings.tailscaleConfigModalDescription"),size:"regular",onClose:O,children:e.jsx(bs,{controlServerUrlDraft:l,hostnameDraft:x,pendingAction:f,configDirty:D,footer:e.jsx("div",{className:"settings-tailscale-modal-actions",children:e.jsx("button",{className:"secondary-button",type:"button",disabled:f==="save",onClick:O,children:s("common.cancel")})}),onControlServerUrlChange:d,onHostnameChange:v,onSave:()=>{U()}})})]})}function bs({controlServerUrlDraft:t,hostnameDraft:a,pendingAction:n,configDirty:i,footer:l,onControlServerUrlChange:d,onHostnameChange:x,onSave:v}){return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-tailscale-form",children:[e.jsx(Ne,{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(Ne,{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=>x(p.target.value)})})]}),e.jsxs(ne,{align:"start",className:"settings-tailscale-config-actions",children:[l,e.jsx("button",{className:"settings-button",type:"button",disabled:n!==null||!i,onClick:v,children:n==="save"?s("common.loading"):s("common.save")})]})]})}function fs(t){const a=t.trim();return a.length>0?a:null}function ue(t){return t instanceof he||t instanceof Error?t.message:s("settings.tailscaleLoadFailed")}function Fn(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 Bn(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 xs(t){return t?t.includes("Tailscale CLI"):!1}function Hn(t){return t==="macos"||t==="windows"}function Vn(t){switch(t){case"macos":return"https://tailscale.com/download/mac";case"windows":return"https://tailscale.com/download/windows";default:return null}}function qn(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 Os({open:t,mobile:a,onClose:n}){const[i,l]=r.useState("tunnel"),d=r.useId(),x=[{id:"tunnel",label:s("settings.remoteAccessTunnelTab")},{id:"tailscale",label:s("settings.remoteAccessTailscaleTab")}],v=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"settings-model-tabs",role:"tablist","aria-label":s("settings.remoteAccessTabsLabel"),children:x.map(p=>{const w=`${d}-${p.id}-tab`,f=`${d}-${p.id}-panel`,b=i===p.id;return e.jsx("button",{id:w,type:"button",role:"tab",className:"settings-model-tab","data-active":b?"true":void 0,"aria-selected":b,"aria-controls":f,onClick:()=>l(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(Sn,{})}):e.jsx("div",{id:`${d}-tailscale-panel`,"aria-labelledby":`${d}-tailscale-tab`,role:"tabpanel",children:e.jsx(On,{configMode:"inline"})})]});return a?e.jsx(yt,{open:t,title:s("settings.remoteAccessModalTitle"),description:s("settings.remoteAccessModalDescription"),height:"full",kind:"form",showHandle:!0,onClose:n,children:v}):e.jsx(ae,{open:t,title:s("settings.remoteAccessModalTitle"),description:s("settings.remoteAccessModalDescription"),size:"wide",onClose:n,children:v})}function vs({title:t,description:a,actions:n,content:i,className:l}){return e.jsx(wt,{className:l,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 Fs={start:43e3,end:47999};function _n(t){return t==="appearance"||t==="model-management"||t==="server-connection"||t==="remote-access"||t==="security-privacy"||t==="software-update"}function zn(t){return t==="en-US"?s("locale.enUS"):s("locale.zhCN")}function $n(t){return t==="beta"?s("settings.releaseBeta"):s("settings.releaseStable")}function Wn(t){switch(t){case"acceptEdits":return s("settings.permissionModeAcceptEdits");case"bypassPermissions":return s("settings.permissionModeBypassPermissions");default:return s("settings.permissionModeDefault")}}function Kn(){const t=ws(),{theme:a,selectedTheme:n,autoTheme:i,setTheme:l,setAutoTheme:d}=pt(),x=at(y=>y),v=Ce(y=>y.profile.language),p=Ce(y=>y.profile.defaultPermissionMode),w=re(y=>y.sessionDisplaySortMode),f=re(y=>y.showSystemFiles),b=re(y=>y.notificationPreferences.notifyOnPermissionRequest),T=re(y=>y.notificationPreferences.notifyOnSessionCompleted),S=re(y=>y.notificationPreferences.notifyOnSessionFailed),C={language:v,defaultPermissionMode:p,debugPortPools:Ce(y=>y.profile.debugPortPools)??Fs},N=Ve(),h=it(x.platform),g=h,u=He(x)??"",[j,P]=r.useState(u);r.useEffect(()=>{P(u)},[u]);function m(){rt.clear(),De.resetToLocalFallback(),t("/login",{replace:!0})}function M(y){l(y)}function R(y){d(y)}function D(y){try{return lt(y)}catch{return null}}const B=D(j),$=B!==null&&B!==u;function I(y){y.preventDefault(),B&&Z.update({hosts:x.hosts.map(z=>z.id===x.activeHostId?{...z,baseUrl:B,updatedAt:new Date().toISOString()}:z)})}const H=[{value:"default",label:s("settings.permissionModeDefault")},{value:"acceptEdits",label:s("settings.permissionModeAcceptEdits")},{value:"bypassPermissions",label:s("settings.permissionModeBypassPermissions")}],W=[{value:"createdAt",label:s("settings.sessionSortModeCreatedAt")},{value:"updatedAt",label:s("settings.sessionSortModeUpdatedAt")},{value:"title",label:s("settings.sessionSortModeTitle")}];function U(y){Z.update({releaseChannel:y==="beta"?"beta":"stable"})}function J(y){Z.update({autoReconnect:y})}function G(y){Z.update({autoCheckUpdate:y})}function O(y){const z=y==="acceptEdits"||y==="bypassPermissions"?y:"default";De.updateProfile({defaultPermissionMode:z}).catch(()=>{})}function V(y){const z=y==="updatedAt"||y==="title"?y:"createdAt";ce.setSessionDisplaySortMode(z)}function k(y){ce.setShowSystemFiles(y)}function L(y){ce.setNotificationPreferences({notifyOnPermissionRequest:y})}function A(y){ce.setNotificationPreferences({notifyOnSessionCompleted:y})}function o(y){ce.setNotificationPreferences({notifyOnSessionFailed:y})}async function F(y){await De.updateProfile({debugPortPools:y})}return{platform:N,theme:a,selectedTheme:n,autoTheme:i,applyTheme:M,applyAutoTheme:R,runtimeConfig:x,accountPreferences:C,sessionDisplaySortMode:w,showSystemFiles:f,notifyOnPermissionRequest:b,notifyOnSessionCompleted:T,notifyOnSessionFailed:S,showServerSettings:g,canConfigureServerAddress:h,hostBaseUrlDraft:j,setHostBaseUrlDraft:P,canSaveHostBaseUrl:$,permissionModeOptions:H,sessionDisplaySortModeOptions:W,handleHostBaseUrlSubmit:I,handleLogout:m,updateReleaseChannel:U,updateAutoReconnect:J,updateAutoCheckUpdate:G,updateDefaultPermissionMode:O,updateSessionDisplaySortMode:V,updateShowSystemFiles:k,updateNotifyOnPermissionRequest:L,updateNotifyOnSessionCompleted:A,updateNotifyOnSessionFailed:o,updateDebugPortPools:F}}function ba(){const t=Kn(),a=ht();return t.platform.isMobile?e.jsx(Gn,{model:t,appVersion:a}):e.jsx(Jn,{model:t,appVersion:a})}function Jn({model:t,appVersion:a}){const[n,i]=r.useState(!1),[l,d]=r.useState(!1),{theme:x,selectedTheme:v,autoTheme:p,applyTheme:w,applyAutoTheme:f,runtimeConfig:b,accountPreferences:T,sessionDisplaySortMode:S,showSystemFiles:C,notifyOnPermissionRequest:N,notifyOnSessionCompleted:h,notifyOnSessionFailed:g,showServerSettings:u,hostBaseUrlDraft:j,setHostBaseUrlDraft:P,canSaveHostBaseUrl:m,permissionModeOptions:M,sessionDisplaySortModeOptions:R,platform:D,handleHostBaseUrlSubmit:B,handleLogout:$,updateReleaseChannel:I,updateAutoReconnect:H,updateAutoCheckUpdate:W,updateDefaultPermissionMode:U,updateSessionDisplaySortMode:J,updateShowSystemFiles:G,updateNotifyOnPermissionRequest:O,updateNotifyOnSessionCompleted:V,updateNotifyOnSessionFailed:k,updateDebugPortPools:L}=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(Ss,{})})]}),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(_,{checked:p,label:s("settings.autoTheme"),onChange:f})]}),e.jsx("span",{className:"settings-theme-note",children:s("settings.autoThemeDescription")})]}),e.jsx("div",{className:"theme-selector",children:Ts.map(A=>e.jsxs("button",{type:"button",className:`theme-card ${v===A.id&&!p?"active":""}`,"aria-pressed":v===A.id&&!p,disabled:p,onClick:()=>w(A.id),children:[e.jsx("span",{className:"theme-preview",style:{background:A.color}}),e.jsx("span",{className:"theme-label",children:ks(A)}),v===A.id&&!p?e.jsx("span",{className:"theme-check",children:"✓"}):null]},A.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:S,onChange:A=>J(A.target.value),children:R.map(A=>e.jsx("option",{value:A.value,children:A.label},A.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(_,{checked:C,label:s("settings.showSystemFiles"),onChange:G})})]})]})]}),u?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:B,children:[e.jsx("input",{"aria-label":s("settings.serverAddress"),className:"settings-text-input",value:j,onChange:A=>P(A.target.value)}),e.jsx("button",{className:"settings-button",disabled:!m,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(_,{checked:b.autoReconnect,label:s("settings.autoReconnect"),onChange:H})})]})]})]}):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(Ms,{})})})})]}),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:T.defaultPermissionMode,onChange:A=>U(A.target.value),children:M.map(A=>e.jsx("option",{value:A.value,children:A.label},A.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(As,{})})]}),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(_,{checked:N,label:s("settings.notifyOnPermissionRequest"),onChange:O})})]}),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(_,{checked:h,label:s("settings.notifyOnSessionCompleted"),onChange:V})})]}),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(_,{checked:g,label:s("settings.notifyOnSessionFailed"),onChange:k})})]})]})]}),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(Bs,{value:T.debugPortPools,onSave:L})})]}),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:b.releaseChannel,onChange:A=>I(A.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(Us,{})})]}),D.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(_,{checked:b.autoCheckUpdate,label:s("settings.autoCheckUpdate"),onChange:W})})]}),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(Ds,{})})]})]})]})]}),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:$,type:"button",children:s("common.logout")})]})]}),e.jsx(kt,{isOpen:n,onClose:()=>i(!1)}),e.jsx(Os,{open:l,mobile:!1,onClose:()=>d(!1)})]})}function Gn({model:t,appVersion:a}){const n=ws(),{section:i}=bt(),l=_n(i)?i:null,d=[{id:"appearance",title:s("settings.appearance"),description:s("settings.appearanceSectionSummary"),value:zn(t.accountPreferences.language),icon:e.jsx(na,{})}];return t.showServerSettings&&d.push({id:"server-connection",title:s("settings.serverConnection"),description:s("settings.serverConnectionSectionSummary"),value:He(t.runtimeConfig)??"",icon:e.jsx(aa,{})}),d.push({id:"model-management",title:s("settings.modelManagement"),description:s("settings.modelManagementSectionSummary"),value:s("settings.modelManagementNavValue"),icon:e.jsx(ra,{})},{id:"remote-access",title:s("settings.remoteAccess"),description:s("settings.remoteAccessSectionSummary"),value:s("settings.remoteAccessNavValue"),icon:e.jsx(la,{})},{id:"security-privacy",title:s("settings.securityPrivacy"),description:s("settings.securityPrivacySectionSummary"),value:Wn(t.accountPreferences.defaultPermissionMode),icon:e.jsx(ca,{})},{id:"software-update",title:s("settings.softwareUpdate"),description:s("settings.softwareUpdateSectionSummary"),value:$n(t.runtimeConfig.releaseChannel),icon:e.jsx(ia,{})}),(l?d.find(v=>v.id===l)??null:null)?e.jsxs("div",{className:"settings-page settings-page-mobile mobile-page-scroll-root mobile-page-with-top-header",children:[e.jsx(vs,{title:s("settings.title")}),e.jsxs("div",{className:"settings-mobile-container",children:[l==="appearance"?e.jsx(Zn,{model:t}):null,l==="model-management"?e.jsx(sa,{}):null,l==="server-connection"&&t.showServerSettings?e.jsx(Qn,{model:t}):null,l==="remote-access"?e.jsx(ea,{model:t}):null,l==="security-privacy"?e.jsx(Xn,{model:t}):null,l==="software-update"?e.jsx(ta,{model:t}):null]}),e.jsx(ys,{onLogout:t.handleLogout})]}):e.jsxs("div",{className:"settings-page settings-page-mobile mobile-page-scroll-root mobile-page-with-top-header",children:[e.jsx(vs,{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(v=>e.jsxs("button",{type:"button",className:"settings-mobile-nav-row",onClick:()=>n(`/settings/${v.id}`),children:[e.jsx("span",{className:"settings-mobile-nav-icon",children:v.icon}),e.jsxs("span",{className:"settings-mobile-nav-copy",children:[e.jsx("span",{className:"settings-mobile-nav-title",children:v.title}),e.jsx("span",{className:"settings-mobile-nav-description",children:v.description})]}),e.jsxs("span",{className:"settings-mobile-nav-trailing",children:[v.value?e.jsx("span",{className:"settings-mobile-nav-value",children:v.value}):null,e.jsx(oa,{})]})]},v.id))})}),e.jsx("div",{className:"settings-footer settings-footer-mobile",children:e.jsxs("span",{className:"settings-version",children:["CodingNS v",a]})})]}),e.jsx(ys,{onLogout:t.handleLogout})]})}function Zn({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(Ss,{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(_,{checked:t.autoTheme,label:s("settings.autoTheme"),onChange:t.applyAutoTheme})]}),Ts.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:ks(a)})]}),e.jsx("span",{className:"settings-mobile-choice-indicator","aria-hidden":"true",children:n?e.jsx(da,{}):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(_,{checked:t.showSystemFiles,label:s("settings.showSystemFiles"),onChange:t.updateShowSystemFiles})]})]})]})]})}function Qn({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(_,{checked:t.runtimeConfig.autoReconnect,label:s("settings.autoReconnect"),onChange:t.updateAutoReconnect})]})})]})]})}function Xn({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(As,{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(Bs,{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(_,{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(_,{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(_,{checked:t.notifyOnSessionFailed,label:s("settings.notifyOnSessionFailed"),onChange:t.updateNotifyOnSessionFailed})]})]})]})]})}function Bs(t){const[a,n]=r.useState(()=>js(t.value)),[i,l]=r.useState(!1),[d,x]=r.useState(null),[v,p]=r.useState(!1);r.useEffect(()=>{n(js(t.value))},[t.value]);async function w(){x(null),p(!1);let f;try{f=Yn(a)}catch(b){x(b instanceof Error?b.message:s("settings.debugPortPoolSaveFailed"));return}try{l(!0),await t.onSave(f),p(!0)}catch(b){x(b instanceof Error?b.message:s("settings.debugPortPoolSaveFailed"))}finally{l(!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:f=>{const b=f.target.value;n(T=>({...T,start:b}))}}),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:f=>{const b=f.target.value;n(T=>({...T,end:b}))}}),e.jsx("button",{type:"button",className:t.compact?"settings-mobile-primary-button":"settings-button",disabled:i,onClick:()=>{w()},children:i?s("common.loading"):s("common.save")}),v?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 js(t){const a=t??Fs;return{start:String(a.start),end:String(a.end)}}function Yn(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 ea({model:t}){const[a,n]=r.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(Os,{open:a,mobile:!0,onClose:()=>n(!1)})]})}function sa(){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(Ms,{})})]})}function ta({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(Us,{})})]}),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(_,{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(Ds,{})})]})]})}function ys({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 _({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 na(){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 aa(){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 ia(){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 la(){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 ra(){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 ca(){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 oa(){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 da(){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{ba as SettingsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as s,j as e,t as n,Y as Xe}from"./index-DEbFT-Aq.js";import{D as Se}from"./WorkbenchModal-CbDxaCOR.js";import{M as Pe,x as Ke}from"./MobileSheet-D1lMrcvD.js";import{u as Ye,X as Y,r as Ne,w as Je,aS as Oe}from"./WorkbenchLayout-Brlj8K3i.js";import{u as Qe,e as Ze,f as ea}from"./App-BFP7LCSC.js";import{b as aa,g as Te,r as ke,s as na,u as ra,k as la,m as ta}from"./terminal-runtime-meta-B9xJGY__.js";import{T as ia,i as sa}from"./TerminalRuntimeFallbackModal-CNzOt5v5.js";import"./window-BWqRixxq.js";import"./event-DvH9tcej.js";const J={mode:"command",name:"",cwd:"",target:"",args:"",port:"",proxyEnabled:!1},Ce=60*1e3;function oa(l){return l?new Date(l).toLocaleString():n("common.unknown")}function ca(l){return l.split(" ").map(t=>t.trim()).filter(Boolean)}function ma(l){var t,c,u;return((t=l.find(p=>p.id==="cmd"&&p.available))==null?void 0:t.id)??((c=l.find(p=>p.available))==null?void 0:c.id)??((u=l[0])==null?void 0:u.id)??""}function da(l){const t=l.name.trim();if(t)return t;const c=l.target.trim(),u=l.args.trim();return c?u?`${c} ${u}`:c:l.mode==="script"?n("terminalManager.defaultScriptName"):n("terminalManager.defaultCommandName")}function ua(l){const t=l.args.join(" ");return t?`${l.command} ${t}`:l.command}function ga(l){return{mode:Ee(l),name:l.name,cwd:l.cwd,target:l.command,args:l.args.join(" "),port:l.port===null?"":String(l.port),proxyEnabled:l.proxyEnabled}}function pa(l){return Xe(`/proxy/${encodeURIComponent(l)}`)}function Ee(l){const t=l.command.toLowerCase();return t.endsWith(".ps1")||t.endsWith(".bat")||t.endsWith(".cmd")||t.endsWith(".sh")?"script":"command"}function ha(l){const t=l.trim();if(!t)return null;const c=Number(t);return Number.isInteger(c)?c:Number.NaN}function we(l,t){return l.get(t)??null}function xa(l,t){return l.port===null?{tone:"untracked",title:n("terminalManager.portUnset"),summary:n("terminalManager.portUnsetDescription"),badgeLabel:n("terminalManager.portUnset")}:t!=null&&t.occupied?{tone:"running",title:n("terminalManager.portOccupied"),summary:t.processName||n("terminalManager.processCommandFallback"),badgeLabel:t.processId?`PID ${t.processId}`:n("terminalManager.statusRunning"),badgeTone:"success"}:{tone:"idle",title:n("terminalManager.portAvailable"),summary:n("terminalManager.portAvailableDescription"),badgeLabel:n("terminalManager.statusStopped")}}function ba(l){return l!=null&&l.terminationScope?l.terminationScope==="process_group"?n("terminalManager.terminationScopeProcessGroup"):n("terminalManager.terminationScopeProcess"):null}function fa({open:l,mobile:t=!1,title:c,description:u,onClose:p,children:y,className:m}){return t?e.jsx(Pe,{open:l,title:c,description:u,kind:"form",height:"three-quarter",className:m,bodyClassName:"terminal-manager-modal-body",showHandle:!0,onClose:p,children:y}):e.jsx(Se,{open:l,title:c,description:u,size:"regular",layout:"form",className:["terminal-manager-modal-card",m].filter(Boolean).join(" "),bodyClassName:"terminal-manager-modal-body",onClose:p,children:y})}function ja({open:l,mobile:t=!1,busy:c,title:u,description:p,confirmLabel:y,onClose:m,onConfirm:h,className:N}){const F=e.jsxs(Ke,{className:"terminal-manager-confirm-actions",children:[e.jsx("button",{type:"button",className:"secondary-button",disabled:c,onClick:m,children:n("common.cancel")}),e.jsx("button",{type:"button",className:"secondary-button workbench-danger-button",disabled:c,onClick:()=>{h()},children:c?n("terminalManager.templateRemoving"):y})]});return t?e.jsx(Pe,{open:l,title:u,description:p,kind:"action",height:"auto",dismissible:!c,showHandle:!0,showCancelButton:!1,className:N,bodyClassName:"terminal-manager-confirm-body",footer:F,onClose:m,children:null}):e.jsx(Se,{open:l,title:u,description:p,size:"compact",layout:"confirm",dismissible:!c,className:["terminal-manager-confirm-modal",N].filter(Boolean).join(" "),bodyClassName:"terminal-manager-confirm-body",footer:F,onClose:m,children:null})}function Le({label:l,value:t,options:c,open:u,onToggle:p,onChange:y}){const m=c.find(h=>h.value===t)??c[0]??null;return e.jsxs("div",{className:"field-group terminal-manager-mobile-picker",children:[e.jsx("span",{children:l}),e.jsxs("button",{type:"button",className:"terminal-manager-mobile-picker-trigger","aria-label":`${l} ${(m==null?void 0:m.label)??""}`.trim(),"aria-expanded":u?"true":"false",onClick:p,children:[e.jsxs("span",{className:"terminal-manager-mobile-picker-copy",children:[e.jsx("strong",{children:(m==null?void 0:m.label)??n("common.unknown")}),m!=null&&m.description?e.jsx("span",{children:m.description}):null]}),e.jsx(va,{expanded:u})]}),u?e.jsx("div",{className:"terminal-manager-mobile-picker-list",role:"listbox","aria-label":l,children:c.map(h=>{const N=h.value===t;return e.jsxs("button",{type:"button",role:"option",className:"terminal-manager-mobile-picker-option","aria-selected":N,disabled:h.disabled,onClick:()=>{y(h.value)},children:[e.jsxs("span",{className:"terminal-manager-mobile-picker-option-copy",children:[e.jsx("strong",{children:h.label}),h.description?e.jsx("span",{children:h.description}):null]}),e.jsx("span",{className:"terminal-manager-mobile-picker-option-indicator","aria-hidden":"true",children:N?e.jsx(ya,{}):e.jsx(Ma,{})})]},h.value||"__empty__")})}):null]})}function va({expanded:l}){return e.jsx("svg",{viewBox:"0 0 16 16","aria-hidden":"true",className:"terminal-manager-mobile-picker-chevron","data-expanded":l?"true":"false",children:e.jsx("path",{d:"M4 6.5L8 10l4-3.5",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.7"})})}function Ma(){return e.jsx("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:e.jsx("path",{d:"M6 3.5L10.5 8 6 12.5",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.6"})})}function ya(){return e.jsx("svg",{viewBox:"0 0 16 16","aria-hidden":"true",children:e.jsx("path",{d:"M3.5 8.5L6.5 11.5L12.5 5.5",fill:"none",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"1.8"})})}function Ia({className:l,currentWorkspaceId:t,navigationGroups:c,externalWindowMode:u=!1,workbenchShellOverrides:p}){var je,ve,Me,ye;const y=Qe(),m=Ze(),h=Ye(),{subscribeTerminalManagerSnapshot:N,requestTerminalManagerRefresh:F,addTerminalManagerSnapshotListener:te}={...h,...p},i=(t==null?void 0:t.trim())||null,[O,G]=s.useState([]),[Q,W]=s.useState(null),[f,S]=s.useState([]),[P,D]=s.useState([]),[x,Z]=s.useState([]),[q,ee]=s.useState(""),[A,E]=s.useState(""),[d,j]=s.useState(J),[_,H]=s.useState(null),[I,V]=s.useState(null),[Ie,ie]=s.useState([]),[se,z]=s.useState(!1),[ae,oe]=s.useState(!1),[ce,me]=s.useState(null),[de,ue]=s.useState(null),[k,ge]=s.useState(null),[v,U]=s.useState(null),[X,ne]=s.useState(null),[pe,he]=s.useState(!1),[xe,C]=s.useState(null),{showToast:b}=ea(),B=(l==null?void 0:l.includes("mobile-tool-process-panel"))??!1,$=_!==null,be=_==="edit"?f.find(a=>a.id===I)??null:null,w=_==="edit";s.useEffect(()=>{Y("terminal_manager.props",{currentWorkspaceId:t,workspaceCount:c.length,externalWindowMode:u})},[t,u,c.length]);const g=s.useMemo(()=>x.find(a=>a.id===q)??null,[q,x]),R=s.useMemo(()=>aa(m.ui.osFamily),[m.ui.osFamily]),fe=s.useMemo(()=>new Map(P.map(a=>[a.templateId,a])),[P]),Re=s.useMemo(()=>P.filter(a=>a.occupied).length,[P]),Fe=s.useMemo(()=>f.filter(a=>a.port!==null).length,[f]),De=(g==null?void 0:g.available)===!1&&x.length>0;s.useEffect(()=>{ee(a=>x.length?a&&x.some(r=>r.id===a)?a:ma(x):"")},[x]),s.useEffect(()=>{!$||!i||x.length>0||T(i)},[i,x.length,$]),s.useEffect(()=>{$||C(null)},[$]),s.useEffect(()=>{_==="edit"&&I&&!be&&(H(null),V(null),j(J),E(""),C(null))},[be,I,_]),s.useEffect(()=>{!v||k===v.templateId||f.some(a=>a.id===v.templateId)||U(null)},[v,k,f]),s.useEffect(()=>{if(!i){G([]),W(null),S([]),D([]),z(!1);return}const a=Ne(le(i),Ce);Y("terminal_manager.snapshot",{workspaceId:i,cached:!!a,cachedTemplateCount:(a==null?void 0:a.templates.length)??0,cachedStatusCount:(a==null?void 0:a.templateStatuses.length)??0}),a?(G(a.terminals),W(typeof a.revision=="string"?a.revision:null),S(a.templates),D(a.templateStatuses),Z(a.shellOptions??[]),z(!1)):(G([]),W(null),S([]),D([]),Z([]),z(!0))},[i]),s.useEffect(()=>{if(i)return te(a=>{a.workspaceId===i&&(Y("terminal_manager.snapshot_received",{workspaceId:a.workspaceId,terminalCount:a.terminals.length,templateCount:a.templates.length,statusCount:a.templateStatuses.length}),Ae(a),z(!1))})},[i,te]),s.useEffect(()=>{if(!i)return;const a=Ne(le(i),Ce);N(i,{knownRevision:(a==null?void 0:a.revision)??null}),a||T(i)},[i,F,N]),s.useEffect(()=>{i&&Je(le(i),{revision:Q,terminals:O,templates:f,templateStatuses:P,shellOptions:x})},[i,Q,x,P,f,O]);function Ae(a){W(typeof a.revision=="string"?a.revision:null),G(a.terminals),S(a.templates),D(a.templateStatuses),Z(a.shellOptions??[])}function T(a){Y("terminal_manager.refresh_requested",{workspaceId:a}),F(a,{knownRevision:Q})}function K(){H(null),V(null),j(J),E(""),C(null)}function _e(){V(null),j(J),E(""),H("create")}function Ue(a){V(a.id),j(ga(a)),E(a.runtimeType??""),H("edit")}async function Be(a){if(i){ue(a);try{await na(a),T(i),b({title:n("terminalManager.stopProcessSuccess"),tone:"success"})}catch(r){b({title:r instanceof Error?r.message:n("terminalManager.stopProcessFailed"),tone:"error"})}finally{ue(null)}}}async function $e(){if(!i||!d.target.trim())return;const a=ha(d.port);if(Number.isNaN(a)){b({title:n("terminalManager.invalidPort"),tone:"error"});return}if(d.proxyEnabled&&a===null){b({title:n("terminalManager.proxyPortRequired"),tone:"error"});return}oe(!0);try{const r={workspaceId:i,name:da(d),cwd:d.cwd.trim()||void 0,command:d.target.trim(),args:ca(d.args),port:a,proxyEnabled:d.proxyEnabled,runtimeType:A||null};if(w&&I){const o=await ra(I,r);S(M=>M.map(L=>L.id===o.id?o:L))}else await la(r);K(),T(i),b({title:w?n("terminalManager.templateUpdateSuccess"):n("terminalManager.templateSaveSuccess"),tone:"success"})}catch(r){b({title:r instanceof Error?r.message:w?n("terminalManager.templateUpdateFailed"):n("terminalManager.templateSaveFailed"),tone:"error"})}finally{oe(!1)}}async function Ge(a){const r=await m.bridge.openExternal(a);r.ok||b({title:r.detail||n("terminalManager.openProxyUrlFailed"),tone:"error"})}async function We(a,r){if(i){ge(a.id);try{await ta(a.id),S(o=>o.filter(M=>M.id!==a.id)),D(o=>o.filter(M=>M.templateId!==a.id)),ie(o=>o.filter(M=>M!==a.id)),U(o=>(o==null?void 0:o.templateId)===a.id?null:o),I===a.id&&K(),T(i),b({title:n("terminalManager.templateDeleteSuccess"),tone:"success"})}catch(o){b({title:o instanceof Error?o.message:n("terminalManager.templateDeleteFailed"),tone:"error"})}finally{ge(null)}}}async function qe(a){if(!i)return;const r=g!=null&&g.available?g.shell:void 0;me(a);try{await ke(a,{shell:r}),T(i),b({title:n("terminalManager.templateRunSuccess"),tone:"success"})}catch(o){if(sa(o)){ne({templateId:a,shell:r});return}b({title:o instanceof Error?o.message:n("terminalManager.templateRunFailed"),tone:"error"})}finally{me(null)}}async function He(){if(!(!i||!X)){he(!0);try{await ke(X.templateId,{shell:X.shell,runtimeType:"embedded-pty"}),ne(null),T(i),b({title:n("terminalManager.templateRunSuccess"),tone:"success"})}catch(a){b({title:a instanceof Error?a.message:n("terminalManager.templateRunFailed"),tone:"error"})}finally{he(!1)}}}function Ve(a){ie(r=>r.includes(a)?r.filter(o=>o!==a):[...r,a])}return c.length?i?e.jsxs("section",{className:["conversation-panel","surface-card","terminal-manager-panel",l].filter(Boolean).join(" "),children:[e.jsx(ia,{open:X!==null,busy:pe,onClose:()=>{pe||ne(null)},onConfirmFallback:()=>{He()}}),e.jsxs("div",{className:"terminal-manager-header terminal-manager-desktop-header",children:[e.jsx("div",{className:"terminal-manager-panel-heading",children:e.jsxs("div",{children:[e.jsx("h2",{children:n("terminalManager.templateSectionTitle")}),e.jsx("p",{className:"status-text",children:n("terminalManager.desktopPanelDescription")})]})}),e.jsxs("div",{className:"terminal-manager-overview",children:[e.jsxs("article",{className:"terminal-manager-overview-card",children:[e.jsx("span",{children:n("terminalManager.runningCountLabel")}),e.jsx("strong",{children:Re})]}),e.jsxs("article",{className:"terminal-manager-overview-card",children:[e.jsx("span",{children:n("terminalManager.portWatchCountLabel")}),e.jsx("strong",{children:Fe})]}),e.jsxs("article",{className:"terminal-manager-overview-card",children:[e.jsx("span",{children:n("terminalManager.terminalCountLabel")}),e.jsx("strong",{children:O.length})]})]}),e.jsxs("div",{className:"terminal-manager-toolbar terminal-manager-toolbar-header",children:[e.jsx("button",{className:"secondary-button",type:"button",disabled:!i,onClick:()=>{i&&y(Oe(i))},children:n("terminalManager.openWorkspaceDebugAction")}),e.jsx("button",{className:"ghost-button",type:"button",disabled:!i||se,onClick:()=>{i&&T(i)},children:n("terminalManager.refresh")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!i,onClick:()=>{_e()},children:n("terminalManager.openCreateModalAction")})]})]}),e.jsxs("section",{className:"terminal-manager-section",children:[e.jsxs("div",{className:"terminal-manager-section-header",children:[e.jsxs("div",{children:[e.jsx("h3",{children:n("terminalManager.templateSectionTitle")}),e.jsx("p",{className:"status-text",children:n("terminalManager.templateSectionDescription")})]}),e.jsx("span",{className:"workbench-section-counter",children:f.length})]}),se&&!f.length?e.jsx("p",{className:"status-text",children:n("common.loading")}):null,f.length?e.jsx("div",{className:"terminal-manager-list",children:f.map(a=>{const r=we(fe,a.id),o=xa(a,r),M=ba(r),L=Ie.includes(a.id),ze=L?n("terminalManager.hideDetailsAction"):n("terminalManager.showDetailsAction"),re=a.proxyEnabled&&a.proxySlug?pa(a.proxySlug):null;return e.jsxs("article",{className:"terminal-manager-card terminal-manager-desktop-card","data-tone":o.tone,"data-expanded":L?"true":"false",children:[e.jsxs("div",{className:"terminal-manager-card-header",children:[e.jsxs("div",{className:"terminal-manager-card-title",children:[e.jsx("span",{className:"terminal-manager-card-indicator","aria-hidden":"true"}),e.jsx("strong",{children:a.name})]}),e.jsxs("div",{className:"terminal-manager-card-tools",children:[e.jsx("span",{className:"badge terminal-runtime-badge",children:Te(a.runtimeType,m.ui.osFamily)}),e.jsx("span",{className:"badge",children:Ee(a)==="script"?n("terminalManager.scriptMode"):n("terminalManager.commandMode")}),e.jsx("button",{className:"terminal-manager-detail-toggle",type:"button","aria-label":ze,"aria-expanded":L,onClick:()=>{Ve(a.id)},children:"i"})]})]}),e.jsxs("div",{className:"terminal-manager-status-panel",children:[e.jsxs("div",{className:"terminal-manager-status-copy",children:[e.jsx("p",{className:"terminal-manager-status-title",children:o.title}),e.jsx("p",{className:"status-text",children:o.summary})]}),e.jsxs("div",{className:"terminal-manager-status-badges",children:[e.jsx("span",{className:"terminal-manager-stat-pill",children:a.port===null?n("terminalManager.portUnset"):`${n("terminalManager.portLabel")} ${a.port}`}),e.jsx("span",{className:"badge","data-tone":o.badgeTone,children:o.badgeLabel}),r!=null&&r.occupied&&r.processGroupId?e.jsx("span",{className:"badge",children:`PGID ${r.processGroupId}`}):null,a.proxyEnabled?e.jsx("span",{className:"badge",children:n("terminalManager.proxyEnabled")}):null]})]}),e.jsxs("div",{className:"terminal-manager-actions",children:[r!=null&&r.occupied?e.jsx("button",{className:"secondary-button",type:"button",disabled:de===a.id,onClick:()=>{Be(a.id)},children:de===a.id?n("terminalManager.stoppingProcess"):n("terminalManager.stopProcessAction")}):null,e.jsx("button",{className:"secondary-button",type:"button",disabled:ce===a.id||De,onClick:()=>{qe(a.id)},children:ce===a.id?n("terminalManager.runningTemplate"):n("terminalManager.runTemplateAction")})]}),L?e.jsxs("section",{className:"terminal-manager-details","aria-label":n("terminalManager.detailsSectionTitle"),children:[e.jsxs("div",{className:"terminal-manager-detail-grid",children:[e.jsxs("div",{className:"terminal-manager-detail-item terminal-manager-detail-item-wide",children:[e.jsx("span",{children:n("terminalManager.commandPreviewLabel")}),e.jsx("strong",{children:ua(a)})]}),e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.cwdLabel")}),e.jsx("strong",{children:a.cwd})]}),e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminal.runtimeField")}),e.jsx("strong",{children:Te(a.runtimeType,m.ui.osFamily)})]}),e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.updatedAt")}),e.jsx("strong",{children:oa(a.updatedAt)})]}),e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.portLabel")}),e.jsx("strong",{children:a.port===null?n("terminalManager.portUnset"):a.port})]}),e.jsxs("div",{className:"terminal-manager-detail-item terminal-manager-detail-item-wide",children:[e.jsx("span",{children:n("terminalManager.proxyField")}),e.jsx("strong",{children:re??n("terminalManager.proxyDisabledDescription")})]}),r!=null&&r.processId?e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.processIdLabel")}),e.jsx("strong",{children:r.processId})]}):null,r!=null&&r.processGroupId?e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.processGroupIdLabel")}),e.jsx("strong",{children:r.processGroupId})]}):null,M?e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.terminationScopeLabel")}),e.jsx("strong",{children:M})]}):null,r!=null&&r.parentProcessId?e.jsxs("div",{className:"terminal-manager-detail-item",children:[e.jsx("span",{children:n("terminalManager.parentProcessIdLabel")}),e.jsx("strong",{children:r.parentProcessId})]}):null,r!=null&&r.processCommandLine?e.jsxs("div",{className:"terminal-manager-detail-item terminal-manager-detail-item-wide",children:[e.jsx("span",{children:n("terminalManager.processCommandLabel")}),e.jsx("strong",{children:r.processCommandLine})]}):null,r!=null&&r.parentProcessCommandLine?e.jsxs("div",{className:"terminal-manager-detail-item terminal-manager-detail-item-wide",children:[e.jsx("span",{children:n("terminalManager.parentProcessCommandLabel")}),e.jsx("strong",{children:r.parentProcessCommandLine})]}):null]}),e.jsxs("div",{className:"terminal-manager-actions terminal-manager-detail-actions",children:[re?e.jsx("button",{className:"secondary-button",type:"button",onClick:()=>{Ge(re)},children:n("terminalManager.openProxyUrlAction")}):null,e.jsx("button",{className:"secondary-button",type:"button",disabled:ae||k===a.id,onClick:()=>{Ue(a)},children:n("terminalManager.editAction")}),e.jsx("button",{className:"secondary-button workbench-danger-button",type:"button",disabled:k===a.id,onClick:()=>{U({templateId:a.id,name:a.name,occupied:!!(r!=null&&r.occupied)})},children:k===a.id?n("terminalManager.templateRemoving"):n("terminalManager.removeAction")})]})]}):null]},a.id)})}):e.jsx("section",{className:"workbench-empty-state minimal",children:e.jsx("p",{children:n("terminalManager.emptyTemplateBody")})})]}),e.jsx(fa,{open:$,mobile:B,title:w?n("terminalManager.editModalTitle"):n("terminalManager.createModalTitle"),description:w?n("terminalManager.editModalDescription"):n("terminalManager.createModalDescription"),className:B?"terminal-manager-mobile-modal":void 0,onClose:K,children:e.jsxs("section",{className:"terminal-manager-modal-form",children:[B?e.jsxs(e.Fragment,{children:[e.jsx(Le,{label:n("terminalManager.shellField"),value:q,open:xe==="shell",options:x.map(a=>({value:a.id,label:a.label,description:a.available?null:a.unavailableReason??n("terminalManager.shellUnavailable"),disabled:!a.available})),onToggle:()=>{C(a=>a==="shell"?null:"shell")},onChange:a=>{ee(a),C(null)}}),(g==null?void 0:g.available)===!1&&g.unavailableReason?e.jsx("p",{className:"status-text",children:g.unavailableReason}):null,e.jsx(Le,{label:n("terminal.runtimeField"),value:A,open:xe==="runtime",options:R.map(a=>({value:a.value,label:a.label,description:a.description})),onToggle:()=>{C(a=>a==="runtime"?null:"runtime")},onChange:a=>{E(a),C(null)}}),e.jsx("p",{className:"status-text",children:((je=R.find(a=>a.value===A))==null?void 0:je.description)??((ve=R[0])==null?void 0:ve.description)})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:n("terminalManager.shellField")}),e.jsx("select",{value:q,onChange:a=>{ee(a.target.value)},children:x.map(a=>e.jsx("option",{value:a.id,disabled:!a.available,children:a.available?a.label:`${a.label} - ${n("terminalManager.shellUnavailable")}`},a.id))}),(g==null?void 0:g.available)===!1&&g.unavailableReason?e.jsx("p",{className:"status-text",children:g.unavailableReason}):null]}),e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:n("terminal.runtimeField")}),e.jsx("select",{value:A,onChange:a=>{E(a.target.value)},children:R.map(a=>e.jsx("option",{value:a.value,children:a.label},a.value||"auto"))}),e.jsx("p",{className:"status-text",children:((Me=R.find(a=>a.value===A))==null?void 0:Me.description)??((ye=R[0])==null?void 0:ye.description)})]})]}),e.jsxs("div",{className:"terminal-manager-mode-row",role:"tablist","aria-label":n("terminalManager.modeField"),children:[e.jsx("button",{type:"button",className:d.mode==="command"?"workbench-info-tab active":"workbench-info-tab",onClick:()=>{j(a=>({...a,mode:"command"}))},children:n("terminalManager.commandMode")}),e.jsx("button",{type:"button",className:d.mode==="script"?"workbench-info-tab active":"workbench-info-tab",onClick:()=>{j(a=>({...a,mode:"script"}))},children:n("terminalManager.scriptMode")})]}),e.jsxs("div",{className:"terminal-manager-grid",children:[e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:n("terminalManager.templateNameField")}),e.jsx("input",{value:d.name,placeholder:n("terminalManager.templateNamePlaceholder"),onChange:a=>{j(r=>({...r,name:a.target.value}))}})]}),e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:n("terminalManager.cwdField")}),e.jsx("input",{value:d.cwd,placeholder:n("terminalManager.cwdPlaceholder"),onChange:a=>{j(r=>({...r,cwd:a.target.value}))}})]})]}),e.jsxs("div",{className:"terminal-manager-grid",children:[e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:d.mode==="script"?n("terminalManager.scriptPathField"):n("terminalManager.commandField")}),e.jsx("input",{value:d.target,placeholder:d.mode==="script"?n("terminalManager.scriptPathPlaceholder"):n("terminalManager.commandPlaceholder"),onChange:a=>{j(r=>({...r,target:a.target.value}))}})]}),e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:n("terminalManager.argsField")}),e.jsx("input",{value:d.args,placeholder:n("terminalManager.argsPlaceholder"),onChange:a=>{j(r=>({...r,args:a.target.value}))}})]})]}),e.jsxs("div",{className:"terminal-manager-grid",children:[e.jsxs("div",{className:"field-group",children:[e.jsx("span",{children:n("terminalManager.portField")}),e.jsx("input",{value:d.port,placeholder:n("terminalManager.portPlaceholder"),onChange:a=>{j(r=>({...r,port:a.target.value}))}})]}),e.jsxs("div",{className:"field-group terminal-manager-proxy-field",children:[e.jsx("span",{children:n("terminalManager.proxyField")}),e.jsxs("div",{className:"terminal-manager-proxy-control",children:[e.jsx("span",{children:n("terminalManager.proxyToggleLabel")}),e.jsxs("label",{className:"terminal-manager-proxy-switch",children:[e.jsx("input",{type:"checkbox",role:"switch","aria-label":n("terminalManager.proxyField"),checked:d.proxyEnabled,onChange:a=>{j(r=>({...r,proxyEnabled:a.target.checked}))}}),e.jsx("span",{className:"terminal-manager-proxy-track","aria-hidden":"true",children:e.jsx("span",{className:"terminal-manager-proxy-thumb"})})]})]})]})]}),e.jsxs("div",{className:"terminal-manager-actions",children:[e.jsx("button",{className:"secondary-button",type:"button",onClick:K,children:n("common.close")}),e.jsx("button",{className:"primary-button",type:"button",disabled:!i||ae||!d.target.trim(),onClick:()=>{$e()},children:ae?w?n("terminalManager.templateUpdating"):n("terminalManager.templateSaving"):w?n("terminalManager.saveTemplateChangesAction"):n("terminalManager.saveLaunchAction")})]})]})}),e.jsx(ja,{open:v!==null,mobile:B,busy:v!==null&&k===v.templateId,title:n("terminalManager.removeConfirmTitle"),description:v?n(v.occupied?"terminalManager.removeRunningConfirmTarget":"terminalManager.removeConfirmTarget",{name:v.name}):"",confirmLabel:n("terminalManager.removeConfirmAction"),className:B?"terminal-manager-mobile-modal":"terminal-manager-confirm-modal",onClose:()=>{k||U(null)},onConfirm:()=>{if(!v)return;const a=f.find(r=>r.id===v.templateId);if(!a){U(null);return}we(fe,a.id),We(a)}})]}):e.jsx("section",{className:"workbench-empty-state minimal",children:e.jsx("p",{children:n("terminalManager.noCurrentWorkspaceBody")})}):e.jsx("section",{className:"workbench-empty-state minimal",children:e.jsx("p",{children:n("terminalManager.emptyWorkspaceBody")})})}function le(l){return`terminal-manager.snapshot.${l}`}export{Ia as TerminalManagerPanel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as c,j as i,t as e}from"./index-DEbFT-Aq.js";import{D as o}from"./WorkbenchModal-CbDxaCOR.js";import{f as l,i as d,j as a,k as r,x as u}from"./MobileSheet-D1lMrcvD.js";function p(s){return s instanceof c?s.errorCode==="RUNTIME_DEPENDENCY_MISSING"||s.message.includes("当前系统未安装 tmux"):!1}function g({open:s,busy:n=!1,onClose:t,onConfirmFallback:m}){return i.jsxs(o,{open:s,title:e("terminal.runtimeMissingDialogTitle"),description:e("terminal.runtimeMissingDialogDescription"),size:"compact",layout:"confirm",className:"terminal-runtime-fallback-modal",bodyClassName:"terminal-runtime-fallback-body",dismissible:!n,footer:i.jsxs(u,{children:[i.jsx("button",{type:"button",className:"secondary-button",disabled:n,onClick:t,children:e("terminal.runtimeMissingKeepAction")}),i.jsx("button",{type:"button",className:"primary-button",disabled:n,onClick:m,children:n?e("terminal.runtimeMissingFallbackPending"):e("terminal.runtimeMissingFallbackAction")})]}),onClose:t,children:[i.jsxs(l,{className:"terminal-runtime-fallback-section",tone:"danger",actions:i.jsx(r,{tone:"danger",children:"tmux"}),children:[i.jsx("p",{className:"status-text",children:e("terminal.runtimeMissingInstallDescription")}),i.jsxs(d,{className:"terminal-runtime-fallback-list",children:[i.jsx(a,{label:e("terminal.runtimeMissingInstallMacArm")}),i.jsx(a,{label:e("terminal.runtimeMissingInstallMacIntel")}),i.jsx(a,{label:e("terminal.runtimeMissingInstallDebian")}),i.jsx(a,{label:e("terminal.runtimeMissingInstallFedora")})]})]}),i.jsx(l,{className:"terminal-runtime-fallback-section",actions:i.jsx(r,{children:"embedded-pty"}),children:i.jsx("p",{className:"status-text",children:e("terminal.runtimeMissingFallbackDescription")})})]})}export{g as T,p as i};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,t}from"./index-DEbFT-Aq.js";import{u as l,b as c,j as p}from"./WorkbenchLayout-Brlj8K3i.js";import{N as m}from"./App-BFP7LCSC.js";import"./MobileSheet-D1lMrcvD.js";import"./window-BWqRixxq.js";import"./event-DvH9tcej.js";import"./WorkbenchModal-CbDxaCOR.js";function k(){const{currentWorkspaceId:s,currentSessionId:a,navigationGroups:i}=l();if(!s)return e.jsx("main",{className:"mobile-feature-page mobile-page-scroll-root",children:e.jsxs("article",{className:"mobile-feature-empty surface-card",children:[e.jsx("h1",{children:t("shell.filesEntry")}),e.jsx("p",{children:t("shell.toolsWorkspaceRequiredBody")})]})});const o=i.flatMap(r=>r.sessions).find(r=>r.sessionId===a&&r.workspaceId===s),n=o?c(s,o.sessionId):p(s);return e.jsx(m,{to:`${n}?toolPanel=files`,replace:!0})}export{k as ToolFilesPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,t}from"./index-DEbFT-Aq.js";import{u as l,b as c,j as p}from"./WorkbenchLayout-Brlj8K3i.js";import{N as m}from"./App-BFP7LCSC.js";import"./MobileSheet-D1lMrcvD.js";import"./window-BWqRixxq.js";import"./event-DvH9tcej.js";import"./WorkbenchModal-CbDxaCOR.js";function b(){const{currentWorkspaceId:s,currentSessionId:a,navigationGroups:i}=l();if(!s)return e.jsx("main",{className:"mobile-feature-page mobile-page-scroll-root",children:e.jsxs("article",{className:"mobile-feature-empty surface-card",children:[e.jsx("h1",{children:t("shell.gitEntry")}),e.jsx("p",{children:t("shell.toolsWorkspaceRequiredBody")})]})});const o=i.flatMap(r=>r.sessions).find(r=>r.sessionId===a&&r.workspaceId===s),n=o?c(s,o.sessionId):p(s);return e.jsx(m,{to:`${n}?toolPanel=git`,replace:!0})}export{b as ToolGitPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,t as a}from"./index-DEbFT-Aq.js";import{u as c,b as l,j as p}from"./WorkbenchLayout-Brlj8K3i.js";import{N as m}from"./App-BFP7LCSC.js";import"./MobileSheet-D1lMrcvD.js";import"./window-BWqRixxq.js";import"./event-DvH9tcej.js";import"./WorkbenchModal-CbDxaCOR.js";function g(){const{currentWorkspaceId:s,currentSessionId:t,navigationGroups:i}=c();if(!s)return e.jsx("main",{className:"mobile-feature-page mobile-page-scroll-root",children:e.jsxs("article",{className:"mobile-feature-empty surface-card",children:[e.jsx("h1",{children:a("shell.terminalManagerEntry")}),e.jsx("p",{children:a("shell.toolsWorkspaceRequiredBody")})]})});const o=i.flatMap(r=>r.sessions).find(r=>r.sessionId===t&&r.workspaceId===s),n=o?l(s,o.sessionId):p(s);return e.jsx(m,{to:`${n}?toolPanel=processes`,replace:!0})}export{g as ToolProcessesPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as s,t as n}from"./index-DEbFT-Aq.js";import{u as m,b as d,j as u}from"./WorkbenchLayout-Brlj8K3i.js";import{N as h}from"./App-BFP7LCSC.js";import"./MobileSheet-D1lMrcvD.js";import"./window-BWqRixxq.js";import"./event-DvH9tcej.js";import"./WorkbenchModal-CbDxaCOR.js";function S(){var i,t;const{navigationGroups:o,currentWorkspaceId:c,currentSessionId:l}=m(),r=((i=o.find(e=>e.workspace.id===c))==null?void 0:i.workspace)??((t=o[0])==null?void 0:t.workspace)??null;if(!r)return s.jsx("main",{className:"mobile-feature-page mobile-page-scroll-root",children:s.jsxs("article",{className:"mobile-feature-empty surface-card",children:[s.jsx("h1",{children:n("shell.mobileSessionsEntry")}),s.jsx("p",{children:n("shell.emptyNavigationBody")})]})});const a=o.flatMap(e=>e.sessions).find(e=>e.sessionId===l&&e.workspaceId===r.id),p=a?d(r.id,a.sessionId):u(r.id);return s.jsx(h,{to:p,replace:!0})}export{S as ToolsHomePage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,t as r}from"./index-DEbFT-Aq.js";import{u as c}from"./WorkbenchLayout-Brlj8K3i.js";import{N as n}from"./App-BFP7LCSC.js";import"./MobileSheet-D1lMrcvD.js";import"./window-BWqRixxq.js";import"./event-DvH9tcej.js";import"./WorkbenchModal-CbDxaCOR.js";const t=[{titleKey:"workbench.emptyResumeTitle",bodyKey:"workbench.emptyResumeBody"},{titleKey:"workbench.emptyNewTitle",bodyKey:"workbench.emptyNewBody"},{titleKey:"workbench.emptyCompanionTitle",bodyKey:"workbench.emptyCompanionBody"}];function i(){return e.jsx("main",{className:"workbench-page conversation-page-shell",children:e.jsx("section",{className:"workbench-center-placeholder",children:e.jsxs("div",{className:"workbench-empty-guide surface-card",children:[e.jsx("p",{className:"workbench-empty-eyebrow",children:r("workbench.emptyEyebrow")}),e.jsx("div",{className:"workbench-empty-main",children:e.jsxs("div",{className:"workbench-empty-copy",children:[e.jsx("h1",{children:r("workbench.emptyTitle")}),e.jsx("p",{className:"workbench-empty-body",children:r("workbench.emptyBody")})]})}),e.jsx("ol",{className:"workbench-empty-steps",children:t.map((s,o)=>e.jsxs("li",{className:"workbench-empty-step",children:[e.jsx("span",{className:"workbench-empty-step-index",children:o+1}),e.jsxs("div",{className:"workbench-empty-step-copy",children:[e.jsx("h2",{children:r(s.titleKey)}),e.jsx("p",{children:r(s.bodyKey)})]})]},s.titleKey))}),e.jsx("p",{className:"workbench-empty-tip",children:r("workbench.emptyTip")})]})})})}function b(){const{shellMode:s}=c();return s==="mobile"?e.jsx(n,{to:"/workspaces",replace:!0}):e.jsx(i,{})}export{b as WorkbenchLandingPage};
|