dsh-client-ui-git-branch
其他 活跃维护

dsh-client-ui-git-branch

dsh-mixxed/dsh-client-ui-git-branch

为开发者提供可视化的Git分支管理操作界面,支持分支创建、切换、合并等常用功能,无需记忆复杂Git命令,交互简洁直观,降低日常分支管理操作成本。

1
Stars 标星
0
Forks 分支
1
Watchers 关注
0
Open Issues
TypeScript
主要语言
NOASSERTION
开源协议
109 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:dsh-mixxed/dsh-client-ui-git-branch
git clone https://github.com/dsh-mixxed/dsh-client-ui-git-branch.git
git clone git@github.com:dsh-mixxed/dsh-client-ui-git-branch.git
README.md main

dsh-client-ui-git-branch

English | 中文

A dsh (DeepSeek Harness) out-of-tree plugin that adds a git branch selector to the chat
composer, immediately left of the model seat (conversation.input.right).

Install

  1. Install the plugin from npm (published as @dsh-mixxed/dsh-client-ui-git-branch):

    dsh plugin --profile web add @dsh-mixxed/dsh-client-ui-git-branch

    The package declares dsh.bundle (its bundled cordis.patch.yml), so dsh plugin add
    automatically appends it to the profile's dsh.profile.bundles layer stack and the plugin
    mounts on the next boot — no manual cordis.patch.yml editing.

    Upgrading an install that predates the bundle declaration: remove the legacy ui-git-branch
    row from $DSH_HOME/profiles/<name>/cordis.patch.yml — the bundle layer now supplies it, and
    leaving both would mount the id twice.

  2. Restart the profile (new plugins are discovered at boot) and refresh the browser page. In a
    session whose workspace is a git repository, the branch chip appears left of the model seat.

Building from source (development / offline)

pnpm install
pnpm run typecheck
pnpm test
pnpm run build
npm pack          # produces dsh-mixxed-dsh-client-ui-git-branch-<version>.tgz
dsh plugin --profile web add ./dsh-mixxed-dsh-client-ui-git-branch-<version>.tgz

Features

  • Composer seat left of the model selection, same chip/menu chrome as the model seat
  • Shows only when git is installed and the session workspace is a git repository
  • Fuzzy branch search (substring or in-order subsequence), with a clear button
  • List shows at most 5 rows; more branches scroll inside the list (no page-level scrolling)
  • Current branch marked in a distinct color (brand blue + check icon)
  • Upstream tracking facts (VSCode-style): every branch shows its remote short name
    (origin/main) with colored ahead/behind commit counts (↑2 amber / ↓3 green) and a red
    gone marker when the upstream ref was deleted; local-only branches show nothing. The trigger
    chip carries the same badge when the current branch is out of sync
  • Local / Remote groups — see Branch groups
  • New branch action: a dialog asks for the branch name, then creates the branch from HEAD and
    checks it out (git switch -c); invalid names are flagged live, collisions surface git's message
  • Branch switching with conflict detection: failures pop a transient toast carrying git's stderr
  • Full zh / en i18n and automatic multi-theme support through --dsw-* design tokens
  • Detached-HEAD safe (trigger falls back to HEAD); unborn-HEAD repos still list the current branch

Branch groups

The list is split under two sticky headings:

  • Local branches — every local branch. Tracked branches keep their upstream mapping
    (master → origin/master, with ahead/behind counts).
  • Remote branches — only branches that exist remotely but have no local counterpart
    (origin/HEAD symrefs and bare remote refs are excluded).

Behavior:

  • The fuzzy search spans both groups at once; a group with no matches collapses away.
  • Clicking a remote branch creates a local tracking branch and switches to it
    (git switch --track origin/feature → local feature tracking origin/feature); the branch
    then moves into the local group.
  • Clicking a local branch switches the work tree (git switch); a blocked switch —
    typically uncommitted changes that would be overwritten — pops a toast with git's own message.

Verify

dsh --profile <name> --dump-config | Select-String ui-git-branch

The composed config shows the ui-git-branch row, and
$DSH_HOME/profiles/<name>/package.json lists @dsh-mixxed/dsh-client-ui-git-branch under
dsh.profile.bundles (auto-appended by dsh plugin add).

After the restart, the composer shows the branch chip; opening it reveals the grouped list, the
search box, and the New branch action.

Development

pnpm run typecheck   # strict tsc over src + tests
pnpm test            # vitest: host logic (fake runner) + real-git integration + jsdom component tests
pnpm run build       # esbuild dual output → lib/index.js (node ESM) + lib/client.js (browser CJS closure)

Test profile used during development: git-branch-dev (independent of the user's web profile),
booted with dsh --profile git-branch-dev --port 3800.

License

MIT