Files
deepseek-harness/packages/experimental/client-ui-claude-code-mods
imccyu e4410b2764 perf(client): read each tsdown preset's own package manifest
The client tsdown presets found a package's own manifest by name: a glob of
every packages/*/*/package.json, parsed until the name matched. tsdown's
native config loader imports each package config without module cache, so
the module-level cache never hit and all 82 configs repeated the glob
(40-125 ms each) synchronously on tsdown's main thread, where it delayed
every other package build. It was 34.5% of the client pass's main thread.

- clientBundle, staticLinked and clientLibrary take the package directory
  (import.meta.dirname at every call site) and read <dir>/package.json
  once; the package name, loader id and externals come from that manifest.
- A missing, unreadable or nameless manifest throws an actionable error.
- The glob, the name search and the module-level caches are removed.

tsdown client pass 12.78 s -> 8.73 s (median of 3 interleaved runs each,
-31.7%); all 11,566 lib outputs byte-identical; all 82 configs resolve the
same externals and banners.

Refs #5852
2026-10-11 18:19:23 +08:00
..

description, kind
description kind
Web band above the prompt for Claude Code mods: draws each session's mod tree from the bridge's Remote and sends button clicks back. package-reference

@deepseek-ai/dsh-experimental-client-ui-claude-code-mods

English | 中文

Summary

This optional browser plugin draws the band a Claude Code mod renders above the prompt. It mounts the bridge's claudeCodeMods Remote, watches each open session's band, and renders the serialized Box/Text/Button tree as a full-width entry above the composer card; clicking a button runs the mod's onPress on the Host and the band redraws. Without a mod that draws, nothing is shown.

Table of Contents


Use this package

Compose it beside the bridge and the mods; the opt-in overlay does so for a source launch of the Web profile. The band appears only while a mod's ui.render hook returns a tree: Token Weather's forecast after the first turn, Blast Radius's Proceed and Cancel while a risky command is held, Replay Theater's hint after a turn with edits. Colors follow Claude Code's terminal palette on this theme's tokens; a hotkey is shown as a hint beside the label, and a press is a click. While a press is in flight every button is disabled; a press the Host refuses shows its message under the band.


Understand the implementation

Maintainer details — click to expand

The browser entry imports the generated Remote contribution and hands it to mountModsBand, which mounts the contribution through ctx.remote.$mount() and registers one conversation.input.dock entry. The entry's inject keeps one watchBand stream per session behind a small observable store the slot renderer exposes as useBand; press calls pressBand with the generation the band was drawn in and applies the snapshot it returns. Disposal ends every stream and the Remote mount. Band.tsx renders the serialized tree: Box as a flex container with data-direction, data-border, and padding and gap from the props, Text as a span carrying data-color, data-bold, data-dim, data-italic, data-underline, and Button as a button disabled without an action id or while a press runs.


Further Exploration


Model Experience

None, as the band is drawn from Host state and never enters a model request; a button's effect reaches the model only through the mod's own hooks.

KV Cache effect

No direct effect.

Known Limitations and Deferred Work

  • One band per session; no docked Pane, TextInput, hotkeys, focus, or scrolling. The Host renders for a band 120 columns wide and the band wraps; width, height, overflow, wrap, and truncate props are ignored.
  • The band reflects the Host's redraw triggers; a mod that changes state outside them is drawn at the next trigger.

Dev Note

Maintainer details — click to expand

None.