DSH / REGISTRY / UI-CLIENT

UI & client plugins

DeepSeek Harness plugins that extend browser surfaces, input interactions, settings, feedback, and other client-facing experiences.

Catalog records46

Selection note: Check the declared client entry, UI slots, and target profile before enabling a UI extension.

dsh-attachment-local

Included in DSHBuilt-in source

The private local implementation of `@deepseek-ai/dsh-attachment`. Objects land at `<DSH_HOME>/attachments/v1/objects/<sha256-prefix>/<sha256>` and are addressed by an opaque `sha256:` id. Each process proves a home durable once by syncing every ancestor entry to the filesystem root, so a directory another process created but has not yet synced is never mistaken for a safe boundary. Writes then use a private staging directory, owner-only files, a synced temporary file, an atomic exclusive hard-link publish, and directory syncs on the publication path (POSIX; Windows relies on filesystem metadata journaling) so the reported reference survives a crash. Write admission and reads fully decode the raster before accepting its format and dimensions; reads also re-check the digest and logged metadata. Byte and pixel limits are write-time admission policy, so a later policy reduction does not make already-admitted history unreadable.

attachmentPluginsConfigurablebaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-client-connection

Included in DSHBuilt-in source

Wire consumer layer: the client plugin's apply mounts `ctx.connection` (shared api client + current-page loopback state + observable generation-scoped `hostDescription` + single-consumer stream-loop starter); the export face carries the wire contract types, the `AbstractApiClient` abstraction, and the loop's sink/config types. Each successful readiness handshake publishes the exact `host.describe` value before `onConnected`; generation loss and explicit stop clear it, so native-capability consumers never retain a disconnected answer. The browser carrier uses HTTP POST for unary and respond operations and opens one downlink-only WebSocket each for `events.mux` and `events.host`; the in-process carrier satisfies the same two-stream abstraction. The Host half owns the single `/api` route and its Fetch bridge; a registered Typert interceptor claims its Remote endpoints before the API Proxy fallback. Loopback hostname classification stays package-internal: the `/api` Host fence and WebSocket upgrades use it directly, while other client plugins consume the derived `ctx.connection.isLoopback` state. The node half's `/api` route pins the privileged method set (`host.pickDirectory`, `host.openPath`, and the whole configuration plane — `settings.describe`/`openDocument`/`update`/`replace`/`mutate` and `credentials.describe`/`set`/`unset`; reads and native actions included, since describing returns the exposed configuration, opening acts on the Host desktop, and probing an arbitrary reference reports where a credential comes from — and the agent-preset authoring plane, `agentPreset.read`/`copy`/`openDocument`/`remove`, since a composition names the plugins a session runs, so reading one is reconnaissance, and copy/remove/openDocument manage the roster and drive the host desktop (authoring is copy-only, so none of them accepts composition text or a path); `agentPreset.list` and `agentPreset.select` stay out — the roster carries only ids and trust, and choosing a preset grants nothing `session.create`'s own `agentPreset` did not, over a default that already carries bash) to loopback by passing the trust fence with an empty trust list — a declared `trustedHosts` authority reaches every other method, while these stay loopback-local until a real authentication layer exists. The platform carriers and ConnectionController loop are package-internal; apply selects and drives them. The downlink boundary is documented in the WebSocket downlink carrier Agent Note.

UI & clientPluginsConfigurableWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-hmr

Included in DSHBuilt-in source

Hot reload for script-loaded client plugins. The web bundle mounts the row unconditionally; without a rebuild watcher (`pnpm run dev:web`) rewriting client bundles, the poll observes no changes and the chain stays idle.

UI & clientPluginsConfigurableWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-locale

Included in DSHBuilt-in source

