dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
钢琴键风格会话内导航条:一根键锚定一条用户消息,悬停显示消息预览气泡与阶梯展开,点击平滑跳转。
A piano-key in-conversation navigation bar for the DeepSeek Harness Web GUI: one key anchors one user message of the current session, hovering shows a "user message + model reply" preview, and clicking smooth-scrolls to that message. Built on the official DSH dual-face plugin mechanism (host + browser half) — no DSH source changes.
Dark theme · hovered (full view + focused detail):
| Dark hover focus | Dark idle focus |
|---|---|
Light theme (hovered / idle full views):
| Light hover focus | Light idle focus |
|---|---|
Full views show the bar in its real position within a session; focused views show the piano-key details (key shapes, hover ladder, message preview tooltip).
#D2D3D3 / #767779 / #1A1C1F, dark #454545 /
#A3A3A3 / #FFFFFF).-webkit-line-clamp
fallback; overflow ends with …).data-ds-dark-theme +
prefers-color-scheme fallback).Installed into the web profile through the official DSH plugin mechanism:
# From npm (released)
dsh plugin --profile web add @kelearns/dsh-navigation-bar
# Or local development (link mode; edits to lib/client.js apply on page refresh)
dsh plugin --profile web add link:<this-directory>
Published on npm: npmjs.com/package/@kelearns/dsh-navigation-bar
Listed in awesome-dsh-plugin curated registry; also searchable as
navigation-barin the Plugin Market tab of dsh settings (dsh-market).
Note: the plugin roster is loaded at instance startup — after adding a new
plugin, restart the dsh web instance, then refresh the page.
| File | Purpose |
|---|---|
index.js | host half (no-op cordis plugin) |
lib/client.js | browser half (hand-written bundle, no build step; window.__ModuleLoader__.load) |
cordis.patch.yml | bundle patch: inserts the plugin row into the web profile roster |
package.json | dsh.bundle.patch + dsh.client (platform web) declarations |
test/ | headless-browser CDP diagnostics + standalone offline test page |
Data sources (all official APIs):
ctx.sessions.binding(currentId).session → ConversationSnapshot
(subscribed live via useSyncExternalStore)[data-conversation-scroll], message rows
[data-chat-anchor-key]# Headless Edge + CDP audit: open a real session, check layout / colors / tooltip
node test/cdp-audit.mjs
# Reference-image pixel measurement (key pitch / ladder / palette)
node test/img-analysis.cjs # idle reference images
node test/img-strip.cjs # hover reference images (ladder lengths & colors)
MIT