Skip to content
dsh.fish
Bundle

@necokeine/dsh-git

Git status, commit, and push sidebar plugin for the DeepSeek Harness web interface

Source
necokeine
License
MIT
Updated
Updated 14 days ago

Readme

# dsh-git

Git status, commit, and push plugin for the [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) web interface. It adds a sidebar footer action for the current session's project directory, showing the branch, upstream, changed files, and line summary in a panel with **Commit**, **Commit & push**, and **Push** actions.

English | [中文](README.zh.md)

## Features

- **Session-aware status** — follows the project directory of the session currently open in the web interface.
- **Working-tree detail** — shows the branch, upstream, ahead/behind counts, changed files, insertions, and deletions returned by the plugin's read-only status route.
- **Commit and push** — asks the current session agent to commit with the supplied message, commit and push, or push existing local commits.
- **AI-authored commit message** — pressing **Commit** with a blank message asks the current session's agent to stage and commit the workspace with a concise generated message.
- **Safe refreshes** — keeps the last ready snapshot visible during refresh and discards an in-flight status read after the active project changes.

## Installation

> The plugin targets the DeepSeek Harness **web** interface (`dsh web`). Its Node half mounts a read-only status route and accepts only directories owned by live sessions; Git mutations follow the current session agent's normal tool and permission flow.

Install it into a profile with `dsh plugin`:

```bash
dsh plugin --profile web add @necokeine/dsh-git
```

Restart `dsh web` and refresh the page. The package declares a bundle patch that disables the built-in `ui-git` row and mounts this package under its own Loader entry id, so only one Git footer action runs.

Remove it with:

```bash
dsh plugin --profile web remove @necokeine/dsh-git
```

Other install forms also work:

- **Local checkout** — `dsh plugin --profile web add ./path/to/dsh-git` or `link:./path/to/dsh-git`.
- **Tarball** — run `pnpm pack`, then install the generated `.tgz`; the package contains prebuilt `lib/` artifacts.
- **Git** — `dsh plugin --profile web add github:necokeine/dsh-git#<sha>`; source installs must be allowed to run the package build under the profile's pnpm build policy.

## Development

```bash
pnpm install
pnpm test
pnpm typecheck
pnpm build
pnpm lint
pnpm pack
```

The Node entry mounts `/dsh-git/status`, validates its JSON request, and rejects any directory not owned by a live session before running read-only Git commands. The browser entry registers the `sidebar.footer.action` component and locale dictionaries, creates `GitController`, fetches status through that route, and delegates commit/push requests to the current session agent. Standalone browser tests use small local runtime and icon stubs because the published Harness runtime client is distributed as a browser-loader bundle. `tests/apply.harness.spec.ts` retains the real SlotRegistry/locale integration coverage for runs inside a Harness checkout and is excluded from the standalone Vitest config.

### Repository layout

```text
src/
  index.ts                   # live-session-scoped, read-only Git status route
  invariant.ts               # package invariant companion
  client/
    index.ts                 # browser registration and Git mutation delegation
    git-api.ts               # browser-facing plugin status transport
    git-controller.ts        # status and panel state
    GitAction.tsx            # footer trigger and panel
    git-action.module.css
    locales.ts               # Chinese and English dictionaries
tests/                       # controller, component, and registration specs
cordis.patch.yml             # disables the built-in ui-git row and mounts this package
tsdown.config.ts             # independent Node and browser bundle build
```

## Model Experience

The footer action contributes no prompt section or tool schema. Commit, commit-and-push, and push actions send a normal user message through the current session's prompt pipeline, where standard user-message logging records it.

## Known Limitations

- A session without a project directory shows no Git state.
- Commit and push are performed by the current session agent and follow that session's normal tool permissions and authentication environment.
- Binary and untracked files do not contribute to the line summary.
- A branch without an upstream has no ahead count, so the standalone **Push** action remains disabled until an upstream is configured.

## License

MIT

Install

dsh plugin --profile web add github:necokeine/dsh-git

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source