All plugins

DSH / BUNDLE / CLIENT-UI

dsh-fold

v0.1.0Yancey2023 / dsh-foldae0e15bdab

InstallableBundlesUI & client pluginsCommunity · Topic auto-analysisWeb UI

Overview

dsh-fold

DSH Web UI plugin: fold consecutive tool calls in one assistant turn into a single line (Codex-style), with live running-tool label, call count, and expand/collapse. Pure Slot/React implementation, no DOM patching.

README / EN

Package documentation

Registry summary

DSH Web UI plugin: fold consecutive tool calls in one assistant turn into a single line (Codex-style), with live running-tool label, call count, and expand/collapse. Pure Slot/React implementation, no DOM patching.

dsh.pub verifies the pinned bundle contract, runtime facts, and distribution semantics. The complete README remains in the source repository.

Read the full README on GitHub

LIMITATIONS

Known limitations

- The expanded member rendering replicates the product's small `ToolCall` wrapper (call-row div + subcall recursion) because that wrapper is not exported; the actual cards are the official `tool.call.toolview` entries. The generic fallback for tools *without* a registered toolview is a compact theme-aware card (name/args/output/error) instead of the internal `GenericToolCard`. - The user bubble is likewise a replica (from official primitives), not a delegation: Chromium's `-webkit-line-clamp` cannot clamp through the official row's nested flex layout (verified in headless Chromium), so the clamp has to live on our own element. The replica keeps the product's bubble, ref chips, images, time and copy actions; if a future DSH changes the user bubble's visuals, the replica CSS must follow. - The bar's live content is the product's collapsed-row replica (`toolRowModel` + the running Think row) — same titles/summaries as the product rows, but re-rendered by the plugin; a future DSH changing the row model's titles or summary keys must be mirrored in `tool-row.ts`. - Diagnostics (`model-retry`, `turn-error`, `turn-max-tokens`) are NEVER folded — they render the official cell views unconditionally and always stay visible; the other notices (`compaction`, `context`, …) fold into bars but remain expandable, so failures stay reachable in one click. - Group identity = first member's stable node key. If older history is loaded that prepends a tool call *before* the current leader, leadership moves to the new first node and that group's expanded state resets. - The slot-core overlay relies on two structural invariants of this SlotCore version (register pushes the new entry into the parent record; releaseEntry tears down `entry.children`); if a future version breaks them, the wrapper fails closed (plugin inert, official UI unaffected). - Expanding long chains re-mounts the official cards; hundreds of settled calls stay collapsed by default, so scrolling cost stays ~one row.