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 | 中文
A DeepSeek Harness (DSH) plugin switchboard for the web GUI.
Open Settings → Plugins → Plugin Switch. Every loaded plugin is a card with:
package.json description)cordis.yml)Core / surface plugins (webserver, connection, session, agent, …) are marked Core and cannot be stopped from this UI, so the page cannot take itself down.
dsh plugin --profile web add github:DamonKoy/dsh-plugin-toggle
Restart dsh web, then open Settings → Plugins → Plugin Switch.
Or add the repo as a profile dependency and include the bundle:
{
"dependencies": {
"dsh-plugin-toggle": "github:DamonKoy/dsh-plugin-toggle"
},
"dsh": {
"profile": {
"bundles": ["dsh-plugin-toggle"]
}
}
}
Then pnpm install in the profile directory and restart dsh web.
| Feature | Notes |
|---|---|
| Plugin cards | Title, entry id, description, enabled tag, phase |
| Categories | Grouped sections (core / UI / theme / tools / fun / other), collapsible |
| Sorting | Within a group: togglable plugins first, then by status (running first), then name |
| Fuzzy search | Tokens match as substring or subsequence across fields incl. category |
| Start / Stop | entry.update({ disabled }) — runtime only, no tree.write() |
| Core guard | Surface/runtime entries cannot be stopped (id- and module-name-based); others need a two-step confirm |
| Usage history | Every toggle is persisted to ~/.dsh/dsh-plugin-toggle.jsonl (last 1000), shown in a collapsible “使用记录” section |
| Persistence | Installed as a composition plugin — survives dsh web restarts |
| Method | Path | Role |
|---|---|---|
GET |
/plugin-toggle/list |
{ entries: [...] } |
GET |
/plugin-toggle/logs |
{ records: [...] } (recent usage history, newest first) |
POST |
/plugin-toggle/set |
{ entryId, enabled } → { ok, entry? \| message? } |
POST is same-origin only.
dsh-plugin-toggle/
lib/index.js Host: list + set routes over the Cordis Loader
client/client.js Client: Settings tab (ModuleLoader factory)
cordis.patch.yml Bundle insert (`id: plugin-toggle`)
The client exports.inject is the service name slots (not a package name). Using package names here parks the client fiber forever.
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。