Skip to content
dsh.fish
Bundle

dsh-cli-workspaces

dsh profile bundle: workspace-switching one-shot CLI mode — dsh --profile cli -w <workspace> -c <task>, plus `ws` management subcommands.

Source
qingkong143
stars
2 stars
License
MIT
Updated
Updated 10 days ago

Readme

# dsh-cli-workspaces

给 dsh 的 `cli` profile 用的一键命令行模式:预置若干工作区,用 `-w` 切换 agent 的
运行目录(环境上下文),`-c` 或位置参数给任务文本,最终回复打到 stdout、退出码
0=完成/1=出错。附带 `ws` 子命令管理工作区注册表。

这是 dsh 的 **bundle 包**:包内 `dsh.bundle.patch` 声明了补丁层,安装后会自动加入
profile 的 `dsh.profile.bundles` 层栈。

## 依赖(bundle 层要求)

profile 的 bundles 中**必须先于本包**包含:

- `@deepseek-ai/dsh-base` — 核心运行层
- `@deepseek-ai/dsh-headless` — 提供 headless-runner(真正的 agent 执行)

本包只替换 headless 层的启动器并补上工作区切换,不自己实现 agent 循环。

## 安装

```bash
# 1. 建 profile 并装上依赖层(自动加入 bundles)
dsh plugin --profile cli add @deepseek-ai/dsh-headless
# 2. 装本包(registry 包名,或 git+https://...,或本地路径 ./dsh-cli-workspaces)
dsh plugin --profile cli add dsh-cli-workspaces
```

首次运行会把示例工作区表复制到 profile 目录,之后用 `ws` 命令管理:

```bash
dsh --profile cli -w 2 -c "git status"        # 切到第 2 个工作区执行任务
dsh --profile cli -c "帮我检查这个文件夹"      # 当前目录执行(或 default 工作区)
dsh --profile cli ws list                     # 列出工作区
dsh --profile cli ws add blog ~/blog          # 新增
dsh --profile cli ws rm blog                  # 删除
dsh --profile cli ws default 2                # 设置默认工作区
dsh --profile cli ws --help                   # 全部管理命令
```

想省掉 `--profile`:`alias dsh='dsh --profile cli'`(launcher 要求 `--profile`,插件改不了)。

## 开发 / 发布

```bash
npm pack --dry-run      # 查看最终打进 tarball 的文件
npm publish             # 发布到 registry(或推 git 仓库,消费方用 git+https://... 安装)
```

## 结构

```
cordis.patch.yml          # bundle 补丁:禁用 headless-startup + 插入 cli-startup
lib/cli-startup.mjs       # 启动器插件(commander 解析 -w/-c;ws 子命令管理注册表)
example-workspaces.yml    # 首次使用时复制到 profile 目录的示例注册表
```

工作区数据文件(workspaces.yml)始终位于 **profile 目录**,由插件按 loader 的
`ctx.baseUrl` 定位;包目录只装代码与示例,不存用户数据。

Install

dsh plugin --profile web add github:qingkong143/dsh-cli-workspaces

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source