ROOKIE02314/dsh-browser--packages-client-ui-layout ↗★ 2
@deepseek-ai/dsh-client-ui-layout
Shell plugin: three-column AppFrame with drag handles, ctx.layout viewing-state service (navigation + panels) 适合定制界面布局的前端插件作者;属UI基础组件
같은 패키지 이름의 다른 저장소
- deepseek-ai/deepseek-harness--packages-client-ui-layout
- whitelonng/dshcode--packages-client-ui-layout
- fufankeji/deepseek-harness-studio--packages-client-ui-layout
- op7418/pilot-harness--packages-client-ui-layout
- See-Sol-Lab/DeepSeekGUI--packages-client-ui-layout
- peiyuwang54/deepseek-harness-cli--packages-client-ui-layout
설치
검증된 bundle이 없거나 호환성 검사에 실패했습니다. 먼저 저장소 설명을 읽어 주세요. 전체 README 읽기 ↗
@deepseek-ai/dsh-client-ui-layout
English | 中文
Shell plugin: three-column AppFrame (drag handles and concession chain) plus the ctx.layout panel-geometry service; it registers into the runtime-owned root slot and declares sidebar, conversation, details, and conversation.empty. The sidebar resize boundary is an invisible hit strip, while the details boundary retains its floating pill. Below the responsive breakpoint, or when a compact rail is enough to preserve an open details panel and the center floor, AppFrame derives a 56px sidebar rail without rewriting its stored preference. Within the concession solver, only details shrinks and then auto-closes; closed details resolves to zero width. The package also seats the theme presenter: it consumes resolved ctx.theme snapshots and projects them onto the document (html { color-scheme } for native UA chrome, body[data-ds-dark-theme] from the active color scheme, the theme's alias tokens as inline variables on body, and one owned `` whose content follows the computed body background). Measuring after palette and token application keeps the rendered background as the single color authority; disposing the presenter removes its metadata node with its other global writes.
AppFrame always mounts the conversation and details columns; a connected Session renders through SessionProvider. The transient layout store starts the sidebar at its default width and details closed, and it never reads or writes localStorage. Hero and other unselected states also derive a zero rendered details width without changing that stored preference. AppFrame retains the last non-blank Session id across those states: the first Session remains closed, an explicit details action opens the contract default width, returning to the same Session restores its unchanged width, and selecting a different Session closes details before paint. The conversation owner share is empty, while the sidebar owner share contains only collapsed and width; registrants obtain business data from standard hooks and actions from their own inject faces.
The /client exports are the plugin body (apply/inject), LayoutController, and the four owner-share interfaces. AppFrame, the panel store, and the concession solver remain package-internal.
Model Experience
None, as the layout shell manages browser viewing state; nothing here reaches a model request.
KV Cache effect
None; this package neither assembles nor sends a provider request.
Known Limitations and Deferred Work
- Panel geometry is transient — reload restores the sidebar default and details closed; switching between distinct Session ids also closes details and forgets its dragged width, while unselected surfaces render details at zero width without modifying geometry.
- Responsive sidebar collapse and concession-chain auto-close derive rendered widths without touching panel preferences — the panels restore from their preferences when the constraint leaves; consumers must not read stored widths as the rendered truth.
- No scroll anchoring during squeeze reflow — layout changes may move the reader's viewport.