Back to home@Wisdoverse

dsh-git-auth-plugin

GitHub, GitLab, and SSH authentication tools for DeepSeek Harness, with environment-only tokens, approval-aware writes, and safe SSH key handling.

Stars
0
Language
JavaScript
Created
Sep 4, 2026
Updated
Sep 4, 2026
GitHub repo

Introduction

dsh-git-auth

GitHub, GitLab, and SSH authentication tools for DeepSeek Harness

License Top language Token handling

English · 简体中文

Give DSH agents a small, approval-aware toolset for inspecting and managing gh, glab, and SSH credentials on the host.

Check authentication                 →  auth_status
Sign in with GH_TOKEN / GITLAB_TOKEN →  client_auth
Generate or inspect an SSH key       →  ssh_key

Contents

Features

FeatureDescription
Unified statusReports gh, glab, SSH-agent, and public-key status in one call.
Non-interactive loginAuthenticates gh or glab with a token supplied by the DSH host environment.
SSH key managementGenerates, lists, and displays Ed25519 keys directly under ~/.ssh.
Approval-aware writesRequests DSH approval before login, logout, key generation, or ssh-add.
Settings UIExposes hosts, timeout, key path, comment, and ssh-add defaults under Settings → Plugins.

[!IMPORTANT] Access tokens are not accepted as tool arguments. Put them in the DSH host environment so they do not enter the model context or tool-call log.

Tools

ToolPurposeWrites state
auth_statusShow GitHub CLI, GitLab CLI, SSH-agent, and public-key status.No
client_authLog gh or glab in or out.Yes; approval required
ssh_keyGenerate, list, or display an Ed25519 key.Generation and ssh-add require approval

Example requests:

Check my GitHub, GitLab, and SSH authentication status.
Use the configured GH_TOKEN to sign in to GitHub.
Generate ~/.ssh/id_ed25519 and add it to ssh-agent.
Show the public key for ~/.ssh/id_ed25519.

Installation

From source

  1. Clone the plugin into a path visible to the DSH host:

    git clone https://github.com/Wisdoverse/dsh-git-auth-plugin.git \
      /path/to/local-plugins/dsh-git-auth
    
  2. Add it to the target profile:

    dsh plugin --profile web add /path/to/local-plugins/dsh-git-auth
    
  3. Restart the profile.

The package declares its DSH bundle in package.json, and cordis.patch.yml mounts the tool plugin in the host's global tool layer.

Configuration

Open Settings → Plugins → Plugin configuration, or edit the git-auth section in the DSH settings document (normally $DSH_HOME/settings.yaml).

SettingDefaultAccepted value
ghHostgithub.comBare GitHub hostname, optionally with a port
glabHostgitlab.comBare GitLab hostname, optionally with a port
commandTimeoutMs60000Integer greater than or equal to 1
sshPathEmptyDirect child of ~/.ssh; empty means ~/.ssh/id_ed25519
sshCommentEmptyDefault comment passed to ssh-keygen
sshAddAgentfalseWhether generated keys are loaded with ssh-add by default
git-auth:
  glabHost: gitlab.example.com
  commandTimeoutMs: 60000
  sshPath: ~/.ssh/id_ed25519
  sshComment: developer@example.com
  sshAddAgent: true

Settings are resolved at tool-call time, so host-side settings-file updates do not require a plugin reinstall. DSH may restrict settings writes from remote browsers; edit the host settings file if the UI is read-only.

Token handling

The plugin configuration card includes write-only GitHub Token and GitLab Token fields. They store GH_TOKEN and GITLAB_TOKEN through the DSH credentials service; saved values are never returned to the browser, so the inputs stay blank and show only configured/source status.

The login tool resolves credential references in this order:

ClientPrecedence
ghGH_TOKENGITHUB_TOKEN
glabGITLAB_TOKENGLAB_TOKENGITLAB_ACCESS_TOKEN

Existing deployment environment variables remain supported. A live environment value is read-only and takes precedence over the DSH credential store. Do not paste tokens into chat or commit them to this repository.

An environment token can be sent only to that client's configured host. To use a different host, update ghHost or glabHost first, then restart DSH if the host process also needs a new environment token.

Security

This plugin manages host credentials, so its boundary is deliberately narrow:

  • Tokens are resolved per login through the DSH credentials service and passed to the CLI over stdin; they never appear in settings responses, tool arguments, or command strings.
  • Authentication hosts are validated as bare hostnames and encoded as single shell arguments.
  • SSH key paths must resolve to direct children of ~/.ssh; existing symlinks at the directory, private-key, or public-key path are rejected.
  • Read operations keep the calling session's sandbox policy.
  • Credential mutations request one-time DSH approval before running with the wider filesystem access required for host credential stores.
  • Generated keys use Ed25519 and an empty passphrase for non-interactive agent use. Protect the DSH host and its credential directory accordingly.

Development

Commands

CommandPurpose
node test/compose.test.jsRun dependency-free command, token, host, and path assertions.
node --check lib/index.jsSyntax-check the host plugin.
node --check lib/client.jsSyntax-check the settings client.

Project structure

PathResponsibility
lib/index.jsTool registration, approvals, settings, and shell execution.
lib/compose.jsPure host, token, shell-argument, and SSH-path helpers.
lib/client.jsBrowser-side settings card.
cordis.patch.ymlDSH bundle mounting.
test/compose.test.jsDependency-free regression checks.

The running Web profile loads the plugin at startup. Restart it after changing the source files.

License

Released under the MIT License.