# dsh-open-in-vscode

[中文](README.md) | English

A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh) Web plugin that bridges the browser GUI and VSCode.

[![Listed on dsh-plugin.org](https://dsh-plugin.org/badges/listed.svg)](https://dsh-plugin.org/plugins/zhili-wang/dsh-open-in-vscode)

## Features

### One-click workspace opening

The sidebar workspace row's `...` menu gains an **Open in VSCode** entry:

- If VSCode already has the project open, its window is focused;
- Otherwise a new window opens the project.

### Chat file navigation

File paths the agent prints open in VSCode on click:

- Works with inline file mentions in closing responses, produced-file chips, and tool-row open buttons;
- When the owning project isn't open yet, its window opens first, then the file is revealed;
- Supports `file:line:column` precision jumps;
- Falls back to the system default opener whenever VSCode is missing or the open fails — a click never dead-ends.

## Install

```bash
dsh plugin --profile web add @alex-dsh-plugin/open-in-vscode
```

Or install straight from GitHub:

```bash
dsh plugin --profile web add zhili-wang/dsh-open-in-vscode
```

Restart `dsh web` to load the plugin. The package ships its own bundle layer, so installing is enough — no manual profile editing.

To override defaults (e.g. pin the editor path), append to `~/.dsh/profiles/web/cordis.patch.yml`:

```yaml
- id: vscode
  config:
    command: /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code
```

## Editor resolution order

1. `config.command` (explicit override);
2. macOS: `/Applications/Visual Studio Code.app/.../bin/code` (including `~/Applications`);
3. `code` on PATH — shims belonging to other editors (e.g. Cursor) are skipped.

If none is found, every gesture falls back to the system default opener.

## Configuration

| Key | Default | Description |
|---|---|---|
| `command` | auto-detected | Absolute path of the VSCode `code` CLI |
| `rerouteOpenPath` | `true` | Reroute chat-surface file opens to VSCode |

## Known limitations

- The menu injection relies on the current sidebar DOM structure; an upstream redesign silently disables the menu entry (everything else keeps working).
- Clickable file references follow the stock vocabulary: files produced in the current turn (exact path or unique basename), plus tool-row open buttons.
- Two workspaces with identical titles are ambiguous — no menu entry is injected for them.
- Local deployments only (browser and host on the same machine).

## License

[MIT](LICENSE) © Alex
