@jingyi0605/codingns4dsh 0.2.0-beta.2 → 0.2.0-rc.2
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/README.en.md +4 -4
- package/README.md +7 -5
- package/assets/provider-icons/minimax-code.svg +4 -0
- package/assets/provider-icons/zcode.svg +14 -0
- package/data/build/dist/client/account-bar.d.ts +2 -1
- package/data/build/dist/client/account-bar.d.ts.map +1 -1
- package/data/build/dist/client/account-bar.js +21 -16
- package/data/build/dist/client/account-bar.js.map +1 -1
- package/data/build/dist/client/bundle.js +4172 -1540
- package/data/build/dist/client/bundle.js.map +1 -1
- package/data/build/dist/client/cli-slots.d.ts.map +1 -1
- package/data/build/dist/client/cli-slots.js +20 -12
- package/data/build/dist/client/cli-slots.js.map +1 -1
- package/data/build/dist/client/debug/ui.d.ts +2 -1
- package/data/build/dist/client/debug/ui.d.ts.map +1 -1
- package/data/build/dist/client/debug/ui.js +39 -33
- package/data/build/dist/client/debug/ui.js.map +1 -1
- package/data/build/dist/client/delegate-command.d.ts +16 -0
- package/data/build/dist/client/delegate-command.d.ts.map +1 -0
- package/data/build/dist/client/delegate-command.js +138 -0
- package/data/build/dist/client/delegate-command.js.map +1 -0
- package/data/build/dist/client/delegate-plan.d.ts +31 -0
- package/data/build/dist/client/delegate-plan.d.ts.map +1 -0
- package/data/build/dist/client/delegate-plan.js +59 -0
- package/data/build/dist/client/delegate-plan.js.map +1 -0
- package/data/build/dist/client/delegate-ui-dom.d.ts +40 -0
- package/data/build/dist/client/delegate-ui-dom.d.ts.map +1 -0
- package/data/build/dist/client/delegate-ui-dom.js +363 -0
- package/data/build/dist/client/delegate-ui-dom.js.map +1 -0
- package/data/build/dist/client/external-tool-stream.d.ts.map +1 -1
- package/data/build/dist/client/external-tool-stream.js +44 -36
- package/data/build/dist/client/external-tool-stream.js.map +1 -1
- package/data/build/dist/client/features/cli-adapters.d.ts +7 -2
- package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
- package/data/build/dist/client/features/cli-adapters.js +52 -103
- package/data/build/dist/client/features/cli-adapters.js.map +1 -1
- package/data/build/dist/client/features/debug.d.ts.map +1 -1
- package/data/build/dist/client/features/debug.js +5 -3
- package/data/build/dist/client/features/debug.js.map +1 -1
- package/data/build/dist/client/features/file-management.d.ts.map +1 -1
- package/data/build/dist/client/features/file-management.js +7 -4
- package/data/build/dist/client/features/file-management.js.map +1 -1
- package/data/build/dist/client/features/lan-access-panel.js +10 -10
- package/data/build/dist/client/features/lan-access-panel.js.map +1 -1
- package/data/build/dist/client/features/lan-access.d.ts.map +1 -1
- package/data/build/dist/client/features/lan-access.js +8 -3
- package/data/build/dist/client/features/lan-access.js.map +1 -1
- package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/login-protection-panel.js +9 -7
- package/data/build/dist/client/features/login-protection-panel.js.map +1 -1
- package/data/build/dist/client/features/login-protection.js +2 -2
- package/data/build/dist/client/features/login-protection.js.map +1 -1
- package/data/build/dist/client/features/mobile-access.d.ts.map +1 -1
- package/data/build/dist/client/features/mobile-access.js +6 -2
- package/data/build/dist/client/features/mobile-access.js.map +1 -1
- package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/client/features/peer-host.js +115 -11
- package/data/build/dist/client/features/peer-host.js.map +1 -1
- package/data/build/dist/client/features/reverse-proxy.js +2 -2
- package/data/build/dist/client/features/reverse-proxy.js.map +1 -1
- package/data/build/dist/client/features/terminal-enhancement.js +2 -2
- package/data/build/dist/client/features/terminal-enhancement.js.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement-panel.js +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement.d.ts.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement.js +8 -3
- package/data/build/dist/client/features/workspace-session-enhancement.js.map +1 -1
- package/data/build/dist/client/file-management-dom.d.ts +3 -0
- package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
- package/data/build/dist/client/file-management-dom.js +41 -30
- package/data/build/dist/client/file-management-dom.js.map +1 -1
- package/data/build/dist/client/git-management.d.ts +2 -0
- package/data/build/dist/client/git-management.d.ts.map +1 -1
- package/data/build/dist/client/git-management.js +82 -74
- package/data/build/dist/client/git-management.js.map +1 -1
- package/data/build/dist/client/git-workspace-events.d.ts +7 -0
- package/data/build/dist/client/git-workspace-events.d.ts.map +1 -0
- package/data/build/dist/client/git-workspace-events.js +32 -0
- package/data/build/dist/client/git-workspace-events.js.map +1 -0
- package/data/build/dist/client/index.d.ts +2 -0
- package/data/build/dist/client/index.d.ts.map +1 -1
- package/data/build/dist/client/index.js +6 -5
- package/data/build/dist/client/index.js.map +1 -1
- package/data/build/dist/client/locale.d.ts +7 -0
- package/data/build/dist/client/locale.d.ts.map +1 -1
- package/data/build/dist/client/locale.js +80 -36
- package/data/build/dist/client/locale.js.map +1 -1
- package/data/build/dist/client/locales/debug.d.ts +9 -0
- package/data/build/dist/client/locales/debug.d.ts.map +1 -0
- package/data/build/dist/client/locales/debug.js +163 -0
- package/data/build/dist/client/locales/debug.js.map +1 -0
- package/data/build/dist/client/locales/fileWorkspace.d.ts +9 -0
- package/data/build/dist/client/locales/fileWorkspace.d.ts.map +1 -0
- package/data/build/dist/client/locales/fileWorkspace.js +139 -0
- package/data/build/dist/client/locales/fileWorkspace.js.map +1 -0
- package/data/build/dist/client/locales/git.d.ts +9 -0
- package/data/build/dist/client/locales/git.d.ts.map +1 -0
- package/data/build/dist/client/locales/git.js +223 -0
- package/data/build/dist/client/locales/git.js.map +1 -0
- package/data/build/dist/client/locales/panels.d.ts +9 -0
- package/data/build/dist/client/locales/panels.d.ts.map +1 -0
- package/data/build/dist/client/locales/panels.js +33 -0
- package/data/build/dist/client/locales/panels.js.map +1 -0
- package/data/build/dist/client/locales/peerHost.d.ts +9 -0
- package/data/build/dist/client/locales/peerHost.d.ts.map +1 -0
- package/data/build/dist/client/locales/peerHost.js +153 -0
- package/data/build/dist/client/locales/peerHost.js.map +1 -0
- package/data/build/dist/client/locales/peerHostWorkspace.d.ts +9 -0
- package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -0
- package/data/build/dist/client/locales/peerHostWorkspace.js +69 -0
- package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -0
- package/data/build/dist/client/locales/terminalAuth.d.ts +9 -0
- package/data/build/dist/client/locales/terminalAuth.d.ts.map +1 -0
- package/data/build/dist/client/locales/terminalAuth.js +67 -0
- package/data/build/dist/client/locales/terminalAuth.js.map +1 -0
- package/data/build/dist/client/locales/usage.d.ts +9 -0
- package/data/build/dist/client/locales/usage.d.ts.map +1 -0
- package/data/build/dist/client/locales/usage.js +195 -0
- package/data/build/dist/client/locales/usage.js.map +1 -0
- package/data/build/dist/client/mobile-session-interaction.d.ts +44 -0
- package/data/build/dist/client/mobile-session-interaction.d.ts.map +1 -0
- package/data/build/dist/client/mobile-session-interaction.js +291 -0
- package/data/build/dist/client/mobile-session-interaction.js.map +1 -0
- package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts +10 -2
- package/data/build/dist/client/mobile-sidebar-rail-dom.d.ts.map +1 -1
- package/data/build/dist/client/mobile-sidebar-rail-dom.js +14 -6
- package/data/build/dist/client/mobile-sidebar-rail-dom.js.map +1 -1
- package/data/build/dist/client/peer-host-connection-button.d.ts +14 -1
- package/data/build/dist/client/peer-host-connection-button.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-connection-button.js +12 -4
- package/data/build/dist/client/peer-host-connection-button.js.map +1 -1
- package/data/build/dist/client/peer-host-management-panel.d.ts +3 -0
- package/data/build/dist/client/peer-host-management-panel.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-management-panel.js +83 -79
- package/data/build/dist/client/peer-host-management-panel.js.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.d.ts +1 -0
- package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.js +5 -0
- package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-scoped-client.js +5 -5
- package/data/build/dist/client/peer-host-scoped-client.js.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.d.ts +8 -0
- package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.js +48 -28
- package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
- package/data/build/dist/client/provider-icon-assets.js +4 -0
- package/data/build/dist/client/provider-icon-assets.js.map +1 -1
- package/data/build/dist/client/provider-icons.d.ts +8 -2
- package/data/build/dist/client/provider-icons.d.ts.map +1 -1
- package/data/build/dist/client/provider-icons.js +13 -4
- package/data/build/dist/client/provider-icons.js.map +1 -1
- package/data/build/dist/client/pwa-install-prompt.d.ts +4 -1
- package/data/build/dist/client/pwa-install-prompt.d.ts.map +1 -1
- package/data/build/dist/client/pwa-install-prompt.js +8 -7
- package/data/build/dist/client/pwa-install-prompt.js.map +1 -1
- package/data/build/dist/client/quick-phrase-layout.d.ts +11 -0
- package/data/build/dist/client/quick-phrase-layout.d.ts.map +1 -1
- package/data/build/dist/client/quick-phrase-layout.js +20 -0
- package/data/build/dist/client/quick-phrase-layout.js.map +1 -1
- package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -1
- package/data/build/dist/client/quick-phrase-slot.js +20 -8
- package/data/build/dist/client/quick-phrase-slot.js.map +1 -1
- package/data/build/dist/client/session-changed-files-view.d.ts +8 -1
- package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
- package/data/build/dist/client/session-changed-files-view.js +71 -28
- package/data/build/dist/client/session-changed-files-view.js.map +1 -1
- package/data/build/dist/client/settings-anchor.d.ts +9 -3
- package/data/build/dist/client/settings-anchor.d.ts.map +1 -1
- package/data/build/dist/client/settings-anchor.js +8 -2
- package/data/build/dist/client/settings-anchor.js.map +1 -1
- package/data/build/dist/client/settings-section.js +3 -3
- package/data/build/dist/client/settings-section.js.map +1 -1
- package/data/build/dist/client/subscription-slot.d.ts +4 -1
- package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
- package/data/build/dist/client/subscription-slot.js +327 -51
- package/data/build/dist/client/subscription-slot.js.map +1 -1
- package/data/build/dist/client/terminal/model.d.ts +13 -2
- package/data/build/dist/client/terminal/model.d.ts.map +1 -1
- package/data/build/dist/client/terminal/model.js +27 -7
- package/data/build/dist/client/terminal/model.js.map +1 -1
- package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
- package/data/build/dist/client/terminal/ui.js +3 -1
- package/data/build/dist/client/terminal/ui.js.map +1 -1
- package/data/build/dist/client/terminal/xterm-view.d.ts +4 -1
- package/data/build/dist/client/terminal/xterm-view.d.ts.map +1 -1
- package/data/build/dist/client/terminal/xterm-view.js +19 -17
- package/data/build/dist/client/terminal/xterm-view.js.map +1 -1
- package/data/build/dist/client/workspace-session-archive-dom.d.ts +3 -0
- package/data/build/dist/client/workspace-session-archive-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-archive-dom.js +131 -45
- package/data/build/dist/client/workspace-session-archive-dom.js.map +1 -1
- package/data/build/dist/client/workspace-session-logo-dom.d.ts +3 -0
- package/data/build/dist/client/workspace-session-logo-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-logo-dom.js +3 -1
- package/data/build/dist/client/workspace-session-logo-dom.js.map +1 -1
- package/data/build/dist/client/workspace-session-visibility-dom.d.ts +3 -0
- package/data/build/dist/client/workspace-session-visibility-dom.d.ts.map +1 -1
- package/data/build/dist/client/workspace-session-visibility-dom.js +46 -17
- package/data/build/dist/client/workspace-session-visibility-dom.js.map +1 -1
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts +10 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.js +20 -0
- package/data/build/dist/dsh-capabilities/client/primitives-adapter.js.map +1 -1
- package/data/build/dist/host/browser-text.d.ts +30 -0
- package/data/build/dist/host/browser-text.d.ts.map +1 -0
- package/data/build/dist/host/browser-text.js +105 -0
- package/data/build/dist/host/browser-text.js.map +1 -0
- package/data/build/dist/host/cli-adapters/claude-driver.d.ts +28 -2
- package/data/build/dist/host/cli-adapters/claude-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js +73 -3
- package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-model-options.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-model-options.js +22 -9
- package/data/build/dist/host/cli-adapters/claude-model-options.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts +10 -0
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.js +105 -5
- package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.js +49 -7
- package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +47 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.js +158 -0
- package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts +32 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.js +121 -0
- package/data/build/dist/host/cli-adapters/desktop-app-runtime.js.map +1 -0
- package/data/build/dist/host/cli-adapters/dsh-message-projector.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js +5 -4
- package/data/build/dist/host/cli-adapters/dsh-message-projector.js.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts +16 -0
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js +73 -0
- package/data/build/dist/host/cli-adapters/dsh-virtual-providers.js.map +1 -0
- package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.js +196 -14
- package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/gemini-driver.js +21 -5
- package/data/build/dist/host/cli-adapters/gemini-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/grok-driver.js +24 -7
- package/data/build/dist/host/cli-adapters/grok-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts +22 -6
- package/data/build/dist/host/cli-adapters/json-rpc-process.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/json-rpc-process.js +118 -21
- package/data/build/dist/host/cli-adapters/json-rpc-process.js.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/kimi-driver.js +25 -4
- package/data/build/dist/host/cli-adapters/kimi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts +11 -2
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.js +15 -6
- package/data/build/dist/host/cli-adapters/legacy-session-adapter.js.map +1 -1
- package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts +23 -0
- package/data/build/dist/host/cli-adapters/mcode-catalog.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/mcode-catalog.js +120 -0
- package/data/build/dist/host/cli-adapters/mcode-catalog.js.map +1 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.d.ts +56 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.js +544 -0
- package/data/build/dist/host/cli-adapters/mcode-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/model-catalog.d.ts +30 -5
- package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/model-catalog.js +83 -8
- package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +51 -0
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +193 -0
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts +4 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.js +4 -0
- package/data/build/dist/host/cli-adapters/native-subagent-holder.js.map +1 -0
- package/data/build/dist/host/cli-adapters/native-team-proxy.js +18 -15
- package/data/build/dist/host/cli-adapters/native-team-proxy.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +45 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.js +107 -0
- package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -0
- package/data/build/dist/host/cli-adapters/opencode-driver.js +13 -3
- package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js +24 -7
- package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +8 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.js +98 -2
- package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/registry-holder.d.ts +4 -0
- package/data/build/dist/host/cli-adapters/registry-holder.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/registry-holder.js +9 -0
- package/data/build/dist/host/cli-adapters/registry-holder.js.map +1 -0
- package/data/build/dist/host/cli-adapters/registry.d.ts +13 -0
- package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.js +37 -0
- package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
- package/data/build/dist/host/cli-adapters/session-store.d.ts +6 -1
- package/data/build/dist/host/cli-adapters/session-store.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/session-store.js +42 -4
- package/data/build/dist/host/cli-adapters/session-store.js.map +1 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts +2 -0
- package/data/build/dist/host/cli-adapters/standard-stream-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/standard-stream-driver.js +30 -4
- package/data/build/dist/host/cli-adapters/standard-stream-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/subagent-tool.d.ts +5 -0
- package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/subagent-tool.js +66 -0
- package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.d.ts +57 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.js +843 -0
- package/data/build/dist/host/cli-adapters/zcode-driver.js.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts +28 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.js +212 -0
- package/data/build/dist/host/cli-adapters/zcode-subscription.js.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.d.ts +27 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.js +51 -0
- package/data/build/dist/host/cli-bridge/bridge-holder.js.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts +34 -0
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/bridge-server.js +135 -0
- package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +25 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.js +60 -0
- package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -0
- package/data/build/dist/host/cli-bridge/dispatch.d.ts +19 -0
- package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/dispatch.js +90 -0
- package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -0
- package/data/build/dist/host/cli-bridge/injections.d.ts +28 -0
- package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/injections.js +131 -0
- package/data/build/dist/host/cli-bridge/injections.js.map +1 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts +8 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.d.ts.map +1 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +151 -0
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -0
- package/data/build/dist/host/features/lan-access-dsh.d.ts.map +1 -1
- package/data/build/dist/host/features/lan-access-dsh.js +6 -2
- package/data/build/dist/host/features/lan-access-dsh.js.map +1 -1
- package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/host/features/peer-host.js +2 -1
- package/data/build/dist/host/features/peer-host.js.map +1 -1
- package/data/build/dist/host/index.d.ts +4 -0
- package/data/build/dist/host/index.d.ts.map +1 -1
- package/data/build/dist/host/index.js +36 -0
- package/data/build/dist/host/index.js.map +1 -1
- package/data/build/dist/host/lan-access-dsh.d.ts +7 -1
- package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
- package/data/build/dist/host/lan-access-dsh.js +95 -19
- package/data/build/dist/host/lan-access-dsh.js.map +1 -1
- package/data/build/dist/host/login-attempt-guard.d.ts +55 -0
- package/data/build/dist/host/login-attempt-guard.d.ts.map +1 -0
- package/data/build/dist/host/login-attempt-guard.js +201 -0
- package/data/build/dist/host/login-attempt-guard.js.map +1 -0
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +3 -0
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +2 -0
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +3 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts +8 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +9 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts +7 -0
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +31 -3
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-assets.d.ts +6 -4
- package/data/build/dist/host/modules/pwa/pwa-assets.d.ts.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-assets.js +11 -9
- package/data/build/dist/host/modules/pwa/pwa-assets.js.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts +3 -0
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.d.ts.map +1 -1
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.js +6 -4
- package/data/build/dist/host/modules/pwa/pwa-session-notifications.js.map +1 -1
- package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
- package/data/build/dist/host/native-session-bridge.js +70 -52
- package/data/build/dist/host/native-session-bridge.js.map +1 -1
- package/data/build/dist/host/rpc.js +4 -1
- package/data/build/dist/host/rpc.js.map +1 -1
- package/data/build/dist/host/settings.d.ts.map +1 -1
- package/data/build/dist/host/settings.js +3 -0
- package/data/build/dist/host/settings.js.map +1 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts +5 -0
- package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.d.ts +10 -0
- package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.js +8 -0
- package/data/build/dist/shared/contracts/config.js.map +1 -1
- package/data/build/dist/shared/contracts/peer-host.d.ts +2 -0
- package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
- package/data/build/dist/shared/contracts/subscription.d.ts +15 -0
- package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/subscription.js.map +1 -1
- package/data/build/dist/shared/contracts/version.d.ts +1 -1
- package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/version.js +1 -1
- package/data/build/dist/shared/contracts/version.js.map +1 -1
- package/data/build/dist/shared/index.d.ts +1 -1
- package/data/build/dist/shared/index.d.ts.map +1 -1
- package/data/build/dist/shared/index.js.map +1 -1
- package/package.json +3 -1
- package/profile/README.md +2 -2
- package/profile/package.json +2 -2
- package/profile/version.json +1 -1
- package/version.json +1 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* terminalAuth 域词典片段。
|
|
3
|
+
*
|
|
4
|
+
* 只放该域新增的键;合并与命名空间注册由 ../locale.ts 统一完成。
|
|
5
|
+
* 规范见 docs/开发规范/20260930-前端文案国际化规范.md。
|
|
6
|
+
*/
|
|
7
|
+
export const en = {
|
|
8
|
+
'terminalView.errorDetail': 'Terminal error: {message}',
|
|
9
|
+
'terminalView.readOnly': 'This page is currently read-only.',
|
|
10
|
+
'terminalView.reconnect': 'Reconnect',
|
|
11
|
+
'terminalView.readingEnvironment': 'Reading the terminal environment…',
|
|
12
|
+
'terminalView.starting': 'Starting…',
|
|
13
|
+
'terminalView.connecting': 'Connecting…',
|
|
14
|
+
'terminalView.disconnected': 'Connection lost.',
|
|
15
|
+
'terminalView.exited': 'Process exited ({exitCode})',
|
|
16
|
+
'terminalView.unavailable': 'Unavailable',
|
|
17
|
+
'terminalView.closed': 'The terminal is closed.',
|
|
18
|
+
'loginProtection.saved': 'Login protection settings saved',
|
|
19
|
+
'loginProtection.savedRelaySession': 'Settings saved. Relay access requires entering the password again to establish a session for this tab.',
|
|
20
|
+
'loginProtection.panelHint': 'Add local account verification for LAN and relay access. Loopback 127.0.0.1 / ::1 is never protected. The password is verified only on the Host and never enters browser settings or the URL; while the page stays open, the session is renewed automatically as it nears expiry.',
|
|
21
|
+
'loginProtection.enable': 'Enable login protection',
|
|
22
|
+
'loginProtection.username': 'Local username',
|
|
23
|
+
'loginProtection.newPassword': 'New password (leave blank to keep the current one)',
|
|
24
|
+
'loginProtection.password': 'Password (at least 8 characters)',
|
|
25
|
+
'loginProtection.timeoutSeconds': 'Session timeout (seconds)',
|
|
26
|
+
'loginProtection.scopes': 'Applies to',
|
|
27
|
+
'loginProtection.scopeLan': 'LAN access',
|
|
28
|
+
'loginProtection.scopeLanHint': 'LAN interface entry',
|
|
29
|
+
'loginProtection.scopeRelay': 'Relay access',
|
|
30
|
+
'loginProtection.scopeRelayHint': 'Codingns4DSH relay',
|
|
31
|
+
'loginProtection.scopeOption': '{label} ({hint})',
|
|
32
|
+
'loginProtection.saving': 'Saving…',
|
|
33
|
+
'loginProtection.save': 'Save login protection',
|
|
34
|
+
'loginProtection.errorTimeoutRange': 'The session timeout must be between 60 and 604800 seconds',
|
|
35
|
+
'loginProtection.errorScopesRequired': 'Select at least one scope',
|
|
36
|
+
};
|
|
37
|
+
export const zh = {
|
|
38
|
+
'terminalView.errorDetail': '终端错误:{message}',
|
|
39
|
+
'terminalView.readOnly': '此页面当前只读。',
|
|
40
|
+
'terminalView.reconnect': '重新连接',
|
|
41
|
+
'terminalView.readingEnvironment': '正在读取终端环境…',
|
|
42
|
+
'terminalView.starting': '正在启动…',
|
|
43
|
+
'terminalView.connecting': '正在连接…',
|
|
44
|
+
'terminalView.disconnected': '连接已断开。',
|
|
45
|
+
'terminalView.exited': '进程已退出({exitCode})',
|
|
46
|
+
'terminalView.unavailable': '不可用',
|
|
47
|
+
'terminalView.closed': '终端已关闭。',
|
|
48
|
+
'loginProtection.saved': '登录保护设置已保存',
|
|
49
|
+
'loginProtection.savedRelaySession': '设置已保存;中继访问需要重新输入密码以建立当前标签页会话',
|
|
50
|
+
'loginProtection.panelHint': '为局域网和中继访问统一增加本地账号验证。本机 127.0.0.1 / ::1 永远不受此保护。密码只在 Host 侧验证,不会进入浏览器设置或 URL;页面保持打开时,会在会话临近超时时自动续期。',
|
|
51
|
+
'loginProtection.enable': '启用登录保护',
|
|
52
|
+
'loginProtection.username': '本地用户名',
|
|
53
|
+
'loginProtection.newPassword': '新密码(留空保持不变)',
|
|
54
|
+
'loginProtection.password': '密码(至少 8 位)',
|
|
55
|
+
'loginProtection.timeoutSeconds': '会话超时(秒)',
|
|
56
|
+
'loginProtection.scopes': '应用范围',
|
|
57
|
+
'loginProtection.scopeLan': '局域网访问',
|
|
58
|
+
'loginProtection.scopeLanHint': '局域网网卡入口',
|
|
59
|
+
'loginProtection.scopeRelay': '中继访问',
|
|
60
|
+
'loginProtection.scopeRelayHint': 'Codingns4DSH 中继',
|
|
61
|
+
'loginProtection.scopeOption': '{label}({hint})',
|
|
62
|
+
'loginProtection.saving': '保存中…',
|
|
63
|
+
'loginProtection.save': '保存登录保护',
|
|
64
|
+
'loginProtection.errorTimeoutRange': '会话超时时间必须是 60 到 604800 秒',
|
|
65
|
+
'loginProtection.errorScopesRequired': '至少选择一个应用范围',
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=terminalAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminalAuth.js","sourceRoot":"","sources":["../../../../../src/client/locales/terminalAuth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAA2B;IACxC,0BAA0B,EAAE,2BAA2B;IACvD,uBAAuB,EAAE,mCAAmC;IAC5D,wBAAwB,EAAE,WAAW;IACrC,iCAAiC,EAAE,mCAAmC;IACtE,uBAAuB,EAAE,WAAW;IACpC,yBAAyB,EAAE,aAAa;IACxC,2BAA2B,EAAE,kBAAkB;IAC/C,qBAAqB,EAAE,6BAA6B;IACpD,0BAA0B,EAAE,aAAa;IACzC,qBAAqB,EAAE,yBAAyB;IAChD,uBAAuB,EAAE,iCAAiC;IAC1D,mCAAmC,EAAE,wGAAwG;IAC7I,2BAA2B,EAAE,mRAAmR;IAChT,wBAAwB,EAAE,yBAAyB;IACnD,0BAA0B,EAAE,gBAAgB;IAC5C,6BAA6B,EAAE,oDAAoD;IACnF,0BAA0B,EAAE,kCAAkC;IAC9D,gCAAgC,EAAE,2BAA2B;IAC7D,wBAAwB,EAAE,YAAY;IACtC,0BAA0B,EAAE,YAAY;IACxC,8BAA8B,EAAE,qBAAqB;IACrD,4BAA4B,EAAE,cAAc;IAC5C,gCAAgC,EAAE,oBAAoB;IACtD,6BAA6B,EAAE,kBAAkB;IACjD,wBAAwB,EAAE,SAAS;IACnC,sBAAsB,EAAE,uBAAuB;IAC/C,mCAAmC,EAAE,2DAA2D;IAChG,qCAAqC,EAAE,2BAA2B;CACnE,CAAA;AAED,MAAM,CAAC,MAAM,EAAE,GAA2B;IACxC,0BAA0B,EAAE,gBAAgB;IAC5C,uBAAuB,EAAE,UAAU;IACnC,wBAAwB,EAAE,MAAM;IAChC,iCAAiC,EAAE,WAAW;IAC9C,uBAAuB,EAAE,OAAO;IAChC,yBAAyB,EAAE,OAAO;IAClC,2BAA2B,EAAE,QAAQ;IACrC,qBAAqB,EAAE,mBAAmB;IAC1C,0BAA0B,EAAE,KAAK;IACjC,qBAAqB,EAAE,QAAQ;IAC/B,uBAAuB,EAAE,WAAW;IACpC,mCAAmC,EAAE,8BAA8B;IACnE,2BAA2B,EAAE,oGAAoG;IACjI,wBAAwB,EAAE,QAAQ;IAClC,0BAA0B,EAAE,OAAO;IACnC,6BAA6B,EAAE,aAAa;IAC5C,0BAA0B,EAAE,YAAY;IACxC,gCAAgC,EAAE,SAAS;IAC3C,wBAAwB,EAAE,MAAM;IAChC,0BAA0B,EAAE,OAAO;IACnC,8BAA8B,EAAE,SAAS;IACzC,4BAA4B,EAAE,MAAM;IACpC,gCAAgC,EAAE,iBAAiB;IACnD,6BAA6B,EAAE,iBAAiB;IAChD,wBAAwB,EAAE,MAAM;IAChC,sBAAsB,EAAE,QAAQ;IAChC,mCAAmC,EAAE,yBAAyB;IAC9D,qCAAqC,EAAE,YAAY;CACpD,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../../../../src/client/locales/usage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6FrC,CAAA;AAED,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6FrC,CAAA"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* usage 域词典片段。
|
|
3
|
+
*
|
|
4
|
+
* 只放该域新增的键;合并与命名空间注册由 ../locale.ts 统一完成。
|
|
5
|
+
* 规范见 docs/开发规范/20260930-前端文案国际化规范.md。
|
|
6
|
+
*/
|
|
7
|
+
export const en = {
|
|
8
|
+
'usage.slotLabel': 'Agent subscription balance',
|
|
9
|
+
'usage.remainingLabel': '{provider} subscription balance {percent}%',
|
|
10
|
+
'usage.upstreamBalanceLabel': '{provider} upstream balance {amount}',
|
|
11
|
+
'usage.balanceLabel': '{provider} balance {amount}',
|
|
12
|
+
'usage.providerBalanceLabel': '{provider} remaining {amount}',
|
|
13
|
+
'usage.providerBalancePlanLabel': '{provider} · {plan} · {amount}',
|
|
14
|
+
'usage.unavailable': 'Unavailable',
|
|
15
|
+
'usage.available': 'Available',
|
|
16
|
+
'usage.subscriptionRemaining': 'Subscription balance',
|
|
17
|
+
'usage.todayCostShort': 'Today {amount}',
|
|
18
|
+
'usage.accountBalance': 'Account balance',
|
|
19
|
+
'usage.officialRemaining': 'Official balance',
|
|
20
|
+
'usage.windowFiveHour': '5-hour quota',
|
|
21
|
+
'usage.windowWeekly': 'Weekly quota',
|
|
22
|
+
'usage.windowMonthly': 'Monthly quota',
|
|
23
|
+
'usage.popoverSubscriptionUsage': '{provider} subscription usage',
|
|
24
|
+
'usage.popoverSubscriptionTitle': '{provider} subscription',
|
|
25
|
+
'usage.windowRemaining': '{label} remaining {percent}%',
|
|
26
|
+
'usage.resetsIn': 'Resets in {time}',
|
|
27
|
+
'usage.windowDays': '{count}-day quota',
|
|
28
|
+
'usage.windowHours': '{count}-hour quota',
|
|
29
|
+
'usage.windowMinutes': '{count}-minute quota',
|
|
30
|
+
'usage.officialRemainingPopover': '{provider} official balance',
|
|
31
|
+
'usage.usedOfTotal': 'Used {used} / {total}',
|
|
32
|
+
'usage.usedShort': 'Used {amount}',
|
|
33
|
+
'usage.expiresIn': 'Expires in {time}',
|
|
34
|
+
'usage.expired': 'Expired',
|
|
35
|
+
'usage.noMoreStats': 'No further statistics',
|
|
36
|
+
'usage.providerAccountBalance': '{provider} account balance',
|
|
37
|
+
'usage.granted': 'Granted {amount}',
|
|
38
|
+
'usage.toppedUp': 'Topped up {amount}',
|
|
39
|
+
'usage.deepseekApiNote': 'The official DeepSeek API currently exposes only an account balance endpoint; request, token, and cost details are unavailable.',
|
|
40
|
+
'usage.upstreamUsageTitle': '{provider} upstream usage',
|
|
41
|
+
'usage.addressMissing': 'Address not provided',
|
|
42
|
+
'usage.statTodayRequests': 'Requests today',
|
|
43
|
+
'usage.statTodayTokens': 'Tokens today',
|
|
44
|
+
'usage.statTodayCost': 'Cost today',
|
|
45
|
+
'usage.statTotalRequests': 'Total requests',
|
|
46
|
+
'usage.statTotalTokens': 'Total tokens',
|
|
47
|
+
'usage.statTotalCost': 'Total cost',
|
|
48
|
+
'usage.statTodayCacheHitRate': 'Cache hit rate today',
|
|
49
|
+
'usage.statTotalCacheHitRate': 'Overall cache hit rate',
|
|
50
|
+
'usage.byModel': 'By model',
|
|
51
|
+
'usage.noModelStats': 'No per-model statistics',
|
|
52
|
+
'usage.colModel': 'Model',
|
|
53
|
+
'usage.colRequests': 'Requests',
|
|
54
|
+
'usage.colToken': 'Token',
|
|
55
|
+
'usage.colCost': 'Cost',
|
|
56
|
+
'usage.colCache': 'Cache',
|
|
57
|
+
'usage.providerDeepseekOfficial': 'DeepSeek Official',
|
|
58
|
+
'usage.providerUpstream': '{name} upstream',
|
|
59
|
+
'usage.countdownDaysHours': '{days}d {hours}h',
|
|
60
|
+
'usage.countdownHoursMinutes': '{hours}h {minutes}m',
|
|
61
|
+
'usage.countdownHours': '{hours}h',
|
|
62
|
+
'usage.countdownMinutes': '{minutes}m',
|
|
63
|
+
'usage.creditBalanceLabel': 'Credits',
|
|
64
|
+
'usage.creditUnlimited': 'Unlimited',
|
|
65
|
+
'usage.resetCreditsLabel': 'Reset credits',
|
|
66
|
+
'usage.resetCreditsCount': '{count}',
|
|
67
|
+
'usage.resetCreditsExpiresAt': 'expires in {time}',
|
|
68
|
+
'usage.resetCreditsExpired': 'expired',
|
|
69
|
+
'usage.resetCreditsMore': '{count} more',
|
|
70
|
+
'usage.resetButton': 'Reset subscription',
|
|
71
|
+
'usage.resetTooltipReady': 'Consumes one reset credit to restore the current window',
|
|
72
|
+
'usage.resetTooltipNone': 'No reset credits available',
|
|
73
|
+
'usage.resetDialogTitle': 'Reset subscription usage?',
|
|
74
|
+
'usage.resetDialogBody': 'This consumes one reset credit and immediately restores the current usage window, with {count} left. This cannot be undone. Continue?',
|
|
75
|
+
'usage.resetDialogCancel': 'Cancel',
|
|
76
|
+
'usage.resetDialogConfirm': 'Confirm reset',
|
|
77
|
+
'usage.resetDialogPending': 'Resetting…',
|
|
78
|
+
'usage.resetDialogClose': 'Close',
|
|
79
|
+
'usage.resetOutcomeReset': 'The current usage window has been reset and reset credits refreshed.',
|
|
80
|
+
'usage.resetOutcomeAlreadyRedeemed': 'This reset already took effect; usage has been refreshed.',
|
|
81
|
+
'usage.resetOutcomeNothingToReset': 'No window has reached its limit; no reset credit was consumed.',
|
|
82
|
+
'usage.resetOutcomeNoCredit': 'No reset credits available; nothing was reset.',
|
|
83
|
+
'usage.resetFailed': 'Reset failed. Try again later.',
|
|
84
|
+
'accountBar.userFallback': 'User',
|
|
85
|
+
'accountBar.connectionManageTitle': 'Connection management · Manage other DSH Hosts',
|
|
86
|
+
'accountBar.identityClickHint': '{identity} · Click to manage sign-in',
|
|
87
|
+
'accountBar.connectionManage': 'Connection management',
|
|
88
|
+
'accountBar.userAria': 'User: {identity}',
|
|
89
|
+
'accountBar.localAccount': '{identity} (local account)',
|
|
90
|
+
'accountBar.unknownAccount': 'Unrecognized account',
|
|
91
|
+
'accountBar.access': 'Access: {access}',
|
|
92
|
+
'accountBar.accessWithLatency': 'Access: {access} · {latency} ms',
|
|
93
|
+
'accountBar.memory': 'Memory',
|
|
94
|
+
'accountBar.managePeerHost': 'Manage PeerHost',
|
|
95
|
+
'accountBar.managePeerHostHint': 'Connect and manage other DSH Hosts',
|
|
96
|
+
'accountBar.loggingOut': 'Signing out…',
|
|
97
|
+
'accountBar.logout': 'Sign out',
|
|
98
|
+
'accountBar.relay': 'Relay',
|
|
99
|
+
'accountBar.direct': 'Direct',
|
|
100
|
+
};
|
|
101
|
+
export const zh = {
|
|
102
|
+
'usage.slotLabel': 'Agent 订阅余量',
|
|
103
|
+
'usage.remainingLabel': '{provider} 订阅余量 {percent}%',
|
|
104
|
+
'usage.upstreamBalanceLabel': '{provider} 上游余额 {amount}',
|
|
105
|
+
'usage.balanceLabel': '{provider} 余额 {amount}',
|
|
106
|
+
'usage.providerBalanceLabel': '{provider} 余量 {amount}',
|
|
107
|
+
'usage.providerBalancePlanLabel': '{provider} · {plan} · {amount}',
|
|
108
|
+
'usage.unavailable': '不可用',
|
|
109
|
+
'usage.available': '可用',
|
|
110
|
+
'usage.subscriptionRemaining': '订阅余量',
|
|
111
|
+
'usage.todayCostShort': '今日 {amount}',
|
|
112
|
+
'usage.accountBalance': '账户余额',
|
|
113
|
+
'usage.officialRemaining': '官方余量',
|
|
114
|
+
'usage.windowFiveHour': '5 小时额度',
|
|
115
|
+
'usage.windowWeekly': '周额度',
|
|
116
|
+
'usage.windowMonthly': '月额度',
|
|
117
|
+
'usage.popoverSubscriptionUsage': '{provider} 订阅使用情况',
|
|
118
|
+
'usage.popoverSubscriptionTitle': '{provider} 订阅',
|
|
119
|
+
'usage.windowRemaining': '{label}剩余 {percent}%',
|
|
120
|
+
'usage.resetsIn': '重置于 {time}',
|
|
121
|
+
'usage.windowDays': '{count} 天额度',
|
|
122
|
+
'usage.windowHours': '{count} 小时额度',
|
|
123
|
+
'usage.windowMinutes': '{count} 分钟额度',
|
|
124
|
+
'usage.officialRemainingPopover': '{provider} 官方余量',
|
|
125
|
+
'usage.usedOfTotal': '已用 {used} / {total}',
|
|
126
|
+
'usage.usedShort': '已用 {amount}',
|
|
127
|
+
'usage.expiresIn': '{time}到期',
|
|
128
|
+
'usage.expired': '已到期',
|
|
129
|
+
'usage.noMoreStats': '暂无更多统计',
|
|
130
|
+
'usage.providerAccountBalance': '{provider} 账户余额',
|
|
131
|
+
'usage.granted': '赠送 {amount}',
|
|
132
|
+
'usage.toppedUp': '充值 {amount}',
|
|
133
|
+
'usage.deepseekApiNote': '官方 DeepSeek API 当前只提供账户余额接口,暂无请求量、Token 或费用明细。',
|
|
134
|
+
'usage.upstreamUsageTitle': '{provider} 上游用量',
|
|
135
|
+
'usage.addressMissing': '地址未提供',
|
|
136
|
+
'usage.statTodayRequests': '今日请求数',
|
|
137
|
+
'usage.statTodayTokens': '今日 Token 用量',
|
|
138
|
+
'usage.statTodayCost': '今日费用',
|
|
139
|
+
'usage.statTotalRequests': '累计请求数',
|
|
140
|
+
'usage.statTotalTokens': '累计 Token 用量',
|
|
141
|
+
'usage.statTotalCost': '累计费用',
|
|
142
|
+
'usage.statTodayCacheHitRate': '今日缓存命中率',
|
|
143
|
+
'usage.statTotalCacheHitRate': '累计缓存命中率',
|
|
144
|
+
'usage.byModel': '按模型统计',
|
|
145
|
+
'usage.noModelStats': '暂无按模型统计',
|
|
146
|
+
'usage.colModel': '模型',
|
|
147
|
+
'usage.colRequests': '请求',
|
|
148
|
+
'usage.colToken': 'Token',
|
|
149
|
+
'usage.colCost': '费用',
|
|
150
|
+
'usage.colCache': '缓存',
|
|
151
|
+
'usage.providerDeepseekOfficial': 'DeepSeek 官方',
|
|
152
|
+
'usage.providerUpstream': '{name} 上游',
|
|
153
|
+
'usage.countdownDaysHours': '{days}天{hours}小时后',
|
|
154
|
+
'usage.countdownHoursMinutes': '{hours}小时{minutes}分钟后',
|
|
155
|
+
'usage.countdownHours': '{hours}小时后',
|
|
156
|
+
'usage.countdownMinutes': '{minutes}分钟后',
|
|
157
|
+
'usage.creditBalanceLabel': '剩余点数',
|
|
158
|
+
'usage.creditUnlimited': '不限',
|
|
159
|
+
'usage.resetCreditsLabel': '重置次数',
|
|
160
|
+
'usage.resetCreditsCount': '{count} 次',
|
|
161
|
+
'usage.resetCreditsExpiresAt': '{time}到期',
|
|
162
|
+
'usage.resetCreditsExpired': '已过期',
|
|
163
|
+
'usage.resetCreditsMore': '还有 {count} 张',
|
|
164
|
+
'usage.resetButton': '重置订阅',
|
|
165
|
+
'usage.resetTooltipReady': '消耗 1 次重置次数以立即恢复当前窗口',
|
|
166
|
+
'usage.resetTooltipNone': '没有可用的重置次数',
|
|
167
|
+
'usage.resetDialogTitle': '确认重置订阅用量',
|
|
168
|
+
'usage.resetDialogBody': '将消耗 1 次重置次数立即恢复当前用量窗口,剩余 {count} 次。此操作不可撤销,确定继续吗?',
|
|
169
|
+
'usage.resetDialogCancel': '取消',
|
|
170
|
+
'usage.resetDialogConfirm': '确认重置',
|
|
171
|
+
'usage.resetDialogPending': '正在重置…',
|
|
172
|
+
'usage.resetDialogClose': '关闭',
|
|
173
|
+
'usage.resetOutcomeReset': '已重置当前用量窗口,重置次数已更新。',
|
|
174
|
+
'usage.resetOutcomeAlreadyRedeemed': '该次重置此前已生效,已刷新最新用量。',
|
|
175
|
+
'usage.resetOutcomeNothingToReset': '当前没有达到限额的窗口,未消耗重置次数。',
|
|
176
|
+
'usage.resetOutcomeNoCredit': '没有可用的重置次数,未执行重置。',
|
|
177
|
+
'usage.resetFailed': '重置失败,请稍后重试。',
|
|
178
|
+
'accountBar.userFallback': '用户',
|
|
179
|
+
'accountBar.connectionManageTitle': '连接管理 · 管理其他 DSH Host',
|
|
180
|
+
'accountBar.identityClickHint': '{identity} · 点击管理登录',
|
|
181
|
+
'accountBar.connectionManage': '连接管理',
|
|
182
|
+
'accountBar.userAria': '用户:{identity}',
|
|
183
|
+
'accountBar.localAccount': '{identity}(本地账号)',
|
|
184
|
+
'accountBar.unknownAccount': '未识别账号',
|
|
185
|
+
'accountBar.access': '访问:{access}',
|
|
186
|
+
'accountBar.accessWithLatency': '访问:{access} · {latency} ms',
|
|
187
|
+
'accountBar.memory': '内存',
|
|
188
|
+
'accountBar.managePeerHost': '管理 PeerHost',
|
|
189
|
+
'accountBar.managePeerHostHint': '连接和管理其他 DSH Host',
|
|
190
|
+
'accountBar.loggingOut': '注销中…',
|
|
191
|
+
'accountBar.logout': '注销登录',
|
|
192
|
+
'accountBar.relay': '中转',
|
|
193
|
+
'accountBar.direct': '直连',
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../../../src/client/locales/usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 移动端会话交互修正。
|
|
3
|
+
*
|
|
4
|
+
* DSH 的会话行是带 `role="treeitem"` 的普通 div,桌面端依赖浏览器把触摸
|
|
5
|
+
* 转换成 click。iOS 独立窗口在这条链路上会额外触发双击与延迟 click,导致
|
|
6
|
+
* 会话标题的双击重命名被误触发。这里把短触摸明确转换为一次 click,并屏蔽
|
|
7
|
+
* 移动端的双击重命名;Composer 的焦点则只接受来自用户点按输入框的动作。
|
|
8
|
+
*/
|
|
9
|
+
export interface MobileSessionInteractionWindowLike {
|
|
10
|
+
readonly innerWidth?: number;
|
|
11
|
+
readonly navigator?: {
|
|
12
|
+
readonly maxTouchPoints?: number;
|
|
13
|
+
};
|
|
14
|
+
addEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
|
|
15
|
+
removeEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
|
|
16
|
+
}
|
|
17
|
+
export interface MobileSessionInteractionDocumentLike {
|
|
18
|
+
addEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
|
|
19
|
+
removeEventListener(type: string, listener: (event: never) => void, options?: unknown): void;
|
|
20
|
+
}
|
|
21
|
+
export interface MobileSessionInteractionOptions {
|
|
22
|
+
readonly window?: MobileSessionInteractionWindowLike;
|
|
23
|
+
readonly document?: MobileSessionInteractionDocumentLike;
|
|
24
|
+
readonly mobileViewportMaxPx?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface MobileSessionInteractionController {
|
|
27
|
+
refresh(): boolean;
|
|
28
|
+
dispose(): void;
|
|
29
|
+
}
|
|
30
|
+
interface TouchPoint {
|
|
31
|
+
readonly x: number;
|
|
32
|
+
readonly y: number;
|
|
33
|
+
readonly target: unknown;
|
|
34
|
+
}
|
|
35
|
+
interface TouchRecord {
|
|
36
|
+
readonly point: TouchPoint;
|
|
37
|
+
readonly at: number;
|
|
38
|
+
}
|
|
39
|
+
/** 纯函数:判断触摸是否足够像一次点按。 */
|
|
40
|
+
export declare function isShortMobileTap(start: TouchRecord, end: TouchRecord): boolean;
|
|
41
|
+
/** 启动移动端会话交互修正;桌面视口不注册任何全局监听。 */
|
|
42
|
+
export declare function startMobileSessionInteractionDom(options?: MobileSessionInteractionOptions): MobileSessionInteractionController;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=mobile-session-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mobile-session-interaction.d.ts","sourceRoot":"","sources":["../../../../src/client/mobile-session-interaction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC7F;AAED,MAAM,WAAW,oCAAoC;IACnD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACzF,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CAC7F;AAED,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,kCAAkC,CAAA;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,oCAAoC,CAAA;IACxD,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;CACtC;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,IAAI,OAAO,CAAA;IAClB,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED,UAAU,WAAW;IACnB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAmBD,yBAAyB;AACzB,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAK9E;AAED,iCAAiC;AACjC,wBAAgB,gCAAgC,CAC9C,OAAO,GAAE,+BAAoC,GAC5C,kCAAkC,CA8IpC"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 移动端会话交互修正。
|
|
3
|
+
*
|
|
4
|
+
* DSH 的会话行是带 `role="treeitem"` 的普通 div,桌面端依赖浏览器把触摸
|
|
5
|
+
* 转换成 click。iOS 独立窗口在这条链路上会额外触发双击与延迟 click,导致
|
|
6
|
+
* 会话标题的双击重命名被误触发。这里把短触摸明确转换为一次 click,并屏蔽
|
|
7
|
+
* 移动端的双击重命名;Composer 的焦点则只接受来自用户点按输入框的动作。
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_MOBILE_VIEWPORT_MAX_PX = 1024;
|
|
10
|
+
const TAP_MAX_DURATION_MS = 700;
|
|
11
|
+
const TAP_MAX_DISTANCE_PX = 12;
|
|
12
|
+
const FOCUS_ACTIVATION_WINDOW_MS = 700;
|
|
13
|
+
const NATIVE_CLICK_SUPPRESSION_WINDOW_MS = 900;
|
|
14
|
+
/** 纯函数:判断触摸是否足够像一次点按。 */
|
|
15
|
+
export function isShortMobileTap(start, end) {
|
|
16
|
+
const dx = end.point.x - start.point.x;
|
|
17
|
+
const dy = end.point.y - start.point.y;
|
|
18
|
+
return end.at - start.at <= TAP_MAX_DURATION_MS
|
|
19
|
+
&& Math.hypot(dx, dy) <= TAP_MAX_DISTANCE_PX;
|
|
20
|
+
}
|
|
21
|
+
/** 启动移动端会话交互修正;桌面视口不注册任何全局监听。 */
|
|
22
|
+
export function startMobileSessionInteractionDom(options = {}) {
|
|
23
|
+
const hostWindow = options.window
|
|
24
|
+
?? globalThis.window;
|
|
25
|
+
const hostDocument = options.document
|
|
26
|
+
?? globalThis.document;
|
|
27
|
+
const viewportMaxPx = options.mobileViewportMaxPx ?? DEFAULT_MOBILE_VIEWPORT_MAX_PX;
|
|
28
|
+
let active = false;
|
|
29
|
+
let disposed = false;
|
|
30
|
+
let touchStart;
|
|
31
|
+
let userActivation;
|
|
32
|
+
let suppressedClick;
|
|
33
|
+
let dispatchingSyntheticClick = false;
|
|
34
|
+
const now = () => Date.now();
|
|
35
|
+
const blurComposer = () => {
|
|
36
|
+
const activeElement = hostDocument?.activeElement;
|
|
37
|
+
const element = asElement(activeElement);
|
|
38
|
+
if (element === null || !isComposerTarget(element))
|
|
39
|
+
return;
|
|
40
|
+
try {
|
|
41
|
+
element.blur?.();
|
|
42
|
+
}
|
|
43
|
+
catch { /* 浏览器焦点已被销毁时忽略。 */ }
|
|
44
|
+
};
|
|
45
|
+
const onPointerDown = (event) => {
|
|
46
|
+
const target = asElement(eventTarget(event));
|
|
47
|
+
if (target === null)
|
|
48
|
+
return;
|
|
49
|
+
userActivation = { target, at: now() };
|
|
50
|
+
if (!isComposerTarget(target))
|
|
51
|
+
blurComposer();
|
|
52
|
+
};
|
|
53
|
+
const onFocusIn = (event) => {
|
|
54
|
+
const target = asElement(eventTarget(event));
|
|
55
|
+
if (target === null || !isComposerTarget(target))
|
|
56
|
+
return;
|
|
57
|
+
const activation = userActivation;
|
|
58
|
+
const allowed = activation !== undefined
|
|
59
|
+
&& now() - activation.at <= FOCUS_ACTIVATION_WINDOW_MS
|
|
60
|
+
&& activationInsideComposer(activation.target, target);
|
|
61
|
+
if (allowed)
|
|
62
|
+
return;
|
|
63
|
+
// React/Lexical 可能在会话切换完成后的微任务中再次 focus;同步 blur 后再补
|
|
64
|
+
// 一次微任务,确保 Android WebView 和 iOS Web App 都不会留下软键盘。
|
|
65
|
+
blurElementLater(target);
|
|
66
|
+
};
|
|
67
|
+
const onTouchStart = (event) => {
|
|
68
|
+
const point = firstTouch(event);
|
|
69
|
+
if (point === null)
|
|
70
|
+
return;
|
|
71
|
+
const record = { point, at: now() };
|
|
72
|
+
touchStart = record;
|
|
73
|
+
const target = asElement(point.target);
|
|
74
|
+
userActivation = { target: target ?? emptyElement(), at: record.at };
|
|
75
|
+
if (target === null || !isComposerTarget(target))
|
|
76
|
+
blurComposer();
|
|
77
|
+
};
|
|
78
|
+
const onTouchEnd = (event) => {
|
|
79
|
+
const start = touchStart;
|
|
80
|
+
touchStart = undefined;
|
|
81
|
+
if (start === undefined)
|
|
82
|
+
return;
|
|
83
|
+
const point = endTouch(event, start.point);
|
|
84
|
+
if (point === null)
|
|
85
|
+
return;
|
|
86
|
+
const end = { point, at: now() };
|
|
87
|
+
if (!isShortMobileTap(start, end))
|
|
88
|
+
return;
|
|
89
|
+
const row = sessionRow(point.target);
|
|
90
|
+
if (row === null || isRowControl(point.target, row))
|
|
91
|
+
return;
|
|
92
|
+
// 阻止 iOS 在 touchend 后补发延迟 click;马上交给 React 的 onClick。
|
|
93
|
+
preventDefault(event);
|
|
94
|
+
suppressedClick = { row, at: end.at };
|
|
95
|
+
dispatchingSyntheticClick = true;
|
|
96
|
+
try {
|
|
97
|
+
row.click?.();
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
dispatchingSyntheticClick = false;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const onClickCapture = (event) => {
|
|
104
|
+
if (dispatchingSyntheticClick)
|
|
105
|
+
return;
|
|
106
|
+
const suppressed = suppressedClick;
|
|
107
|
+
if (suppressed === undefined || now() - suppressed.at > NATIVE_CLICK_SUPPRESSION_WINDOW_MS) {
|
|
108
|
+
suppressedClick = undefined;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const row = sessionRow(eventTarget(event));
|
|
112
|
+
if (row !== null && row === suppressed.row) {
|
|
113
|
+
preventDefault(event);
|
|
114
|
+
stopPropagation(event);
|
|
115
|
+
}
|
|
116
|
+
suppressedClick = undefined;
|
|
117
|
+
};
|
|
118
|
+
const onDoubleClickCapture = (event) => {
|
|
119
|
+
const row = sessionRow(eventTarget(event));
|
|
120
|
+
if (row === null || isRowControl(eventTarget(event), row))
|
|
121
|
+
return;
|
|
122
|
+
// DSH 的标题双击就是重命名入口。移动端保留菜单中的重命名动作,
|
|
123
|
+
// 但不允许连续点按会话记录误开重命名对话框。
|
|
124
|
+
preventDefault(event);
|
|
125
|
+
stopPropagation(event);
|
|
126
|
+
};
|
|
127
|
+
const addListeners = () => {
|
|
128
|
+
if (active || hostDocument === undefined)
|
|
129
|
+
return;
|
|
130
|
+
active = true;
|
|
131
|
+
const capture = { capture: true, passive: false };
|
|
132
|
+
hostDocument.addEventListener('pointerdown', onPointerDown, capture);
|
|
133
|
+
hostDocument.addEventListener('mousedown', onPointerDown, capture);
|
|
134
|
+
hostDocument.addEventListener('touchstart', onTouchStart, capture);
|
|
135
|
+
hostDocument.addEventListener('touchend', onTouchEnd, capture);
|
|
136
|
+
hostDocument.addEventListener('focusin', onFocusIn, capture);
|
|
137
|
+
hostDocument.addEventListener('click', onClickCapture, capture);
|
|
138
|
+
hostDocument.addEventListener('dblclick', onDoubleClickCapture, capture);
|
|
139
|
+
};
|
|
140
|
+
const removeListeners = () => {
|
|
141
|
+
if (!active || hostDocument === undefined)
|
|
142
|
+
return;
|
|
143
|
+
active = false;
|
|
144
|
+
hostDocument.removeEventListener('pointerdown', onPointerDown, true);
|
|
145
|
+
hostDocument.removeEventListener('mousedown', onPointerDown, true);
|
|
146
|
+
hostDocument.removeEventListener('touchstart', onTouchStart, true);
|
|
147
|
+
hostDocument.removeEventListener('touchend', onTouchEnd, true);
|
|
148
|
+
hostDocument.removeEventListener('focusin', onFocusIn, true);
|
|
149
|
+
hostDocument.removeEventListener('click', onClickCapture, true);
|
|
150
|
+
hostDocument.removeEventListener('dblclick', onDoubleClickCapture, true);
|
|
151
|
+
touchStart = undefined;
|
|
152
|
+
userActivation = undefined;
|
|
153
|
+
suppressedClick = undefined;
|
|
154
|
+
};
|
|
155
|
+
const refresh = () => {
|
|
156
|
+
if (disposed)
|
|
157
|
+
return false;
|
|
158
|
+
const wanted = isMobileTouchViewport(hostWindow, viewportMaxPx);
|
|
159
|
+
if (wanted)
|
|
160
|
+
addListeners();
|
|
161
|
+
else
|
|
162
|
+
removeListeners();
|
|
163
|
+
return active;
|
|
164
|
+
};
|
|
165
|
+
const onResize = () => { refresh(); };
|
|
166
|
+
hostWindow?.addEventListener('resize', onResize);
|
|
167
|
+
refresh();
|
|
168
|
+
return {
|
|
169
|
+
refresh,
|
|
170
|
+
dispose() {
|
|
171
|
+
if (disposed)
|
|
172
|
+
return;
|
|
173
|
+
disposed = true;
|
|
174
|
+
removeListeners();
|
|
175
|
+
hostWindow?.removeEventListener('resize', onResize);
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function isMobileTouchViewport(windowLike, maxPx) {
|
|
180
|
+
const width = windowLike?.innerWidth;
|
|
181
|
+
if (typeof width !== 'number' || !Number.isFinite(width) || width <= 0 || width > maxPx)
|
|
182
|
+
return false;
|
|
183
|
+
const touchPoints = windowLike?.navigator?.maxTouchPoints;
|
|
184
|
+
return typeof touchPoints !== 'number' || touchPoints > 0;
|
|
185
|
+
}
|
|
186
|
+
function sessionRow(target) {
|
|
187
|
+
const element = asElement(target);
|
|
188
|
+
if (element === null || typeof element.closest !== 'function')
|
|
189
|
+
return null;
|
|
190
|
+
try {
|
|
191
|
+
const row = element.closest('[role="treeitem"][aria-selected]');
|
|
192
|
+
const expanded = row?.getAttribute?.('aria-expanded');
|
|
193
|
+
if (row === null || (expanded !== null && expanded !== undefined))
|
|
194
|
+
return null;
|
|
195
|
+
return row;
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function isRowControl(target, row) {
|
|
202
|
+
const element = asElement(target);
|
|
203
|
+
if (element === null || typeof element.closest !== 'function')
|
|
204
|
+
return false;
|
|
205
|
+
try {
|
|
206
|
+
const control = element.closest('button, a, input, textarea, select, [contenteditable="true"]');
|
|
207
|
+
return control !== null && control !== row;
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function isComposerTarget(target) {
|
|
214
|
+
try {
|
|
215
|
+
return target.closest?.('[data-composer-input="true"]') !== null;
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function activationInsideComposer(activation, target) {
|
|
222
|
+
if (activation === target)
|
|
223
|
+
return true;
|
|
224
|
+
try {
|
|
225
|
+
return target.contains?.(activation) === true || activation.closest?.('[data-composer-input="true"]') === target.closest?.('[data-composer-input="true"]');
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
return false;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function asElement(value) {
|
|
232
|
+
return typeof value === 'object' && value !== null ? value : null;
|
|
233
|
+
}
|
|
234
|
+
function emptyElement() {
|
|
235
|
+
return { closest: () => null };
|
|
236
|
+
}
|
|
237
|
+
function eventTarget(event) {
|
|
238
|
+
return typeof event === 'object' && event !== null ? event.target : undefined;
|
|
239
|
+
}
|
|
240
|
+
function firstTouch(event) {
|
|
241
|
+
if (typeof event !== 'object' || event === null)
|
|
242
|
+
return null;
|
|
243
|
+
const list = event.touches;
|
|
244
|
+
const first = typeof list === 'object' && list !== null ? list[0] : undefined;
|
|
245
|
+
return readTouch(first, eventTarget(event));
|
|
246
|
+
}
|
|
247
|
+
function endTouch(event, fallbackTarget) {
|
|
248
|
+
if (typeof event !== 'object' || event === null)
|
|
249
|
+
return null;
|
|
250
|
+
const list = event.changedTouches;
|
|
251
|
+
const first = typeof list === 'object' && list !== null ? list[0] : undefined;
|
|
252
|
+
return readTouch(first, eventTarget(event) ?? fallbackTarget);
|
|
253
|
+
}
|
|
254
|
+
function readTouch(value, target) {
|
|
255
|
+
if (typeof value !== 'object' || value === null)
|
|
256
|
+
return null;
|
|
257
|
+
const x = value.clientX;
|
|
258
|
+
const y = value.clientY;
|
|
259
|
+
return typeof x === 'number' && typeof y === 'number' && Number.isFinite(x) && Number.isFinite(y)
|
|
260
|
+
? { x, y, target }
|
|
261
|
+
: null;
|
|
262
|
+
}
|
|
263
|
+
function blurElementLater(element) {
|
|
264
|
+
try {
|
|
265
|
+
element.blur?.();
|
|
266
|
+
}
|
|
267
|
+
catch { /* 忽略失效的焦点节点。 */ }
|
|
268
|
+
const schedule = typeof queueMicrotask === 'function' ? queueMicrotask : (callback) => { setTimeout(callback, 0); };
|
|
269
|
+
schedule(() => {
|
|
270
|
+
try {
|
|
271
|
+
if (isComposerTarget(element))
|
|
272
|
+
element.blur?.();
|
|
273
|
+
}
|
|
274
|
+
catch { /* 节点已卸载。 */ }
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function preventDefault(event) {
|
|
278
|
+
const method = typeof event === 'object' && event !== null ? event.preventDefault : undefined;
|
|
279
|
+
if (typeof method === 'function')
|
|
280
|
+
method.call(event);
|
|
281
|
+
}
|
|
282
|
+
function stopPropagation(event) {
|
|
283
|
+
if (typeof event !== 'object' || event === null)
|
|
284
|
+
return;
|
|
285
|
+
const value = event;
|
|
286
|
+
if (typeof value.stopImmediatePropagation === 'function')
|
|
287
|
+
value.stopImmediatePropagation.call(event);
|
|
288
|
+
else if (typeof value.stopPropagation === 'function')
|
|
289
|
+
value.stopPropagation.call(event);
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=mobile-session-interaction.js.map
|