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 · 简体中文
Remembers the current session's command history in the DSH Web GUI: with the composer input focused, press ↑ / ↓ to step through previously sent commands, edit them, and press Enter to re-send.
/xxx slash commands) is recorded automatically, isolated per session. History is derived from the session log (user/command nodes), so it is rebuilt automatically after a page reload — no extra storage needed./ or @ trigger menu is open, during IME composition (e.g. Chinese input), when the composer is busy/locked, or when the input is not focused, ↑/↓ keep their native behavior and never interfere.The plugin is a standard DSH static plugin (see the develop/basic tutorial). The entry name must be the bare package name dsh-history, and the package directory must be resolvable from both resolution trees (the host loader resolves the bare name from the DSH installation's node_modules; the client-modules scanner resolves dsh-history/package.json upward from the profile directory), so two symlinks are required:
# 1) profile side (client-modules scanner): $DSH_HOME defaults to ~/.dsh
ln -s /absolute/path/to/dsh-history ~/.dsh/profiles/node_modules/dsh-history
# 2) install side (host loader bare-name resolution): point to the dsh installation's node_modules
ln -s /absolute/path/to/dsh-history /home/ender/.npm/_npx/1e7f6d9597241db0/node_modules/dsh-history
Then launch with the patch:
dsh web --patch /absolute/path/to/dsh-history/cordis.yml
Or merge the cordis.yml contents (the insert stanza) into $DSH_HOME/profiles/web/cordis.patch.yml to load it permanently.
dsh-history/
├── package.json # dsh.client declaration (platform: web) → scanned into __DSH_BOOT__ by client-modules
├── cordis.yml # patch: inserts the plugin entry into the loader
├── lib/
│ ├── index.js # host half: placeholder only (the loader needs a resolvable module)
│ └── client.js # browser bundle: history recording + ↑/↓ navigation + dock indicator
├── scripts/
│ └── smoke-test.mjs # Node smoke test (npm test)
├── README.md # this file (English)
└── README.zh-CN.md # 简体中文版
dsh.client: { platform: "web" } with exports["./client"] pointing at lib/client.js; dsh-client-modules then bundles that entry into window.__DSH_BOOT__ and serves it at /plugins/<entry>/client.js. The browser side registers the plugin through window.__ModuleLoader__.load({ id, factory }).conversation.input.dock slot subscribes to the session snapshot (useSession((s) => s.nodes)) and incrementally scans user/command nodes by seq (the list is seq-ascending and untruncated), collapsing adjacent duplicates, capped at 100 entries, stored in a module-level Map<sessionId, …>.keydown listener on document takes over ↑/↓ only when the focus is inside [data-composer-card], no trigger menu is open (claim is empty), not composing IME input, no modifier keys are held, and the composer is not busy — writing the draft via inputActions.setDraft(text). The editing check returns you to the live position automatically after you type./name args (from command nodes).good first issue tasks).CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。