dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DeepSeek Harness Antigravity UI & Experience Enhancement Companion Plugin
Non-invasive UI & UX Companion Enhancement Plugin for dsh-agy in DeepSeek Harness (DSH)
Model List Purification · Header Quota Badge · Glassmorphic Dual-Bucket Popover · Mobile Drawer Adaptation
🌐 Language / 语言: 简体中文 · English
In the DeepSeek Harness (DSH) ecosystem, dsh-agy serves as the lightning-fast, rock-solid provider directly talking to Google's internal API (POST /v1internal:streamGenerateContent) with native DSH Tool execution.
However, out-of-the-box it has several noticeable usability pain points:
| Dimension | Native dsh-agy Experience | Enhanced with dsh-agy-ui |
|---|---|---|
| Model Selection | Cluttered with internal ghost models (chat_23310, tab_flash_lite_preview) | 🧹 Auto Regex Purification, completely filters out non-chat models |
| Reasoning Efforts | Low / Medium / High efforts expanded into separate dropdown rows | 🎛️ Smart Variant Folding, seamlessly triggers DSH native reasoning picker |
| Tiered Model Names | Raw IDs displayed crudely (e.g. gemini-3.8-flash-tiered) | ✨ Standardized Brand Typography, shown cleanly as Gemini 3.8 Flash |
| Model Priority | Disordered sequence, hard to spot primary models quickly | 🏆 Strict Priority Ranking: 3.8 Flash > 3.7 > 3.6 > Pro > Claude > GPT-OSS |
| Quota Visibility | Quotas hidden away on separate /agy dashboard | ⚡ Persistent Header Badge, directly showing the tightest quota window (5-hour / weekly) |
| Quota Inspection | Must navigate away from current chat to check details | 🪟 Hover/Click Glassmorphic Popover, inspecting every 5-hour / daily / weekly / monthly window |
| Mobile UX | Desktop popovers overflow or get cut off on narrow screens | 📱 Responsive Drawer, automatically slides up an iOS/Android bottom sheet |
dsh-agy-ui is strictly architected as a pure companion enhancement plugin: network transport, request streaming, and tool execution remain 100% managed by dsh-agy.
dsh-agy-ui builds on Cordis microkernel plugin architecture. It dynamically wraps the LLM adapter in-memory and injects UI components into DSH Web slots:
┌────────────────────────────────────────────────────────┐
│ DeepSeek Harness (DSH Web) │
└───────────┬────────────────────────────────┬───────────┘
│ │
(Web Slots Injection) (Cordis Plugin Hook)
│ │
▼ ▼
┌────────────────────────┐ ┌─────────────────────────┐
│ dsh-agy-ui │◄─────┤ Adapter Dynamic Wrapper │
│ (Header Badge + Popover)│ │(Purify/Fold/Brand/Sort) │
└───────────┬────────────┘ └────────────┬────────────┘
│ HTTP Status Read │ Native Delegation
▼ ▼
┌────────────────────────┐ ┌─────────────────────────┐
│ dsh-agy Backend │ │ dsh-agy Core Layer │
│ (/agy/api/accounts) │ │(Direct Google API Stream│
└────────────────────────┘ └─────────────────────────┘
▲
│ Read Compatibility (Optional)
┌───────────┴────────────┐
│ dsh-agy-link │
│ (/plugins/agy-link/..) │
└────────────────────────┘
▲ Purified Antigravity (agy) native model selector dropdown preview
^chat_\d+$ and ^tab_.-low, -medium, -high models into their root model, injecting standard thinkingEfforts metadata so DSH's native reasoning dropdown activates.gemini-3.8-flash-tiered) into canonical titles (Gemini 3.8 Flash).
▲ Real-time quota capsule badge mounted on the session header (breathing indicator + dynamic percentage)
conversation.session.header.actions with isolated ID agy-ui-quota-badge.AGY · 55%), read from dsh-agy’s grouped windows (account.limits) rather than the per-model quota upstream removed.AGY · 周额度 1%), while a half-spent week does not drag the 5-hour figure down. daily / monthly windows are displayed but never drive it — the pool does not block on them.
▲ Grouped multi-window (5-hour / daily / weekly / monthly) quota inspection panel
Gemini Models and Claude and GPT models), one row per window, labelled from upstream's own window field:
— over a grey empty bar, never 0%: "unknown" and "exhausted" are opposite facts.verification-required park and its appeal link), a one-click refresh button, and — on dsh-agy ≥ 0.3.0 — a pointer to Settings → Antigravity.agy-ui-* namespace prefix, completely eliminating style bleed.dsh-agy-link: quota data follows the fallback order dsh-agy grouped windows → dsh-agy-link family quotas → legacy per-model rows.dsh-agy 0.3.0 moved its management surface from the standalone /agy dashboard onto DSH's own RPC channel: the host registers /api/agy and the browser calls it through connection.rpc.call('/api', 'agy', { method, payload }). Only /agy/oauth-callback is still a plain HTTP route (Google redirects a browser there with a GET); the old /agy/api/accounts is gone. The 5-hour / weekly source also changed: fetchAvailableModels' per-model quotaInfo has no window field and therefore can never distinguish 5h from weekly, so the windows now come from v1internal:retrieveUserQuotaSummary, cached per account as cachedLimits.
This plugin therefore reads, in order (see src/quota-source.ts):
| Priority | Channel | Notes |
|---|---|---|
| 1 | POST /api/agy → account.list | Account rows plus limits / limitsUpdatedAt (a TTL cache — no upstream request) |
| 1 | POST /api/agy → account.limits | The grouped windows; inside the 10-minute TTL the server skips the probe entirely, so a real measurement happens only when stale or on an explicit refresh (force: true) |
| 2 | GET /agy/api/accounts | Legacy dsh-agy (< 0.3.0) fallback |
| 3 | GET /plugins/agy-link/status | An independent quota pool, always fetched in parallel |
forces: no upstream call inside the TTL. If a probe run fails entirely (measured: 0 with failed > 0) the client backs off for a full TTL, so a broken probe cannot turn every poll into an upstream request.connection service or a failing RPC falls back to the legacy HTTP channel, and when neither answers the last good data is kept on screen rather than cleared.💡 Prerequisite: Ensure that the upstream dsh-agy provider is installed and authenticated.
This project is officially published on npm (dsh-agy-ui). Run one command in your terminal to automatically install dependencies and register the bundle into your DSH profile:
# Official CLI one-click install & registration
dsh plugin --profile web add dsh-agy-ui
# 💡 If dsh is not in global PATH, run via npx:
npx @deepseek-ai/dsh plugin --profile web add dsh-agy-ui
Start or restart DSH Web:
dsh web
# Or: dsh restart
Refresh your DSH Web interface (http://127.0.0.1:3080) to enjoy purified models and the header quota badge!
dsh plugin --profile web add github:Erick0412-dev/dsh-agy-ui
dsh plugin --profile web add /path/to/dsh-agy-ui
/agy dashboard).
dsh-agy-ui features isolated slot IDs and distinct CSS namespaces. It seamlessly coexists with dsh-agy-link and uses it as a fallback: dsh-agy's grouped windows (5h / daily / weekly / monthly) come first, and link's family quotas are read when no grouped data exists yet.
This project stands on the shoulders of giants. Sincere thanks to:
deepseek-ai/deepseek-harness)deepseek-harness, dsh-agy, dsh-agy-link) are licensed under the permissive MIT License. This project complies with all applicable open-source license terms by integrating through public hooks, runtime wrappers, and HTTP APIs without incorporating proprietary or infringing derivative code.