Back to home

TerricSH

dsh-app-launcher

No description

Stars
0
Language
JavaScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

@terricsh/dsh-app-launcher

Workspace launcher for the DeepSeek Harness Web GUI.

Adds a split control to the session header's right-aligned utilities row (beside session export):

  • 主按钮「打开」:以文件夹形式打开当前工作区(资源管理器)。
  • 右侧「▾」下拉:切换用其他工具打开工作区,如 VS Code(code)、 opencode、Cursor——仅显示本机实际安装的工具;也可在「管理工具…」中 自行添加/删除(名称 + 命令,支持可执行文件名或完整路径)。
  • 菜单与按钮显示 Windows 系统图标(文件夹图标取自 shell32.dll; 工具图标从其真实 exe 提取)。

Installation

Add the plugin row to the host patch layer (e.g. $DSH_HOME/profiles/<profile>/cordis.patch.yml):

- insert:
    - id: app-launcher
      name: '@terricsh/dsh-app-launcher'

Install the package where the profile can resolve it (the profile's node_modules, e.g. via a junction to a local checkout), then restart the dsh web server.

How it works

  • Host half (lib/index.js) registers three HTTP routes:
    • POST /dsh-launcher/launch{ kind: 'folder', path } opens the folder in Explorer; { kind: 'tool', command, path } resolves the real .exe (skipping .cmd/.bat shims so no extra console window appears) and starts it with Start-Process <exe> "<path>" (falling back to the raw command for terminal tools such as opencode).
    • POST /dsh-launcher/check — probes where.exe for a command.
    • POST /dsh-launcher/icon — extracts the folder icon from shell32.dll or a tool's associated icon and returns it as a PNG data URL (cached).
  • Client half (lib/client.js) renders the split launcher into conversation.session.header.utilities, derives the current workspace from the session/workspace snapshots, and calls the routes with fetch.

Launching is an explicit desktop action, so the host executes it with the danger-full-access sandbox policy (the deployment default workspace-write has no usable Windows ACL runner on this host).

Windows only. Requires the shell and sandboxPolicy services (shipped with the default web profile).

License

MIT