dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
停靠在 dsh Web 对话区右缘的会话代码地图:色块/缩略图双模式、拖动调宽(10–320px)、悬停放大镜预览、点击跳转与拖动滚动(带实时视口指示条)、可收起为 4px 细条。
English · 中文
Conversation Minimap — a DeepSeek Harness (
dsh) Web client plugin.
Current version: 0.1.8
Renders a draggable conversation minimap on the right side of the chat area — preview the whole conversation like an editor minimap and scroll with a flick:
» to collapse into a 4px strip; a persistent « label stays on the strip, and clicking either the label or the strip expands it again.Thumbnail mode (widened, the whole conversation scaled down):
Color-block mode (narrow strip, colored by message type, hover to preview):
Install the latest version (default):
dsh plugin --profile web add dsh-conversation-map
Install a specific version (dsh plugin add forwards to pnpm, so any npm version spec works):
# Pin an exact version
dsh plugin --profile web add dsh-conversation-map@0.1.8
# Upgrade to the latest version
dsh plugin --profile web update dsh-conversation-map@latest
Verify the layer is mounted, then start:
dsh --profile web --dump-config # should show a "# == dsh-conversation-map" layer
dsh --profile web
🗑️ Uninstall: dsh plugin --profile web remove dsh-conversation-map
dsh 0.1.x Web conversation DOM contract:
[data-conversation-scroll] the conversation scroll container (note: the framework rebuilds the conversation column on every session switch, so this container is a fresh DOM node each time — the plugin observes a stable ancestor and re-resolves on every computation instead of holding the old node)[data-chat-anchor-key] / [data-chat-flow-kind] conversation node rows[data-composer-seat] the bottom input arealocalStorage (keys dsh-conversation-map:width / dsh-conversation-map:collapsed) across session switches and page reloads.shell.overlay slot and only uses the react and slots platform services — no network requests, no telemetry (no persistence beyond the localStorage state above).pnpm install
pnpm run build # tsdown → lib/client.js (__ModuleLoader__ factory wrapper)
Build artifact contract: CJS wrapped in window.__ModuleLoader__.load({ id, factory }); platform modules like react stay external, everything else is inlined (the plugin has no dependencies besides react).
THUMB_MIN_WIDTH in src/client/index.ts (default 50)thumbScaleFor() always returns map width / content width (capped at 1) regardless of conversation length; very long sessions pan vertically inside the track as you scroll, with the pan derived from the frame's position (src/client/geometry.ts) so the frame always encloses exactly what is on screenWIDTH_MIN / WIDTH_MAX (default 10 / 320)THUMB_CLONE_INTERVAL (default 200ms)LOUPE_W / LOUPE_H (default 854 / 200, whole row scaled to panel width), LOUPE_SCALE (zoom cap, default 1 = real scale)MIT
🧰 Recommended plugin hub: dsh-market