用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/AzureFoxStudios/wabi --skill wabi-server-rail-chrome命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | wabi-server-rail-chrome |
| description | ServerRail density, side, popout, logo, persistence. |
| version | 1.0.0 |
| metadata | {"hermes":{"tags":["wabi","frontend","sveltekit","sidebar","rail","density","side"],"related_skills":["wabi-sidebar-channel-ia","wabi-sidebar-nav","wabi-frontend-architecture"]}} |
ServerRail.svelte is a server switcher — which community am I in. NOT a surface switcher (that lives in WorkspaceViewBar / ChatHeader). The two axes must NOT merge into one strip.
Top-to-bottom structure:
.rail-home — Wabi logo button (identity anchor, goes to hub or opens server switcher).rail-divider (desktop only).rail-list — {#each $savedServerRailItems}: saved servers + server folders with full drag-and-drop reorder, drop positions 'before' | 'after' | 'inside' (inside → creates folder)centerPanelView.set('admin'), + → opens server switcherCSS lives in frontend/src/styles/components/server-rail.css (no <style> block in component).
| State | Width | Behavior |
|---|---|---|
full (default) | 92px | icon + tooltip, server names in popout |
icons-only | 48px | tooltips on hover, no labels — the daily driver |
hidden | 0px | invisible; a thin 4px edge strip catches hover/swipe to reveal |
Hover-to-reject is wrong — it hides discoverability, breaks touch, triggers on mouse-accident. Discord's default is icons-only (always visible, compact).
CSS classes: .density-full, .density-icons-only, .density-hidden.
GET/PUT /api/user/layout (key railSide)..rail-right flips border-right → border-left..rail-right .folder-popout { left: auto; right: 100%; } so the popout doesn't overflow off-screen..mobile-folder-tray also flips.The logo is the identity anchor → should go to a server hub, not open a surface-switcher panel. Currently wired to dispatch('manage') (server switcher) until a center-stage hub view exists. The intent is "identity home," not "surface switch."
railDensity, railSide, railLayoutLoaded in layoutStoreStates.ts.frontend/src/lib/railLayout.ts — loadRailLayout() on mount, persistRailLayout() debounced on change.GET/PUT /api/user/layout endpoints in core/crates/wabi-server/src/api/user.rs. Validates JSON, allows only known keys (layout, theme, railDensity, railSide). Stored via UserLayout projection under index user_layouts.railDensity = 'full', railSide = 'left'.WorkspaceViewBar / ChatHeader (center-stage workspace pills). Merging them into the rail creates semantic collision — the user can't tell if a click switches community or view.wabi-sidebar-channel-iawabi-sidebar-navwabi-frontend-architecture