dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
The /JevLoop control panel for moqi, on top of dsh-jev-loop.
The /JevLoop control panel for moqi,
on top of dsh-jev-loop.
It is a thin adapter: moqi brings the tuiHost seam, dsh-jev-loop brings the
jevLoop service, and this package turns that service into rows and actions.
It judges nothing itself and never applies where either service is absent.
Compatibility: works with moqi 0.4.x and 0.5.x (npm run typecheck:moqi
checks the panel types against the installed moqi-tui).
Published to npm as
moqi-jev-loop. This repository
carries the dsh-plugin topic — the
whole of the dshfind listing mechanism: the marketplace
indexes public repositories by that topic and syncs daily, so there is no
listing step per release.
dsh plugin --profile <profile> add dsh-jev-loop
dsh plugin --profile <profile> add moqi-jev-loop
Both bundles are needed — the core mounts the gates, this one mounts the panel.
With moqi running, /JevLoop then joins the command palette.
The adapter registers a tuiHost panel, so /JevLoop joins moqi's command
palette and nothing about it lives in moqi's core: moqi only knows how to draw
rows and raise a masked prompt. The panel lists the API key and the four gates
with their live state; enter toggles a gate, the change applies immediately,
and it persists to $DSH_HOME/jev-loop.json.
The API key row opens a masked prompt: the draft is never rendered and never
touches the composer, transcript, or shell history. The value is written to the
Harness credential store (ctx.credentials, ref TYPESAFE_API_KEY) and the
core picks it up on the next judgment — no restart. The row shows whether a key
is live and where it came from (config, credential:file,
env:TYPESAFE_APIKEY), never the value. A Clear API key row appears once one
is set.
Key resolution order: explicit apiKey config, then the credential store, then
TYPESAFE_API_KEY / TYPESAFE_APIKEY in the environment. The gates are
registered even with no key, so setting one activates them immediately.
The throwaway profile composes dsh-base, the fixed moqi TUI checkout, the
core, and this adapter:
npm install # typescript + @types/node + dsh-jev-loop
npm run link-harness # symlink the installed harness's @deepseek-ai packages
npm run build
npm run install-profile -- jev-dev
TYPESAFE_APIKEY=… dsh --profile jev-dev
install-profile links the moqi TUI from a sibling ../moqi checkout by
default (MOQI_ROOT overrides it) and the core from a sibling ../dsh-jev-loop
checkout when one is built (JEV_LOOP_CORE_ROOT overrides it), falling back to
the published dsh-jev-loop on npm when it is not.
Inside the app /JevLoop toggles the gates, and ~/.dsh/jev-loop.jsonl records
every judgment.
src/panel.ts rows and actions over the core's service
src/index.ts the tuiHost seam
tests/ panel.ts driven with a fake service; moqi type compatibility
scripts/ harness linking and the throwaway profile installer
The module boundary and the generated whiteboard are documented in docs/ARCHITECTURE.md.