Bundle
dsh-plugin-node-time
Hover timestamps for DSH web chat nodes — start–end (and duration) on Think, Bash and every tool/step row · 在 web 界面 hover Think/Bash 等会话节点行时显示开始-结束时间与用时的 DeepSeek Harness 插件
- Source
- focksor
- stars
- 1 stars
- License
- MIT
- Updated
- Updated yesterday
Readme
# dsh-plugin-node-time Hover timestamps for DSH web. Hovering a chat node row — Think, Bash, Read/Edit/Write, Search, commands, compaction markers, sub-calls — pops a compact card with that node's start time → end time and how long it took. English | [中文](README.zh.md)   [](https://dsh-plugin.org/plugins/focksor/dsh-plugin-node-time) ## The card ``` 11:30:05.123 → 11:30:09.123 4.00s ``` - **Range line** — start → end in your local timezone; the date prefix appears when the node didn't happen today (and the year when it wasn't this year). A still-running node shows `start → …` with the elapsed time ticking every second; the line flips to the final range the moment the call settles. - **Duration line** — humanized: `830ms` / `4.33s` / `1m 23s` / `1h 02m 30s`. - **Extra line** — assistant steps also show `TTFT` (time to first token) when the step has recorded one. - **Styling** rides the host's `--dsw-alias-*` design tokens, so it follows your theme; the card is `pointer-events: none` and never intercepts the mouse. ## What gets a card | Row | Start | End | | --- | --- | --- | | Tool rows (Bash, Read, Edit, Search, …) and every nested sub-call | tool/call time | tool/result time | | Think rows and assistant steps | step/start time | assistant/message time | | Commands, compaction, turn errors, retries, context rows | — | event time (single line) | Rows whose times the host already shows on hover (user messages, the turn tail) are left untouched, and a node whose call event fell outside the loaded history window simply shows what exists — or nothing. ## How it works - **Trigger** — one delegated `mouseover`/`mouseout` pair on `document` (capture). A hit on a row header — `[data-disclosure-row]` (generic tool rows, Think, commands) or `[data-sample]` (the Bash/Pwsh sample card, whose expanded output lives outside the row root, so sweeping output never pops the card) — resolves through `data-chat-call-id` (exact tool-call/sub-call attribution) or `data-chat-anchor-key` (chat node), then reads the timing out of the current session snapshot — read at hover time, so it is always fresh. - **Data** — the `sessions` service: `ToolChatData.root` lifecycle (`callTime`/`time`), `AssistantChatData.finalNode.timing` (`stepStartTime`/`firstTokenTime`/`completedTime`), `node.location.step` boundary events for running steps, and `data.time` for single-time nodes. - **Zero host DOM writes** — the card is a `position: fixed` element appended to `document.body`; React re-renders can never wipe it, and no host component is replaced or patched. - **Style contract** — the injected `<style>` arrives pre-tagged with `data-plugin="dsh-plugin-node-time"`: the client module system's `claimStyles` re-assigns every *untagged* head style to whichever plugin materializes next (HMR bookkeeping), so an untagged style gets claimed — and possibly cleaned up — by a neighbour. (This exact race is why v0.1.0 cards sometimes never appeared.) - **Silent by design** — missing `sessions` service, changed contracts, or truncated windows degrade to "no card"; the plugin can never break the host. ## Install ```bash dsh plugin --profile web add dsh-plugin-node-time ``` Restart `dsh web` to take effect. ### From source (local development) ```bash pnpm install pnpm run build pnpm test ``` Then add this package to `~/.dsh/profiles/web/package.json` as a `link:` dependency, register it in `dsh.profile.bundles`, and restart `dsh web`. ## Keywords dsh · deepseek harness · dsh plugin · web plugin · client plugin · chat ui · tooltip · hover · timestamp · start time · end time · duration · elapsed · node timing · tool timing · think · bash · subcalls · assistant step · 时间 · 开始时间 · 结束时间 · 用时 · 悬浮 · 节点时间 · 工具耗时
Install
dsh plugin --profile web add github:focksor/dsh-plugin-node-time#b0fdc406ed4c309518ab3d0eca7c97e6716f92fa
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-plugin-node-time from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.