dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
Use the models that ship with the Loomy desktop app inside DeepSeek Harness — no API key. Also adds a Settings card showing the signed-in account and Loomy credits (permanent + daily gift).
简体中文 | English
Exposes the text models bundled with the Loomy desktop app to DeepSeek Harness (DSH), without an API key.
The plugin reads Loomy's on-disk sign-in session and model manifest read-only. Nothing is copied, uploaded, or rewritten.
| Contribution | Surface | Description |
|---|---|---|
| Model provider | Host | Registers a loomy provider; the model list is discovered from Loomy at startup |
| Settings card | Browser | Two tabs — Account and Models — under Settings → Plugin configuration: Account shows sign-in state, masked phone, and credit balance; Models renders a table of each model's name, context window, and rate, with image models sorted last |
x3.0) and flags limited-time free ones, following Loomy's own numbers.| Loomy desktop app | Installed and signed in at least once |
| DeepSeek Harness | >= 0.1.5-rc.1 |
| Node.js | >= 22 |
From GitHub:
dsh plugin --profile web add github:gdrpzym/dsh-loomy-connect
dsh web
From a local checkout — preferred while developing, since it needs no publish step:
dsh plugin --profile web add /absolute/path/to/dsh-loomy-connect
dsh web
Verifying:
dsh --profile web --dump-config # expect an `llm-loomy` entry
--dump-config only composes the config tree; it does not instantiate the plugin. To confirm the plugin actually boots, run dsh web and check for Loomy in the model selector.
Paths are auto-detected per platform, so configuration is normally unnecessary. The overrides below target non-standard installs.
| Variable | Overrides |
|---|---|
LOOMY_AUTH_FILE | Sign-in session auth-session.json path |
LOOMY_CONFIG_FILE | Model manifest opencode.json path |
LOOMY_LOCAL_STORAGE_DIR | Credits cache Local Storage/leveldb directory |
Resolution order per lookup: plugin config (authFile / configFile) → environment variable → detected default.
Default paths are probed across macOS and Windows; the first existing path wins:
| Platform | Sign-in session | Model manifest | Credits cache |
|---|---|---|---|
| Windows | %APPDATA%/loomy/auth-session.json | %APPDATA%/loomy-opencode/opencode.json | %APPDATA%/loomy/Local Storage/leveldb |
| Boundary | Mechanism |
|---|---|
| Network exposure | Gateway binds 127.0.0.1 only |
| Client authentication | Per-process random secret, compared with timingSafeEqual |
| DNS rebinding | Host must be loopback |
| Cross-site simple requests | Origin, when sent, must be loopback; request body must be application/json |
| Token custody | The Loomy session token is read from disk inside the gateway per request; DSH never holds it |
Threat model: protects against other local processes and against web pages running in the user's browser. It does not protect against code running as the same user, which can read the same files the plugin reads.
LOOMY_AUTH_FILE explicitly.| Symptom | Cause |
|---|---|
| Card never appears under Plugin configuration | Host half did not register the namespace; see item 4 in docs/internals.en.md |
| Plugin listed under Plugins but no card | Same as above — the Plugins tab reflects installed entries, not served namespaces |
Cannot read properties of undefined (reading 'authFile') at boot | Missing runtime Config export; see docs/internals.en.md |
| Card shows "not signed in" though Loomy is signed in | Session path not detected; set LOOMY_AUTH_FILE |
502 on every chat request | Gateway could not read a valid session, usually a path detection problem |
| Model list is stale | Restart DSH or trigger a settings change |
| Credits empty | Loomy has not cached a summary yet, or LOOMY_LOCAL_STORAGE_DIR is wrong |
Architecture, gateway, and browser-card constraints are documented in docs/internals.en.md (中文版 docs/internals.md).
The DSH provider architecture follows dsh-workbuddy-connect (MIT).