description: "Web skill references and the dedicated skill tool row for the dsh web client: the /-triggered skill source and the skill call card."
English | 中文
dsh-client-ui-skill lets users invoke a skill by choosing it from the / suggestions or typing /name directly. The same literal command loads the skill consistently from the Web composer, TUI, and ACP, while a name shared with a host command continues to resolve as that command. Skill calls appear in the conversation as expandable Instructions cards whose settled contents remain stable when the installed skill catalog changes.
Type / in the composer and pick a skill from the suggestions, or type /name directly; the sent message carries the literal text, and the host loads the skill the same way for a menu pick or a hand-typed token. A name shared with a host command still resolves to the command — adjudication claims the line client-side before it ever becomes a prompt.
Ordinary-session candidates come from the skills/list Remote; the host serves every user-invocable skill, and 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. Results rank through the / menu's shared name ranker, rankByName from ui-primitives: the query matches a case-insensitive ordered subsequence of the skill name, prefix hits rank first, and ties keep the host order (ranking decision). A failed skills/list call is logged and folded into a silent menu-group drop — the menu shows only pending/ready states.
A collapsed row renders the skill glyph, Skill title, and requested skill name; running calls carry the transcript shimmer, failures replace the name with the first error line, and interrupted calls use the warning state. A settled row expands into a bounded Instructions card containing the exact durable tool output, with the standard trajectory Inspect affordance when available. The row derives its name, lifecycle, and body only from the frozen call/result slice supplied by ui-tool, never from the current catalog, so replay stays stable when installed skills or their descriptions change.
Hovering over /name highlights the entire reference. Clicking a known skill opens its provider-supplied SKILL.md path in the right Sidebar while keeping the token editable. An uncached click shares the per-Session catalog fetch and opens when it completes, retaining the clicked Session address. Preset changes, connection resets, and plugin disposal cancel pending previews; a later click fetches the current catalog again. Skills without a file path remain invocable but have no file preview.
These pages cover the input machinery, the tool row host, and the host-side skill tool.
tool.call.toolview slot.skill tool owning the pre-step gesture boundary.The user's message reaches the model verbatim, /name literal included. The host's pre-step boundary (dsh-tool-skill) then appends the canonical <skill_content> block — the same renderSkillContent output the skill tool returns — as injected instructions context at the end of that step's injections, closest to the model's answer. Loading is deterministic: the model receives the full body without being asked to call the skill tool, and the catalog tells it not to re-load an inline-injected skill.
One invocation adds the rendered skill body to that turn as injected context — the same cost as the model loading the skill through the tool, paid unconditionally instead of at the model's discretion. Menu browsing and the candidate fetch add zero model tokens.
Append-only: the injected message lands after the reusable history prefix. This package never edits earlier request tokens.
These limits define where the reference and the row fall back to generic behavior; they are current package constraints.
Runtime invariant: No companion is published. The slash source, locale dictionaries, and keyed toolview are registry-owned registrations whose disposal is proven by the HMR-safety spec. They emit no Cordis events and own no cross-plugin mutable state.