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 | 中文
Which project, which branch, how much has moved — at a glance. This plugin puts the current conversation's project name and its git state in the conversation header of the DeepSeek Harness web GUI's Work window, just left of the Session log export button:
omdsh-plugins ⎇ main ↑1 +2 ~3 ?1 export
The project name is the title of the workspace the conversation lives in (the group heading you already read in the sidebar). Beside it: the checked-out branch, and whichever of ahead/behind, staged, modified, untracked, and conflicts are non-zero. A clean tree shows the branch alone; conflicts are the one count drawn in the alarm colour, because a row where every glyph shouts says nothing. The tooltip carries the full directory, every count in words, and why the figures are stale when a refresh failed.
| Surface | Where it comes from |
|---|---|
| The readout left of the Session log button in the conversation header | conversation.session.header.utilities, ui-conversation's trailing row — order: -1 keeps it left of the harness's default-order utilities |
GET /omdsh-status/status |
webServer, behind the same browser-trust fence as the /api gateway |
There is no settings namespace. Nothing here needs a person's decision — the project name is the workspace's own title, the git counts are the working directory's own state, and the poll cadence is fixed.
Each half reads from whoever already knows:
.git, so the host half
resolves the session's working directory and runs
git status --porcelain=v1 --branch --no-optional-locks, then answers with
the parsed counts as JSON. No path list, no diff, no branch graph ever
reaches the browser — only the handful of numbers it draws — and the route
sits behind the same trust check as /api.The poll is kept cheap: one directory's git answer is shared across every open page for two seconds, a visible page re-asks every four seconds, background tabs ask nothing, and cold sessions resolve their directory through the cached persistence listing.
dsh plugin --profile web add @omdsh-plugins/omdsh-status
Or from a checkout — the form an unpublished build needs:
pnpm install && pnpm run build
dsh plugin --profile web add "$PWD"
Remove it the same way:
dsh plugin --profile web remove @omdsh-plugins/omdsh-status
Nothing here is a precondition. Every service either half injects —
webServer, webRuntime, sessions on the host; slots, sessions,
workspaces, locale on the page — is a harness service, and the seat
registers through slots.inject. A profile with only this plugin installed
starts and works: without a git repository it shows the project name alone,
and without a conversation it shows nothing. Removing it takes the readout,
the route, and the poll with it — the harness itself is untouched.
pnpm install
pnpm run build # tsdown bundles the host and browser halves
pnpm run typecheck
pnpm run test
pnpm run harness:local <path-to-harness-checkout> # while developing against a checkout
pnpm run harness:npm # back to the registry pin before committing
pnpm run check:harness-pin # fails while any harness dep is still linked
The pure logic (porcelain parsing, project derivation, polling rules, route
behaviour) tests under plain node; the browser-side slot registration cannot
run against a published harness pin because published packages ship no
sources — that half is exercised under harness:local.
git status that outlives its timeout all
read as "not a git repository" — the tooltip does not distinguish them.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。