DSH Web GUI 的 Profile 管理卡片:可视化查看、创建(base / web / headless 三种模板)、复制、重命名与删除 ~/.dsh/profiles 下的 profile,支持逐 profile 端口配置并复制带 --port 的启动命令。
安装
# npm 包(预构建)
dsh plugin --profile web add @hyzyn/dsh-profile
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:hyzyn/dsh-plugin-kit#path:/packages/profile
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
中文 | English
DSH 设置 → 插件 里的「Profile 管理」卡片:查看、创建、复制、重命名、删除 DSH profile,不用记命令。
特性
- 模板化创建,不手抄清单:三种模板一键创建(
@deepseek-ai/dsh-base仅核心,或再加dsh-web-app/dsh-headless);复制跳过node_modules与 lockfile 并自动pnpm install。 - 端口随 profile 落盘:为每个 profile 记录启动端口,复制出的启动命令自动带
--port,多个 web profile 不再撞端口。 - 重命名同步目录与 manifest:一次操作同时完成目录移动与
package.json改名;删除在面板内二次确认(不可撤销)。 - 状态与结构直读:初始化徽章、bundle 层、依赖数、目录路径;缺
cordis.patch.yml会提示。
Profile 是什么
每个 profile 是 $DSH_HOME/profiles(默认 ~/.dsh/profiles,可用环境变量 DSH_HOME 覆盖)下的独立目录,拥有自己的 bundle 层与补丁文件:
~/.dsh/profiles/<name>/
├── package.json # dsh.profile.bundles:本 profile 的 bundle 层阵容
├── cordis.patch.yml # 补丁层:bundle 层之后应用的 loader patch 列表
├── pnpm-workspace.yaml # profile 工作区(nodeLinker: hoisted)
└── profile.runtime.json # (可选)本插件的运行配置,如启动端口
结构
| 文件 | 说明 |
|---|---|
src/index.ts |
宿主半体:profile 目录读写、校验、创建 / 复制 / 重命名 / 删除、/api/dsh-profile/* 路由(loopback-only 围栏) |
client.js |
浏览器半体:注册 settings.plugin.item 卡片(React 外壳 + 纯 DOM 管理面板,window.__ModuleLoader__.load 格式) |
cordis.patch.yml |
bundle 补丁:把插件行插入 profile 阵容 |
路由(仅限 loopback + 同源):
GET /api/dsh-profile/list—— 列出全部 profile 及状态POST /api/dsh-profile/create—— 新建(name+ 可选template/port)POST /api/dsh-profile/duplicate—— 复制(name+from)POST /api/dsh-profile/rename—— 重命名(name+newName)POST /api/dsh-profile/port—— 设置端口(name+port,port留空清除)POST /api/dsh-profile/delete—— 删除(name)
安装
pnpm --filter @hyzyn/dsh-profile build
dsh plugin --profile web add link:$(pwd)/packages/profile
插件自身行由 cordis.patch.yml 的 insert: { id: profile-manager, name: '@hyzyn/dsh-profile' } 挂载;dsh plugin add 会同时把本包装进 profile 依赖并加入 dsh.profile.bundles 补丁层,只需挂载这一次,重启 dsh web 后生效。
配置
interface Config {
/** 关闭整个插件。默认 false。 */
enabled?: boolean
/** 是否向 agent 注入插件能力公告。默认 true。 */
announceToAgent?: boolean
}
界面预览
设置 → 插件 →「Profile 管理」卡片(配置界面):
设置面在宿主里的位置随 DSH 版本变,但始终是同一份表单:0.2.0-rc.1 起挂
plugins.bundle.config——插件详情页「说明」正下方内联,不必再点「>」进二级页;旧宿主
(0.1.6 线)自动回退到侧边栏「插件」页里该行的「>」子页,≤0.1.5 用设置页卡片。
用 headless 模板建好 profile 后,命令行可直接以该 profile 启动 headless 会话(一次性回答一个任务、打印结果后退出):
# 以 headless profile 启动:回答一个任务、打印结果后退出
dsh --profile headless "run the tests"
# dsh web 即 --profile web 的别名
说明
- 创建逻辑与
dsh-app-boot的initProfile对齐:生成package.json(dsh.profile.bundles)、空补丁文件cordis.patch.yml([])与pnpm-workspace.yaml - 名称只允许
[A-Za-z0-9][A-Za-z0-9._-]*,且不能是node_modules/./.. - 复制自动跳过
node_modules与pnpm-lock.yaml,不搬运安装产物,但会自动执行pnpm install重建依赖;profile.runtime.json会随目录一起复制。 ⚠️ 复制会把「机器级资源」一起带走,多 profile 同跑前要各自错开: webserver 端口(profile.runtime.json,复制后请到卡片改一个没被占的)、 终端面板的端口转发localPort(存在该 profilecordis.yml的 tty 设置里, 复制后建议先停用或改端口)。隧道撞端口是fatal(不重试),改配置后重建。 另外 tmux 持久会话的 socket 是所有 profile 共用的(-L dsh-tty),kill-server会跨 profile 生效。pnpm经@hyzyn/dsh-kit的spawnPortable启动——Windows 上 pnpm 只有pnpm.CMD,裸 spawn 既解析不到.cmd也会因 Node 的加固报EINVAL(真机实测过spawnSync pnpm ENOENT);装依赖失败会把复制出来的目录回滚,语义是「要么复制成功,要么什么都没发生」 - 端口配置保存在
profile.runtime.json,只影响本插件生成的启动命令,不会写入 DSH 官方package.json/cordis.patch.yml - 删除为递归删除、不可撤销,面板内会二次确认;内置的
web默认 profile 不允许删除,headless可以删除 - 新建的 profile 首次使用前需按需安装依赖:
dsh plugin --profile <name> add <包>(在 profile 目录内跑 pnpm) - 浏览器半体依赖核心
slots服务,只有dsh-web-app的官方设置面板才提供该插槽
链接
同类插件
yjh051108/dsh-routing-suite★ 7026
一个仓库三件套:DSH 插件包的运行时注入器(注入、热重载、卸载、开发侧挂区一键转正、路由自愈,外带设置页插件管理:列出、卸载、拖入文件夹内化)、任务感知的思维模式路由 agent 预设(router-standard / router-spec / router-react)、以及分级两级任务协议(commit_star / lock_stage / revise_do / edit_plan / mark_task / redteam_verdict 六个工具,任务状态落盘)。注入器实现直接在库内,安装的是它自己的行为而不是一份依赖清单。
strukto-ai/mirage#dsh★ 3686
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
hust-open-atom-club/oh-dsh★ 322
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
weijiafu14/pi2dsh★ 213
Pi Host ABI 兼容引擎:装一次之后,npm 上的 Pi 扩展原包经 `dsh plugin add <pi-package>` 直接作为 DSH 原生插件挂载。已在官方 DSH 上端到端验证 pi-mcp-adapter(完整 MCP 管理面:OAuth、resources、prompts、MCP Apps、elicitation、sampling)、@tintinweb/pi-subagents、pi-code、pi-hermes-memory、pi-background-tasks;`pi2dsh inspect` 在安装前报告一个包的兼容情况。
Fishquito7/dsh-skill-mcp-panel★ 197
在 DSH Web 设置中管理技能与 MCP 服务器:技能卡片热启停、工作区作用域、分组、批量迁移与拖拽导入,以及 stdio/HTTP MCP 增删改查、连接测试、密钥脱敏,并附带统一 dsh-panel 命令行。
lire1131/dsh-undo-savepoint★ 181
DSH 撤销/回退系统:配置变更自动存档,一键撤销/恢复/回退到任意版本,支持 WebUI 与离线 CLI/GUI 工具(DSH 启动失败也能救)。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。