Tools & Capabilities

dsh-motion

bilbillm/dsh-motion · ★ 3

bilbillm

Restrained, semantic interface motion for DeepSeek Harness

License
MIT
Added
2026-08-16
Maintenance
active
Install kind
github
Manifest details
Manifest status
Declared
Manifest path
package.json#dsh
Manifest checked
2026-08-19
Lifecycle scripts
None found

Static manifest checks report declarations only; they are not compatibility or security review.

安装

dsh plugin --profile web add github:bilbillm/dsh-motion

GitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试

For install and environment setup, plus plugin development tutorials, see DSH community docs ↗

README

Source README · body: en · Read Chinese README

Table of contents
  1. Install
  2. Compatibility
  3. Build and test
  4. Design boundaries
  5. Distribution faces
  6. License

@dsh-external/dsh-motion is a small, zero-configuration browser plugin for DeepSeek Harness. It adds restrained entry, exit, and state-change motion to semantic menus, listboxes, dialogs, tab panels, conversation page layers, tabs, switches, and workspace disclosure groups.

The plugin is deliberately conservative:

  • Harness and theme-owned animation wins. Ambiguous surfaces are skipped.
  • Only opacity, independent translate/scale, and color properties are used for transient surfaces. Workspace disclosure alone animates its semantic group height; AppFrame columns and sidebar geometry remain untouched.
  • Menus, listboxes, dialogs, and masks receive paired exits through short-lived visual ghosts. Ghosts are aria-hidden, inert, pointer-disabled, and removed as soon as their animation settles.
  • Model and reasoning drill-in cards use a directional through-fade. Command option filtering is deliberately excluded so typing never retriggers motion.
  • A mounted dialog owns its entry transition, so nested slots do not animate again. Backdrop-filtered glass panels freeze backdrop sampling only while the short transition runs, then restore the exact theme declaration.
  • prefers-reduced-motion is observed live. Movement and fades are disabled when it is enabled.
  • There is no settings page, intensity slider, polling loop, or permanent animation frame loop.

简体中文: README.md

Install

Build a source checkout, then install it into an isolated Harness profile with the normal plugin workflow:

pnpm install
pnpm run build
dsh plugin --profile web add C:\path\to\dsh-motion

The package includes cordis.patch.yml, the dsh.client declaration, and the client bundle expected by the Harness module loader. Restart or reload the profile after adding it.

Compatibility

The release is tested against the Harness 0.1.0-rc.5 checkout and the published 0.1.0-rc.6 client-runtime line. It targets the semantic markers used by the default light/dark themes and by angelina-light/ angelina-dark; it does not depend on CSS-module class hashes.

Build and test

pnpm install
pnpm run check
pnpm run pack:check

pnpm run check type-checks, builds both halves, and runs the unit, JSDOM, and bundle smoke tests. The optional browser matrix needs an isolated running Web profile:

$env:DSH_MOTION_E2E_URL = 'http://127.0.0.1:3080/'
pnpm run test:e2e

That suite covers the four themes, desktop/narrow viewports, paired transient exits, model/reasoning card changes, workspace disclosure, dialogs, tabs/tab panels, layout/focus invariants, and reduced-motion emulation. See docs/compatibility.md for the latest verified host matrix and explicit gaps.

Design boundaries

An application or theme can opt a subtree out explicitly:

<section data-dsh-motion="off">...</section>

The following host-owned regions remain outside the plugin's ownership: AppFrame and sidebar geometry, Trajectory interaction, tooltips, toasts, composer layout, streaming chat rows, large page-exit clones, and Angelina parallax layers. Semantic menus/listboxes inside the composer and workspace tree-group disclosure are the two narrow exceptions. A theme that changes those semantics should add an explicit adapter rather than broad selectors.

Distribution faces

  • .: the no-op Node half (apply()), mounted by the Harness Loader.
  • ./client: the browser half, registered through window.__ModuleLoader__.load({ id, factory }).
  • ./cordis.patch.yml: the profile patch row.

License

MIT licensed.