banlanzs/dsh-web-enhanced ↗★ 3
dsh-web-enhanced
Web-enhanced plugin for DeepSeek Harness: task board with cron scheduling, git graph, preview/files/SCM right panel, DeepSeek balance line, and image understanding for text-only models
AI 分析
核心用途是全方位提升网页端功能。适合需要项目看板、Git 视图、文件管理及多模态增强的重度 DSH 网页端用户。
インストール
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:banlanzs/dsh-web-enhancedドキュメント
README 全文を読む ↗Configuration
Plugin-row config fields (all have defaults; the vision* ones can also be edited live in Settings → Web Enhanced → Vision, whose saves override these base values):
| key | default | meaning |
|---|---|---|
cronIntervalMs | 30000 | Minimum delay before the cron scheduler fires; it arms one timer at the earliest pending run and no timer exists while nothing is scheduled |
balanceApiKeyEnv | DEEPSEEK_API_KEY | Env var for the balance query API key |
balanceCacheTtlMs | 60000 | Balance view cache duration |
balanceBaseUrl | https://api.deepseek.com | Balance endpoint base URL |
balanceProviders | [deepseek-official] | Model routes the balance line is shown for; a route with its own configured baseURL must also share the endpoint's host |
modelsDevUrl | https://models.dev/api.json | Pricing blob fetched for the session-cost readout |
modelsDevCacheTtlMs | 21600000 | How long one fetched pricing index stays fresh (6 h) |
modelsDevTimeoutMs | 10000 | Pricing fetch timeout |
pricingProviderMap | {deepseek-official: deepseek} | Model-route provider id → models.dev provider id |
skipDirs | [node_modules] | Directories skipped by the file tree/search and by the mention pickers (.git is always skipped; the browse overlay does not apply the filter) |
readMaxBytes | 1 MiB | Text read cap (truncated with a marker beyond it) |
writeMaxBytes | 2 MiB | File write cap |
binaryMaxBytes | 5 MiB | Binary preview (base64) cap |
gitOutputMaxBytes | 256 KiB | Single git stream output cap |
gitMaxCount | 100 | git log row cap |
gitWorkingMaxFiles | 300 | Cap on the uncommitted file list, and with it how many untracked files are read to count their lines |
searchMaxDepth / searchMaxEntries | 8 / 200 | File search depth and entry caps |
officeMaxBytes | 5 MiB | Office preview (docx/xlsx) file size cap |
browseMaxEntries | 500 | Entry cap of one directory level in the mention browser |
pluginOpTimeoutMs | 300000 | Deadline for one pnpm operation (update/remove) |
profileDir | empty | Profile directory; empty walks up from this module. Only for a deployment whose profile is not an ancestor of the loaded plugin |
visionEnabled | true | Master switch of the image-understanding integration |
visionPatchAdmission | true | Wrap llm.resolveModelInfo so text-only models admit images past the send preflight and the read_image gate (reversible, unload-order safe) |
visionProvider / visionModel | empty | Pin the DSH-configured provider/model used for transcription; empty = auto-detect the first image-capable models from all configured providers |
visionHarnessModels | [] | User-selected DSH model pool [{provider, model}, …], tried in order before the dedicated API; non-empty replaces auto-detection (the pinned pair still goes first) |
visionPrompt / visionMarker | Chinese thorough-description prompt / [图片内容描述] | Transcription prompt and the marker the model sees instead of the image block |
visionBaseUrl / visionApiKey / visionEndpointModel | empty | OpenAI-compatible VLM endpoint (e.g. DashScope compatible mode); key falls back to visionApiKeyEnv → VISION_API_KEY → DASHSCOPE_API_KEY. Empty base URL or model disables this source |
visionEndpointModels | [] | Dedicated-endpoint model pool; the Settings tab fills it by fetching /models and multi-selecting. Transcription tries visionEndpointModel first (when set), then every pool model in order |
visionApiKeyEnv / visionAnonymous | VISION_API_KEY / false | Env var for the endpoint key; true skips the Authorization header (free/local endpoints get a hard 20 s timeout cap) |
visionTimeoutMs / visionMaxTokens | 120000 / 4096 | VLM request timeout and output cap |
visionAutoLocalOllama | true | Probe visionLocalOllamaUrl at startup; when an Ollama is running, its first vision-capable model is prepended to the transcription chain (images stay on this machine) |
visionLocalOllamaModel / visionLocalOllamaUrl | empty / http://localhost:11434/v1 | Preferred Ollama model (empty picks the first *vl*/*vision* model) and its OpenAI-compatible base URL |
visionFallbackModels | [] | Ordered fallback chain {model, baseURL?, apiKey?, anonymous?, timeoutMs?}; each entry may point at a different provider, keyless non-anonymous entries are skipped |
visionCacheLimit / visionCooldownMs | 200 / 60000 | In-process transcription cache entries (SHA-256 of image bytes) and how long an endpoint that just failed (429/timeout) is skipped |