amplifthq/oh-my-dsh1

oh-my-dsh

Plugins, sensible defaults, and a launcher for DeepSeek Harness (dsh) — everything you're missing, without forking upstream.

AI 分析

核心用途是简化 DSH 的配置与启动流程。适合希望开箱即用、一键配置多模型适配器及安全搜索功能的 DSH 用户。需要 Node.js 环境支持。

パッケージ
oh-my-dsh
バージョン
0.1.3
ライセンス
MIT
最終更新
2026/08/14

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:amplifthq/oh-my-dsh

ドキュメント

README 全文を読む ↗

Configuration

Models

Configure DeepSeek or upstream's multi-provider adapter in the Web Models page. The latter supports OpenAI, Anthropic, Google, OpenRouter, and compatible gateways.

Search and fetch

Search selection follows:

  1. DSH_WEB_SEARCH_PROVIDER
  2. Exa when EXA_API_KEY is present
  3. Perplexity when PERPLEXITY_API_KEY is present
  4. DeepSeek search

HTTP fetch is on by default and routes through OMD's hardened provider. IP-literal and conventionally-local destinations are rejected before any request, and every DNS resolution is re-validated at connect time, so redirects and DNS rebinding cannot reach loopback, private-range, link-local, or cloud-metadata addresses. Upstream's own provider ships without this protection, which is why fetch stays off in the reference setup — OMD closes the gap instead of inheriting the friction. (The previous OMD_ENABLE_WEB_FETCH opt-in is superseded.)

OMD_DISABLE_WEB_FETCH=1 omd        # turn the fetch tool off entirely
OMD_WEB_FETCH_ALLOW_PRIVATE=1 omd  # allow private/internal destinations (trusted networks only)
DSH_WEB_FETCH_PROVIDER=http omd    # explicit opt-out to upstream's unprotected provider

When fetch is disabled, shell fetches of public URLs (curl, wget, HTTPie) prompt for approval instead of silently bypassing the missing tool — the common failure mode where a model degrades to curl with a spoofed browser User-Agent. Fetches of local and private URLs (curl localhost:3000) are never intercepted.

Advisor

The advisor is disabled until both values are configured:

export OMD_ADVISOR_PROVIDER=anthropic
export OMD_ADVISOR_MODEL=claude-fable-5
omd

It adds latency and another model call to each reviewed turn.

Debugging

Debug Adapter Protocol support is off by default:

OMD_ENABLE_DEBUG=1 omd

debug_control adapters lists what was discovered: debugpy (when importable by python3/python), lldb-dap (when on PATH), plus custom stdio adapters from plugin configuration. Launching or attaching always returns a proposal; only proposal_control apply with user approval spawns the adapter and debuggee. An approved session supports breakpoints, stepping, stack and variable inspection, and expression evaluation inside the debuggee process — that evaluation capability is stated in the approval text. Debuggee programs and breakpoint files must stay inside the workspace, and runInTerminal reverse requests are rejected.

Local overrides

Edit either profile's cordis.patch.yml for profile-specific changes. omd setup preserves these files. $DSH_HOME/cordis.patch.yml applies after every profile and therefore has the final word.

Proposal and recovery lifecycle

Capability activation, debug launch/attach, and source mutation use the same prepare → inspect → approve → commit → verify lifecycle. A proposal is session-local and cannot authorize itself; applying it always reaches the upstream approval service.

Semantic refactors accept text-only WorkspaceEdit results. Resource create/delete/rename operations, server-driven workspace/applyEdit, and workspace/executeCommand are rejected. Recovery journals live under $DSH_HOME/omd/refactors/ with mode 0600 and are deleted after successful apply or rollback. They make interrupted work recoverable, but do not claim filesystem-wide crash atomicity.