Skip to content

Releases: Physicolor/dsh-ui-harmonizer

v0.9.1

Choose a tag to compare

@Physicolor Physicolor released this 05 Oct 13:56

v0.9.1 — smooth panel toggle, header badge fit, one settings-header skeleton

Published as a patch at the owner's call: it carries new behaviour, which semver would normally file
as a minor, and it removes an optional visual layer that 0.9.0 shipped.

New — the right sidebar's open/close stops re-laying out the whole frame ("Smooth Panel Toggle", default on)

  • The product eases grid-template-columns on the frame, and that is a layout property: the center
    track travels 1427px → 659px over 300ms, re-laying out the entire frame on every frame of it. Measured
    with the switch on and off over nine toggles each: long-task blocking 285.2ms → 205.7ms (−28%),
    long tasks 58 → 43. Treat these as directional; the isolated mechanism measurements are the causal
    evidence, and they are in the README.
  • The track is snapped in one frame while transitionrun / transitionstart / transitionend all still
    fire (other plugins read that beat), and the motion is re-added as covers that do not force layout:
    transform on the transcript column, left on the composer capsule.
  • Nothing transforms the composer or its ancestors: dsh-widgets keeps three position: fixed nodes in
    that subtree, and a transform rewrites their containing block and drags the rail into the viewport
    (measured 1247 → 412.4). With left, rail drift reads 0px in every sample.
  • Overlapping toggles leave no residue: each click gets a generation token and a stale step bails.

New — the top bar glides with the panel, and its badges retire before the title is crushed

  • The header used to snap inside the click's own commit while the transcript glided. It cannot be covered
    like the column — its geometry is a width, not an offset — so the same driver grew a width mode.
  • Measured on the three-badge reference session: 12 distinct painted widths, 1427 → 659 on open, and
    nothing inside needs a cover of its own.
  • The header's other half of the report was wrapping, and the badges were not the cause: the tab strip
    was squeezed until its labels wrapped. One flex: none moves the deficit onto the crumb cluster, which
    the product already ships with min-width: 0; overflow: hidden.
  • Badges now retire in the order asked for (标准模式 → 智能体团队 → 子智能体) once _crumbs drops below a
    160px legibility floor, with 24px of hysteresis; title 0px → 165px with two of three retired, and
    closing restores everything.

Refactor — the settings page header is ONE skeleton with ONE geometry, on every page

