nianchen8/dsh-skill-panel ↗★ 1
dsh-skill-panel
用于 dsh 网页应用的技能管理面板
AI 分析
核心用途是为 DSH 网页端提供一个技能管理面板,包含侧边栏按钮、弹窗和设置页入口。适合需要直观管理和配置 Agent 技能的用户。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:nianchen8/dsh-skill-panel说明文档
阅读完整 README ↗Placement configuration
The three UI entries (sidebar button, overlay, settings page) default to the tail of their slot: at registration the browser half reads the slot's live entries and places itself after the largest existing order, so a fresh deployment always lands at the bottom of the list regardless of how many entries already occupy the slot.
Arrival semantics (why same-strategy plugins don't fight): the tail order is computed once at registration — the browser half never re-registers after it arrives. Each registration is an atomic read→compute→register, so the next arrival always sees the previous one and appends strictly after it (max + 1, no ties). Once an entry lands, its position is fixed; if it later unloads and comes back (fiber restart), it re-appends at the tail again. Two plugins using this identical strategy therefore coexist as A(0), B(1), C(2), … with the latest arrival always last — no chasing, no livelock.
Each entry can be individually overridden through the loader entry's config in the profile composition (profiles//cordis.patch.yml):
- id: skill-panel
config:
entries:
sidebar:
enabled: true # show the sidebar button (default true)
order: 5 # explicit position; omit = dynamic tail
# slot: conversation.session.header.actions # optional relocation
overlay:
enabled: true
order: 10
settings:
enabled: false # hide the settings page
enabled— whether the entry registers at all.order— exact ascending position in the slot; absent means dynamic tail (max existing order + 1at registration time).slot— target slot key; omit for the built-in seats above. When relocating, the component degrades gracefully to the props the new slot provides (useSessions/wideare optional in the panel code).
The resolved placement is exposed to the browser through skillPanel/getConfig; if the endpoint is unavailable (e.g. before a restart), the browser half falls back to the defaults above.