feat(preset): enable plugin_manager in standard mode

This commit is contained in:
Turtle committed 2026-10-21 11:47:26 +08:00
1 parent 5e9bb51724
commit f9ec718a48
12 files changed
+74 -12

No files matched your search

+1 -1
View File
@@ -300,7 +300,7 @@ describe('the shipped Web composition', () => {
// depend on ripgrep being present on the machine.
expect(toolNames(ctx, handle.agent).filter(name => name !== 'glob' && name !== 'grep')).toEqual([
'ask_user_question', 'bash', 'create_goal', 'edit', 'exit_plan_mode',
'get_goal', 'interrupt_agent', 'job_kill', 'job_list', 'job_output', 'list_agents', 'list_subagent_models', 'present', 'read', 'read_image',
'get_goal', 'interrupt_agent', 'job_kill', 'job_list', 'job_output', 'list_agents', 'list_subagent_models', 'plugin_manager', 'present', 'read', 'read_image',
'schedule_create', 'schedule_delete', 'schedule_list', 'schedule_update',
'send_message', 'skill',
'subagent', 'subagent_fork', 'todo_write', 'update_goal', 'web_fetch', 'web_search',
@@ -484,6 +484,7 @@ const EXPECTED_TOOLS = [
'job_output',
'list_agents',
'list_subagent_models',
'plugin_manager',
'present',
'read',
'read_image',
@@ -15,8 +15,8 @@
en: 87679c51aa3693f5
zh: 11684a48a5806afb
/deepseek-ai-dsh-plugin-manager/use-this-package:
en: 54d8a94be2d013af
zh: f2dfe03b5c092133
en: 425473b242360a78
zh: bd91b346ab3d7a78
/deepseek-ai-dsh-plugin-manager/use-this-package/version-compatibility-and-exemptions:
en: 483285658e267dd5
zh: 846bec2daac59a96
+1 -1
View File
@@ -28,7 +28,7 @@ Manage the current profile's plugins without editing configuration by hand. Enab
<a id="use-this-package"></a>
## Use this package
Base-backed profiles provide the manager. In Web, the sidebar's **Plugins** page ([ui-plugin-manager](../../client/ui-plugin-manager/README.md)) manages the profile's bundles and their uniquely addressable rows; the Settings Plugin list stays read-only. Agent-preset rows remain read-only. The `plugin_manager` tool exposes the same operations and is enabled in Creator mode. Other presets keep it disabled by default. Every tool action requires `danger-full-access` or approval for that call. Under lower sandbox modes, `ask` requests approval; `never`, rejection, cancellation, or an unavailable approval channel prevents execution. An approval leaves the session permission mode unchanged. Profile changes persist across sessions, and installed Host code executes in-process outside the workspace sandbox. Dependency build-script approval remains separate.
Base-backed profiles provide the manager. In Web, the sidebar's **Plugins** page ([ui-plugin-manager](../../client/ui-plugin-manager/README.md)) manages the profile's bundles and their uniquely addressable rows; the Settings Plugin list stays read-only. Agent-preset rows remain read-only. The `plugin_manager` tool exposes the same operations and is enabled in the Standard and Creator presets. Other presets keep it disabled by default. Every tool action requires `danger-full-access` or approval for that call. Under lower sandbox modes, `ask` requests approval; `never`, rejection, cancellation, or an unavailable approval channel prevents execution. An approval leaves the session permission mode unchanged. Profile changes persist across sessions, and installed Host code executes in-process outside the workspace sandbox. Dependency build-script approval remains separate.
For a deployment without agent presets, enable the tool in the profile patch. Preset-backed sessions use their preset’s `tool-plugin-manager` entry.
+1 -1
View File
@@ -28,7 +28,7 @@ kind: "package-reference"
<a id="use-this-package"></a>
## 使用本包
基于 base 的 profile 提供管理服务。在 Web 中,侧边栏的**插件**页([ui-plugin-manager](../../client/ui-plugin-manager/README.zh.md))管理 profile 的组合包及其能唯一定位的行;设置页的插件列表保持只读。Agent 预设条目保持只读。`plugin_manager` 工具提供相同操作,在 Creator 模式中启用。其他预设仍默认禁用。每个工具操作都要求 `danger-full-access` 或本次调用的批准。在较低沙箱模式下,`ask` 会请求审批;`never`、拒绝、取消或审批渠道不可用时均不执行。批准不改变会话的权限模式。profile 变更跨会话持久化,已安装的 Host 代码在宿主进程内运行,不受工作区沙箱限制。依赖构建脚本仍需单独批准。
基于 base 的 profile 提供管理服务。在 Web 中,侧边栏的**插件**页([ui-plugin-manager](../../client/ui-plugin-manager/README.zh.md))管理 profile 的组合包及其能唯一定位的行;设置页的插件列表保持只读。Agent 预设条目保持只读。`plugin_manager` 工具提供相同操作,在标准和 Creator 预设中启用。其他预设仍默认禁用。每个工具操作都要求 `danger-full-access` 或本次调用的批准。在较低沙箱模式下,`ask` 会请求审批;`never`、拒绝、取消或审批渠道不可用时均不执行。批准不改变会话的权限模式。profile 变更跨会话持久化,已安装的 Host 代码在宿主进程内运行,不受工作区沙箱限制。依赖构建脚本仍需单独批准。
未使用 Agent 预设的部署在 profile patch 中启用工具;使用预设的会话由其预设中的 `tool-plugin-manager` 条目控制。
+2 -2
View File
@@ -30,8 +30,8 @@
en: df205a26b6d49168
zh: e46ed7cf9e06248a
/deepseek-ai-dsh-web-app/use-this-package/per-session-agent-setup:
en: ccd6fc264b51e44b
zh: 3265c68477a89ec9
en: c7086094a5587413
zh: 955760fa3a439802
/deepseek-ai-dsh-web-app/understand-the-implementation:
en: 323742a00cfe67b2
zh: eff5245a82fc16e7
+1 -1
View File
@@ -88,7 +88,7 @@ When you launch `dsh --profile web` over SSH, the URL line still prints but the
### Per-session agent setup
Each browser session selects a shipped preset (`standard` by default). The Agent presets settings page changes the default and edits preset child plugins; saves persist in `$DSH_HOME/profiles/web/cordis.patch.yml`. Creator's plugin-management tool is enabled only when the Host provides an editable profile.
Each browser session selects a shipped preset (`standard` by default). The Agent presets settings page changes the default and edits preset child plugins; saves persist in `$DSH_HOME/profiles/web/cordis.patch.yml`. The Standard and Creator plugin-management tool is enabled only when the Host provides an editable profile.
-----
+1 -1
View File
@@ -88,7 +88,7 @@ dsh --profile web --no-open --host "$(hostname -i | awk '{print $1}')" --public-
### 按会话的 agent 设置
每个浏览器会话选择一个随发行版交付的 preset(默认 `standard`)。Agent 预设设置页可更改默认项并编辑预设的子插件;保存结果持久化到 `$DSH_HOME/profiles/web/cordis.patch.yml`。只有 Host 提供可编辑的 profile 时,Creator 的插件管理工具才会启用。
每个浏览器会话选择一个随发行版交付的 preset(默认 `standard`)。Agent 预设设置页可更改默认项并编辑预设的子插件;保存结果持久化到 `$DSH_HOME/profiles/web/cordis.patch.yml`。只有 Host 提供可编辑的 profile 时,标准模式和 Creator 的插件管理工具才会启用。
-----
@@ -121,7 +121,7 @@
name: '@deepseek-ai/dsh-tool-present'
- id: tool-plugin-manager
name: '@deepseek-ai/dsh-plugin-manager/tools'
disabled: true
disabled: !!js "!ctx.get('profileContext')"
- id: tool-plugin-market
name: '@deepseek-ai/dsh-plugin-market/tools'
disabled: true
@@ -11,7 +11,7 @@
- button "Copy"
- status: Completed
- button "Completed in {{duration}}" [expanded]
- button "Tools updated 32 added"
- button "Tools updated 33 added"
- button "Think Both files have been read. a.txt contains \"alpha\" and b.txt contains \"beta\". I'll now reply with DONE as instructed."
- paragraph: DONE
- button "Copy"
@@ -19,7 +19,7 @@
- button "Copy"
- status: Completed
- button "Completed in {{duration}}" [disabled] [expanded]
- button "Tools updated 32 added"
- button "Tools updated 33 added"
- button "Think Both files have been read. a.txt contains \"alpha\" and b.txt contains \"beta\". I'll now reply with DONE as instructed."
- paragraph: DONE
- button "Copy"
@@ -340,6 +340,67 @@
}
}
},
{
"name": "plugin_manager",
"description": "List plugins or bundles in the current profile, enable or disable them, install a bundle, or remove an installed bundle. Every action requires danger-full-access permission or approval for this call. Approval does not change the session permission mode. Changes affect every session in this profile. List first to obtain exact identifiers. Package installation can execute allowed build scripts. Live profiles apply changes immediately, including upgrades of installed packages; a change result that is not applied carries nextStep, which says what to do or tell the user. Unmet DSH version requirements (engines.dsh, else DSH peer dependencies) block installation and activation. Version exemptions risk crashes and data loss: warn the user and obtain explicit permission for the exact plugin and runtime versions before granting one.",
"parameters": {
"type": "object",
"properties": {
"action": {
"type": "string",
"description": "Management operation.",
"enum": [
"list_plugins",
"list_bundles",
"set_plugin",
"set_bundle",
"install_bundle",
"remove_bundle",
"list_version_exemptions",
"set_version_exemption"
]
},
"target": {
"type": "string",
"description": "Plugin entry id, bundle package name, or installation spec, according to action. For an Official catalog entry, pass list_bundles installTarget.spec to install_bundle."
},
"enabled": {
"type": "boolean",
"description": "Required for set operations; defaults to true for installation. For set_version_exemption, true grants and false revokes."
},
"runtimeVersion": {
"type": "string",
"description": "For set_version_exemption: exact DSH version from list_version_exemptions. Target must be the manifest package-name@version, not an alias or version range."
},
"acceptRisk": {
"type": "boolean",
"description": "For granting an exemption: true only after warning the user about possible crashes and data loss and receiving explicit permission for this exact plugin/runtime pair. General installation permission is not enough."
},
"approvedBuilds": {
"type": "array",
"description": "For install_bundle: pass names from pendingBuilds only after the user explicitly approves running their install scripts in the conversation. This grants persistent permission for this profile.",
"items": {
"type": "string"
}
},
"registry": {
"type": "string",
"description": "For install_bundle: the npm registry URL asked first, when the user names one; otherwise the configured registry is asked, and its configured fallbacks while a registry is unreachable."
},
"offset": {
"type": "number",
"description": "Zero-based list offset; defaults to 0."
},
"limit": {
"type": "number",
"description": "List page size, from 1 to 100; defaults to 25."
}
},
"required": [
"action"
]
}
},
{
"name": "present",
"description": "Declare existing files as final deliverables for the user. Use it when the user needs a separate file, especially Office documents, spreadsheets, and slide decks; prefer your final response when that suffices. The user opens the current files; their contents are not copied.",