@daweifu/capability-menu 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +74 -79
- package/README.md +76 -81
- package/cordis.patch.yml +7 -0
- package/lib/client.d.ts +43 -3
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +1172 -499
- package/lib/invoke.js +72 -2
- package/lib/invoke.js.map +1 -1
- package/lib/locations.js +168 -5
- package/lib/locations.js.map +1 -1
- package/lib/patch-file.js +33 -3
- package/lib/patch-file.js.map +1 -1
- package/lib/policy.js +33 -6
- package/lib/policy.js.map +1 -1
- package/lib/registry.js +75 -13
- package/lib/registry.js.map +1 -1
- package/lib/search.js +4 -4
- package/lib/search.js.map +1 -1
- package/lib/server/remote.js +34 -0
- package/lib/server/remote.js.map +1 -1
- package/lib/types/invoke.d.ts.map +1 -1
- package/lib/types/locations.d.ts +2 -0
- package/lib/types/locations.d.ts.map +1 -1
- package/lib/types/patch-file.d.ts.map +1 -1
- package/lib/types/policy.d.ts +8 -0
- package/lib/types/policy.d.ts.map +1 -1
- package/lib/types/registry.d.ts +23 -0
- package/lib/types/registry.d.ts.map +1 -1
- package/lib/types/search.d.ts +2 -2
- package/lib/types/server/remote.d.ts +20 -0
- package/lib/types/server/remote.d.ts.map +1 -1
- package/package.json +37 -21
package/README.en.md
CHANGED
|
@@ -1,36 +1,45 @@
|
|
|
1
1
|
<h1 align="center">dsh-capability-menu</h1>
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<strong>
|
|
4
|
+
<strong>Manage how Tools and Skills are exposed and invoked in DeepSeek Harness, reducing context use through on-demand discovery</strong>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://
|
|
9
|
-
<a href="https://www.npmjs.com/package/@daweifu/capability-menu"><img src="https://img.shields.io/npm/
|
|
8
|
+
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/DeepSeek%20Harness-0.2.0--rc.1-4D6BFE.svg?style=flat-square&labelColor=161b22&logo=deepseek&logoColor=white" alt="DeepSeek Harness 0.2.0-rc.1"/></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@daweifu/capability-menu"><img src="https://img.shields.io/npm/v/@daweifu/capability-menu.svg?style=flat-square&color=CB3837&labelColor=161b22&logo=npm&logoColor=white" alt="npm version"/></a>
|
|
10
|
+
<a href="https://github.com/PKUfudawei/dsh-capability-menu/actions"><img src="https://img.shields.io/github/actions/workflow/status/PKUfudawei/dsh-capability-menu/ci.yml?branch=master&label=CI&style=flat-square&labelColor=161b22&logo=github&logoColor=white" alt="CI"/></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/@daweifu/capability-menu"><img src="https://img.shields.io/npm/d18m/@daweifu/capability-menu.svg?style=flat-square&color=CB3837&labelColor=161b22&logo=npm&logoColor=white" alt="downloads"/></a>
|
|
10
12
|
<a href="https://github.com/PKUfudawei/dsh-capability-menu"><img src="https://img.shields.io/github/stars/PKUfudawei/dsh-capability-menu.svg?style=flat-square&color=dbab09&labelColor=161b22&logo=github&logoColor=white" alt="GitHub stars"/></a>
|
|
11
|
-
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/DeepSeek%20Harness-0.1.5--rc.2-4D6BFE.svg?style=flat-square&labelColor=161b22&logo=deepseek&logoColor=white" alt="DeepSeek Harness 0.1.5-rc.2"/></a>
|
|
12
13
|
<a href="https://github.com/awesome-dsh-plugin/awesome-dsh-plugin"><img src="https://img.shields.io/badge/featured%20in-awesome--dsh--plugin-8250DF?style=flat-square&labelColor=161b22&logo=github&logoColor=white" alt="featured in awesome-dsh-plugin"/></a>
|
|
13
|
-
<a href="https://github.com/PKUfudawei/dsh-capability-menu/actions"><img src="https://img.shields.io/github/actions/workflow/status/PKUfudawei/dsh-capability-menu/ci.yml?branch=master&label=CI&style=flat-square&labelColor=161b22&logo=github&logoColor=white" alt="CI"/></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
17
|
<a href="./README.md">简体中文</a> · <strong>English</strong>
|
|
18
18
|
</p>
|
|
19
19
|
|
|
20
|
-
<br/>
|
|
21
|
-
|
|
22
20
|
## Table of Contents
|
|
23
21
|
|
|
24
22
|
- [Capability Overview](#capability-overview)
|
|
25
|
-
- [
|
|
23
|
+
- [Capability Model](#capability-model)
|
|
24
|
+
- [Capability Management](#capability-management)
|
|
25
|
+
- [Installation and Uninstallation](#installation-and-uninstallation)
|
|
26
|
+
- [Install from npm (recommended)](#install-from-npm-recommended)
|
|
27
|
+
- [Install from source](#install-from-source)
|
|
28
|
+
- [Verify the install](#verify-the-install)
|
|
29
|
+
- [Uninstall](#uninstall)
|
|
26
30
|
- [Exposure Policy](#exposure-policy)
|
|
31
|
+
- [Tools and Skills three-tier exposure and execution](#tools-and-skills-three-tier-exposure-and-execution)
|
|
27
32
|
- [Configuration](#configuration)
|
|
33
|
+
- [All configuration options](#all-configuration-options)
|
|
34
|
+
- [On-demand capability catalog (`catalogFile`)](#on-demand-capability-catalog-catalogfile)
|
|
28
35
|
|
|
29
36
|
---
|
|
30
37
|
|
|
31
38
|
## Capability Overview
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
- Builds a unified capability catalog (`ctx.capability`) for DeepSeek Harness tools (including MCP and built-in tools) and skills.
|
|
41
|
+
- Provides three policy tiers — **Resident / On-demand / Disabled** — to manage capability exposure and invocation.
|
|
42
|
+
- Supplies on-demand capabilities only when needed, reducing the tool definitions sent with each request and saving tokens and context.
|
|
34
43
|
|
|
35
44
|
### Capability Model
|
|
36
45
|
|
|
@@ -45,7 +54,7 @@ The model gets two meta tools:
|
|
|
45
54
|
|
|
46
55
|
| tool | role | corresponding entry |
|
|
47
56
|
| --- | --- | --- |
|
|
48
|
-
| `meta_search` | search
|
|
57
|
+
| `meta_search` | search Tool / Skill candidates; list summaries help choose one, while detail returns its full description and the tool schema or Skill usage guidance | `@daweifu/capability-menu/search` |
|
|
49
58
|
| `meta_invoke` | unified execution surface: really executes Tools (full `ctx.tools` pipeline) + loads Skills | `@daweifu/capability-menu/invoke` |
|
|
50
59
|
|
|
51
60
|
### Capability Management
|
|
@@ -54,38 +63,42 @@ The model gets two meta tools:
|
|
|
54
63
|
<img src="assets/screenshot-tools.png" alt="Tools tab" width="48%"/>
|
|
55
64
|
<img src="assets/screenshot-skills.png" alt="Skills tab" width="48%"/>
|
|
56
65
|
</p>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
After installation, open **Settings** and select **Capability Management** from the settings navigation to manage Tools and Skills.
|
|
67
|
+
|
|
68
|
+
| Task | How to do it |
|
|
69
|
+
| --- | --- |
|
|
70
|
+
| Change a tier | Click the dot beside a capability. Click a tier count at the top to change the whole group. |
|
|
71
|
+
| Find a capability | Use the filter below the tabs to search by name or group. Regex is supported and matching is case-insensitive. |
|
|
72
|
+
| View details | Click a Tool to see its definition. Click a Skill to expand its files and preview them; content is rendered as Markdown. |
|
|
73
|
+
| Register a capability | Click **Register capability** in the top right to add an MCP server or Skill directory; Skills accept local paths or public GitHub URLs. |
|
|
74
|
+
| Edit or remove | Click **Edit** on a server group in Tools or a Skill row in Skills. |
|
|
75
|
+
| View policies and catalog | Click **Policy & catalog** on the right side of the page header. |
|
|
61
76
|
|
|
62
|
-
|
|
77
|
+
Registering an MCP server writes its patch configuration; a missing file or parent directory is created automatically. MCP credentials such as request headers are stored in the config; keep it secure. Skill registration creates a link or imports a directory into the selected skill root.
|
|
63
78
|
|
|
64
|
-
|
|
65
|
-
- **Skills tab**: split into "Global skills" / "Project skills" sub-tabs, with the counts following the active one. Click a skill row to expand its directory tree; click a file to preview it.
|
|
66
|
-
- **Three-state dot**: filled = Resident, half-filled ring = On-demand, ring with a slash (a no-entry sign) = Disabled. Click a dot or a tier count to cycle — native and MCP tools are equally manageable; if a higher-priority rule (a wildcard, say) overrides it, the UI reports that the classification did not apply.
|
|
67
|
-
- **Policy & catalog**: the button on the header's description row opens a read-only modal with two files — the effective policy in a semantic view, and the materialized On-demand catalog (`catalogFile`, On-demand capabilities only). Rules are changed by clicking on the page; a change is written back to this plugin's entry `config` (`patchFile`, the home layer's `~/.dsh/cordis.patch.yml` by default — see "Configuration").
|
|
68
|
-
- **Register capability**: the top-right button opens a form with "MCP server" / "Skill directory" sub-tabs, defaulting to the tab you are on. The modal holds the form only — registered entries are in the list, each with its own Edit.
|
|
69
|
-
- **MCP server**: registering one writes an `@deepseek-ai/dsh-mcp-client` row into the patch file, **mounted natively by dsh** (this plugin never manages the connection) — the same file and the same table as hand-written entries, no restart needed. Fields: `serverName`, transport (the form picks `streamable-http` by default), stdio's command / args / cwd / env, http's URL / headers, and a timeout in seconds; the form explains what each field takes.
|
|
70
|
-
> **Headers** carry the credentials: one `Key: Value` per line, `Authorization: Bearer …` and the like. They are stored in **plain text** in `~/.dsh/cordis.patch.yml`, exactly as with hand-written entries.
|
|
71
|
-
- **Skill directory**: two locations — **Global** (`~/.dsh/skills/`, visible to every session) or **Project** (`<projectRoot>/.dsh/skills/`, visible only to sessions whose cwd sits inside that project). For a project you only supply any existing path inside it; the project root is derived the way dsh derives it, and the panel reports the path actually written. Either way it is a symlink, exactly matching dsh's own skill discovery. Registration validates the `SKILL.md` the way dsh's loader does and reports failures, so a directory can no longer register here and then be silently skipped by dsh. The skill's name is the one declared in `SKILL.md`; the directory name only names the symlink.
|
|
72
|
-
- **Edit**: every MCP server group header in the Tools tab and every skill row with a manageable entry (project skills included) carries an Edit button that opens the current configuration prefilled, to change, save or remove. `serverName` is read-only when editing (it forms the `mcp__<serverName>__<tool>` prefix), and a skill's location cannot be changed — moving between roots is remove + register.
|
|
73
|
-
- **Remove**: removal asks for confirmation first and states what this particular removal costs — an MCP server loses its patch row, while a skill's cost depends on whether the entry is a symlink or a real directory (the latter is deleted recursively and cannot be recovered). The built-in group has no Edit button, because it is not a real MCP server.
|
|
74
|
-
- **Adopt**: for skills in user-level roots such as `~/.agents/skills` / `customSkillDirs`, the row offers Adopt; the confirmation names the directory the skill currently lives in, and confirming links it into `~/.dsh/skills/` (**content untouched**). Rows that cannot be adopted show their source instead — a specific directory, or a category such as "custom skill dirs" / "bundled with dsh"; the action and the source never both appear.
|
|
75
|
-
- **Refresh**: the Refresh button rebuilds the capability catalog and re-pulls the list. Registering a source refreshes once automatically; the manual button is for when you changed a source outside dsh (edited the patch file by hand, linked a skill directory yourself).
|
|
79
|
+
GitHub Skill imports accept a default-branch root URL (the root must contain `SKILL.md`), a specific branch root `https://github.com/{owner}/{repo}/tree/{branch}`, or a Skill subdirectory `https://github.com/{owner}/{repo}/tree/{branch}/{skill-directory}`. Local paths are also supported. Only public repositories are supported; Git must be installed on the machine running dsh. The plugin validates `SKILL.md` and copies only the selected directory.
|
|
76
80
|
|
|
77
|
-
##
|
|
81
|
+
## Installation and Uninstallation
|
|
78
82
|
|
|
79
|
-
Prerequisites: Node.js and the dsh CLI
|
|
83
|
+
Prerequisites: [Node.js](https://nodejs.org/en/download) and the [dsh CLI](https://github.com/deepseek-ai/deepseek-harness). Compatible with DeepSeek Harness `0.1.5-rc.2` and `0.2.0-rc.1` (`dsh plugin` forwards to pnpm internally, so pnpm needs no separate install).
|
|
80
84
|
|
|
81
85
|
### Install from npm (recommended)
|
|
82
86
|
|
|
83
|
-
A single package ships both the server-side plugin and the front-end Capability Management
|
|
87
|
+
A single package ships both the server-side plugin and the front-end Capability Management page; after installation it appears as its own section in Settings:
|
|
84
88
|
|
|
85
89
|
```sh
|
|
90
|
+
# install
|
|
86
91
|
dsh plugin --profile web add @daweifu/capability-menu
|
|
92
|
+
|
|
93
|
+
# upgrade to the version tagged latest on npm (name the version to avoid keeping the installed one)
|
|
94
|
+
dsh plugin --profile web add "@daweifu/capability-menu@$(npm view @daweifu/capability-menu dist-tags.latest)"
|
|
95
|
+
|
|
96
|
+
# To install a prerelease tag such as next, use that tag instead:
|
|
97
|
+
# dsh plugin --profile web add "@daweifu/capability-menu@$(npm view @daweifu/capability-menu dist-tags.next)"
|
|
87
98
|
```
|
|
88
99
|
|
|
100
|
+
The upgrade command installs the version pointed to by npm's `latest` tag; use the matching tag or an explicit version for prereleases.
|
|
101
|
+
|
|
89
102
|
### Install from source
|
|
90
103
|
|
|
91
104
|
```sh
|
|
@@ -99,21 +112,7 @@ dsh plugin --profile web add ./dsh-capability-menu
|
|
|
99
112
|
### Verify the install
|
|
100
113
|
|
|
101
114
|
```sh
|
|
102
|
-
dsh --profile web --dump-config | grep -
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
# == @daweifu/capability-menu
|
|
107
|
-
- id: capability-menu-registry
|
|
108
|
-
name: '@daweifu/capability-menu/registry'
|
|
109
|
-
- id: capability-menu-search
|
|
110
|
-
name: '@daweifu/capability-menu/search'
|
|
111
|
-
- id: capability-menu-invoke
|
|
112
|
-
name: '@daweifu/capability-menu/invoke'
|
|
113
|
-
- id: capability-menu-policy
|
|
114
|
-
name: '@daweifu/capability-menu/policy'
|
|
115
|
-
- id: capability-menu
|
|
116
|
-
name: '@daweifu/capability-menu'
|
|
115
|
+
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web" && pnpm list @daweifu/capability-menu && dsh --profile web --dump-config | grep -m1 '== @daweifu/capability-menu'
|
|
117
116
|
```
|
|
118
117
|
|
|
119
118
|
### Uninstall
|
|
@@ -126,54 +125,56 @@ dsh plugin --profile web remove @daweifu/capability-menu
|
|
|
126
125
|
|
|
127
126
|
All capabilities (Tool and Skill) fall into three tiers by their **exposure level** (what the model sees in the context) and their **execution mode**:
|
|
128
127
|
|
|
129
|
-
### Tools
|
|
128
|
+
### Tools and Skills three-tier exposure and execution
|
|
130
129
|
|
|
131
|
-
| tier | capability |
|
|
130
|
+
| tier | capability | what the model sees | how to find it | how to use it |
|
|
132
131
|
| --- | --- | --- | --- | --- |
|
|
133
|
-
| **Resident** | tool |
|
|
134
|
-
| | skill |
|
|
135
|
-
| **On-demand** | tool |
|
|
136
|
-
| | skill |
|
|
137
|
-
| **Disabled** | tool | not
|
|
138
|
-
| | skill |
|
|
132
|
+
| **Resident** | tool | Tool definition is included with every request | No search needed | Call directly; it goes through the full `ctx.tools` pipeline |
|
|
133
|
+
| | skill | Name and summary appear in `<available_skills>` | No search needed | The `skill` tool loads the content when needed |
|
|
134
|
+
| **On-demand** | tool | Tool definition is not included with requests | Search candidates with `meta_search` or search the capability catalog YAML (`catalogFile`) | Call with `meta_invoke`, or fetch details and parameters by exact id before calling directly |
|
|
135
|
+
| | skill | Not shown in `<available_skills>` | Search with `meta_search` or search the capability catalog YAML (`catalogFile`) | Load `SKILL.md` with `meta_invoke` |
|
|
136
|
+
| **Disabled** | tool | Tool definition is not included with requests | Hidden from search results and the capability catalog | Calls are rejected |
|
|
137
|
+
| | skill | Not shown in `<available_skills>` | Hidden from search results and the capability catalog | Loads are rejected |
|
|
139
138
|
|
|
140
139
|
> **Scope & reserved tools**:
|
|
141
|
-
> -
|
|
142
|
-
> - `meta_search
|
|
143
|
-
> - **Keep high-frequency core tools Resident**:
|
|
140
|
+
> - Tiers apply to MCP and harness-native built-in tools; built-ins use the reserved `built-in` group. **Do not name an MCP server `built-in`.**
|
|
141
|
+
> - `meta_search` and `meta_invoke` are always Resident and cannot be disabled. `run_code` is reserved for Code Mode; it is excluded from the catalog and menu and needs no tier rule.
|
|
142
|
+
> - **Keep high-frequency core tools Resident**: On-demand built-ins require `meta_search` → `meta_invoke` to use.
|
|
144
143
|
|
|
145
144
|
## Configuration
|
|
146
145
|
|
|
147
|
-
Rules
|
|
146
|
+
Rules live under `config` in this plugin's `capability-menu-policy` entry:
|
|
147
|
+
|
|
148
|
+
- The default file is `~/.dsh/cordis.patch.yml`; when `$DSH_HOME` is set, the file is `$DSH_HOME/cordis.patch.yml`.
|
|
149
|
+
- Edit the YAML directly or use Capability Management. UI clicks update memory immediately and write back about 1.5 seconds after input stops, batching writes to avoid repeated hot reloads and catalog rebuilds.
|
|
150
|
+
- A profile can override the rules in its own `cordis.patch.yml`, targeting the entry ID. In examples, `- insert:`, `id`, and `name` are Cordis patch structure, not policy fields.
|
|
148
151
|
|
|
149
152
|
```yaml
|
|
150
153
|
config:
|
|
151
154
|
tools:
|
|
152
|
-
resident:
|
|
155
|
+
resident: # Resident
|
|
153
156
|
- execute_cmd
|
|
154
157
|
- get_session_context
|
|
155
158
|
- search_kb
|
|
156
159
|
- 'mcp__gongfeng__*' # wildcard: everything under this server is resident
|
|
157
|
-
on-demand:
|
|
160
|
+
on-demand: # On-demand
|
|
158
161
|
- 'mcp__*' # wildcard fallback
|
|
159
162
|
- 'server:km:*' # bulk on-demand by server prefix
|
|
160
|
-
disabled:
|
|
163
|
+
disabled: # Disabled
|
|
161
164
|
- 'mcp__secret__*' # disabled outranks everything, even resident
|
|
162
165
|
skills:
|
|
163
|
-
resident:
|
|
166
|
+
resident: # Resident
|
|
164
167
|
- debugging
|
|
165
168
|
- coding
|
|
166
|
-
on-demand:
|
|
169
|
+
on-demand: # On-demand
|
|
167
170
|
- legacy_skill # explicit on-demand (unlisted skills default to resident)
|
|
168
|
-
disabled:
|
|
171
|
+
disabled: # Disabled
|
|
169
172
|
- forbidden_skill
|
|
170
173
|
metaTools:
|
|
171
174
|
- meta_search # always resident; cannot be disabled
|
|
172
175
|
- meta_invoke
|
|
173
176
|
```
|
|
174
177
|
|
|
175
|
-
> Config keys are the tier words themselves: `resident` (常驻) / `on-demand` (按需) / `disabled` (禁用).
|
|
176
|
-
|
|
177
178
|
### All configuration options
|
|
178
179
|
|
|
179
180
|
| Option | Entry | Default | Description |
|
|
@@ -185,7 +186,9 @@ config:
|
|
|
185
186
|
| `skillsDir` | `capability-menu-policy` | `~/.dsh/skills` | Skill root used by skill directory registration |
|
|
186
187
|
| `persistDebounceMs` | `capability-menu-policy` | `1500` | Debounce window (ms) before a clicked tier change is written back to the patch file |
|
|
187
188
|
|
|
188
|
-
|
|
189
|
+
These settings belong to their respective plugin entries and usually live in the same `cordis.patch.yml`; they do not require separate config files. `catalogFile` is the generated catalog for model-side search, while `skillsDir` is a directory for Skills.
|
|
190
|
+
|
|
191
|
+
**Rule priority** (evaluated in order: Disabled always wins; between Resident and On-demand, exact rules beat wildcards):
|
|
189
192
|
|
|
190
193
|
| priority | rule | example | effect |
|
|
191
194
|
| --- | --- | --- | --- |
|
|
@@ -197,21 +200,13 @@ config:
|
|
|
197
200
|
| 6 | `on-demand` wildcard | `on-demand: ['mcp__*']` | bulk on-demand fallback |
|
|
198
201
|
| default | no rule matched | — | resident |
|
|
199
202
|
|
|
200
|
-
|
|
201
|
-
- **Exact rules win over wildcards (even across tiers)**: e.g. with `resident: ['mcp__gongfeng__*']` in place, clicking a tool to On-demand in the Capability Management writes an exact `on-demand` rule that takes effect instead of being pushed back by the wildcard (if a higher-priority rule still overrides it, the UI reports that the classification did not apply).
|
|
202
|
-
|
|
203
|
-
> **Two kinds of change, both persisted**:
|
|
204
|
-
>
|
|
205
|
-
> - **Tier classification** changes memory first (so a click takes effect immediately) and is written back to this plugin's entry `config` (`patchFile`, the home layer's `~/.dsh/cordis.patch.yml` by default) once you stop for ~1.5s — writing that file makes dsh hot-reload this plugin and re-run the capability enumeration, so it cannot happen on every click. To batch-declare rules under version control, edit that same entry; no import/export buttons are needed.
|
|
206
|
-
> - **Registered sources** (MCP servers, skill directories) hit disk as you click: MCP rows go into the same patch file (as `@deepseek-ai/dsh-mcp-client` entries), skill directories are linked into the skill root.
|
|
203
|
+
If a higher-priority rule overrides a selected tier, the UI reports that the classification did not apply.
|
|
207
204
|
|
|
208
|
-
### On-demand capability catalog (`catalogFile
|
|
205
|
+
### On-demand capability catalog (`catalogFile`)
|
|
209
206
|
|
|
210
|
-
On-demand
|
|
207
|
+
The plugin writes On-demand Tools and Skills to the YAML file specified by `catalogFile` so the model can search them. The default is `~/.dsh/capability-catalog.yaml`; set it to an empty string to disable the catalog. The catalog is updated when Tools, Skills, or tiers change. When there are no On-demand capabilities, the model receives no catalog hint.
|
|
211
208
|
|
|
212
|
-
|
|
213
|
-
- A skill must first be **registered in `ctx.skills`** (a skill provider — e.g. its SKILL.md under a user/project skills root or `customSkillDirs`) to show up automatically; there is **no separate user-maintained input file**.
|
|
214
|
-
- The model browses the file with `grep`/`read` (or calls `meta_search`) to get an entry's id and `kind`, then calls `meta_invoke(id, kind)` to run/load it. Skill ids are the bare name (e.g. `frontend-design`); `kind` distinguishes tools from skills.
|
|
209
|
+
A Skill must be registered in `ctx.skills` to appear in the catalog. The model can search it with `grep` / `read` or call `meta_search`, then use the capability with `meta_invoke`. Each entry has an `id` and `kind`; a Skill's id is its name.
|
|
215
210
|
|
|
216
211
|
```yaml
|
|
217
212
|
# ~/.dsh/capability-catalog.yaml (auto-generated; contains only On-demand
|
|
@@ -231,7 +226,7 @@ capabilities:
|
|
|
231
226
|
whenToUse: Use when working on legacy projects
|
|
232
227
|
```
|
|
233
228
|
|
|
234
|
-
|
|
229
|
+
If the model-side `bash` / `read` sandbox cannot access the default directory, set `catalogFile` to a path it can reach. Multiple DSH instances share the default file; use a different path for each instance when they need separate catalogs.
|
|
235
230
|
|
|
236
231
|
## License
|
|
237
232
|
|
package/README.md
CHANGED
|
@@ -1,36 +1,45 @@
|
|
|
1
1
|
<h1 align="center">dsh-capability-menu</h1>
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<strong
|
|
4
|
+
<strong>统一管理 DeepSeek Harness 中 Tools 与 Skills 的暴露策略和调用方式,按需发现与调用,减少上下文占用</strong>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<a href="https://
|
|
9
|
-
<a href="https://www.npmjs.com/package/@daweifu/capability-menu"><img src="https://img.shields.io/npm/
|
|
8
|
+
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/DeepSeek%20Harness-0.2.0--rc.1-4D6BFE.svg?style=flat-square&labelColor=161b22&logo=deepseek&logoColor=white" alt="DeepSeek Harness 0.2.0-rc.1"/></a>
|
|
9
|
+
<a href="https://www.npmjs.com/package/@daweifu/capability-menu"><img src="https://img.shields.io/npm/v/@daweifu/capability-menu.svg?style=flat-square&color=CB3837&labelColor=161b22&logo=npm&logoColor=white" alt="npm version"/></a>
|
|
10
|
+
<a href="https://github.com/PKUfudawei/dsh-capability-menu/actions"><img src="https://img.shields.io/github/actions/workflow/status/PKUfudawei/dsh-capability-menu/ci.yml?branch=master&label=CI&style=flat-square&labelColor=161b22&logo=github&logoColor=white" alt="CI"/></a>
|
|
11
|
+
<a href="https://www.npmjs.com/package/@daweifu/capability-menu"><img src="https://img.shields.io/npm/d18m/@daweifu/capability-menu.svg?style=flat-square&color=CB3837&labelColor=161b22&logo=npm&logoColor=white" alt="downloads"/></a>
|
|
10
12
|
<a href="https://github.com/PKUfudawei/dsh-capability-menu"><img src="https://img.shields.io/github/stars/PKUfudawei/dsh-capability-menu.svg?style=flat-square&color=dbab09&labelColor=161b22&logo=github&logoColor=white" alt="GitHub stars"/></a>
|
|
11
|
-
<a href="https://github.com/deepseek-ai/deepseek-harness"><img src="https://img.shields.io/badge/DeepSeek%20Harness-0.1.5--rc.2-4D6BFE.svg?style=flat-square&labelColor=161b22&logo=deepseek&logoColor=white" alt="DeepSeek Harness 0.1.5-rc.2"/></a>
|
|
12
13
|
<a href="https://github.com/awesome-dsh-plugin/awesome-dsh-plugin"><img src="https://img.shields.io/badge/featured%20in-awesome--dsh--plugin-8250DF?style=flat-square&labelColor=161b22&logo=github&logoColor=white" alt="featured in awesome-dsh-plugin"/></a>
|
|
13
|
-
<a href="https://github.com/PKUfudawei/dsh-capability-menu/actions"><img src="https://img.shields.io/github/actions/workflow/status/PKUfudawei/dsh-capability-menu/ci.yml?branch=master&label=CI&style=flat-square&labelColor=161b22&logo=github&logoColor=white" alt="CI"/></a>
|
|
14
14
|
</p>
|
|
15
15
|
|
|
16
16
|
<p align="center">
|
|
17
17
|
<strong>简体中文</strong> · <a href="./README.en.md">English</a>
|
|
18
18
|
</p>
|
|
19
19
|
|
|
20
|
-
<br/>
|
|
21
|
-
|
|
22
20
|
## 目录
|
|
23
21
|
|
|
24
22
|
- [能力总览](#能力总览)
|
|
25
|
-
- [
|
|
23
|
+
- [能力模型](#能力模型)
|
|
24
|
+
- [能力菜单](#能力菜单)
|
|
25
|
+
- [安装与卸载](#安装与卸载)
|
|
26
|
+
- [从 npm 安装(推荐)](#从-npm-安装推荐)
|
|
27
|
+
- [从源码安装](#从源码安装)
|
|
28
|
+
- [验证安装](#验证安装)
|
|
29
|
+
- [卸载](#卸载)
|
|
26
30
|
- [暴露策略](#暴露策略)
|
|
27
|
-
- [
|
|
31
|
+
- [Tools 和 Skills 三档暴露与执行对照](#tools-和-skills-三档暴露与执行对照)
|
|
32
|
+
- [配置](#配置)
|
|
33
|
+
- [全部配置项](#全部配置项)
|
|
34
|
+
- [按需能力目录(`catalogfile`)](#按需能力目录catalogfile)
|
|
28
35
|
|
|
29
36
|
---
|
|
30
37
|
|
|
31
38
|
## 能力总览
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
- 为 DeepSeek Harness 的 tools(包括 MCP 工具和内置工具)与 skills 建立统一能力目录:`ctx.capability`。
|
|
41
|
+
- 提供**常驻 / 按需 / 禁用**三档策略,管理能力的暴露与调用。
|
|
42
|
+
- 按需能力只在需要时提供给 Agent,减少单次请求携带的工具定义,节省 token 和上下文。
|
|
34
43
|
|
|
35
44
|
### 能力模型
|
|
36
45
|
|
|
@@ -45,7 +54,7 @@ Capability 是本插件引入的上位概念:Tool / Skill 是不同类型的 c
|
|
|
45
54
|
|
|
46
55
|
| 工具 | 作用 | 对应 entry |
|
|
47
56
|
| --- | --- | --- |
|
|
48
|
-
| `meta_search` |
|
|
57
|
+
| `meta_search` | 搜索 Tool / Skill 候选项;列表摘要用于筛选,详情返回指定能力的完整说明及工具参数 schema / Skill 使用提示 | `@daweifu/capability-menu/search` |
|
|
49
58
|
| `meta_invoke` | 统一执行面:Tool 真执行(走完整 `ctx.tools` 管线)+ Skill 加载 | `@daweifu/capability-menu/invoke` |
|
|
50
59
|
|
|
51
60
|
### 能力菜单
|
|
@@ -54,38 +63,42 @@ Capability 是本插件引入的上位概念:Tool / Skill 是不同类型的 c
|
|
|
54
63
|
<img src="assets/screenshot-tools.png" alt="Tools 页" width="48%"/>
|
|
55
64
|
<img src="assets/screenshot-skills.png" alt="Skills 页" width="48%"/>
|
|
56
65
|
</p>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
66
|
+
安装后,在「设置」导航中选择「能力菜单」,即可管理 Tools 和 Skills。
|
|
67
|
+
|
|
68
|
+
| 操作 | 用法 |
|
|
69
|
+
| --- | --- |
|
|
70
|
+
| 更改档位 | 点击能力旁的圆点;也可以点击顶部档位计数,批量切换该组能力 |
|
|
71
|
+
| 查找能力 | 使用页签下方的过滤框搜索名称或分组;支持正则表达式,不区分大小写 |
|
|
72
|
+
| 查看能力详情 | 点击 Tool 查看定义;点击 Skill 展开文件列表并预览文件,内容按 Markdown 渲染 |
|
|
73
|
+
| 注册能力 | 点击右上角「注册能力」,添加 MCP 服务器或 Skill 目录;Skill 支持本机目录或公开 GitHub 链接 |
|
|
74
|
+
| 编辑或移除 | 在 Tools 的服务器分组或 Skills 的技能项中点击「编辑」 |
|
|
75
|
+
| 查看策略和目录 | 点击页头右侧的「策略与目录」 |
|
|
61
76
|
|
|
62
|
-
|
|
77
|
+
注册 MCP 会写入 patch 配置;文件或父目录缺失时会自动创建。MCP 请求头等凭据保存在配置中,请妥善保管。注册 Skill 则会在所选技能根目录创建链接或导入目录。
|
|
63
78
|
|
|
64
|
-
|
|
65
|
-
- **Skills 页签**:内部分「全局技能 / 项目技能」两个子页签,数量统计跟随当前页签。点击技能行展开目录树,点文件预览正文。
|
|
66
|
-
- **三态圆点**:实心 = 常驻、上半实心圆环 = 按需、圆环 + 斜杠(禁行标志)= 禁用。点圆点或分类计数即可循环切换,内置原生工具与 MCP 工具同等可管;被更高优先级规则(如通配)覆盖时,界面会提示「分类未生效」。
|
|
67
|
-
- **策略与目录**:页头说明行右侧的按钮弹出只读弹层,含**生效策略的语义化视图**与**按需能力目录**(`catalogFile`,仅含按需能力)两份文件。改规则的入口是页面上点选,改动会在停手后自动写回本插件 entry 的 `config`(`patchFile`,默认 home 层的 `~/.dsh/cordis.patch.yml`,见「配置文件」)。
|
|
68
|
-
- **注册能力**:右上角「注册能力」按钮弹出表单,内含「MCP 服务器 / Skill 目录」两个子页签,默认停在你当前所在的页签。弹窗里只放表单——已注册项在列表里,各带「编辑」。
|
|
69
|
-
- **MCP 服务器**:注册即写入 patch 文件里的 `@deepseek-ai/dsh-mcp-client` 条目,**由 dsh 原生挂载**(插件不自己管连接),与手写声明式条目同文件、同一张表,无需重启。字段含 `serverName`、传输方式(表单代为选定默认 `streamable-http`)、stdio 的命令 / 参数 / 工作目录 / 环境变量、http 的 URL / 请求头、超时(秒);各字段的取用方式表单里有说明。
|
|
70
|
-
> **请求头**用于认证:每行 `Key: Value`,`Authorization: Bearer …` 等凭据填在这里。**明文**存入 `~/.dsh/cordis.patch.yml`(与手写条目一致)。
|
|
71
|
-
- **Skill 目录**:可选**全局**(`~/.dsh/skills/`,所有会话可见)或**项目**(`<项目根>/.dsh/skills/`,只对 cwd 落在该项目内的会话可见)。选项目时只需填项目内任意一个已存在的路径,项目根按 dsh 的规则确定,面板会回报实际写入的路径。两种情况都是建软链,与 dsh 原生的 skill 发现机制一致。注册前按 dsh 加载器的口径校验 `SKILL.md`,不合格直接报错,不会出现「注册成功但 dsh 静默不加载」。技能名以 `SKILL.md` 里声明的为准,目录名只决定软链名。
|
|
72
|
-
- **编辑**:Tools 页的 MCP server 分组头、Skills 页上已有可管理条目的技能行(含项目技能)都有「编辑」,点开预填当前配置,可改、可存、可移除。`serverName` 编辑时只读(它构成 `mcp__<serverName>__<tool>` 前缀);技能的位置不可改——换根等于「移除 + 重新注册」。
|
|
73
|
-
- **移除**:移除前先确认,并说明这次移除的实际后果:MCP 是删除其 patch 行;Skill 视软链 / 真实目录而不同,后者连同文件递归删除、不可恢复。「系统内置」组没有「编辑」,因为它不是真实 MCP 服务器。
|
|
74
|
-
- **纳入管理**:`~/.agents/skills`、`customSkillDirs` 这类用户级根里的技能,行上给「纳入管理」;确认框会写明它当前所在的目录,确认后在 `~/.dsh/skills/` 下建一条指向它的软链,**内容不动**。不能纳管的行改为显示来源——某个具体目录,或「自定义技能目录」「随 dsh 预置」这类归类;动作与来源只出现其一。
|
|
75
|
-
- **刷新**:点「刷新」重建能力目录并重新拉取列表。注册来源后会自动刷新一次,手动刷新只用于你在 dsh 之外改动过来源(手改 patch 文件、手动软链 skill 目录)之后。
|
|
79
|
+
GitHub Skill 支持默认分支根目录链接(需含 `SKILL.md`)、指定分支根目录 `https://github.com/{owner}/{repo}/tree/{branch}`,以及指定分支下的技能目录 `https://github.com/{owner}/{repo}/tree/{branch}/{skill-directory}`。也可输入本机目录。仅支持公开仓库;导入需要运行 dsh 的机器安装 Git,插件会校验 `SKILL.md` 并只复制所选目录。
|
|
76
80
|
|
|
77
|
-
##
|
|
81
|
+
## 安装与卸载
|
|
78
82
|
|
|
79
|
-
|
|
83
|
+
前置:[Node.js](https://nodejs.org/en/download) 与 [dsh CLI](https://github.com/deepseek-ai/deepseek-harness);支持 DeepSeek Harness `0.1.5-rc.2` 和 `0.2.0-rc.1`(`dsh plugin` 内部会转发给 pnpm,不用单独装 pnpm)。
|
|
80
84
|
|
|
81
85
|
### 从 npm 安装(推荐)
|
|
82
86
|
|
|
83
|
-
|
|
87
|
+
单包同时提供服务端插件与前端「能力菜单」页面,安装后会作为「设置」中的独立栏目显示:
|
|
84
88
|
|
|
85
89
|
```sh
|
|
90
|
+
# 安装
|
|
86
91
|
dsh plugin --profile web add @daweifu/capability-menu
|
|
92
|
+
|
|
93
|
+
# 升级到 npm 的 latest 标签指向的版本(要显式带版本号,避免沿用已安装版本)
|
|
94
|
+
dsh plugin --profile web add "@daweifu/capability-menu@$(npm view @daweifu/capability-menu dist-tags.latest)"
|
|
95
|
+
|
|
96
|
+
# 若要安装 next 等预发布标签,请把 latest 换成对应标签名,例如:
|
|
97
|
+
# dsh plugin --profile web add "@daweifu/capability-menu@$(npm view @daweifu/capability-menu dist-tags.next)"
|
|
87
98
|
```
|
|
88
99
|
|
|
100
|
+
升级命令安装 npm `latest` 标签指向的版本;安装预发布版本请使用对应标签或指定版本号。
|
|
101
|
+
|
|
89
102
|
### 从源码安装
|
|
90
103
|
|
|
91
104
|
```sh
|
|
@@ -99,21 +112,7 @@ dsh plugin --profile web add ./dsh-capability-menu
|
|
|
99
112
|
### 验证安装
|
|
100
113
|
|
|
101
114
|
```sh
|
|
102
|
-
dsh --profile web --dump-config | grep -
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
# == @daweifu/capability-menu
|
|
107
|
-
- id: capability-menu-registry
|
|
108
|
-
name: '@daweifu/capability-menu/registry'
|
|
109
|
-
- id: capability-menu-search
|
|
110
|
-
name: '@daweifu/capability-menu/search'
|
|
111
|
-
- id: capability-menu-invoke
|
|
112
|
-
name: '@daweifu/capability-menu/invoke'
|
|
113
|
-
- id: capability-menu-policy
|
|
114
|
-
name: '@daweifu/capability-menu/policy'
|
|
115
|
-
- id: capability-menu
|
|
116
|
-
name: '@daweifu/capability-menu'
|
|
115
|
+
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web" && pnpm list @daweifu/capability-menu && dsh --profile web --dump-config | grep -m1 '== @daweifu/capability-menu'
|
|
117
116
|
```
|
|
118
117
|
|
|
119
118
|
### 卸载
|
|
@@ -126,54 +125,56 @@ dsh plugin --profile web remove @daweifu/capability-menu
|
|
|
126
125
|
|
|
127
126
|
所有能力(Tool 与 Skill)按 **暴露程度**(模型在上下文中看到什么)与 **执行方式** 分为三档:
|
|
128
127
|
|
|
129
|
-
### Tools
|
|
128
|
+
### Tools 和 Skills 三档暴露与执行对照
|
|
130
129
|
|
|
131
|
-
| 档位 | 能力 |
|
|
130
|
+
| 档位 | 能力 | 模型能看到什么 | 如何找到 | 如何使用 |
|
|
132
131
|
| --- | --- | --- | --- | --- |
|
|
133
|
-
| **常驻** | tool |
|
|
134
|
-
| | skill |
|
|
135
|
-
| **按需** | tool |
|
|
136
|
-
| | skill |
|
|
137
|
-
| **禁用** | tool |
|
|
138
|
-
| | skill |
|
|
132
|
+
| **常驻** | tool | 工具定义始终随请求提供 | 无需查找 | 直接调用;运行时经过完整 `ctx.tools` 管线 |
|
|
133
|
+
| | skill | 名称和简介显示在 `<available_skills>` 中 | 无需查找 | `skill` 工具按需加载正文 |
|
|
134
|
+
| **按需** | tool | 不随请求提供工具定义 | 用 `meta_search` 搜索候选项,或搜索能力目录 YAML(`catalogFile`) | 用 `meta_invoke` 调用;也可先按精确 id 查看详情和参数,再直接调用 |
|
|
135
|
+
| | skill | 不显示在 `<available_skills>` 中 | 用 `meta_search` 搜索,或搜索能力目录 YAML(`catalogFile`) | 用 `meta_invoke` 加载 `SKILL.md` |
|
|
136
|
+
| **禁用** | tool | 不随请求提供工具定义 | 搜索结果和能力目录中均不可见 | 调用会被拒绝 |
|
|
137
|
+
| | skill | 不显示在 `<available_skills>` 中 | 搜索结果和能力目录中均不可见 | 加载会被拒绝 |
|
|
139
138
|
|
|
140
139
|
> **覆盖与保留**:
|
|
141
|
-
> -
|
|
142
|
-
> - `meta_search
|
|
143
|
-
> -
|
|
140
|
+
> - 三档策略同时覆盖 MCP 与内置原生工具;内置工具归入保留组 `built-in`。**请勿把 MCP server 命名为 `built-in`。**
|
|
141
|
+
> - `meta_search` 和 `meta_invoke` 固定常驻且不可禁用。`run_code` 是 Code Mode 保留工具,不进目录或菜单,也无需配置档位。
|
|
142
|
+
> - **高频核心工具建议设为常驻**:按需内置工具需经 `meta_search` → `meta_invoke` 两步调用。
|
|
144
143
|
|
|
145
|
-
##
|
|
144
|
+
## 配置
|
|
146
145
|
|
|
147
|
-
规则写在本插件
|
|
146
|
+
规则写在本插件 `capability-menu-policy` entry 的 `config` 下:
|
|
147
|
+
|
|
148
|
+
- 默认文件是 `~/.dsh/cordis.patch.yml`;设置了 `$DSH_HOME` 时使用 `$DSH_HOME/cordis.patch.yml`。
|
|
149
|
+
- 可手写 YAML,也可在「能力菜单」里点选。点选立即更新内存,停手约 1.5 秒后统一写回,避免频繁热重载和能力重建。
|
|
150
|
+
- Profile 可在自己的 `cordis.patch.yml` 中按 entry ID 覆盖规则。示例中的 `- insert:`、`id`、`name` 属于 Cordis 补丁结构,不是策略字段。
|
|
148
151
|
|
|
149
152
|
```yaml
|
|
150
153
|
config:
|
|
151
154
|
tools:
|
|
152
|
-
resident:
|
|
155
|
+
resident: # 常驻
|
|
153
156
|
- execute_cmd
|
|
154
157
|
- get_session_context
|
|
155
158
|
- search_kb
|
|
156
159
|
- 'mcp__gongfeng__*' # 通配:该 server 下全部常驻
|
|
157
|
-
on-demand:
|
|
160
|
+
on-demand: # 按需
|
|
158
161
|
- 'mcp__*' # 通配兜底
|
|
159
162
|
- 'server:km:*' # 按 server 前缀批量按需
|
|
160
|
-
disabled:
|
|
163
|
+
disabled: # 禁用
|
|
161
164
|
- 'mcp__secret__*' # 禁用优先级最高,压过常驻
|
|
162
165
|
skills:
|
|
163
|
-
resident:
|
|
166
|
+
resident: # 常驻
|
|
164
167
|
- debugging
|
|
165
168
|
- coding
|
|
166
|
-
on-demand:
|
|
169
|
+
on-demand: # 按需
|
|
167
170
|
- legacy_skill # 显式按需(未列出即默认常驻)
|
|
168
|
-
disabled:
|
|
171
|
+
disabled: # 禁用
|
|
169
172
|
- forbidden_skill
|
|
170
173
|
metaTools:
|
|
171
174
|
- meta_search # 恒常驻,不可被禁用
|
|
172
175
|
- meta_invoke
|
|
173
176
|
```
|
|
174
177
|
|
|
175
|
-
> 配置键即档位英文词:`resident`(常驻)/ `on-demand`(按需)/ `disabled`(禁用)。
|
|
176
|
-
|
|
177
178
|
### 全部配置项
|
|
178
179
|
|
|
179
180
|
| 配置项 | 归属 entry | 默认值 | 说明 |
|
|
@@ -185,7 +186,9 @@ config:
|
|
|
185
186
|
| `skillsDir` | `capability-menu-policy` | `~/.dsh/skills` | 注册 Skill 目录的技能根 |
|
|
186
187
|
| `persistDebounceMs` | `capability-menu-policy` | `1500` | 点选改动写回 patch 文件前的防抖窗口(ms)|
|
|
187
188
|
|
|
188
|
-
|
|
189
|
+
这些配置项分别属于对应的插件 entry,通常都写在同一份 `cordis.patch.yml` 里,不需要为每项单独建配置文件。`catalogFile` 是插件自动生成、供模型检索的目录文件;`skillsDir` 是 Skill 存放目录。
|
|
190
|
+
|
|
191
|
+
**规则优先级**(按序匹配:禁用始终优先;在常驻与按需之间,精确规则优先于通配):
|
|
189
192
|
|
|
190
193
|
| 优先级 | 规则 | 示例 | 效果 |
|
|
191
194
|
| --- | --- | --- | --- |
|
|
@@ -197,21 +200,13 @@ config:
|
|
|
197
200
|
| 6 | `on-demand` 通配 | `on-demand: ['mcp__*']` | 兜底批量按需 |
|
|
198
201
|
| 默认 | 未命中任何规则 | — | 常驻 |
|
|
199
202
|
|
|
200
|
-
|
|
201
|
-
- **精确规则优先于通配(跨档也成立)**:例如存在 `resident: ['mcp__gongfeng__*']` 时,在「能力菜单」把某工具点成按需会写入一条精确 `on-demand` 规则并生效,不会被通配压回;若仍被更高优先级规则覆盖,界面提示「分类未生效」。
|
|
202
|
-
|
|
203
|
-
> **两类改动,落盘位置不同**:
|
|
204
|
-
>
|
|
205
|
-
> - **三档分类**先只改内存(所以点击即时生效),停手约 1.5s 后自动写回本插件 entry 的 `config`(`patchFile`,默认 home 层的 `~/.dsh/cordis.patch.yml`)——写这个文件会让 dsh 热重载本插件并重跑一次能力枚举,所以不能每次点击都写。要在版本管理里批量声明规则,直接编辑同一条 entry 即可,无需额外的导入/导出按钮。
|
|
206
|
-
> - **注册的来源**(MCP 服务器、Skill 目录)在点击当下就落盘:MCP 写进同一个 patch 文件(`@deepseek-ai/dsh-mcp-client` 条目),Skill 在技能根下建软链。
|
|
203
|
+
若更高优先级规则覆盖了所选档位,界面会提示「分类未生效」。
|
|
207
204
|
|
|
208
|
-
### 按需能力目录(`catalogFile
|
|
205
|
+
### 按需能力目录(`catalogFile`)
|
|
209
206
|
|
|
210
|
-
|
|
207
|
+
插件会把按需 Tool 和 Skill 写入 `catalogFile` 指定的 YAML 文件,供模型检索。默认路径为 `~/.dsh/capability-catalog.yaml`,设为空字符串可关闭;没有按需能力时,模型不会收到目录提示。目录会在 Tool、Skill 或档位变化后自动更新。
|
|
211
208
|
|
|
212
|
-
|
|
213
|
-
- 技能必须**已注册进 `ctx.skills`**(SKILL.md 放用户/项目技能根或挂 `customSkillDirs`)才会自动出现;无独立手写输入清单。
|
|
214
|
-
- 模型用 `grep`/`read` 浏览该文件(或调 `meta_search`)拿到条目的 id 与 `kind`,再调 `meta_invoke(id, kind)` 执行/加载。技能 id 即裸名(`frontend-design`),tool/skill 由 `kind` 区分。
|
|
209
|
+
Skill 需要先注册到 `ctx.skills` 才会出现在目录中。模型可以用 `grep` / `read` 搜索目录,或调用 `meta_search` 查找条目,再通过 `meta_invoke` 使用对应能力。每个条目包含 `id` 和 `kind`,Skill 的 id 使用其名称。
|
|
215
210
|
|
|
216
211
|
```yaml
|
|
217
212
|
# ~/.dsh/capability-catalog.yaml(自动生成;仅含 On-demand 能力,
|
|
@@ -229,7 +224,7 @@ capabilities:
|
|
|
229
224
|
whenToUse: 处理旧工程时使用
|
|
230
225
|
```
|
|
231
226
|
|
|
232
|
-
|
|
227
|
+
如果模型侧的 `bash` / `read` 沙箱无法访问默认目录,请把 `catalogFile` 改到沙箱可见的位置。多个 DSH 实例默认共用该文件;需要隔离时,为每个实例设置不同路径。
|
|
233
228
|
|
|
234
229
|
## License
|
|
235
230
|
|
package/cordis.patch.yml
CHANGED
|
@@ -51,6 +51,13 @@
|
|
|
51
51
|
# Default (policy present but no config): every capability is Resident — the
|
|
52
52
|
# `classify` fallback, nothing is hidden. Add explicit `on-demand`/`disabled`
|
|
53
53
|
# rules to pull capabilities out of the model surface.
|
|
54
|
+
# The web surface disables the host skill filesystem provider by default, but
|
|
55
|
+
# this plugin's global Skill registration writes to its standard ~/.dsh/skills
|
|
56
|
+
# root. Re-enable the native provider so registered skills are indexed and
|
|
57
|
+
# available through ctx.skills; no upstream source or skill implementation is
|
|
58
|
+
# replaced.
|
|
59
|
+
- id: skill-filesystem
|
|
60
|
+
disabled: false
|
|
54
61
|
- insert:
|
|
55
62
|
- id: capability-menu-registry
|
|
56
63
|
name: '@daweifu/capability-menu/registry'
|