Locale plugin: LocaleRuntime — the `zh`/`en` preference stored as `locale.preference` in `$DSH_HOME/settings.yaml`; when that explicit Host value is absent, a fresh browser starts provisionally in the language `navigator` asks for (primary-subtag matching, with `zh` when it asks for no language this app ships). The Host read runs after plugin activation so an unavailable settings service cannot block the page; its result replaces the provisional browser value live. Remote browsers retain only a process-local selection because the settings API is loopback-only. `locale/change` fires on switches. The service also owns the ns×locale dictionary registry (typed `register(ns, {zh, en})` checked against `LocaleNamespaceMap`, `bind(ns)`→`TranslateNS<ns>`; lookup chain ns → common → zh → key), implements the slot system's `LocaleFace`, and installs itself through `ctx.slots.installLocale`, backing the framework-injected `t` standard seat (`Translate`/`TranslateNS` are ui-slots types; import them from there — this package only re-exports for dictionary owners' convenience). The Host-backed preferences decision owns the persistence boundary.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-modules

Included in DSHBuilt-in source

Client module system: the browser peer of Node's internal ESM loader, built as a lazy CJS table. The web shell mounts the vendored cordis Loader for entry governance (fiber lifecycle, inject waiting, update/refresh) and injects this package's `ClientModuleLoader` through its `internal` contract — the vendored side's only consumption point is `EntryTree.import`, so replacing `internal` replaces exactly "how plugin code arrives" and nothing else.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-runtime

Included in DSHBuilt-in source

Client cordis boot and React-free object services: SlotRegistry wraps SlotCore and supplies renderer data sources; SessionRuntime owns Session objects, list and scope state, and the shared event window and history paging used by registered conversation view targets. WorkspaceRuntime depends on SessionRuntime and owns Workspace objects, list/actions, default-target derivation, and the New Session blank-reuse entry (`connectWorkspace`). The runtime fans the shared Host stream into Session and Workspace owners and hands each generic `host/remote-event` frame to `ctx.remote.$dispatch`; domain packages subscribe to their owner events through `ctx.remote.$on` and decide which caches or session rows they invalidate. Client sessions are always Host-born (Session+Agent+cwd in one `session.create`); the client holds no pre-entity session state — a session's Agent scope (the client mirror of host dsh-scope, keyed by the shared agent/session id) is born when its row enters the list mirror and dies with the prune. Contract: api-contracts v3 §4. Each `Session` holds a generic `ProjectionValueStore` seeded from the history-tail `projections` block and updated by `session/projection` frames under higher-seq-wins; domain keys (including `todos`) are read via `projections.faceOf` / `useProjection`, not via `ConversationSnapshot`. The store also publishes one reference-stable whole-value map through `SessionSummary.projectionValues`, allowing global list consumers to reuse the same projections without creating per-session subscriptions.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-agent-preset

Included in DSHBuilt-in source

The agent-preset surfaces: a General-settings row choosing which preset new sessions are composed from, a chip on the new-session screen choosing the next session's, a read-only label in the session header, and a settings section that manages the roster — copy, delete, default, and the way into a preset's own files.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-commands

Included in DSHBuilt-in source

Client command API (`ctx.commandUi`): the session-keyed command-directory cache, the `/` command source with `matchSpace`/`matchEnter` decision hooks, three-kind dispatch (`execute` / `popupSelect` / `leadingInput`), and popupSelect registration for business packages. The web command Agent Note records the decision.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-conversation

Included in DSHBuilt-in source

Conversation domain: skeleton (header/tabs/composer/empty state), chat view (grouped step-summary flow, streaming tail isolation, and turn status), composer dock (session stats sticky with the input), input dock (queue rows plus the todo plan strip), details shell, and scope-addressed ConversationController. Tool presentation belongs to `ui-tool`.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-deliverables

Included in DSHBuilt-in source

Produced-files and clickable-reference feature owner. The Node half registers final-response guidance with the system-prompt registry; the browser half registers the deliverables row a finished turn ends with into the chat view's `conversation.chat.turnTail` hole and links matching inline-code references in the closing prose. The shipped Web patch is the only composition that loads this package. Removing its one cordis.yml entry removes the guidance, row, and prose links together.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-directory-picker-browse

Included in DSHBuilt-in source

In-app directory browsing surface: the browser half of the browse picking interaction. It fills ui-workspace's two directory-flow holes (`conversation.hero.workspace.directoryFlow` and `sidebar.workspaces.directoryFlow`) with the Select Workspace Directory dialog, driving the local Host's `host.listDirectory` and `host.createDirectory` primitives through `ctx.workspaces`. Its node counterpart is `dsh-host-directory-picker-browse`; mounting this package composes the surface with that backend from one cordis.yml row, so no client code branches on a capability kind. Unlike the `-native` surface, the dialog needs no local operating-system chooser, so it also serves in-process and remote-browser deployments.

