dsh-capability-panel 1.2.1 → 1.4.0
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 +136 -0
- package/README.i18n.yaml +6 -5
- package/README.ja.md +17 -18
- package/README.ko.md +17 -18
- package/README.md +78 -79
- package/icon.svg +19 -0
- package/lib/client.js +2396 -2000
- package/lib/client.js.map +1 -1
- package/lib/index.d.ts +151 -12
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7234 -198
- package/lib/index.js.map +1 -1
- package/package.json +18 -11
- package/README.zh.md +0 -137
package/README.en.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# dsh-capability-panel
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/dsh-capability-panel) [](https://github.com/pure-craft/dsh-capability-panel/actions/workflows/check.yml) [](LICENSE)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
English | [中文](README.md) | [日本語](README.ja.md) | [한국어](README.ko.md)
|
|
7
|
+
|
|
8
|
+
**One panel to manage MCP servers, skills, and tools for your DeepSeek Harness agent — see what it can actually reach right now, and switch any of them per session or per preset.**
|
|
9
|
+
|
|
10
|
+
A skills & MCP management panel: every skill, every MCP server, and every system tool carries its true in-context state, plus a switch that takes effect on the very next model step.
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## At a glance (agent quick reference)
|
|
17
|
+
|
|
18
|
+
| | |
|
|
19
|
+
|---|---|
|
|
20
|
+
| What | A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (`dsh`) web plugin: a skill and MCP management panel that lists the live session's skills, MCP servers, and system tools with their true in-context state, plus switches to toggle them |
|
|
21
|
+
| Use it to | answer "why doesn't the agent know this skill"; see whether a loaded skill survived pruning/compaction; turn a tool or MCP server off for one session only; set per-preset default capabilities; count blocked tool calls after a disable |
|
|
22
|
+
| Install | `dsh plugin --profile web add dsh-capability-panel` (then restart dsh) |
|
|
23
|
+
| Requires | dsh web profile, dsh ≥ 0.1.2-alpha.4 (older versions run with load states degraded; on 0.1.7+ opening a preset's folder is unavailable as the host API evolved); all `@deepseek-ai/*` peers provided by the host |
|
|
24
|
+
| Data | Settings section: on dsh 0.1.7+ in this plugin entry's own Config inside the active profile patch (addressed by entry id), on ≤ 0.1.6 in the `capability-panel` namespace of `$DSH_HOME/settings.yaml`; stats at `$DSH_HOME/capability-panel/stats.jsonl`; loopback API `/api/capability-panel` |
|
|
25
|
+
| Package | `dsh-capability-panel` on npm; bundle id `capability-panel` |
|
|
26
|
+
|
|
27
|
+
## Why
|
|
28
|
+
|
|
29
|
+
A skill being *installed* and a skill being *in the model's context right now* are two different facts — and only the second one answers "why doesn't my agent know this?" Between them sits context management: the tool-result pruner truncates long payloads, and compaction replaces whole spans of history with a summary. A skill you watched load five minutes ago may be partially or fully gone from the model's view, while its load record sits in the durable log forever, pretending otherwise.
|
|
30
|
+
|
|
31
|
+
And sometimes you simply want the model to stop reaching for one tool in one conversation — not uninstall a plugin, not edit a config file and restart. Just this session, from the next step on.
|
|
32
|
+
|
|
33
|
+
This plugin turns both into one panel at the right of the composer.
|
|
34
|
+
|
|
35
|
+
## Features: skill, MCP, and tool management
|
|
36
|
+
|
|
37
|
+
- **Ground-truth load states.** Every skill reports what the model actually sees on the next request: `loaded` (full instructions in context), `truncated` (the pruner kept head & tail, cut the middle), `evicted` (compaction took it entirely), or `not loaded` — plus a cumulative load count, so a skill reloaded after eviction reads `loaded ×2`.
|
|
38
|
+
- **Per-session switches that survive restarts.** Turn a skill, tool, or whole MCP server off for the current conversation. The switch applies from the next prompt assembly, stays bound to that session across a dsh restart, and never touches another session or the conversation history.
|
|
39
|
+
- **Preset defaults.** Settings → Capability Panel stores the default capability set per agent preset; sessions created or resumed afterward inherit it. All / Skills / MCP / Tools category switching, collapsible groups, and the same filter and switches as the session panel — a preset default is a starting point the session can still override.
|
|
40
|
+
- **MCP grouped by server.** Two hundred tools behind two servers stay scannable: collapse to one row per server, flip the whole server in one write.
|
|
41
|
+
- **Offline servers stay listed.** An MCP server declared in the host composition but currently registering no tools (a local on-demand service that isn't running) still gets a row — marked honestly as "no tools registered", showing the positions already stored off for it, with a **Reload** button that retries the connection now. Late-registered tools also pick up the session's stored defaults automatically.
|
|
42
|
+
- **Grouped by source.** Skills and MCP servers cluster under labeled divider rules: preset-bundled entries name the preset they came from; everything else shows its real directory (`~/.dsh/skills`, project-relative paths, middle-ellipsized when long) — "where did this skill come from" is answered at a glance.
|
|
43
|
+
- **One click to the source folder.** Hover a group divider and a folder icon appears; clicking it opens that source directory in the system file manager (macOS, Windows, and freedesktop Linux).
|
|
44
|
+
- **Blocked-attempt counts.** If the model still calls a capability after you turned it off, the panel counts it — the signal that the model is acting from memory and the switch needs a louder story.
|
|
45
|
+
- **One-click command fill.** A skill row's paper-plane button drops `/skill-name` into the composer, ready for your Enter.
|
|
46
|
+
- **Fast filtering.** Match on name, description, or the visible state pill ("truncated" / "已截断" both work), with matching descriptions auto-expanded.
|
|
47
|
+
|
|
48
|
+
## Production-grade by default
|
|
49
|
+
|
|
50
|
+
- **Thoroughly tested**: 580+ tests with typecheck, type-aware lint, and 100% coverage gates (statements/branches/functions/lines) enforced in CI on every push and PR.
|
|
51
|
+
- **Honest failures**: when any one read fails (skill registry, session view, settings store), the panel shows partial data plus an explicit degraded note — a read failure never masquerades as an empty list.
|
|
52
|
+
- **Race-free writes**: preset defaults and session switches share one serialized write queue, so two panels writing at once cannot clobber each other.
|
|
53
|
+
- **Never a drag on the host**: the agent-created listener is fully failure-isolated — no plugin error can stop your session from starting.
|
|
54
|
+
- **Local-first, zero network**: the data route accepts loopback callers only, and the plugin makes no outbound calls, sends no telemetry, and talks to no third-party service — settings and stats stay in the local `$DSH_HOME` (see "Where data lives").
|
|
55
|
+
- **Instant even on huge sessions**: on a 60k-event, tens-of-MB session log the panel still opens instantly — zero-copy surface reads, one read per open, no polling, no background work.
|
|
56
|
+
- **History-preserving switches**: a switch never rewrites conversation history — disabled capabilities stay intact in the log, and the "these are off" note is recomputed at every assembly. Every switch is a reversible decision, not irreversible surgery.
|
|
57
|
+
- **Sanctioned seams only**: every capability comes from dsh's official extension points (`tools.restrict`, `system-prompt/assemble`, the settings namespace, UI slots) — no monkey-patching, so host upgrades are far less likely to break it.
|
|
58
|
+
- **Theme comes free**: all colors are host design tokens, and the icons, switches, and segmented controls are the host's own components — light/dark and language switches follow the host automatically, no theme code to maintain.
|
|
59
|
+
- **i18n-friendly**: panel copy follows the host's UI language (中文/English), and the docs are kept section-aligned across four languages.
|
|
60
|
+
|
|
61
|
+
## Install
|
|
62
|
+
|
|
63
|
+
From the marketplace or straight from the repo:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
dsh plugin --profile web add dsh-capability-panel
|
|
67
|
+
# or
|
|
68
|
+
dsh plugin --profile web add github:pure-craft/dsh-capability-panel
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Restart dsh for the install to take effect.
|
|
72
|
+
|
|
73
|
+
Requires a DeepSeek Harness web profile (`dsh web`), dsh ≥ 0.1.2-alpha.4 (older versions run with load states degraded). One build serves everything up to the latest 0.1.7; only "open a preset's folder by name" is unavailable on 0.1.7+ (the newer roster no longer carries paths), everything else stays fully functional. All `@deepseek-ai/*` runtime pieces are provided by the host as peer dependencies — there is nothing else to install.
|
|
74
|
+
|
|
75
|
+
**Zero configuration** — the plugin has no settings of its own. After the restart you will find it in two places:
|
|
76
|
+
|
|
77
|
+
- the **panel icon** at the right of any conversation's composer — that opens the session panel
|
|
78
|
+
- **Settings → Capability Panel** — the per-preset default capabilities
|
|
79
|
+
|
|
80
|
+
`--profile web` is the profile your `dsh web` GUI already uses, so the command applies verbatim. You can also search "capability panel" in the marketplace UI for a one-click install. Uninstall with `dsh plugin --profile web remove dsh-capability-panel`; settings and stats stay in `$DSH_HOME` (see "Where data lives").
|
|
81
|
+
|
|
82
|
+
## Usage
|
|
83
|
+
|
|
84
|
+
Open any conversation and click the panel icon at the right of the composer; the panel opens upward.
|
|
85
|
+
|
|
86
|
+
- Three tabs across the top: **Skills N** / **MCP N** / **Tools N**, each with its live count
|
|
87
|
+
- The switch at the right of each row takes effect immediately — no refresh, no restart
|
|
88
|
+
- Click the row itself to expand its description
|
|
89
|
+
- The filter box at the top matches name, description, or state label, with an `X / Y` matched count
|
|
90
|
+
- Divider rules group each tab by source: a preset name for preset-bundled entries, otherwise the on-disk directory — hover a divider for the full path, click it to open that folder in the file manager
|
|
91
|
+
- A disabled row renders dimmed, and the model is told in its system prompt that you turned the capability off
|
|
92
|
+
- A pinned footer bar stays at the bottom: "Global settings" on the left jumps straight to Settings → Capability Panel, "Report an issue" on the right opens the issue tracker
|
|
93
|
+
|
|
94
|
+
`run_code` is the reserved Code Mode transport — the registry forbids masking it, so its switch is locked on.
|
|
95
|
+
|
|
96
|
+
Two scopes, same switches: **the composer panel** is bound to the session in front of you (and restored with it after a restart); **Settings → Capability Panel** decides what every later session starts from — the footer's "Global settings" entry jumps straight to that page. Preset defaults are read when a session agent is created — they do not rewrite preset files and do not change agents that are already running.
|
|
97
|
+
|
|
98
|
+

|
|
99
|
+
|
|
100
|
+
## How it works
|
|
101
|
+
|
|
102
|
+
**Lightweight by construction.** The plugin ships zero runtime dependencies — React, the UI primitives, and every `@deepseek-ai/*` piece are provided by the host — and its reads are zero-copy: load states come from the live session's in-memory surface (what the model will see next), never re-folded from the durable log, so opening the panel costs a scan of references, not a parse of history.
|
|
103
|
+
|
|
104
|
+
Switches are thin overlays on the next prompt assembly — a same-name shadow for skills, a registry mask for tools — plus a per-assembly note telling the model what you turned off. Session toggles persist under the session's own id in the plugin's settings namespace, so a restored session gets exactly its own switches back, and nothing ever writes to the conversation log.
|
|
105
|
+
|
|
106
|
+
## Where data lives
|
|
107
|
+
|
|
108
|
+
- Preset defaults and session-bound switch positions: on dsh 0.1.7+ in this plugin entry's own Config inside the active profile patch (`~/.dsh/profiles/<profile>/cordis.patch.yml`, addressed by entry id); on dsh ≤ 0.1.6 in the `capability-panel` namespace of `$DSH_HOME/settings.yaml`. Session switches live under `sessions.<sessionId>`, kept for up to 200 sessions, oldest evicted first. The harness never drops a section whose plugin is not loaded, so uninstalling keeps these until you delete the section.
|
|
109
|
+
- Blocked-attempt stats: `$DSH_HOME/capability-panel/stats.jsonl`, readable directly at `curl 'http://127.0.0.1:3080/api/capability-panel/stats'`.
|
|
110
|
+
|
|
111
|
+
The data route accepts loopback callers only, keyed on the connection's peer address.
|
|
112
|
+
|
|
113
|
+
## Development
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
pnpm install
|
|
117
|
+
pnpm dev # watch build
|
|
118
|
+
pnpm build # build both the host and client halves
|
|
119
|
+
pnpm test # run the tests
|
|
120
|
+
pnpm typecheck # typecheck
|
|
121
|
+
pnpm lint # oxlint, including its type-aware rules
|
|
122
|
+
pnpm check # typecheck + lint + test (100% coverage gates)
|
|
123
|
+
pnpm scan:dead-code # advisory dead-code report (never a gate)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
A change to the host half needs a dsh restart; the client half hot-swaps while `dsh web` and the watch build run together.
|
|
127
|
+
|
|
128
|
+
## Support
|
|
129
|
+
|
|
130
|
+
If this panel saved you a debugging session, a [star](https://github.com/pure-craft/dsh-capability-panel) helps others find it — and sharing it with someone else hacking on dsh helps too. Issues and PRs are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
131
|
+
|
|
132
|
+
Changes are tracked in [CHANGELOG.md](CHANGELOG.md).
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
[MIT](LICENSE)
|
package/README.i18n.yaml
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Multilingual consistency record: the git blob hash of each side as of the last
|
|
2
2
|
# confirmed-consistent state. All languages carry equal authority; after editing
|
|
3
3
|
# any side, bring the others along and re-record with:
|
|
4
|
-
# git hash-object README.md README.
|
|
5
|
-
README.md
|
|
6
|
-
README.
|
|
7
|
-
README.
|
|
8
|
-
README.
|
|
4
|
+
# git hash-object README.md README.en.md README.ja.md README.ko.md
|
|
5
|
+
# Primary README.md is Chinese; English lives in README.en.md.
|
|
6
|
+
README.md: 00bccc7ce56a4f6195d6cfb36c6a67f995dc5690
|
|
7
|
+
README.en.md: 4b1dacce5ce099bbdca588d1a44518db945d48de
|
|
8
|
+
README.ja.md: 11bfb8f34cebb3b240f62b42ca1598da9432f60f
|
|
9
|
+
README.ko.md: 6fa4305fecd4dce0e80ce551c5a85db92066b756
|
package/README.ja.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/dsh-capability-panel) [](https://github.com/pure-craft/dsh-capability-panel/actions/workflows/check.yml) [](LICENSE)
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
[English](README.md) | [中文](README.
|
|
6
|
+
[English](README.en.md) | [中文](README.md) | 日本語 | [한국어](README.ko.md)
|
|
7
7
|
|
|
8
|
-
**DeepSeek Harness
|
|
8
|
+
**MCP サーバー・スキル(Skills)・ツール(Tools)を一元管理するパネル:DeepSeek Harness エージェントが今まさに到達できるものを可視化し、セッション単位・プリセット単位で切り替える。**
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
スキル & MCP 管理パネル:すべてのスキル・MCP サーバー・システムツールについて、実際にコンテキスト内にあるかどうかの状態と、次のモデルステップから即座に効くスイッチを備えます。
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
|
|
18
18
|
| | |
|
|
19
19
|
|---|---|
|
|
20
|
-
| 概要 | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(`dsh`)の web
|
|
20
|
+
| 概要 | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(`dsh`)の web プラグイン。スキル & MCP 管理パネルとして、現在のセッションのスキル(skills)・MCP サーバー(MCP servers)・システムツール(tools)と、その真のコンテキスト内状態を一覧し、個別に切り替える |
|
|
21
21
|
| 用途 | 「なぜエージェントはこのスキルを知らないのか」の解明。ロード済みスキルがプルーニング/コンパクションを生き残ったかの確認。特定のツールや MCP サーバーをこのセッションだけで無効化。プリセットごとのデフォルト能力セットの設定。無効化後にブロックされた呼び出し回数の計測 |
|
|
22
22
|
| インストール | `dsh plugin --profile web add dsh-capability-panel`(その後 dsh を再起動) |
|
|
23
|
-
| 要件 | dsh web プロファイル、dsh ≥ 0.1.2-alpha.4(それ以前でも動作しますが、ロード状態は degraded
|
|
24
|
-
| データ | `$DSH_HOME/settings.yaml` の `capability-panel` 名前空間。統計は `$DSH_HOME/capability-panel/stats.jsonl`。loopback API `/api/capability-panel` |
|
|
23
|
+
| 要件 | dsh web プロファイル、dsh ≥ 0.1.2-alpha.4(それ以前でも動作しますが、ロード状態は degraded 表示。0.1.7 以降ではホスト API の変更に伴いプリセットフォルダを開く機能は利用不可)。`@deepseek-ai/*` の peer はすべてホストが提供 |
|
|
24
|
+
| データ | 設定セクション: dsh 0.1.7+ ではアクティブな profile パッチ内の本プラグインエントリ自身の Config(エントリ id でアドレス)、≤ 0.1.6 では `$DSH_HOME/settings.yaml` の `capability-panel` 名前空間。統計は `$DSH_HOME/capability-panel/stats.jsonl`。loopback API `/api/capability-panel` |
|
|
25
25
|
| パッケージ | npm の `dsh-capability-panel`。bundle id は `capability-panel` |
|
|
26
26
|
|
|
27
27
|
## なぜ
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
|
|
31
31
|
また、ある会話でモデルに特定のツールを使わせたくないだけ、ということもあります——プラグインをアンインストールするのではなく、設定ファイルを編集して再起動するのでもなく。ただこのセッションで、次のステップから。
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## 機能:スキル・MCP・ツール管理
|
|
34
34
|
|
|
35
35
|
- **正確なロード状態。** 各スキルは、モデルが次のリクエストで実際に見るものを報告します:`loaded`(完全な指示がコンテキスト内)/ `truncated`(プルーナーが首尾を残し中間を削除)/ `evicted`(コンパクションが完全に除去)/ `not loaded`。累計ロード回数付きで、除去後に再ロードされたスキルは `loaded ×2` と読めます。
|
|
36
36
|
- **再起動しても消えないセッション単位のスイッチ。** 現在の会話でスキル・ツール・MCP サーバーまるごとをオフに。次のプロンプト組み立てから適用され、dsh の再起動後もそのセッションに紐づいたまま復元されます。他のセッションや会話履歴には一切触れません。
|
|
37
|
-
- **プリセットのデフォルト。** 設定 → 能力パネル
|
|
37
|
+
- **プリセットのデフォルト。** 設定 → 能力パネル で、エージェントプリセットごとのデフォルト能力セットを保存。以後に作成・復元されるセッションがそれを継承します。全部 / スキル / MCP / ツールのカテゴリ切り替え、折りたたみ可能なグループ、セッションパネルと同じフィルタとスイッチを備え、プリセットのデフォルトはあくまで起点で、セッション内で上書きできます。
|
|
38
38
|
- **MCP をサーバーごとにグループ化。** 2 つのサーバーに 200 個のツールがあっても見通せます。サーバーごと 1 行に畳み、1 回の書き込みで全体を切り替え。
|
|
39
39
|
- **オフラインのサーバーも一覧に残る。** ホスト構成で宣言されているのに現在ツールを 1 つも登録していない MCP サーバー(起動していないローカルのオンデマンドサービスなど)も行が残ります——「登録ツールなし」と正直に表示し、保存済みのオフ項目を列挙し、今すぐ接続をやり直す「リロード」ボタン付き。セッション途中で登録されたツールにも保存済みのデフォルトが自動で適用されます。
|
|
40
40
|
- **ソースごとにグループ化。** スキルと MCP サーバーはラベル付きの区切り線の下にまとまります:プリセット同梱のエントリーは出自のプリセット名を表示し、それ以外は実際のディレクトリ(`~/.dsh/skills`、プロジェクト相対パス、長い場合は中間を省略)を表示——「このスキルはどこから来たのか」が一目でわかります。
|
|
@@ -42,20 +42,18 @@
|
|
|
42
42
|
- **ブロック回数。** オフにした後もモデルがその能力を呼び続けた場合、パネルがカウントします——モデルが記憶から行動しているシグナルです。
|
|
43
43
|
- **ワンクリックでコマンド入力。** スキル行の紙飛行機ボタンが `/skill-name` を入力欄に入れます。あなたの Enter を待つだけです。
|
|
44
44
|
- **高速フィルタ。** 名前・説明・状態ラベルで絞り込めます("truncated" や "已截断" でも可)。ヒットした説明は自動展開。
|
|
45
|
-
- **軽量。** ランタイム依存ゼロ、ゼロコピー読み取り、バックグラウンド処理なし——パネルは開いたときだけ読みます。
|
|
46
|
-
- **UI 言語に追従。** パネル文言はホストに合わせて中国語と英語を切り替えます。
|
|
47
45
|
|
|
48
46
|
## プロダクション品質
|
|
49
47
|
|
|
50
|
-
- **充実したテスト**:
|
|
48
|
+
- **充実したテスト**: 580+ のテスト。typecheck・型認識 lint・100% カバレッジゲート(ステートメント/分岐/関数/行)を CI で push と PR のたびに強制。
|
|
51
49
|
- **失敗をごまかさない**: いずれかの読み取り(スキルレジストリ、セッションビュー、設定ストア)が失敗しても、パネルは部分データと明確なデグレード通知を表示——読み取り失敗を空リストに見せかけません。
|
|
52
50
|
- **書き込み競合なし**: プリセットのデフォルトとセッションスイッチは 1 つの直列化書き込みキューを共有し、2 つのパネルが同時に書いても互いを上書きしません。
|
|
53
51
|
- **ホストの足を引っ張らない**: agent 作成リスナーは完全に失敗を隔離——プラグインのどんな例外もセッション開始を止めません。
|
|
54
|
-
- **ローカルファースト、ネットワーク不要**: データルートは loopback
|
|
52
|
+
- **ローカルファースト、ネットワーク不要**: データルートは loopback のみを受け付け、プラグインは外部呼び出し・テレメトリ・サードパーティサービスを一切使いません——設定と統計はすべてローカルの `$DSH_HOME` に留まります(「データの保存場所」参照)。
|
|
55
53
|
- **巨大なセッションでも瞬時に開く**: 6 万イベント・数十 MB のログを持つセッションでも、パネルは即座に開きます——ゼロコピーの surface 読み取り、開いたときの 1 回だけ、ポーリングもバックグラウンド処理もなし。
|
|
56
54
|
- **履歴を保全するスイッチ**: スイッチは会話履歴を決して書き換えません——無効化された能力はログにそのまま残り、「これらはオフ」のノートは組み立てごとに再計算されます。すべてのスイッチは元に戻せる決定であり、不可逆な手術ではありません。
|
|
57
55
|
- **公式の拡張ポイントのみ**: すべての能力は dsh の正式な接缝(`tools.restrict`、`system-prompt/assemble`、settings 名前空間、UI slots)から来ており、モンキーパッチはなし——ホストのアップグレードで壊れにくい構造です。
|
|
58
|
-
- **テーマはタダ**: 色はすべてホストの design token
|
|
56
|
+
- **テーマはタダ**: 色はすべてホストの design token、アイコン・スイッチ・セグメントコントロールはホストのコンポーネント——ライト/ダークや言語切り替えはホストに自動追従し、テーマコードの保守は不要です。
|
|
59
57
|
- **i18n フレンドリー**: パネル文言はホストの UI 言語(中国語/英語)に追従し、ドキュメントは 4 言語で章立てを揃えています。
|
|
60
58
|
|
|
61
59
|
## インストール
|
|
@@ -68,18 +66,18 @@ dsh plugin --profile web add github:pure-craft/dsh-capability-panel
|
|
|
68
66
|
|
|
69
67
|
インストール後は dsh の再起動が必要です。
|
|
70
68
|
|
|
71
|
-
DeepSeek Harness の web プロファイル(`dsh web`)、dsh ≥ 0.1.2-alpha.4 が必要です(
|
|
69
|
+
DeepSeek Harness の web プロファイル(`dsh web`)、dsh ≥ 0.1.2-alpha.4 が必要です(それ以前のバージョンでもロード状態は degraded 表示で動作します)。1 つのビルドで最新の 0.1.7 まで対応。新ロースターがパスを持たないため「プリセット名からフォルダを開く」機能のみ 0.1.7+ で利用不可で、他の機能は完全に維持されます。`@deepseek-ai/*` の peer はすべてホストが提供するため、他にインストールするものはありません。
|
|
72
70
|
|
|
73
71
|
**設定不要**——このプラグインに設定項目はありません。再起動後、2 か所に現れます:
|
|
74
72
|
|
|
75
|
-
-
|
|
73
|
+
- 会話の入力欄右側にある**パネルアイコン**——セッションパネルを開きます
|
|
76
74
|
- **設定 → 能力パネル**——プリセットごとのデフォルト能力
|
|
77
75
|
|
|
78
76
|
`--profile web` は `dsh web` GUI が使うプロファイルなので、そのまま実行できます。マーケットプレイスで "capability panel" を検索してワンクリックで入れることもできます。アンインストールは `dsh plugin --profile web remove dsh-capability-panel`。設定と統計は `$DSH_HOME` に残ります("データの保存場所"参照)。
|
|
79
77
|
|
|
80
78
|
## 使い方
|
|
81
79
|
|
|
82
|
-
|
|
80
|
+
会話を開き、入力欄右側のパネルアイコンをクリックすると、パネルが上に開きます。
|
|
83
81
|
|
|
84
82
|
- 上部の 3 つのタブ:**Skills N** / **MCP N** / **Tools N**
|
|
85
83
|
- 各行右側のスイッチは即時反映——リフレッシュも再起動も不要
|
|
@@ -87,10 +85,11 @@ DeepSeek Harness の web プロファイル(`dsh web`)、dsh ≥ 0.1.2-alpha.4
|
|
|
87
85
|
- 上部のフィルタは名前・説明・状態ラベルを検索
|
|
88
86
|
- 区切り線は各タブをソースごとにグループ化します:プリセット同梱のエントリーはプリセット名、それ以外はディスク上のディレクトリ——区切り線にホバーするとフルパスを表示し、クリックするとそのフォルダをファイルマネージャーで開きます
|
|
89
87
|
- オフにした行は淡色表示になり、モデルのシステムプロンプトにも「オフにした能力」が明示されます
|
|
88
|
+
- 下部の固定フッターバー:左の「全局配置」で設定 → 能力パネル ページへ直行、右の「フィードバック」で issue ページを開きます
|
|
90
89
|
|
|
91
90
|
`run_code` は予約された Code Mode トランスポートで、レジストリがマスクを禁止しているため、スイッチはオンのまま固定です。
|
|
92
91
|
|
|
93
|
-
2 つのスコープ、同じスイッチ:**入力欄のパネル**は目の前のセッションに紐づき(再起動後もそのセッションと共に復元)、**設定 →
|
|
92
|
+
2 つのスコープ、同じスイッチ:**入力欄のパネル**は目の前のセッションに紐づき(再起動後もそのセッションと共に復元)、**設定 → 能力パネル**は以後のすべてのセッションの起点を決めます——フッターの「全局配置」からそのページへ直行できます。
|
|
94
93
|
|
|
95
94
|

|
|
96
95
|
|
|
@@ -102,7 +101,7 @@ DeepSeek Harness の web プロファイル(`dsh web`)、dsh ≥ 0.1.2-alpha.4
|
|
|
102
101
|
|
|
103
102
|
## データの保存場所
|
|
104
103
|
|
|
105
|
-
-
|
|
104
|
+
- プリセットのデフォルトとセッション単位のスイッチ位置: dsh 0.1.7+ ではアクティブな profile パッチ(`~/.dsh/profiles/<profile>/cordis.patch.yml`、エントリ id でアドレス)内の本プラグインエントリ自身の Config。dsh ≤ 0.1.6 では `$DSH_HOME/settings.yaml` の `capability-panel` 名前空間。セッション単位のスイッチは `sessions.<sessionId>` 配下、最大 200 セッション、古いものから eviction。ハーネスはロードされていないプラグインのセクションを決して削除しないため、アンインストール後も残ります。
|
|
106
105
|
- ブロック統計:`$DSH_HOME/capability-panel/stats.jsonl`。`curl 'http://127.0.0.1:3080/api/capability-panel/stats'` で直接読めます。
|
|
107
106
|
|
|
108
107
|
データルートは loopback 呼び出しのみを受け付けます。
|
package/README.ko.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/dsh-capability-panel) [](https://github.com/pure-craft/dsh-capability-panel/actions/workflows/check.yml) [](LICENSE)
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
[English](README.md) | [中文](README.
|
|
6
|
+
[English](README.en.md) | [中文](README.md) | [日本語](README.ja.md) | 한국어
|
|
7
7
|
|
|
8
|
-
**DeepSeek Harness 에이전트가 지금 실제로 도달할 수 있는 것을 확인하고, 세션 단위 또는 프리셋 단위로 전환하세요.**
|
|
8
|
+
**MCP 서버·스킬(Skills)·도구(Tools)를 한곳에서 관리하는 패널: DeepSeek Harness 에이전트가 지금 실제로 도달할 수 있는 것을 확인하고, 세션 단위 또는 프리셋 단위로 전환하세요.**
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
스킬 & MCP 관리 패널: 모든 스킬, MCP 서버, 시스템 도구의 실제 인컨텍스트 상태와, 다음 모델 스텝부터 바로 적용되는 스위치를 제공합니다.
|
|
11
11
|
|
|
12
12
|

|
|
13
13
|
|
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
|
|
18
18
|
| | |
|
|
19
19
|
|---|---|
|
|
20
|
-
| 무엇 | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(`dsh`) 웹 플러그인: 현재 세션의
|
|
20
|
+
| 무엇 | [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(`dsh`) 웹 플러그인: 스킬 & MCP 관리 패널로, 현재 세션의 스킬(skills)·MCP 서버(MCP servers)·시스템 도구(tools)와 그 실제 인컨텍스트 상태를 나열하고 개별 전환 |
|
|
21
21
|
| 용도 | "왜 에이전트가 이 스킬을 모르지?" 해결. 로드된 스킬이 프루닝/컴팩션에서 살아남았는지 확인. 특정 도구나 MCP 서버를 이 세션에서만 끄기. 프리셋별 기본 capability 세트 설정. 비활성화 후 차단된 호출 횟수 계측 |
|
|
22
22
|
| 설치 | `dsh plugin --profile web add dsh-capability-panel`(설치 후 dsh 재시작) |
|
|
23
|
-
| 요구 사항 | dsh web 프로필, dsh ≥ 0.1.2-alpha.4(이전 버전에서도 실행되지만 로드 상태는 degraded 로
|
|
24
|
-
| 데이터 | `$DSH_HOME/settings.yaml`의 `capability-panel` 네임스페이스. 통계는 `$DSH_HOME/capability-panel/stats.jsonl`. loopback API `/api/capability-panel` |
|
|
23
|
+
| 요구 사항 | dsh web 프로필, dsh ≥ 0.1.2-alpha.4(이전 버전에서도 실행되지만 로드 상태는 degraded 로 표시. 0.1.7 이후에는 호스트 API 변경으로 프리셋 폴더 열기만 사용 불가). `@deepseek-ai/*` peer는 모두 호스트가 제공 |
|
|
24
|
+
| 데이터 | 설정 섹션: dsh 0.1.7+에서는 활성 profile 패치 내 이 플러그인 엔트리 자신의 Config(엔트리 id로 주소 지정), ≤ 0.1.6에서는 `$DSH_HOME/settings.yaml`의 `capability-panel` 네임스페이스. 통계는 `$DSH_HOME/capability-panel/stats.jsonl`. loopback API `/api/capability-panel` |
|
|
25
25
|
| 패키지 | npm의 `dsh-capability-panel`. bundle id는 `capability-panel` |
|
|
26
26
|
|
|
27
27
|
## 왜
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
|
|
31
31
|
또는 그저 이 대화에서 모델이 특정 도구를 사용하지 않았으면 할 때도 있습니다——플러그인을 제거하거나 설정 파일을 수정하고 재시작하는 것이 아니라, 그냥 이 세션에서, 다음 스텝부터요.
|
|
32
32
|
|
|
33
|
-
##
|
|
33
|
+
## 기능: 스킬 · MCP · 도구 관리
|
|
34
34
|
|
|
35
35
|
- **정확한 로드 상태.** 각 스킬은 다음 요청에서 모델이 실제로 보는 것을 보고합니다: `loaded`(전체 지시문이 컨텍스트에 있음) / `truncated`(프루너가 앞뒤를 남기고 중간을 잘라냄) / `evicted`(컴팩션이 완전히 제거) / `not loaded`. 누적 로드 횟수 포함——제거 후 다시 로드된 스킬은 `loaded ×2`로 읽힙니다.
|
|
36
36
|
- **재시작해도 유지되는 세션 단위 스위치.** 현재 대화에서 스킬·도구·MCP 서버 전체를 끕니다. 다음 프롬프트 조립부터 적용되며, dsh 재시작 후에도 해당 세션에 바인딩된 채 복원됩니다. 다른 세션이나 대화 히스토리는 건드리지 않습니다.
|
|
37
|
-
- **프리셋 기본값.** 설정 → capability 패널에서 에이전트 프리셋별 기본 capability 세트를 저장합니다. 이후 생성되거나 복원되는 세션이 이를 상속합니다. 프리셋 기본값은 시작점일
|
|
37
|
+
- **프리셋 기본값.** 설정 → capability 패널에서 에이전트 프리셋별 기본 capability 세트를 저장합니다. 이후 생성되거나 복원되는 세션이 이를 상속합니다. 전체 / 스킬 / MCP / 도구 카테고리 전환, 접을 수 있는 그룹, 세션 패널과 동일한 필터와 스위치를 갖추며, 프리셋 기본값은 시작점일 뿐 세션에서 언제든 재정의할 수 있습니다.
|
|
38
38
|
- **서버별 MCP 그룹화.** 두 서버에 200개의 도구가 있어도 한눈에 볼 수 있습니다. 서버당 한 행으로 접고, 한 번의 쓰기로 전체를 전환합니다.
|
|
39
39
|
- **오프라인 서버도 목록에 남습니다.** 호스트 구성에 선언되어 있지만 현재 도구를 하나도 등록하지 않은 MCP 서버(실행 중이지 않은 로컬 온디맨드 서비스 등)도 행이 유지됩니다——「등록된 도구 없음」으로 정직하게 표시하고, 이미 꺼둔 항목을 나열하며, 지금 즉시 연결을 다시 시도하는 **리로드** 버튼이 붙습니다. 세션 도중에 등록된 도구에도 저장된 기본값이 자동으로 적용됩니다.
|
|
40
40
|
- **출처별 그룹화.** 스킬과 MCP 서버가 라벨이 붙은 구분선 아래로 모입니다: 프리셋에 포함된 항목은 출처 프리셋 이름을 표시하고, 나머지는 실제 디렉터리(`~/.dsh/skills`, 프로젝트 상대 경로, 길면 중간 생략)를 표시합니다——"이 스킬은 어디서 왔지?"에 한눈에 답할 수 있습니다.
|
|
@@ -42,20 +42,18 @@
|
|
|
42
42
|
- **차단 횟수.** 끈 후에도 모델이 해당 capability를 계속 호출하면 패널이 카운트합니다——모델이 기억에서 행동하고 있다는 신호입니다.
|
|
43
43
|
- **원클릭 명령 입력.** 스킬 행의 종이비행기 버튼이 `/skill-name`을 입력창에 넣습니다. Enter만 누르면 됩니다.
|
|
44
44
|
- **빠른 필터링.** 이름, 설명 또는 상태 라벨로 검색("truncated" / "已截断" 모두 가능). 일치하는 설명은 자동으로 펼쳐집니다.
|
|
45
|
-
- **경량.** 런타임 의존성 제로, 제로카피 읽기, 백그라운드 작업 없음——패널은 열릴 때만 읽습니다.
|
|
46
|
-
- **UI 언어 추종.** 패널 문구는 호스트에 따라 중국어와 영어로 전환됩니다.
|
|
47
45
|
|
|
48
46
|
## 프로덕션 등급
|
|
49
47
|
|
|
50
|
-
- **철저한 테스트**:
|
|
48
|
+
- **철저한 테스트**: 580+ 테스트. typecheck, 타입 인식 lint, 100% 커버리지 게이트(문/분기/함수/행)를 CI에서 모든 push와 PR에 강제합니다.
|
|
51
49
|
- **정직한 실패**: 읽기(스킬 레지스트리, 세션 뷰, 설정 저장소) 중 하나라도 실패하면 패널은 부분 데이터와 명시적인 degraded 안내를 표시합니다——읽기 실패를 빈 목록으로 위장하지 않습니다.
|
|
52
50
|
- **쓰기 경합 없음**: 프리셋 기본값과 세션 스위치는 하나의 직렬화된 쓰기 큐를 공유하므로, 두 패널이 동시에 써도 서로를 덮어쓰지 않습니다.
|
|
53
51
|
- **호스트에 부담 없음**: agent 생성 리스너는 실패를 완전히 격리——플러그인의 어떤 예외도 세션 시작을 막지 못합니다.
|
|
54
|
-
- **로컬 퍼스트, 네트워크 제로**: 데이터 라우트는 loopback 호출만 허용하고, 플러그인은 외부 호출·텔레메트리·서드파티 서비스를 전혀 사용하지
|
|
52
|
+
- **로컬 퍼스트, 네트워크 제로**: 데이터 라우트는 loopback 호출만 허용하고, 플러그인은 외부 호출·텔레메트리·서드파티 서비스를 전혀 사용하지 않습니다——설정과 통계는 로컬 `$DSH_HOME`에만 남습니다("데이터 저장 위치" 참조).
|
|
55
53
|
- **거대한 세션에서도 즉시 열림**: 6만 이벤트, 수십 MB 로그의 세션에서도 패널은 바로 열립니다——제로카피 surface 읽기, 열릴 때 한 번만 읽고, 폴이나 백그라운드 작업 없음.
|
|
56
54
|
- **히스토리를 보존하는 스위치**: 스위치는 대화 히스토리를 절대 다시 쓰지 않습니다——비활성화된 capability는 로그에 그대로 남고, "이것들은 꺼짐" 노트는 조립할 때마다 재계산됩니다. 모든 스위치는 되돌릴 수 있는 결정이지, 돌이킬 수 없는 수술이 아닙니다.
|
|
57
55
|
- **공식 확장 포인트만 사용**: 모든 capability는 dsh의 공식 이음새(`tools.restrict`, `system-prompt/assemble`, settings 네임스페이스, UI slots)에서 옵니다——몽키 패칭이 없어 호스트 업그레이드에 훨씬 강합니다.
|
|
58
|
-
- **테마는 공짜**: 모든 색상은 호스트 design token이고
|
|
56
|
+
- **테마는 공짜**: 모든 색상은 호스트 design token이고 아이콘·스위치·세그먼트 컨트롤은 호스트 컴포넌트——라이트/다크와 언어 전환이 호스트를 자동으로 따르며, 유지할 테마 코드가 없습니다.
|
|
59
57
|
- **i18n 친화**: 패널 문구는 호스트 UI 언어(中文/English)를 따르고, 문서는 4개 언어로 섹션을 맞춰 유지합니다.
|
|
60
58
|
|
|
61
59
|
## 설치
|
|
@@ -68,18 +66,18 @@ dsh plugin --profile web add github:pure-craft/dsh-capability-panel
|
|
|
68
66
|
|
|
69
67
|
설치 후 dsh를 재시작해야 적용됩니다.
|
|
70
68
|
|
|
71
|
-
DeepSeek Harness의 web 프로필(`dsh web`), dsh ≥ 0.1.2-alpha.4가 필요합니다(로드 상태는
|
|
69
|
+
DeepSeek Harness의 web 프로필(`dsh web`), dsh ≥ 0.1.2-alpha.4가 필요합니다(이전 버전에서도 로드 상태는 degraded 표시로 실행됩니다). 하나의 빌드로 최신 0.1.7까지 지원합니다. 최신 로스터에 경로가 없어 "이름으로 프리셋 폴더 열기"만 사용할 수 없고, 나머지 기능은 그대로입니다. `@deepseek-ai/*` peer는 모두 호스트가 제공하므로 추가로 설치할 것은 없습니다.
|
|
72
70
|
|
|
73
71
|
**설정 불필요**——이 플러그인에는 설정 항목이 없습니다. 재시작 후 두 곳에서 찾을 수 있습니다:
|
|
74
72
|
|
|
75
|
-
- 대화 입력창 오른쪽의
|
|
73
|
+
- 대화 입력창 오른쪽의 **패널 아이콘**——세션 패널을 엽니다
|
|
76
74
|
- **설정 → capability 패널**——프리셋별 기본 capability
|
|
77
75
|
|
|
78
76
|
`--profile web`은 `dsh web` GUI가 사용하는 프로필이므로 명령을 그대로 실행하면 됩니다. 마켓플레이스에서 "capability panel"을 검색해 원클릭으로 설치할 수도 있습니다. 제거는 `dsh plugin --profile web remove dsh-capability-panel`. 설정과 통계는 `$DSH_HOME`에 남습니다("데이터 저장 위치" 참조).
|
|
79
77
|
|
|
80
78
|
## 사용법
|
|
81
79
|
|
|
82
|
-
대화를 열고 입력창 오른쪽의
|
|
80
|
+
대화를 열고 입력창 오른쪽의 패널 아이콘을 클릭하면 패널이 위로 열립니다.
|
|
83
81
|
|
|
84
82
|
- 상단의 세 탭: **Skills N** / **MCP N** / **Tools N**
|
|
85
83
|
- 각 행 오른쪽의 스위치는 즉시 적용——새로고침도 재시작도 불필요
|
|
@@ -87,10 +85,11 @@ DeepSeek Harness의 web 프로필(`dsh web`), dsh ≥ 0.1.2-alpha.4가 필요합
|
|
|
87
85
|
- 상단 필터는 이름, 설명, 상태 라벨을 검색
|
|
88
86
|
- 구분선은 각 탭을 출처별로 그룹화합니다: 프리셋 포함 항목은 프리셋 이름, 나머지는 디스크상의 디렉터리——구분선에 호버하면 전체 경로를 보여주고, 클릭하면 해당 폴더가 파일 관리자에서 열립니다
|
|
89
87
|
- 꺼진 행은 흐리게 표시되고, 모델의 시스템 프롬프트에도 "사용자가 끈 capability"가 명시됩니다
|
|
88
|
+
- 하단 고정 푸터 바: 왼쪽 "전역 설정"은 설정 → capability 패널 페이지로 바로 이동, 오른쪽 "피드백"은 issue 페이지를 엽니다
|
|
90
89
|
|
|
91
90
|
`run_code`는 예약된 Code Mode 트랜스포트로, 레지스트리가 마스킹을 금지하므로 스위치가 켜진 채로 고정됩니다.
|
|
92
91
|
|
|
93
|
-
두 스코프, 같은 스위치: **입력창의 패널**은 눈앞의 세션에 바인딩되고(재시작 후에도 함께 복원), **설정 → capability 패널**은 이후 모든 세션의 시작점을
|
|
92
|
+
두 스코프, 같은 스위치: **입력창의 패널**은 눈앞의 세션에 바인딩되고(재시작 후에도 함께 복원), **설정 → capability 패널**은 이후 모든 세션의 시작점을 결정합니다——푸터의 "전역 설정"으로 그 페이지에 바로 갈 수 있습니다.
|
|
94
93
|
|
|
95
94
|

|
|
96
95
|
|
|
@@ -102,7 +101,7 @@ DeepSeek Harness의 web 프로필(`dsh web`), dsh ≥ 0.1.2-alpha.4가 필요합
|
|
|
102
101
|
|
|
103
102
|
## 데이터 저장 위치
|
|
104
103
|
|
|
105
|
-
- 프리셋 기본값과 세션 바인딩 스위치 위치: `$DSH_HOME/settings.yaml`의 `capability-panel`
|
|
104
|
+
- 프리셋 기본값과 세션 바인딩 스위치 위치: dsh 0.1.7+에서는 활성 profile 패치(`~/.dsh/profiles/<profile>/cordis.patch.yml`, 엔트리 id로 주소 지정) 내 이 플러그인 엔트리 자신의 Config. dsh ≤ 0.1.6에서는 `$DSH_HOME/settings.yaml`의 `capability-panel` 네임스페이스. 세션 스위치는 `sessions.<sessionId>` 아래, 최대 200개 세션, 오래된 것부터 eviction. 하니스는 로드되지 않은 플러그인의 섹션을 절대 삭제하지 않으므로, 제거 후에도 직접 지우기 전까지 유지됩니다.
|
|
106
105
|
- 차단 통계: `$DSH_HOME/capability-panel/stats.jsonl`. `curl 'http://127.0.0.1:3080/api/capability-panel/stats'`로 직접 읽을 수 있습니다.
|
|
107
106
|
|
|
108
107
|
데이터 라우트는 loopback 호출만 허용합니다.
|