# dsh-skill-panel

[English](README.md) | [中文](README.zh.md) | 日本語

[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) のプラグインです。
サイドバーにスキルボタンを追加します。クリックすると、現在のセッションで読み込まれて
いるスキルの一覧が開きます。行にカーソルを合わせるとボタンが現れ、そのスキルの
ディスク上のフォルダを開けます。

## 対応バージョン

**DSH 0.2.0-rc.2**（web プロファイル）で動作確認済みです。0.1.5-rc.1 と 0.1.2-rc.1 でも動作します。
これらが `package.json` の `dsh.engines.dsh` が宣言している範囲で、ホストや
プラグインマネージャーはこの文書を読まずに同じ情報を得られます。

`@deepseek-ai/*` の `peerDependencies` は**意図的に宣言していません**。プレリリース範囲を
書くと新しい DSH が除外され、ホストの互換ゲートがこのプラグインを読み飛ばします。

使用しているのは公開されたプラグイン API のみです — `sidebar.footer.action` スロット、
`remote.skills.list`、`session.openWorkspacePath`。DSH 本体には手を入れていないため、
アンインストールしても何も残りません。

フォルダボタンはホストが提示するパスを使います。DSH 0.2.0 以降は `SkillEntry.path`
（`SKILL.md` の絶対パス）から親フォルダを求め、旧コアでは省略可能な `directoryPath`
があればそれを使います。URL や不透明リソースのスキルにはフォルダがないため、
ボタンは表示されません。

## インストール

1. プラグインを追加します — npm から（スコープ付きです。スコープなしの
   `dsh-skill-panel` は npm 上で別の作者のものです）：

   ```sh
   dsh plugin --profile web add @lywusichen/dsh-skill-panel
   ```

   または GitHub から直接：

   ```sh
   dsh plugin --profile web add github:lywusichen/dsh-skill-panel
   ```

2. DSH を再起動します。

3. 左サイドバー最下部（設定ボタンの隣）にスキルアイコンが現れます。クリックで開きます。

## できること

- **現在のセッション**のスキルを一覧表示します（名前・ルーティング説明・該当時は
  `user-only` バッジ）。一覧はセッションごとに取得し、コンポーザーの `/` スキル
  メニューと同じキャッシュを共有します。
- スキル行のボタンから、そのスキルのローカルディレクトリを既定のファイル
  マネージャーで開きます。
- ディスク上のスキルが変わると、開いているモーダルが自動で追従します。新しい DSH は
  `skills/change` を発行するため即時反映、古いコアでは 30 秒ポーリングになります。
- UI 文言は Web UI の言語（簡体字中国語 / English / 日本語）に追従します。

## スクリーンショット

![サイドバー下部のスキルボタン](assets/skill-trigger.png)

![読み込み済みスキルのモーダル](assets/skill-dialog.png)

![ローカルフォルダを開く](assets/open-folder.png)

## フォルダパスの出どころ

ホストパッチは不要です。モーダルは `remote.skills.list` でスキルを一覧し、
`session.openWorkspacePath` でフォルダを開きます。フォルダボタンはホストが提示する
パスから組み立てます：

- **DSH 0.2.0 以降**は `SkillEntry.path`（`SKILL.md` の絶対パス）を提示し、
  プラグインはその親ディレクトリを使います。
- **旧コア**では省略可能な `directoryPath` 拡張（`skill.resourceBase.path` を投影）が
  ある場合にそれを使います。

URL や不透明リソースのスキルにはどちらの場合もフォルダがないため、エラーにはならず
ボタンが表示されないだけです。

## ビルド

```sh
npm install        # esbuild のみ
npm run build      # src/client.jsx -> lib/client.js をバンドル
```

クライアント成果物は単一の CJS ファイルです。`@deepseek-ai/*` と react 系は、
DSH シェルがプラットフォーム静的モジュールとして提供するため外部参照のままです。
**`lib/client.js` は必ずコミットしてください** — git 経由のインストールは
ビルド済み成果物をそのまま使い、ビルドは実行しません。

## ライセンス

[MIT](LICENSE)
