Files
deepseek-harness/packages/client/ui-skill
imccyu cbe8735d7c feat(web): wire startup Workspace selection and sync docs
- Mount WorkspacesService.startInitialSelection in the runtime apply (the
  one-shot baseline follower shipped in 98633b5aa without a caller): a
  restored current session wins, an explicit clear stays cleared, a failed
  connect retries on the next baseline projection.
- Cover the policy in client-apply and the assembled workspace-flow
  snapshot; startup now lands in the recent Workspace's blank session, so
  the draft-carry scenario starts from the hero directly.
- Bring docs along: startup-selection paragraphs in the session-scope RFC
  note (both languages), bilingual README pairs for the four new client
  packages, doc-graph regeneration with client-declared events exempt from
  the dispatcher requirement (client dispatch sites are structurally
  invisible to the host-side ts.Program), and pairing re-records.
2026-07-27 06:24:09 +08:00
..

@deepseek-ai/dsh-client-ui-skill

English | 中文

Skill reference source, browser half: registers the /-trigger skill source into ctx.slash. Candidates come from the skill.list RPC addressed by the per-call ClientSessionContext projection's {sessionId} — every session is agent-backed and the host resolves cwd from the session header. Catalogs cache per session with a single-flight fetch; the scope-birth warm hook prewarms the session's entry and connection/reset clears everything. Results filter by startsWith(query); picking a candidate lands the literal /name text through the slash pipeline (decision 21 plain-text reference), and the source codec owns the reference's two projections: clipboardText/name, serialize → the model form <skill>name</skill> invoked at submit time. The RPC rides the plugin's root-context connection captured at registration — the source never reads services off a per-call argument. The source implements no matchSpace/matchEnter hooks — skill references never enter command adjudication and ride ordinary prompts into the default sink.

A failed skill.list throws from candidates, which the slash shell logs and folds into a silent menu-group drop — the menu shows only pending/ready states.

The /client export surface is the plugin body (apply/inject) only; the source object is internal to the registration effect.

Model Experience

Skill reference text in the user prompt

What the model sees

A picked candidate lands the literal /name in the draft (decision 21: plain text, no <skill> tag); the text reaches the model verbatim inside the ordinary user message (session.prompt), with no dedicated content block, prompt section, or host-side expansion. The association with the actual skill is model-side and non-deterministic: the session prefix already carries the skill catalog (rendered by dsh-tool-skill), and the reference's name matching a catalog entry is what invites the model to load it.

Token effect

Conditional and tiny: only a pick (or hand-typing the same text) adds the reference's characters to that one user message. Menu browsing and the candidate fetch add zero model tokens.

KV Cache effect

Append-only: the reference is part of a new user message appended after the reusable history prefix. This package never edits earlier request tokens.

Known Limitations and Deferred Work

  • Non-deterministic skill loading — the reference is a collaboration cue, not a guarantee; the model may ignore it. The rework path when hit rate proves insufficient (a host-side context/skill-reference guidance package, or full-text injection) sits in the design ledger; the wire text shape would not change.
  • First keystroke may race the prewarm — the scope-birth warm launches the catalog fetch, but a menu opened before it settles shows no skill candidates for that keystroke. Accepted by design: skill references do not participate in enter adjudication, so nothing correctness-bearing waits on the catalog.
  • Text is the truth — the reference is plain draft text; a hand-typed identical token is the same reference. Chip visuals derive from the lexicon scan; no occurrence identity or position tracking (componentized chips are a ledger item).