Fixed

  • The sidebar account popup was narrower than the row it hangs from.
  • A third-party settings page rendered completely unstyled (a bug in the loader's claim pass).

Removed — the center-column rounded card

  • The "Rounded Card" switch (Settings → General → UI Customization) is gone, with its shell.overlay
    cover, its stylesheet and its state field. It was a visual opinion rather than a normalization: it
    added a corner radius and a shadow the product does not have, and it occupied a second surface inside
    the center column that every other co-tenant had to route around. What remains in that block removes a
    defect instead of adding a look: chat width, font stack and panel glide.
  • The removal is residue-free: the root class is no longer written, disposeDynamicStyle still clears
    enhc-center-card-on (so a page running an older build during a hot update cannot keep a card nothing
    paints), and the persisted card key is dropped when state is read.
  • The plugin's own declared surface count drops from two to one; the Doctor's inventory follows.

Guards

scripts/verify-frame-track.cjs (12 checks), scripts/verify-rapid-toggle.cjs (28),
scripts/verify-header-fit.cjs (14), scripts/verify/settings-page.cjs, and the compiled-stylesheet
baseline (28 sheets, no drift).


v0.9.1 — 侧栏开合平顺、顶栏徽章让位、设置页表头收成一套骨架;删除圆角卡片

按车主决定以 patch 发布:这一版带新行为,严格按语义化应为 minor;同时删掉了 0.9.0 里的一个可选视觉层。

  • 新增「侧栏开合平顺」(默认开):右栏开合不再逐帧重排整个界面。九次开合对比实测:长任务阻塞 285.2ms → 205.7ms(−28%),长任务条数 58 → 43。轨道一帧到位而三个过渡事件照常触发,位移改由不触发强制布局的 cover 承担(正文列 transform、输入框胶囊 left——因为 dsh-widgets 在那棵子树里有三个 position: fixed 节点,实测加 transform 会把导轨从 1247 拖到 412.4)。
  • 新增顶栏跟手 + 徽章让位:顶栏的几何是宽度不是偏移量,所以同一条驱动长出 width 模式;实测 12 个不同的绘制宽度(1427 → 659)。页签条换行是另一条独立缺陷,一条 flex: none 修掉。徽章按 标准模式 → 智能体团队 → 子智能体 退场,标题宽度 0px → 165px。
  • 重构:设置页表头全站一套骨架、一套几何。
  • 修复:侧栏账号浮层比挂靠的行更窄;某个第三方设置页完全没上样式(loader 认领通道的 bug)。
  • 删除中栏圆角卡片:它是视觉主张而不是规范化,且在中栏多占一块别的插件要绕开的表面。删除零残留(根类不再写、dispose 仍清、持久化的 card 键丢弃),表面申报从两个降为一个。
  • 门禁:verify-frame-track.cjs(12)、verify-rapid-toggle.cjs(28)、verify-header-fit.cjs(14)、verify/settings-page.cjs、编译样式表基线(28 张表,无漂移)。

v0.9.0 — organised by target, and the audit findings repaired

Choose a tag to compare

@Physicolor Physicolor released this 30 Sep 12:28

v0.9.0 — one interface language for the Harness, and a layout per target

Refactor — every source file now belongs to exactly one layer

  • The plugin is organised by TARGET: core/ (infrastructure true regardless of DSH or any plugin), harness/ (normalizations aimed at the DSH shell), plugins/<package>/ (adaptations written for one community plugin), self/ (this plugin's own UI). src/client/ now holds nothing but index.ts and services.d.ts.
  • The 1253-line stylesheet is split into 23 .module.css fragments behind ONE entry (src/client/styles/index.ts) whose import order is the cascade order; the split was proven byte-identical to the original, and scripts/tools/css-baseline.mjs now pins the compiled result.
  • npx tsc --noEmit went from 52 errors to 0, and build runs tsc so lib/types/ really exists (it was advertised in files but never emitted).

Fixed — dead and wrong selectors, found by an adversarial pass over the live DOM

  • The dropdown-menu recipe had never applied: [role='menu'] [class^='_list_'] is both a descendant and a prefix match, while the product puts role and the list class on the SAME element with the list class not first (_surface… _list_4ub78_7 …). Measured with a menu open — descendant 0, prefix 0, contains 1. Fixed to [role='menu'][class*='_list_']; list / item / icon / label rules now land (padding 4px, min-width 218px, item min-height 40px).
  • Sidebar rows that carry a modifier class (_brand _wide) silently stopped matching [class$='_brand']; the anchors now read "the class list CONTAINS a _brand item".
  • The brand wordmark is no longer resized at all — 0.2 renders it as TWO svgs (whale + HARNESS badge), so one svg { width:182px } stretched the whale 7.6×.
  • menu-anchor must not treat the shell's settings button (aria-haspopup="dialog", aria-expanded true for as long as the dialog is open) as a menu trigger — it was force-sizing the product's own popups to a sidebar row.
  • The Doctor's deadInThisView was declared twice (a count and a row array), so its Markdown export printed [object Object]; a dead market-hash rule and a misattributed data-dsh-* coupling are gone.

Fixed — the frame's column track actually animates on DSH 0.2

  • 0.2 moved the AppFrame's transition: grid-template-columns behind [data-animating], which React sets in a layout effect on the same commit that writes the new track — the before-change style therefore carries no transition, so none ever ran and the conversation column SNAPPED. Measured: 1640px → 776px in one frame, no transition events, data-animating cleared by the component's own 600ms fallback timer.
  • The stylesheet now keeps the transition on the frame permanently (the product's own [data-dragging] / [data-rightbar-instant] rules still win), and frame-track.ts owns the one exclusion the product implements in JS — a window resize.

Fixed — lifecycle

  • The two DOM relocations (session tabs, bottom-workbench toggle) put their nodes back on dispose; the center card's unconditional 1Hz setInterval is gone (ResizeObserver + resize + transition events already cover it); the settings-header fingerprint hashes TEXT instead of its length (equal-length rewrites used to freeze the title).

v0.8.3

Choose a tag to compare

@Physicolor Physicolor released this 28 Aug 08:04

v0.8.3

Perf — conversation squeeze animation now runs at full frame rate:

  • Content-visibility: auto on every conversation flowItem (_flowItem): off-screen items skip layout entirely, so the 0.3s margin squeeze animation reflows only the handful of visible items instead of the entire conversation tree.
  • Measured (playwright + local Edge, heavy sessions, widget rail open): dropped frames 20–31% → 0%; left-edge drift 0px (always aligned); rail↔conversation lockstep std=0px; scrollHeight 0% shift after jump-to-bottom.
  • Left-edge always pinned, right-edge glides progressively — no "jump to final width, then slide" compromise.

README English-only cleanup:

  • All Chinese component names replaced with English equivalents.

v0.8.1 — dsh-genui width compatibility

Choose a tag to compare

@Physicolor Physicolor released this 27 Aug 14:32

v0.8.1 — dsh-genui width compatibility (适配更新)

Optimised plugin: @omdsh-dev/dsh-genui (render_ui 面板与工具卡片)

  • Panels & tool cards now follow the conversation content width (--enhancer-content-width, e.g. 840px) instead of inflating to the full composer seat — width follows the live chat-width slider instantly.
  • Fixed the fold-bar overflow root cause (flex nowrap title missing min-width:0) and unified 11px/16px padding, matching the official task-row look.
  • banner / steps horizontal blocks get a 16px inset standard (no negative-margin box expansion); svg/pre/canvas/img/mermaid are all width-guarded.
  • All via hash-agnostic CSS overrides; zero modification of dsh-genui source; fully reversible on uninstall.

v0.8.0

Choose a tag to compare

@Physicolor Physicolor released this 27 Aug 06:53

dsh-ui-harmonizer v0.8.0

One new harmonizer capability and two visual-contract fixes. Includes the never-released v0.7.1 fixes.

Feature — unified native-title tooltips

  • Elements that only carry the raw HTML title attribute (the model selector trigger, assorted product controls) used to pop the OS-native tooltip, breaking the visual language kept by every surface routed through the official Tooltip primitive. Hover/focus is now intercepted: the title is lifted for the interaction and re-rendered as the official bubble — --dsw-alias-tooltip-bg chip, padding 3px 7px, radius 8px, 13px/20px type, 50vw width cap, 500ms hover delay, immediate on keyboard focus, placed 8px below the anchor (flips above when clipped), clamped to a 12px viewport margin, z-index 100 popup band.
  • Rollback safety: an ancestor carrying data-enhc-no-tooltip opts a subtree out; the lifted attribute is restored verbatim on leave/blur/plugin stop; the fade-in respects reduced motion.

Fix — rounded card wraps the session header

  • The AppFrame's shell.overlay outlet is itself a z-20 stacking context, so card chrome inside it can never out-draw the z-21 session header. Zero-pixel split-paint model (no white slab): the header draws the card's top edge as an inset hairline (a real border-top grew the header 1px and misaligned it against out-of-flow controls) plus the 18px top-left radius; the overlay box demotes to a pure shadow caster with a custom left/top-emphasized recipe (official lv3 offsets down-right and its contact halo painted a stray edge line). Header-less routes fall back to the classic self-drawn card.

Fix — toggle cluster seat

  • The floating better-sidebar toggle cluster got an opaque whole-height seat matching the header band (buttons/seat/header read as one flush right edge); while a better-sidebar right panel is open (html.enhc-panel-open) the seat collapses back to a compact chip that cannot jut into the panel area.

Included from the never-released v0.7.1

  • better-sidebar Files tab strip fills its 44px bar; right seat widened to 90px for the larger toggle cluster.
  • Dark mode: active tab / widgets capsule keep white glyphs on the brand-blue fill.

Roadmap

  • Phase 3 adds a Liquid Glass exploration entry with an explicit contract: token/CSS-layer only, opt-in switch, ≤2 large backdrop surfaces, reduced-transparency/reduced-motion aware, solid-fill fallback, no plugin sources touched, readability as the bottom line.

中文摘要:新增「原生 title 悬浮提示统一」(裸 title 元素改为官方气泡样式);圆角卡片改为包裹会话 header 的零像素分工模型(header 自绘上沿线+18px 圆角,悬浮层纯投影);better-sidebar 按钮簇获得整高不透明座位(面板打开时自动收回紧凑形态);并入未发布的 v0.7.1 两项修复;路线图新增液态玻璃探索方向。

v0.7.0

Choose a tag to compare

@Physicolor Physicolor released this 22 Aug 04:00

Renamed: harness-ui-enhancer to dsh-ui-harmonizer

Meta release - package, bundle id and positioning renamed. The plugin is now described as a UI harmonizer for DeepSeek Harness: it normalizes the unfinished/self-contradictory official UI, reconciles style conflicts between plugins, and unifies the visual language via official design tokens - not just polish.

  • npm package: harness-ui-enhancer -> dsh-ui-harmonizer (old package deprecated, redirects here)
  • GitHub repo: Physicolor/harness-ui-enhancer -> Physicolor/dsh-ui-harmonizer (old URL auto-redirects)
  • Install: dsh plugin --profile web add dsh-ui-harmonizer
  • Positioning: UI harmonizer for DeepSeek Harness (normalize / reconcile / unify via official tokens)
  • No data impact: client-only plugin, no persisted keys

v0.6.3

Choose a tag to compare

@Physicolor Physicolor released this 22 Aug 03:21

Meta only - no code change.

  • npm keywords added (deepseek-harness, dsh, cordis, plugin, web-ui, ui-enhancement) so the package is discoverable in npm search.
  • GitHub repo topics expanded for GitHub search/discovery.
  • 元数据版:新增 npm keywords + 扩充 GitHub topics,无代码变更。

v0.6.2

Choose a tag to compare

@Physicolor Physicolor released this 22 Aug 03:11
  • Fix: opaque header rectangle above the overlay layer
  • Docs: bilingual README (EN primary + zh-CN)
  • 增加顶栏不透明层修复 + 双语 README

v0.6.1

Choose a tag to compare

@Physicolor Physicolor released this 22 Aug 03:11

Fixes

  • Fully neutralize #root (margin-right: 0 + width: 100%) to remove the double-squeeze gap when the better-sidebar panel opens (#1)
  • Collapse-state icon button sizing override

Includes the never-published 0.5.0 / 0.6.0

  • Rounded center-column card toggle (Settings > 界面定制)
  • Removed MCP server management and task automation
  • 修复 better-sidebar 展开时双重扣减导致的空白间隙

v0.4.1

Choose a tag to compare

@Physicolor Physicolor released this 22 Aug 03:11
  • Fix: better-sidebar panel layout — tab bar 44px, header transition
  • 修复 better-sidebar 面板布局问题