UI & clientPluginsWeb UI
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Included in DSH

dsh-client-ui-directory-picker-native

Included in DSHBuilt-in source

Native directory-picker surface: the browser half of the native picking interaction. It fills ui-workspace's two directory-flow holes (`conversation.hero.workspace.directoryFlow` and `sidebar.workspaces.directoryFlow`) with a renderless occupant that answers each `open` request by driving the local Host's OS chooser through `ctx.workspaces.pickDirectory()`, then reports exactly one outcome — a picked path, a cancellation, or a failure — back through the owner conversation. The OS dialog itself belongs to `dsh-host-directory-picker-native`; mounting this package composes the surface with that backend from one cordis.yml row, so no client code branches on a capability kind.

UI & clientPluginsWeb UI
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Included in DSH

dsh-client-ui-goal

Included in DSHBuilt-in source

Goal surface plugin, browser half: the `GoalBar` strip is the second standalone card in the `conversation.input.dock` composer-context stack (order 10, after Todo and before Queue). The live goal arrives through `useProjection('goal')` — the host-computed whole value seeded by the history tail page and updated by `session/projection` frames — so the plugin owns no domain store, refresh chain, or event listener. The slot inject face carries only the four mutation verbs (edit / pause / resume / clear through `ctx.remote.goals` — an active goal offers the pause action, a paused one resume); each reads the CAS ref from the session's current projected value at call time and surfaces the rejected Remote error inline. The strip single-flights mutations synchronously because React's pending render cannot fence same-frame clicks; after a successful clear it immediately suppresses that exact goal id while the authoritative null projection catches up. Goal creation stays on the `/goal` host command; loading, absent, completed, and successfully cleared goals render nothing.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-input-trigger

Included in DSHBuilt-in source

Input trigger pipeline plugin: `/` and `@` detection under the caret (word-boundary + guard-tier rules), the grouped candidate menu, and pick routing to registered sources. `ctx.inputTriggers` owns the source roster and resolves one `InputTriggerController` per session scope (`sessionOf`); the conversation wiring layer drives `track`/`arbitrate`/`onSpace`/`adjudicate` on the controller. The same controller exposes `toggleSource` for a chrome launcher to open exactly one registered source over a synthetic selection span; the resulting candidates still use the ordinary menu, keyboard arbitration, pick callback, and scoped input mutations. Sources receive a `ClientSessionContext` projection per call — sessions are always agent-backed, so the projection is the session identity alone. A source is warmed in every session controller it can reach: the roster present at scope birth warms during controller construction, and a source registered later is warmed into every live controller by the registration itself. Sources whose `lexicon` roll changes after warm implement `subscribeLexicon(session, listener)`; the controller re-polls on each notification and publishes the aggregation through its `lexicon` snapshot store. The pipeline is command-agnostic: space/enter adjudication polls the optional `matchSpace`/`matchEnter` hooks in registration order and the first non-undefined answer wins.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-jobs

Included in DSHBuilt-in source

Web background-job feature owner: contributes one entry to `conversation.session.header.actions` listing the `ctx.jobs` records this session can see. The data arrives entirely through the `jobsBySession` list mirror that `dsh-client-runtime` folds from `session/jobs` frames, so this package issues no RPC and holds no state beyond popover visibility.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-layout

Included in DSHBuilt-in source

