dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
English | 中文
Show the current workspace git branch right after the composer mode controls (access mode / plan) in the DeepSeek Harness (DSH) Web UI. It renders only when the workspace is inside a git repository, and it refreshes automatically when you switch branches in another tool.
The composer tool row is laid out as [+ commands] [access mode] [plan] ← branch chip. This plugin registers into the conversation.input.left slot — the additive seat immediately after the resident mode chrome — so the branch chip sits right next to the mode controls.
⎇ main⎇ detached @ a1b2c3dThe package is a DSH bundle (it ships its own cordis.patch.yml), so dsh plugin add both installs the dependency and activates it — no manual config:
# from npm
dsh plugin --profile web add dsh-git-branch
# or a local checkout (development)
dsh plugin --profile web add ./dsh-git-branch
Then restart the profile and refresh the page:
# restart dsh web, then reload the browser tab
How it works:
package.jsondeclaresdsh.bundle.patch = ./cordis.patch.yml, which- inserts onegit-branchplugin row.dsh plugin adddetectsdsh.bundleand adds the package todsh.profile.bundles; on the next boot that patch layer takes effect, the host loads the host half, and the client half is served to the browser automatically.
To change the command name, override the row (same id) in your own profile cordis.patch.yml:
- id: git-branch
name: dsh-git-branch
config:
commandName: git-branch # optional; default is git-branch
Unknown config keys fail at load.
See the top of src/client/index.tsx (or lib/client.js):
POLL_INTERVAL_MS = 60000: slow safety-net poll; <= 0 disables it.lib/index.js registers the /git-branch command; the handler walks up from session.header.cwd to the nearest .git (worktrees and submodules included), parses HEAD, and returns the result as JSON in the command's text field.lib/client.js registers the conversation.input.left chip, fetches the branch through ctx.remote.commands.execute, and registers a conversation.chat.commandview entry for git-branch that renders null, hiding the transport command from the transcript.Refresh triggers (see DESIGN.md): mount / session-or-workspace switch → immediate; window focus → immediate; visibilitychange → visible → immediate; chip click → immediate; 60s poll → fallback.
dsh-git-branch/
├── package.json # dsh.bundle + dsh.client + peerDependencies
├── cordis.patch.yml # bundle patch: inserts the git-branch plugin row
├── LICENSE
├── src/
│ ├── index.ts # host half (TypeScript source)
│ └── client/index.tsx # client half (TypeScript source)
├── lib/
│ ├── index.js # host half (prebuilt)
│ ├── index.d.ts
│ ├── client.js # client half (prebuilt, window.__ModuleLoader__ format)
│ └── client.d.ts
├── DESIGN.md # git-branch refresh-rules design
├── README.md # English (this file)
└── README.zh.md # 中文
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。