@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):
- 主按钮「打开」:以文件夹形式打开当前工作区(资源管理器)。
- 「命令行」:在当前工作区目录打开一个 cmd 窗口(
cmd /k,窗口保持), 方便直接执行命令。 - 右侧「▾」下拉:切换用其他工具打开工作区,如 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: 'terminal', path }opens a persistentcmd /kwindow at the path;{ kind: 'tool', command, path }resolves the real.exe(skipping.cmd/.batshims so no extra console window appears) and starts it withStart-Process <exe> "<path>"(falling back to the raw command for terminal tools such as opencode).POST /dsh-launcher/check— probeswhere.exefor a command.POST /dsh-launcher/icon— extracts the folder icon fromshell32.dllor a tool's associated icon and returns it as a PNG data URL (cached).
- Client half (
lib/client.js) renders the split launcher intoconversation.session.header.utilities, derives the current workspace from the session/workspace snapshots, and calls the routes withfetch.
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
No comments yet. Be the first to write one.