Shell plugin: three-column AppFrame (drag handles and concession chain) plus the `ctx.layout` panel-geometry service; it registers into the runtime-owned `root` slot and declares `sidebar`, `conversation`, `details`, and `conversation.empty`. The sidebar resize boundary is an invisible hit strip, while the details boundary retains its floating pill; only details shrinks during concession and then auto-closes. A closed sidebar retains a 56px control rail while details closes to zero width. The package also seats the theme presenter: it consumes resolved `ctx.theme` snapshots and projects them onto the document (`html { color-scheme }` for native UA chrome, `body[data-ds-dark-theme]` from the active color scheme, the theme's alias tokens as inline variables on body, and one owned `<meta name="theme-color">` whose content follows the computed body background). Measuring after palette and token application keeps the rendered background as the single color authority; disposing the presenter removes its metadata node with its other global writes.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-message-feedback

Included in DSHBuilt-in source

Per-message feedback plugin, browser half: a Like/Dislike pair plus an optional note, contributed as the `feedback` entry (order 10) of the `conversation.chat.assistant-actions` strip. The strip is declared by `ui-conversation` and rendered inside the finalized assistant message's IconActions row, between copy and branch, so the controls inherit that row's chrome and hover behavior. Only finalized messages reach the slot — an interruption-frozen partial carries no `messageId` and therefore no feedback controls. The strip renders once per turn, on the closing assistant message that owns the turn's IconActions row: earlier steps of a multi-step turn produce tool rows rather than a rateable body, so they present no controls even though the Host would accept them as targets.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-model-selection

Included in DSHBuilt-in source

Model selection plugin, browser half: TWO entries over ONE per-session directory owned by `ModelDirectoryResolver` (`ctx.modelDirectories`). For ordinary sessions, the `/model` popupSelect contribution (registered through `ctx.commandUi`) and the composer's named `conversation.input.model` seat both load the session's advisory directory through `session.models` and submit through `session.selectModel` via the same `ModelDirectory` instance. The compact composer trigger opens a two-level Model/Effort menu: models stay provider-grouped, while the selected exact model supplies its adapter-owned effort names, descriptions, and default. `/model` applies the selected model's default effort, and the composer can then choose any advertised effort.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-permission-presets

Included in DSHBuilt-in source

Permission browser surfaces for two different lifetimes. The General-settings row reads the explicitly exposed `permission` Settings descriptor, derives its options from the host's dynamic `defaultPreset` enum, and writes one `settings.mutate` path operation with the descriptor revision. Its observable rides the slot system's `hooks` compartment, so the renderer owns React hook binding; a push invalidation refetches the descriptor. This value applies only when a later session is created; changing it does not switch the current session. Choosing Full access requires an explicit risk acknowledgement before the row writes it.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-plan

Included in DSHBuilt-in source

Plan-mode status chip, a pure browser surface plugin. The browser half occupies the conversation-declared `conversation.input.plan` single seat (to the right of the access-mode control); the node half is an empty apply (the roster row). Plan behavior itself — the `/plan` command, the boundary-or-idle-committed `plan/mode` state, the `plan` projection unit, and the policy section — is owned by `@deepseek-ai/dsh-plan-mode`, composed independently on the host roster.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-settings

Included in DSHBuilt-in source

The settings domain's base layer, with two roles and no presentation of its own. It provides `ctx.settingsScope`, the Host transport every preference row binds its durable namespace section through, and it declares the settings slot types registrants fill: `settings.trigger` / `settings.header` / `settings.close` (chrome content), `settings.action` (ordered content-header actions), `settings.section` (one page per feature), `settings.plugins.tab` (feature-owned pages inside the Plugins section), and `settings.onboarding` (ordered feature-owned pages). It depends on no `ui-*` presentation package, so any feature that owns a preference can reach it; the settings SHELL — the `sidebar.settings` occupant, its navigation, and the chrome — lives in ui-settings-general, because a shell dependency on ui-sidebar would close a reference graph cycle through ui-layout and ui-theme. The shell's own contract types live beside the shell for the same reason.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-settings-general

Included in DSHBuilt-in source

Settings shell, ownerless copy, and durable product-onboarding namespace. It occupies `sidebar.settings` with the trigger chrome and modal settings panel, projects the `settings.section` ledger into the navigation and the `settings.onboarding` ledger into one mounted step at a time, and registers everything on the Settings pages that belongs to no single feature — the trigger/header/close chrome content, the local configuration-file action, the General section and its `settings.general.item` slot, and the `settings` dictionaries. The slot types it renders into belong to ui-settings, the settings domain base; only the shell's own contract types live here, because they reference ui-sidebar's slot type and the base layer must depend on no `ui-*` package. Feature-owned rows (Permission, Language, Appearance), sections (Models), and conditional onboarding steps stay with their feature packages.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-settings-models

Included in DSHBuilt-in source

Models settings and product-onboarding plugin. The same client Cordis plugin registers the Models page plus two ordered first-run dialogs: a versioned internal-testing notice and the conditional official-DeepSeek credential step. Both steps share one modal wrapper and remain sequenced by `settings.onboarding`. The Models plane joins three wire domains into one shared snapshot — `llm.providers` (the configurable-provider directory with each route's live/dormant state), `settings.describe` (serialized schemas, layered redacted values, secret slots), and `credentials.describe` (value-free configured/source/writable badges) — and renders provider rows with one editor card at a time, without presenting route liveness as provider status.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-settings-plugin-inventory

Included in DSHBuilt-in source

Read-only **Plugin list** tab for Web Settings. The browser plugin registers one localized `settings.plugins.tab` contribution with id `all`; the Plugins section owns the navigation entry and tab chrome. It performs no Remote read during plugin activation. Selecting the tab for the first time mounts it and lazily calls `ctx.remote.pluginInventory.list()` through `api-remotes`.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-settings-plugins

Included in DSHBuilt-in source

The **Plugins** settings section and its **Plugin configuration** tab. The section owns the heading and compact tab chrome; feature plugins contribute pages through `settings.plugins.tab`. This package's own tab shows one expandable card per Host plugin whose configuration a user owns. A card shows the plugin's name and what it governs; expanding it in place reveals hand-written controls bound to that plugin's settings namespace, each field marking whether the user overrode it and offering a reset back to the value the deployment composed.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-sidebar

Included in DSHBuilt-in source

Sidebar shell plugin: the wordmark, New Session action, layout-owned collapse control, scroll-aware region seat, and bottom-pinned Settings seat. ui-workspace owns the Workspace and Session browser rendered into `sidebar.workspaces`; this package neither derives its rows nor owns its view preferences. Collapse into the layout-owned 56px rail remains presentation-local. Contract: the slot system standard.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-skill

Included in DSHBuilt-in source

Skill invocation source, browser half: registers the `/`-trigger `skill` source into `ctx.inputTriggers`. Ordinary-session candidates come from the `skill.list` RPC addressed by the per-call `ClientSessionContext` projection's `{sessionId}`, with the host resolving `cwd` from the session header. The host serves every user-invocable skill; a `modelInvocable: false` entry (a `disable-model-invocation` skill, whose only entry point is this path) wears the user-only marker as a description prefix in the active language. Catalog-addressed continuable children resolve no skill candidates locally because the existing skill RPC requires an attached session; viewing their persisted history must not activate them. Catalogs cache per ordinary session with a single-flight fetch; the scope-birth `warm` hook prewarms the session's entry, the forwarded `agent-preset/selected` owner event drops that one session's entry (the catalog belongs to the preset, and a blank session may switch after the warm), and `connection/reset` clears everything. Results filter by `startsWith(query)`.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-subagent

Included in DSHBuilt-in source

Web subagent feature owner: contributes the lazily expandable catalog tree to `conversation.session.header.actions`, reason-specific read-only replacements to the conversation composer chain, and the existing `@` reference source to `ctx.inputTriggers`.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-theme

Included in DSHBuilt-in source

Theme plugin: ThemeRuntime over the --dsw-* token base stylesheets (static scale + alias semantic layers). The service owns the live theme preference (`light`/`dark`/`system`), resolves `system` through `prefers-color-scheme`, and publishes immutable `ThemeSnapshot`s on the `theme/change` event; it never touches the DOM — ui-layout's presenter applies the resolved snapshot (`html { color-scheme }`, `body[data-ds-dark-theme]`, and inline alias tokens). A loopback browser provides the service immediately with `system`, then loads `ui-theme.preference` in the background and writes each built-in selection through the Host settings API, whose local provider stores it in `$DSH_HOME/settings.yaml` by default; pushed settings changes and reconnects refetch it, rapid selections are serialized in gesture order with namespace revisions, and a rejected latest write reloads the durable value. A remote browser cannot access the privileged settings API, so its selection remains process-local. Third-party registered theme ids remain an in-process extension and do not cross the built-in settings schema; removing one never overwrites the last durable built-in preference. The Host-backed preferences decision owns the persistence boundary.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-tool

Included in DSHBuilt-in source

Client Tool presentation plugin. `ui-conversation` dispatches each ordered `tool-call` Conversation Node through the matching key of `conversation.chat.node`; this package renders its root and Code Dispatch children, then dispatches every atomic call through the keyed `tool.call.toolview` slot. Unregistered Tool names use the generic card.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-trajectory

Included in DSHBuilt-in source

Trajectory renders a turn-aware event ledger with selectable User, Assistant, Tool, and nested Subtool records. Thick rules mark Turn boundaries, compact inline markers identify Steps, and the main ledger keeps only index, event, and content; selection opens a local inspector for token usage, duration, Input, Output, and Timing. Scrollable Summary regions keep their scrollbar thumbs transparent until the region is hovered or contains keyboard focus, without changing the reserved scroll geometry. A standalone compaction request appears chronologically in its own `Between turns` section, while a numbered compaction remains inside its owning turn. Long ledgers open at the current tail, load one older page when the user reaches the loaded range's top, and mount only the visible row window plus a small overscan; request-only separators share the next measurable virtual item, while semantic row keys and ARIA indexes survive prepends. Selection, timeline navigation, folding, search, and Request totals cover the currently loaded window. The ledger covers records with an explicit loading row until the initial tail is positioned. While an older prefix remains unloaded, a first-row control precedes the loaded records, loads one earlier page on click, and changes in place to a disabled loading status while that page is pending. A fixed Overview above the ledger projects real record start/duration timing from left to right; when earlier records remain unloaded and the viewport includes the loaded domain's start, a neutral ellipsis control identifies the omitted prefix and loads one earlier page without assigning unknown history fabricated duration. Assistant spans divide recorded TTFT from decoding, and a 500 ms hover reveals exact clock and duration details. Dragging an interval focuses the ledger on every record active at any point in that inclusive range, while clearing the selection restores the full loaded ledger. Wheel gestures zoom the time domain. A right-button click clears the selected interval, while a right-button drag pans an already zoomed viewport without changing it. The initial view and streaming updates stay at the tail; scrolling upward suspends following so new records do not interrupt inspection of earlier rows. Content-only stream frames preserve virtual row keys and heights, reuse measurements, and do not issue repeated tail-scroll writes. Completed replies retain assembled blocks, timing, and usage in Trajectory target State, while the shared Session window keeps the raw Events. Trajectory asks the conversation shell to float the composer over the full-height ledger, while its responsive vertical scrollers reserve the composer's live height so final rows remain reachable. Trajectory-owned Definitions assemble business records, including cancellation-frozen Assistant and Tool records, from the shared Session window, so Trajectory neither reads nor changes the Chat conversation snapshot. The package provides no service and declares no Context merge; it registers target-specific Event Definitions, a Trajectory view builder, and one tab in the conversation's `'conversation.view'` slot ring. Contract: api-contracts v3 §8.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-user-questions

Included in DSHBuilt-in source

Web question feature plugin: its browser half registers the `question` entry in the conversation-owned `conversation.composer` keyed slot. Its host half is empty on purpose — mounting `dsh-tool-ask-user` there put the tool in the registry's GLOBAL layer, which merges into every agent regardless of the preset that composed it, so a two-tool benchmark preset really presented three. Rendering a question is a host UI capability; having the tool is an agent capability, so the `tool-ask-user` row belongs to the presets that want it (and to the TUI composition, which has no presets).

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-workflow-run

Included in DSHBuilt-in source

The browser plugin that reconstructs durable top-level workflow runs as independent Chat nodes. It consumes the four `tool-workflow/*` Session events owned by `dsh-tool-workflow`, registers one `ConversationNodeDefinition`, and renders through the keyed `conversation.chat.node` slot without changing the existing workflow tool card.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-client-ui-workspace

Included in DSHBuilt-in source

Shared Workspace browser and picker plugin. `WorkspaceBrowser` fills the sidebar's `sidebar.workspaces` slot, while `WorkspacePicker` fills the page-local Session Intent hero's `conversation.hero.workspace` slot; both surfaces use the same Workspace menu and add flow.

UI & clientPluginsWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
UI
1
Availability
Web

dsh-command-feedback

Included in DSHBuilt-in source

Trigger-independent session feedback plus human-facing `/feedback` capture. The package exports `recordFeedback(session, text)`, which appends one log-only `feedback/record` event. Its plugin registers one global command through `ctx.commands`, so every composed command adapter discovers it; the shipped Web client executes it without a model turn.

feedbackPluginsbaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-message-feedback

Included in DSHBuilt-in source

Host-owned editable feedback for one finalized assistant message. The package registers `ctx.messageFeedback`, persists one lifecycle-bound sidecar row per Session in storage-domain, and publishes the Host `messageFeedback.list`, `messageFeedback.put`, and `messageFeedback.delete` unary Remote contract. It is separate from the immutable Session-level `feedback/record` event and performs no telemetry handoff. The message-feedback sidecar Agent Note owns the design boundary.

feedbackPluginsConfigurableweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-commands

Included in DSHBuilt-in source

Plugin-owned human-command registry consumed by interactive UI adapters. The plugin command registration Agent Note owns the boundary and dispatch contract.

interactionPluginsbaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-permission-presets

Included in DSHBuilt-in source

User-facing permission presets through `ctx.permissionPresets` (`PermissionPresetService`). Each configured name bundles `sandbox/mode` with `approval/policy`; the defaults are `workspace-write` (`workspace-write` + `ask`) and `danger-full-access` (`danger-full-access` + `never`). UI adapters may expose the table as one selector, while sandbox execution and approval continue to consume their own knobs.

interactionPluginsConfigurablebaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-user-approval

Included in DSHBuilt-in source

Channel-neutral one-shot approval seam. `ctx.approval.request(req)` returns `allowed-once`, `rejected`, `cancelled`, or `unavailable`; missing or failing answerers fail closed, and a grant applies only to the requested action. Exact event signatures live in the generated region of approval.md.

interactionPluginsConfigurablebaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-user-questions

Included in DSHBuilt-in source

User-interaction Service Definition. It owns `ctx.userQuestions`, the service a model-facing tool or permission plugin uses when it needs to pause work and ask the human for a decision.

interactionPluginsbaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-settings-file

Included in DSHBuilt-in source

File-backed settings provider. One YAML or JSON document carries every namespace section; external edits hot-publish through `ctx.settings`, and `update()` re-reads the document under a writer lock before writing back atomically, preserving the user's YAML comments, any section owned by a plugin that is not currently loaded, and any on-disk change this process has not observed yet.

settingsPluginsConfigurablebaseheadless
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0-rc.5
Type
Plugins
Availability
Web

dsh-open-in-vscode

External Git bundleCommunity · source reviewed

Adds an Open in VS Code action to each workspace row in the DSH web sidebar.

UI & clientBundlesConfigurableWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.5
UI
1
CLI installs

dsh-at-file

External Git bundleCommunity · source reviewed

Adds Codex-style @file mentions to the web composer and expands selected workspace files into the model request.

interactionBundlesConfigurableWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.0
UI
2
CLI installs

dsh-notification

External Git bundleCommunity · source reviewed

Shows configurable browser desktop notifications when a DSH session finishes a turn.

UI & clientBundlesConfigurableWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.1
UI
1
CLI installs

@omdsh-dev/dsh-genui

External Git bundleCommunity · source reviewed

Renders interactive components, charts, forms, and panels from model-produced dsh-ui fences inside assistant replies.

UI & clientBundlesWeb UIweb
HOSTCLIENTUITOOLDATAFLOW
Version
0.8.0
UI
2
CLI installs

dsh-cc-tui

External Git bundleCommunity · source reviewed

A full-screen Claude Code-style terminal front door for DSH agents, mounted as a Cordis bundle.

interactionBundlesConfigurablecc-tui
HOSTCLIENTUITOOLDATAFLOW
Version
0.1.6
Type
Bundles
CLI installs