packages/dsh-git-graph
zhu1090093659/dsh-web输入框上方提供 Git 分支选择器,并把分支泳道与提交历史画成图谱,沿着时间线找到任意变更。
DSH Web GUI 右侧边栏:VS Code 风格文件浏览器加源代码管理(git 状态、暂存/取消暂存/放弃变更、提交、差异、提交图形、抓取/拉取/推送同步、分支与远程管理、Git 初始化、多仓库切换、文件状态着色、文件类型图标),并提供打开会话/文件树/源代码管理里任一文件的编辑器视图(Markdown/HTML/PDF/图片预览、15 种语言语法高亮、逐块差异编辑、Ctrl+S 保存)、文件操作(新建/移动/复制/删除、在文件管理器中显示)、可折叠图标窄条、多标签底部终端(ConPTY),以及由宿主已配置模型基于暂存差异生成提交信息。
A drop-in replacement for the DSH Web GUI's right sidebar — VS Code-style file explorer, a multi-tab editor with in-place previews, and full source control.
English · 简体中文
sidebar's own file list or source control lands in this plugin's editor view: as long as this plugin can read a file, the shipped preview panel never takes it over.
with expand/collapse, VS Code-style file-type icons (TS/JS/Vue/JSON/image/ archive/script and 30+ more extensions), git status markers (M/A/D/R/?), names color-coded by status (green untracked / yellow modified / grey ignored), .gitignore-excluded files and folders shown grey, and directory "modified" indicators.
stage / unstage / discard (per-file or all), commit with a message, and a branch info bar. AI commit message: pick a host-configured model in Settings and tap the ✨-icon beside the commit box to generate a Conventional Commits draft from the staged diff (optionally guided by the repo's AGENTS.md). Diff view: full-file side-by-side compare with an editable right column (Enter splits lines, backspace/delete merges, NBSP placeholders), a middle gutter to stage (⤒) or revert (↩) individual hunks, Ctrl+S to save. Commit Graph: an SVG history view with branch lanes and merge lines; click a commit to expand its changed files (with file-type icons and status letters M/A/D/R) below the row, hover for a tooltip with the full message, stats, and a GitHub link; plus checkout. Sync: fetch / pull / push / sync (pull + push) with ahead/behind counts, each remote-write confirmed. Branches: switch / create / rename / delete / merge / publish. Remotes: add / remove / set URL. Git Init: initialize a repository from a plain directory. Merge changes: pull/merge conflicts (UU/AA/DD/…) are detected and listed for manual resolution. Multi-repo support: auto-discovers git repositories under the workspace and lets you switch between them; the SCM panel follows the selected repo. Split panes: drag the divider between changes and repository to resize, history fills the bottom. Bulk actions live in the section headers; discard all asks for confirmation.
(TS/JS/Python/JSON/Markdown/...) with a GitHub Dark theme; the editor re-highlights live while typing, lightweight.
open any text file, edit, and save (button or Ctrl+S). Images open in an in-editor preview with zoom/pan; .md/.markdown and .html open in rendered previews with a preview/source toggle; .pdf renders in place. Other binary files are detected and refused instead of corrupted.
(expand panel, explorer, search, source control, terminal). The source-control icon shows a live change-count badge; clicking an icon reopens the panel on that tab, matching the native sidebar's look.
(native ConPTY, PowerShell/cmd by default); multiple tabs, drag to resize, and auto cleanup of processes when a tab closes or the connection drops.
dialog), copy / cut / paste, copy relative / absolute path; drag files within the tree, drag files in from the OS, multi-select bulk actions.
File Explorer · Source Control · Diff · ·
[!WARNING]
This is a third-party community plugin. Installing it runs its code on your
machine with your own permissions. It can read, modify, and delete files and
run git operations (including destructive ones such as discard and delete)
inside your session workspace. Review the source before use and back up
important work first. You are responsible for what this plugin does with your
repositories.
Open the marketplace in the DSH Web UI, search for "solution-explorer", and click install.
dsh plugin --profile web add dsh-solution-explorerdsh plugin --profile web add /path/to/dsh-solution-explorerAfter installing, reload the Web UI. The explorer panel appears as its own right column once a session with a workspace is active.
>=0.1.0-rc.1 <0.3.0-0 (tested from 0.1.5-rc.1, including 0.2.0-rc.2).
current (the main-view Session is the one retained by mainView), and an older plugin hides the whole right column because of it (#2).
IconXxx16/IconXxx14 to IconXxxRegular/IconXxxMedium; the old names resolve to undefined, React throws #130, and the panel renders as an empty column (#3).
plugin older than the installed DSH is refused at install time rather than failing at runtime. After upgrading DSH, check this plugin's version in the settings page before assuming the panel broke.
The plugin accepts an optional config in the bundle row (cordis.patch.yml):
Field · Type · Default · Description defaultWidth · number · 280 · Panel width in px, clamped to 264–560. autoOpen · boolean · true · Auto-open the panel when a session activates. filterPatterns · string[] · [] · Name patterns to hide from the file tree. showHidden · boolean · false · Show dot-prefixed (hidden) files in the tree.
pnpm install
pnpm build # tsc declarations + tsdown bundles (lib/index.js, lib/client.js)
pnpm watch # rebuild on changeSee CONTRIBUTING.md for development conventions.
pnpm install also runs the prepare script, so a git-based install (dsh plugin add github:xiaoksio/dsh-solution-explorer) builds lib/ on the target machine without manual steps.
The plugin is a single npm package with two halves, both declared in package.json under the dsh key:
src/index.ts, exports . → lib/index.js): runs in thedsh host process and serves the workspace-gated filesystem and git API over HTTP routes under /solution-explorer/* (tree, read, write, delete, search, git-repos, git-status, git-diff, git-log, git-stage, git-unstage, git-discard, git-commit, paste, move, upload, create). All routes resolve paths strictly inside the session workspace root. It also announces itself in the system prompt so the agent knows what the panel can do.
src/client/index.ts, exports ./client →lib/client.js): loaded by the Web GUI's __ModuleLoader__ as a closure-factory bundle. It appends the explorer column to the frame grid ([data-dsh-frame]), follows the active session's cwd, and mounts the file editor into the conversation.view slot. A sidebarRightTabs registration claims every dsh-resource://file/** address, so a file opened anywhere in the GUI is handed to that editor view instead of the shipped preview panel.
MIT