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
Mobile-first overlay for the DeepSeek Harness web UI (dsh web).
The built-in web surface is a three-column desktop shell: a sidebar rail, a conversation center column, and a details track. On a phone the rail and the empty details track still consume width, squeezing the chat into a narrow slit. This plugin turns the same composition into a mobile surface without forking any of the built-in UI.
At viewports < 1024px (matching the layout plugin's own "narrow" breakpoint):
min(680px, 100%) dialog with a two-pane Miller column (each pane
min-width 256px), so on a phone the panes overflow and the footer wraps
to two rows. At the narrow breakpoint the dialog goes full-bleed, the
panes become full-width scroll-snap pages (the picker already
auto-scrolls to the newly opened child pane; swipe back to the parent),
and the footer becomes a single non-wrapping row that scrolls
horizontally when tight. The create-folder subdialog stays a centered
card.touch-action: manipulation (no double-tap zoom delay), no
tap-highlight flash, and a bottom-safe-area composer.Desktop (≥ 1024px) is untouched: the plugin contributes nothing there.
A bundle plugin — the same pattern as @deepseek-ai/dsh-escalation-tolerance:
cordis.patch.yml inserts one loader entry (dsh-mobile) into the web
composition after @deepseek-ai/dsh-web-app.package.json declares dsh.client (platform: "web"), so
@deepseek-ai/dsh-client-modules serves lib/client.js as a browser
bundle and the web shell boots it as a client-side cordis entry.lib/client.js injects a stylesheet (CSS overrides keyed off the frame's
data-shell-overlay marker, so it survives the hashed class names) and
registers three slot contributions:conversation.session.header.actions — the hamburger,shell.overlay — the drawer/details backdrop + the hero floating menu,ctx.slots.hostFace().storeOf(rootEntry, "root")), so the drawer
always mirrors the shell's own narrowExpanded / details state; opening
and closing goes through ctx.layout.toggleSidebar() /
ctx.layout.closeDetails().The plugin lives at $DSH_HOME/plugins/dsh-mobile and is wired into the
web profile:
# from the web profile directory
cd "$DSH_HOME/profiles/web"
pnpm install # links @deepseek-ai/dsh-mobile (already in package.json)
If you prefer a separate surface, add "@deepseek-ai/dsh-mobile" to the
dsh.profile.bundles list of any other profile (for example a new
mobile profile) — the bundle's patch layer applies the same way.
@media (max-width: 1023px)); desktop
behavior is untouched.[data-shell-overlay] child
(an attribute the built-in layout plugin renders) so they survive the
hashed CSS module class names of the built-in UI. If the layout plugin
changes that marker, the selectors need a refresh.pnpm run dev:web in the dsh checkout provides HMR
for the in-box client packages).CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。