Bundle
dsh-composer-dynamic-island
A compact DSH Web composer island that integrates button-style input extensions without user-defined positioning.
- Source
- says693
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 4 days ago
Readme
# DSH Composer Dynamic Island **English** | [简体中文](README.zh-CN.md) Collapse selected DeepSeek Harness Web composer controls into a compact, upward-expanding island without moving their DOM nodes or changing the host React tree. [dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI) · A DeepSeek Harness ecosystem plugin. ## Compatibility boundary This package has two deliberately separate layers: - `src/index.ts` (published as `lib/types/index.js`) and `dsh-plugin.json` form a headless Community v0.15 host facet. It requires no contracts, permissions, credentials, browser, or GUI. - `lib/client.js` is an optional DSH Web compatibility adapter. Community v0.15 does not define a client facet, so the adapter is not represented as one and is not claimed as cross-host UI conformance. See [`docs/COMPATIBILITY.md`](docs/COMPATIBILITY.md) for the exact boundary. ## Web behavior The adapter detects controls from an active DSH input or composer surface and lets the user choose which controls collapse into an upward-expanding island. It discovers: - native controls and contributions in `conversation.input.left`, `conversation.input.right`, and `conversation.input.model`; - button-style contributions in future `conversation.input.*` or `composer.*` slots; - nested button contributions marked with `data-plugin`, `data-plugin-id`, `data-extension`, `data-extension-id`, or `data-contribution`; - unmarked button controls that are direct members of a confirmed composer toolbar, as manual opt-in choices. Discovery stays inside a confirmed input/composer surface. Text-entry widgets such as text/search inputs, textareas, contenteditable regions, and ARIA textboxes are never collapsed, even when they carry a plugin marker. Search, settings, and ordinary form controls outside the composer are not scanned. Defaults collapse left-side plugin controls and the WebUI team-mode selector. Native tools, permission controls, model controls, and send/stop remain in their original positions. Existing controls remain owned by their original React parent; the adapter changes presentation attributes and styles without moving nodes to another parent. Open DSH Settings and select `输入灵动岛` to change the detected controls. Selections apply immediately and remain in browser local storage. Hover or focus the three-dot handle to open, click to pin on touch devices, move away to close, or press Escape to close and restore focus. The plugin deliberately does **not** provide drag-and-drop, coordinate storage, or any other user-facing button-position editor. Panel placement is calculated only to render the island beside its fixed composer trigger. ## Installation This repository is currently distributed from GitHub: ```sh dsh plugin add github:says693/dsh-composer-dynamic-island ``` Alternatively, add `dsh-composer-dynamic-island` to a target profile and enable its bundle. `cordis.patch.yml` contains the portable Cordis row. If the DSH Web slot service or composer surface is unavailable, the browser adapter is not a supported target and the host facet remains a no-op. ## Data and permissions - Declared Community v0.15 permissions: none. - Network requests: none. - Filesystem access: none. - Browser storage: only whether configuration is enabled and the identifiers of controls selected for the island. - Conversation content, model-provider settings, API keys, and credentials are neither read nor stored. Older stored layout coordinates and cached control labels are removed when the adapter next loads. ## Removal Remove `dsh-composer-dynamic-island` from the profile bundles and dependencies, then restart DSH. Browser settings are intentionally preserved unless the site's local storage key `dsh-composer-dynamic-island-config-v1` is removed. ## Development Requires Node.js `^22.19 || >=24` and pnpm 10. The package root follows the dsh-TUI plugin-template contract and exports `name`, typed `Config`, and `apply` without a default export. The optional DSH Web adapter remains a separate, explicitly non-standard client layer. ```sh corepack pnpm install --frozen-lockfile corepack pnpm build corepack pnpm verify ``` ## Author This plugin is written and maintained solely by [says693](https://github.com/says693). ## Status and license The Community v0.15 metadata is a community draft compatibility declaration, not an official DSH certification. The optional Web adapter must be tested on each supported DSH Web host. Released under the [MIT License](LICENSE).
Install
dsh plugin --profile web add github:says693/dsh-composer-dynamic-island
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-composer-dynamic-island from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.