fenxin-fx/dsh-default-workspace-plugin
项目介绍Project Overview
dsh-default-workspace 是 DeepSeek Harness 插件,解决新配置无工作区时无法开启会话的卡顿问题。核心能力:启动时自动创建并注册默认工作区,并在新建会话选择器中增加"不在工作区中对话"入口,跳过工作区绑定。适用于新部署、演示或临时试用。注意事项:首次安装需重启 Web 端才会激活服务端逻辑,且默认工作区路径可通过配置或 DSH_DEFAULT_WORKSPACE 环境变量覆盖。
dsh-default-workspace is a DeepSeek Harness plugin that fixes the dead-end where new profiles cannot start a conversation without a workspace. It auto-provisions a default workspace at boot and adds a "Chat without a workspace" entry to the new-session picker, letting users start an ungrouped session that defaults to process.cwd(). Use it on fresh deployments or for ungrouped chats. Caveat: a web restart is required after first install to activate the node half, and the default path can be overridden via config or the DSH_DEFAULT_WORKSPACE environment variable.
请帮我了解并安装插件:【dsh-default-workspace-plugin】【https://github.com/fenxin-fx/dsh-default-workspace-plugin】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile web add "git+https://github.com/fenxin-fx/dsh-default-workspace.git#main"
把 fenxin-fx/dsh-default-workspace-plugin 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-default-workspace
A DeepSeek Harness plugin — start a new conversation without selecting a workspace.
Out of the box, DeepSeek Harness will not let a conversation start until a workspace directory has been selected. On a fresh profile the workspace registry is empty, so the web GUI lands on the workspace-picker hero and there is nothing to pick.
This plugin removes that dead-end in two ways, from one package:
- Node half — at boot it resolves a default workspace directory, creates it if missing, and registers it. The runtime's existing "recent workspace" fallback then connects it, so a brand-new profile opens straight into a conversation.
- Client half — it adds a "Chat without a workspace" (
不在工作区中对话) entry to the new-session workspace picker. Selecting it starts a session with no workspace: its working directory falls back to the host'sprocess.cwd()and the session shows up as Ungrouped in the sidebar.
What it does
| Behaviour | Detail |
|---|---|
| Auto-provision | Creates and registers a default workspace on first boot |
| No-workspace option | Adds a "Chat without a workspace" row to the workspace picker |
| Zero footprint | Auto-provision is a no-op when workspaces already exist (unless always: true) |
| Idempotent | Re-registering the same path reuses the existing record |
| Non-fatal | A failure is logged as a warning and never fails the boot |
| Zero dependencies | Imports only Node built-ins / browser APIs; no build step |
The default directory is <DSH_HOME>/workspaces/default (or ~/.dsh/workspaces/default when DSH_HOME is unset). It can be overridden per-deployment with a config row, or globally with the DSH_DEFAULT_WORKSPACE environment variable.
Install
Recommended — one line from the git source (no build runs on install, since the source is committed directly):
# HTTPS git source. The `github:` shorthand is rewritten to SSH by pnpm and
# fails on machines without SSH keys — use the explicit git+https form.
dsh plugin --profile web add "git+https://github.com/fenxin-fx/dsh-default-workspace.git#main"
Other options:
- From a local checkout:
git clone https://github.com/fenxin-fx/dsh-default-workspace.git cd dsh-default-workspace dsh plugin --profile web add .
First install needs a web restart for the node half to take effect; the client half arrives per-request, so later upgrades only need a browser refresh. The plugin can be enabled/disabled under Settings → Plugins (package id @dsh-external/dsh-default-workspace).
Configuration
Overrides live on the plugin's config row in the profile cordis.patch.yml (the cordis.patch.yml shipped by this package shows the full template). Precedence is config.path → DSH_DEFAULT_WORKSPACE → <DSH_HOME>/workspaces/default.
| Key | Type | Default | Meaning |
|---|---|---|---|
path |
string | <DSH_HOME>/workspaces/default |
Default workspace directory; ~ expands to the OS home, a relative path resolves against the process cwd |
title |
string | Default |
Display title for the workspace |
always |
boolean | false |
true always ensures the workspace, even when others already exist |
- insert:
- id: default-workspace
name: '@dsh-external/dsh-default-workspace'
config:
path: 'C:\my\scratch'
title: 'Scratch'
always: false
Or set the environment variable before launching:
DSH_DEFAULT_WORKSPACE="$HOME/projects/scratch" dsh web
Usage
Install, restart the web profile, and go — no commands, no tools. A brand-new profile opens directly into a conversation in the default workspace, and the workspace picker on a new session offers "Chat without a workspace" to start an ungrouped conversation instead.
Development
There is no build step: both halves ship as plain JavaScript.
src/index.mjs — the node half (ensure + register the default workspace)
src/client/index.js — the client half (the "Chat without a workspace" picker entry)
cordis.patch.yml — the bundle patch that mounts the node half
How it works
- The node half calls
ctx.workspaceRegistry.create(path, title)aftermkdir -p;createis idempotent and prepends only new records. - The client half injects the extra row into the picker menu at the DOM level (the picker exposes no official slot), cloning the "Add workspace" row for native styling and re-injecting via a
MutationObserveron re-render. - The no-workspace session is created with
ctx.sessions.create({})— noworkspaceId, so the host defaults the cwd toprocess.cwd()and skips workspace attachment.
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill