# dsh-code-ide [简体中文](README_zh-CN.md) | [English](README_en.md) | **日本語** | [Deutsch](README_de.md)

dsh-code-ide のデモ:DeepSeek Harness のセッションに、エクスプローラー、コードエディター、ターミナルを備えたブラウザ IDE ワークベンチを表示

`dsh-code-ide` は、[DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) に任意で利用できる IDE ワークベンチを追加するプラグインです。公式のホーム、チャット、セッション、設定、ツール UI は置き換えません。 > [!IMPORTANT] > `v0.1.0-alpha.0` は、ビルド済みプラグインを提供する GitHub **プレリリース**です。npm には公開していません。互換性の基準は引き続き DeepSeek Harness のソースコミット `47f9438`(マニフェスト上は `0.1.0-rc.5`)です。 > 安全確認付きの中国語インストール支援プロンプトは、[クイックインストール](README.md#快速安装推荐) を参照してください。以下の手順は検証可能な手動フォールバックです。 > **クイックインストール:** `dsh plugin --profile web add github:SakalioLabs/dsh-code-ide`。Harness のソース checkout では `dsh` の代わりに `pnpm dsh` を使います。このリポジトリにはソースと同期したビルド済みの `dist/` がコミットされており、インストール時に実行されるビルドスクリプトはありません。そのため GitHub からのインストール時にユーザー環境で再ビルドされず、`dsh-code-ide` 用の `allowBuilds` も不要です。 ## 概要 インストールすると、Harness の会話画面にネイティブな **IDE** タブが追加されます。既定表示は引き続きチャットです。IDE はタブを選択したときだけ生成され、そのセッションで IDE を表示している間だけ通常の入力欄が非表示になります。チャットへ戻ると入力欄も復元されます。 ワークベンチは同一オリジンの `/dsh-code-ide/` から配信され、IDE タブ内に埋め込まれます。対象ワークスペースは親セッションから受け取り、Harness のライト/ダークテーマと `en`/`zh` の言語変更に追従します。Harness クライアントを fork しない、追加型の統合です。 操作体系は VS Code のワークベンチを参考にしていますが、Code - OSS のビルドではなく、VS Code 拡張ホストも備えていません。 ## 主な機能 - 遅延読み込み式の Explorer、ファイルアイコン、展開状態の保持、キーボード操作、ワークスペース相対パスの検証。 - Windows x64 のローカル NTFS ワークスペースでは、作成、移動/名前変更、完全削除をすべてサポートします。実行時 `openat2` プローブに成功した Linux x64 Host と、実行時 `libSystem` プローブに成功した macOS x64/arm64 のローカル APFS ワークスペースでは、ファイル/フォルダーの作成のみをサポートします。 - CodeMirror 6 による 20 言語モード、複数タブ、最大 4 グループ、上/右方向への分割、タブのドラッグ/キーボード並べ替え、文書別 Undo、改行・インデント・折り返し設定。 - `.md`、`.markdown`、`.mdx` のソース/安全なプレビュー切り替え。プレビューには未保存の編集を含む現在のバッファーが反映されます。 - 一般的な画像(PNG、JPEG、GIF、WebP、AVIF)、音声(MP3、WAV、OGG、FLAC)、動画(MP4、WebM、MOV)の読み取り専用プレビュー。音声・動画はブラウザー標準コントロールと Range ストリーミングを使い、自動再生しません。 - バージョン確認付き保存、競合処理、削除済みファイルの再作成、ブラウザー内ホットイグジット復元、外部変更のポーリング。 - Quick Open、ワークスペース検索、正規表現・大文字小文字・単語・include/exclude、結果移動、プレビュー後に適用する置換。置換後のバッファーは自動保存されません。 - Command Palette と、競合検出付きの編集可能な 1~2 ストロークショートカット。 - ワークスペースを作業ディレクトリとする複数の xterm.js 端末。検索、消去、名前変更、再起動、中断、終了に対応。端末パネルを折りたたんでも表示が隠れるだけで、PTY はアンマウントも停止もされません。 - サイズ変更可能なペインと、760 CSS px 以下でのアクセシブルなコンパクト表示。 - 英語・簡体字中国語 UI。Harness の言語変更を再読み込みなしで反映。 - 診断用の単独 `/dsh-code-ide/` ルート。通常は Harness `/` の **IDE** タブから開きます。 ## 必要環境 - Node.js `^22.19.0` または `>=24.0.0`。 - Corepack と pnpm。本リポジトリは pnpm `10.17.0`、対象 Harness は現在 `11.7.0` を固定。 - DeepSeek Harness ソースコミット `47f9438`。 - WebSocket、`localStorage`、Web Locks を利用できる同一オリジンの最新ブラウザー。Web Locks がない場合、復元の書き込み所有権やショートカット編集は無効または読み取り専用になります。 - `@vscode/ripgrep@1.18.0` が提供する対象 OS 用バイナリ。 - Harness Host 側から提供される厳密な `node-pty@1.1.0` peer。欠落や別バージョンは互換性エラーです。別コピーを追加ビルドしないでください。 npm では現在 `@deepseek-ai/dsh@0.1.0-rc.6` が公開されていますが、本 alpha はこのリリースでエンドツーエンド検証されていません。したがって、本プロジェクトが保証するインストール基準ではありません。 ## GitHub からインストール(推奨) 1 つのインストールでは、`plugin add`、`plugin list`、`--dump-config`、`web` のすべてで同じ `DSH_HOME` を使用してください。明示的に設定する場合は、次のコマンドを実行する前に同じシェルで一度だけ export します。別の値を使うと、別の profile ストアが選ばれます。 Harness を準備します。 ~~~sh git clone https://github.com/deepseek-ai/deepseek-harness.git cd deepseek-harness git checkout 47f9438 corepack pnpm install --frozen-lockfile corepack pnpm build ~~~ Harness の checkout から現在の `main` ビルドを直接インストールします。 ~~~sh corepack pnpm dsh plugin --profile web add github:SakalioLabs/dsh-code-ide corepack pnpm dsh plugin --profile web list --depth 0 corepack pnpm dsh --profile web --dump-config corepack pnpm dsh web ~~~ コミット済みの `dist/` は CI で検証されます。このコマンドはプラグインをビルドせず、`allowBuilds` も不要ですが、移動する `main` ブランチを追従します。 固定版、監査可能なインストール、またはオフライン保管には、Release パッケージとチェックサムを先にダウンロードします。 ~~~sh curl -fLO https://github.com/SakalioLabs/dsh-code-ide/releases/download/v0.1.0-alpha.0/dsh-code-ide-0.1.0-alpha.0.tgz curl -fLO https://github.com/SakalioLabs/dsh-code-ide/releases/download/v0.1.0-alpha.0/dsh-code-ide-0.1.0-alpha.0.tgz.sha256 sha256sum -c dsh-code-ide-0.1.0-alpha.0.tgz.sha256 corepack pnpm dsh plugin --profile web add /absolute/path/to/dsh-code-ide-0.1.0-alpha.0.tgz ~~~ Windows PowerShell での検証: ~~~powershell $asset = "dsh-code-ide-0.1.0-alpha.0.tgz" Invoke-WebRequest "https://github.com/SakalioLabs/dsh-code-ide/releases/download/v0.1.0-alpha.0/$asset" -OutFile $asset Invoke-WebRequest "https://github.com/SakalioLabs/dsh-code-ide/releases/download/v0.1.0-alpha.0/$asset.sha256" -OutFile "$asset.sha256" $expected = (Get-Content "$asset.sha256").Split()[0].ToUpperInvariant() $actual = (Get-FileHash $asset -Algorithm SHA256).Hash if ($actual -ne $expected) { throw "SHA-256 mismatch" } ~~~ ## ローカルソースからインストール ~~~sh # dsh-code-ide 側 corepack pnpm install --frozen-lockfile corepack pnpm build # deepseek-harness@47f9438 側 corepack pnpm dsh plugin --profile web add /absolute/path/to/dsh-code-ide corepack pnpm dsh plugin --profile web list corepack pnpm dsh --profile web --dump-config corepack pnpm dsh web ~~~ これは開発用の手順であり、推奨する GitHub インストール経路ではありません。ローカル checkout なしでビルド済みの `main` をインストールするには、次を使います。 ~~~sh corepack pnpm dsh plugin --profile web add github:SakalioLabs/dsh-code-ide ~~~ リポジトリには CI 検証済みのビルド済み `dist/` が含まれ、インストール時に実行されるビルドスクリプトはないため、このコマンドに `allowBuilds` は不要です。再現性や検証が必要な場合は、上の固定 Release パッケージとチェックサムを使用してください。 ## 設定 パッケージの `dsh.bundle` パッチが次の 1 行を自動追加します。 ~~~yaml - insert: - id: dsh-code-ide name: dsh-code-ide config: maxFileBytes: 4194304 maxMediaBytes: 536870912 terminalShell: auto ~~~ `examples/dsh-code-ide.bundle.patch.yml` は参照用です。ユーザーパッチへ重ねてコピーすると行が重複します。変更後は `--dump-config` で IDE が 1 件だけであり、公式 Web エントリーが残っていることを確認してください。 | 項目 | 既定値 | 内容 | |---|---:|---| | `maxFileBytes` | 4 MiB | 編集可能な UTF-8 ファイルの読み書き上限。 | | `maxMediaBytes` | 512 MiB | 1 件の読み取り専用メディアプレビュー上限。設定可能で、ハード上限は 8 GiB。 | | `maxDirectoryEntries` | 5,000 | 1 回の一覧で返す直下項目数。 | | `terminalShell` | `auto` | Windows は `COMSPEC`、Unix は `SHELL` を使用。 | | `terminalArgs` | シェル既定 | シェルへ渡す明示的な引数配列。 | | `maxTerminalSessions` | 8 | Host 全体の接続中/接続待ち PTY 上限(最大 64)。 | | `maxConcurrentSearches` | 2 | 同時検索プロセス数。 | | `searchTimeoutMs` | 30,000 | 検索タイムアウト(ms)。 | その他の上限は [`src/host/plugin.ts`](src/host/plugin.ts) にあります。構造操作の設定値は admission と recovery のリソースを制限し、実際に利用できるかどうかはレビュー済み Host backend とファイルシステムによって決まります。ルートは `/dsh-code-ide` 固定です。 ## 使い方 1. `web` profile を起動し、`http://127.0.0.1:3080/` を開きます。 2. Harness ワークスペースに属するセッションを開くか作成します。 3. 会話ビューの **IDE** を選択します。 4. Explorer または Quick Open からテキスト、Markdown、対応メディアを開きます。Markdown はソース/プレビューを切り替えられ、プレビューには現在の未保存バッファーが反映されます。 5. **Search** で検索と置換プレビューを行い、変更したバッファーは別途保存します。 6. 端末ツールバーから端末を作成します。コマンドは現在のローカルユーザー権限で実行されます。 7. Harness の入力欄や会話 UI が必要なら Chat に戻ります。 セッションのワークスペースが読込中、利用不能、未関連付けの場合、別のワークスペースへ勝手に切り替えず状態を表示します。 `http://127.0.0.1:3080/dsh-code-ide/` を直接開くと、ワークスペース選択と Harness ペインを備えた単独モードになります。埋め込みモードでは親セッションがその情報を持つため表示しません。 ## 既定ショートカット | 操作 | Windows/Linux | macOS | |---|---|---| | Command Palette | `Ctrl+Shift+P` または `F1` | `Cmd+Shift+P` または `F1` | | Quick Open | `Ctrl+P` | `Cmd+P` | | 保存 | `Ctrl+S` | `Cmd+S` | | Explorer / Search | `Ctrl+Shift+E` / `Ctrl+Shift+F` | `Cmd+Shift+E` / `Cmd+Shift+F` | | 行へ移動 | `Ctrl+G` | `Cmd+G` | | ショートカット設定 | `Ctrl+K`、続けて `Ctrl+S` | `Cmd+K`、続けて `Cmd+S` | | 端末表示切替 | `Ctrl+Backtick` | `Cmd+Backtick` | | 行折り返し | `Alt+Z` | `Option+Z` | Explorer は矢印、Home/End、Enter、Space、`*`、文字入力検索に対応します。フォーカス中のエディタータブでは Left/Right、Home/End、Delete、`Alt+Shift+Left/Right` を使用できます。端末検索は Enter が次、Shift+Enter が前、Escape が閉じる操作です。 ## 制限とセキュリティ - 不安定な上流へ固定した初期段階のローカル開発ツールです。他コミットや移動ブランチ、別 RC は未サポートです。 - Windows x64 はローカル NTFS ワークスペースで強力なハンドル封じ込め(handle containment)を使用し、ファイル/フォルダー作成、移動/名前変更、完全削除をすべてサポートします。Linux x64 は実行時 `openat2` プローブに成功した場合のみファイル/フォルダー作成をサポートし、Linux ARM64 などのアーキテクチャでは固定シグネチャーの `openat2` shim が提供されるまで構造操作を fail-closed に保ちます。macOS x64/arm64 はローカル APFS ワークスペースで実行時 `libSystem` プローブに成功した場合のみ、ファイル/フォルダー作成をサポートします。Linux/macOS では移動、名前変更、削除は引き続き無効です。両者の trusted-local `dirfd` 階層が防御するのは、ブラウザー要求によるパストラバーサル、既存または競合するシンボリックリンク、マウント越境だけであり、同一 UID のローカルプロセスが能動的に行う rename/reparent には対抗しません。プローブ失敗時は fail-closed とし、コミット後の結果が不確定な場合は `recoveryRequired` または fail-closed になります。閲覧、編集、保存、検索、端末は引き続き利用できます。Windows の完全削除はごみ箱を使わないため、確定前に対象パスと recovery 状態を確認してください。 - プレビュー機能を追加しても VS Code 拡張との互換性はありません。拡張ホスト、Marketplace、LSP 補完、デバッガー、ソース管理 UI、任意のバイナリ編集、マルチルートには引き続き対応しません。 - IDE endpoint は loopback と同一オリジンを要求します。LAN や Internet へ公開しないでください。遠隔ユーザー認証、TLS、プロセス分離、quota、監査ログはありません。 - パス検証は traversal と確認済み symlink を拒否しますが、同一ユーザーの別プロセスに対する OS sandbox ではありません。 - 端末は現在ユーザーの権限を持ちます。機密らしい環境変数名は denylist で除去しますが、秘密情報を保証する sandbox ではありません。 - 未保存テキストとショートカット設定は同一オリジンの `localStorage` に平文で保存される場合があります。復元は有限かつ best-effort です。 - Markdown プレビューは raw HTML や MDX を実行しません。リンクは `http:`、`https:`、`mailto:` のみ許可し、HTTP(S) は opener と referrer の権限を渡さず新しいタブで開きます。相対画像は同一オリジンかつワークスペース制約付きのメディア endpoint だけから読み込みます。 - メディアは読み取り専用で、拡張子 allowlist と `maxMediaBytes` の制限を受けます。音声・動画はシーク用に単一 HTTP byte range を受け付け、自動再生しません。SVG は意図的に未対応です。 - 外部変更は polling であり native watcher ではありません。端末状態はハードリロード後に復元されません。 - アプリ UI は英語と簡体字中国語のみです。この日本語文書は日本語 UI を意味しません。 利用前に [`docs/security.md`](docs/security.md) と [`docs/compatibility.md`](docs/compatibility.md) を確認してください。 ## 開発とテスト ~~~sh corepack pnpm install --frozen-lockfile corepack pnpm typecheck corepack pnpm test corepack pnpm build ~~~ `pnpm build:host`、`build:client`、`build:harness-client` で各ターゲットを個別ビルドできます。`pnpm dev` は Vite のみを起動し、Host API には統合環境が必要です。`dist/` を直接編集しないでください。 ## ライセンス 本プロジェクトは [MIT License](LICENSE)、Copyright © 2026 SakalioLabs です。同梱する Seti UI ファイルアイコンも MIT であり、帰属表示は [ThirdPartyNotices.txt](ThirdPartyNotices.txt) にあります。 ## 更新とアンインストール Harness を停止し、現在の `main` ビルドを再度追加します。検証済み Release を追従する場合は、代わりに新しい固定 Release URL を使います。 ~~~sh corepack pnpm dsh plugin --profile web remove dsh-code-ide corepack pnpm dsh plugin --profile web add github:SakalioLabs/dsh-code-ide corepack pnpm dsh plugin --profile web list --depth 0 corepack pnpm dsh --profile web --dump-config ~~~ 同じ `DSH_HOME` で `pnpm dsh web` を再起動し、ブラウザーを強制再読み込みしてください。アンインストール時も同じ `DSH_HOME` で `remove`、`plugin list`、`--dump-config` を実行します。ブラウザー内の復元・ショートカット情報は自動削除されません。 ## リリースノート `v0.1.0-alpha.0` は GitHub プレリリースです。リリース資産は `dsh-code-ide-0.1.0-alpha.0.tgz` と対応する SHA-256 ファイルであり、npm リリースではありません。Release ページ上の資産だけが公開パッケージです。過去の Actions 成果物やローカル `tmp/` 出力は開発記録であり、互換範囲は上記の Harness 固定コミットに限定されます。