dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
在会话头部新增「目录」tab:把当前会话的用户消息整理成可点击的目录,自动翻页加载全部历史,点击即跳回对话并定位。
A "History" tab in the DeepSeek Harness session header: turns the user messages of the current session into a clickable directory. Click any entry to jump back to the Chat view and scroll to that message.
user messages) are listed — Tool / Thinking / Command / injected-context noise is filtered out, so even long agent sessions stay navigable.conversation.view session tab (side by side with the official "Trajectory" tab) — it does not occupy the details slot, so the official tool-call detail panel keeps working untouched.# install into a profile (e.g. web)
dsh plugin --profile web add dsh-chat-history
After restarting dsh web, open any session: the header tab bar shows Chat / Trajectory / History. Click History to use the directory.
window.__ModuleLoader__.load({ id, factory }) bundle — no build step required.lib/client.js: the profile's built-in client-hmr stat-polls bundles every 500ms and hot-reloads on change (roughly 1s).dsh.client declaration in package.json, or toggling enable/disable in cordis.patch.yml.The plugin adapts to both DSH client data layouts and picks one at runtime:
| DSH | chat node source | cross-view switch |
|---|---|---|
>= 0.1.5 | useChat((s) => s.order) / useChat((s) => s.nodes) | openView("chat") |
<= 0.1.0-rc.x | useSession((s) => s.chat.order) / s.chat.nodes | click the Chat tab button |
The variant is selected by whether the useChat prop is injected (DSH 0.1.5 removed dsh-client-runtime and moved chat nodes out of the session snapshot into that hook). Sessions, paging state (hasMore / loadingOlder), the data-chat-anchor-key DOM anchors and the node kind === "user" shape are unchanged across both, so the directory logic itself is shared.
Requires a DSH build whose
conversation.viewslot is declared bydsh-client-ui-conversation(the official "Trajectory" tab is the reference implementation).
kind === "user" (see Compatibility for which hook supplies them).data-chat-anchor-key — lookup by key directly.session.loadOlder() pulls 50 messages per page, driven by hasMore / loadingOlder; a 200-page budget backstops a host that keeps advertising more history.openView on 0.1.5+, tab click before that), then poll for the target DOM and scrollIntoView + flash.MIT