Overview
dsh-client-ui-tweaks
README / EN
Package documentation
Registry summary
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 GitHubLIMITATIONS
Known limitations
- **Fiber mapping fallback** — exact row-to-session mapping depends on React internals (`__reactFiber$` property, `SessionNodeItem` props); if a future DSH build changes them the plugin silently falls back to (title, time label) key matching, which can mis-claim a row when a non-family session shares both a degraded title and a time bucket. - **CSS-module selectors** — row sub-elements are found by local-name suffix (`[class*="_title"]`, `[class*="_time"]`), stable against hash changes but not against local-name renames. - **K3 tier freshness** — the kimi OAuth credential is read-only by design; after the mimo-migration the token is only fresh while Kimi Code is active (~15 minutes), so the K3 generation tier is often skipped in favor of flash tiers. - **Silent built-in failures** — DSH's title generator emits no result event on failure; the plugin can only infer failure from silence (12s wait) and fall back. - **Browser half is manually verified** — the automated suite covers the host half through its routes (29 specs, `npm test`); client DOM behavior is caught by the documented CDP checklist (edit flow, family rows, arrows, host routes) against disposable test sessions. - **Untested install paths** — only the `link:` install above is verified; npm publishing and `dsh plugin` installation are not exercised. - **Deferred: conversation detail collapse** — collapsing conversation process information behind an expander is a known direction, not implemented. ### Dev Note <details> <summary>Working context for maintainers</summary> Source is the runtime: the package is loaded from this checkout through `link:`, so editing files changes the live plugin. `index.js` changes need a DSH Desktop restart; `lib/client.js` changes apply on page reload. Five name fields must stay identical: `package.json` name, `index.js` export, client ModuleLoader id, `cordis.patch.yml` name, profile registration. The row-matching key separator is the invisible `\001` character — text editors and search/replace tooling can silently drop it; verify key-construction edits byte-wise. The host data directory resolves `~/.dsh` first and falls back to two levels above the plugin. Run `node --check` on both halves after every edit and keep each commit working. </details> **Runtime invariant:** the plugin never rewrites conversation content — mutations go only through documented session APIs (`fork`, `rename`, `updateQueue`), fork anchors always land on the previous turn's `turn/end`, and user-pinned titles are never overwritten.
