Phase 004: remove the desktop shell, website tooling, and bundled hermes CLI

- Drop all desktop/Electron branches, scripts, and UI (title bar, pets,
  desktop bridge); LAN endpoint kind is now web/custom only
- Replace the bundled hermes CLI with user-side installation: add
  GET /api/hermes/cli-status plus a HermesMissingView onboarding guide
- Remove the version-management UI (snapshots handled by git) and prune
  dead website/mcu/claude scripts and lockfile entries
This commit is contained in:
2026-10-16 15:33:56 +08:00
parent 8c1ddf415f
commit 4701bf0ad0
49 changed files with 354 additions and 2403 deletions
+3 -21
View File
@@ -6,14 +6,11 @@ import { useI18n } from 'vue-i18n'
import { getThemeOverrides } from '@/styles/theme'
import { useTheme } from '@/composables/useTheme'
import AppSidebar from '@/components/layout/AppSidebar.vue'
import DesktopTitleBar from '@/components/layout/DesktopTitleBar.vue'
import { useKeyboard } from '@/composables/useKeyboard'
import { useAppStore } from '@/stores/hermes/app'
import SessionSearchModal from '@/components/hermes/chat/SessionSearchModal.vue'
import AuthEventListener from '@/components/auth/AuthEventListener.vue'
import DefaultCredentialPrompt from '@/components/auth/DefaultCredentialPrompt.vue'
import WebPet from '@/components/hermes/pets/WebPet.vue'
import { desktopBridge } from '@/utils/desktop-bridge'
const { isDark, isComic } = useTheme()
const { t } = useI18n()
@@ -36,14 +33,6 @@ const nodeVersionLow = computed(() => {
return !isNaN(major) && major < 23
})
const isDesktopShell = computed(() => desktopBridge()?.isDesktop === true)
const isDesktopPetRoute = computed(() => route.name === 'desktop.pet')
const showWebPet = computed(() => !isLoginPage.value && !isDesktopShell.value && !isDesktopPetRoute.value)
const hasDesktopTitleBar = computed(() => {
const platform = desktopBridge()?.platform
return isDesktopShell.value && (platform === 'darwin' || platform === 'win32')
})
function handleMobileMenuClick() {
if (usesPageSidebar.value) {
window.dispatchEvent(new CustomEvent('hermes:open-page-sidebar'))
@@ -76,9 +65,7 @@ useKeyboard()
<AuthEventListener />
<NDialogProvider>
<NNotificationProvider>
<router-view v-if="isDesktopPetRoute" />
<div v-else class="app-shell" :class="{ desktop: isDesktopShell, 'desktop-titlebar-host': hasDesktopTitleBar }">
<DesktopTitleBar v-if="isDesktopShell" />
<div class="app-shell">
<div v-if="nodeVersionLow" class="node-warning-bar">
{{ t('sidebar.nodeVersionWarning', { version: appStore.nodeVersion }) }}
</div>
@@ -93,9 +80,8 @@ useKeyboard()
</main>
</div>
</div>
<WebPet v-if="showWebPet" />
<SessionSearchModal v-if="!isDesktopPetRoute" />
<DefaultCredentialPrompt v-if="!isDesktopPetRoute" />
<SessionSearchModal />
<DefaultCredentialPrompt />
</NNotificationProvider>
</NDialogProvider>
</NMessageProvider>
@@ -128,10 +114,6 @@ useKeyboard()
}
}
.app-shell.desktop-titlebar-host .app-layout {
--vh: calc(1vh - 0.36px);
}
.app-main {
flex: 1;
min-width: 0;