5.0 KiB
description, kind
| description | kind |
|---|---|
| Permission preset surfaces for the Web GUI: the General-settings default row and the /permission picker for the current session; for users and maintainers of permission policy. | package-reference |
@deepseek-ai/dsh-client-ui-permission-presets
English | 中文
Summary
This package provides permission preset surfaces for two lifetimes in the Web GUI: a General-settings row chooses the default for later sessions without switching the current session. A picker on the host /permission command switches the current session through one flat preset list with the active value marked. Kebab-case names render as title-case labels, and danger-full-access is presented as Full access. Choosing full access requires an explicit risk acknowledgement before either surface writes it. Both surfaces read one host-computed projection and write through one path, so the pushed projection frame is the single confirmation both follow.
Table of Contents
- Use this package
- Understand the implementation
- Further Exploration
- Model Experience
- Known Limitations and Deferred Work
- Dev Note
Use this package
Mount this plugin alongside the settings and commands packages; the permission row then appears in General settings, and the /permission picker replaces the bare command invocation. The current-session picker is available exactly while the projection key is present; a permission-less composition shows neither picker nor Settings row.
The picker
A pick submits the /permission <preset> command line. The argued path (/permission <preset> typed directly) still switches directly; the decoration replaces only the bare invocation. Unknown kebab-case preset names render in title case, and custom is display state, never a target.
The Settings row
The row derives its options from the host's dynamic defaultPreset enum and writes one settings mutation. The value applies only when a later session is created; changing it never switches or rewrites the current session.
Understand the implementation
Implementation internals — click to expand
The General row reads the explicitly exposed permission Settings descriptor through ctx.settingsScope 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, and a push invalidation refetches the descriptor. The value is read only when a later session is created. The current-session surface is a popupSelect decoration hung on the host /permission command (ctx.commandUi.decorate): the host command keeps its slash-menu row, argued path, and durable lifecycle logging, while the decoration replaces only the bare invocation with the picker. Options and the active mark read the session's permissions projection — the same host-computed select the composer chip renders. The full-access option carries a confirmation payload the shared popup shell renders as the in-page risk gate.
Further Exploration
Read these pages when the permission surface is not enough. They move from the browser surfaces to the host policy and the command shell.
- dsh-permission-presets — the host-side permission preset policy these surfaces write.
- ui-commands — the popupSelect shell the
/permissiondecoration registers into. - ui-conversation — the composer chip that renders the same permissions projection.
- Client package map — adjacent browser UI packages.
Model Experience
Indirectly, through the permission facts its two surfaces write: the Settings row causes a future session to start with whole-value knob events, while the /permission picker appends the same facts when it switches the current session; those events select the sandbox mode and approval policy later tool calls resolve.
KV Cache effect
No direct invalidation; the knob consumers own any request-prefix changes.
Known Limitations and Deferred Work
These limits define the current permission surfaces. They are current package constraints, not a general policy comparison or a task backlog.
- The Settings row is Web-only — non-Web clients may still switch the current session through
/permission, but do not receive this browser contribution. - Preset descriptions come from the host — localized built-in labels may therefore appear beside a description written in another language.
Dev Note
Working context for maintainers — click to expand
None.