Preface¶
The DSH plugin ecosystem allows extending the Harness interface behavior on the browser side. Menus, listboxes, dialogs, tab panels, and state toggles are already available, but transition animations, when implemented individually by each theme or application, tend to conflict with host animations, theme variables, and accessibility settings.
dsh-motion addresses this problem: it adds short, restrained enter, exit, and state-change animations to components with stable semantic markup, while prioritizing the preservation of Harness or theme-native behavior.
What This Is¶
@dsh-external/dsh-motion is maintained by bilbillm and is licensed under the MIT License. It is a lightweight, zero-configuration browser plugin for DeepSeek Harness, covering interfaces such as menus, listboxes, dialogs, tab panels, conversation page content layers, Tabs, Switches, and workspace group expansion states.
Core Capabilities¶
The plugin’s behavior is conservative by design, with the following verified boundaries listed below:
- Harness or theme-native animations are prioritized for preservation; interfaces that cannot be reliably detected are skipped.
- Transient interfaces only animate
opacity, independenttranslate/scale, and color properties. - Menus, listboxes, dialogs, and overlays use paired exit effects.
- Exit clones are set to
aria-hidden,inert, non-clickable, and are removed after the animation ends. - Model and inference tier card pagination uses through-fade with directional cues.
- Command list filtering does not repeatedly trigger animations due to option updates.
- When a dialog mounts, the outer panel handles entry animations uniformly, and inner slots do not re-animate.
- Glass panels with
backdrop-filteronly pause background sampling during short animations and restore the theme’s original declarations afterward. - Real-time monitoring of
prefers-reduced-motion; when reduced motion is enabled, displacement and fade-ins are disabled. - No settings page, intensity sliders, polling, or persistent animation frame loops are added.
Installation and Enablement¶
package.json declares node >=20 and packageManager pnpm@11.7.0. After building the source, install it into an isolated profile via Harness’s standard plugin flow:
pnpm install
pnpm run build
dsh plugin --profile web add C:\path\to\dsh-motion
Restart or reload the corresponding profile after installation.
Typical Usage¶
Applications or themes can explicitly disable motion for a subtree:
<section data-dsh-motion="off">...</section>
Build and check:
pnpm install
pnpm run check
pnpm run pack:check
pnpm run check performs type checking, builds both Node/Browser halves, and runs unit tests, JSDOM tests, and bundle smoke tests.
The optional browser E2E matrix requires a running isolated web profile:
$env:DSH_MOTION_E2E_URL = 'http://127.0.0.1:3080/'
pnpm run test:e2e
Applicable Scenarios and Considerations¶
Suitable for adding motion to existing semantic interfaces in a Harness web profile, especially when the following conditions are met:
- Using default
light/darkorangelina-light/angelina-darktheme semantic markup. - Not relying on CSS Module hashed class names.
- Preserving host control over layout and system-level animations.
- Adhering to
prefers-reduced-motionsettings for reduced motion.
The current version is tested against the local Harness 0.1.0-rc.5 source and the published 0.1.0-rc.6 client runtime dependencies.
The following areas are outside the plugin’s control: AppFrame and sidebar geometry, Trajectory interactions, Tooltips, Toasts, Composer typography, streaming conversation lines, large page exit clones, and Angelina parallax layers. Semantic menus/listboxes within the Composer and workspace tree group expansion are explicit exceptions.
In terms of security, dsh-motion is loaded as a Harness plugin and runs with the current dsh process’s privileges. Before enabling it, inspect the source code, dependencies, and the scope of the MIT license.
Links¶
Index page: No URL provided in verified materials.
GitHub: https://github.com/bilbillm/dsh-motion