muen-collective/muen-plugins--plugins-dsh-language-switcher0

@muen/dsh-language-switcher

Language & translation control for DeepSeek Harness — a Settings > General row with a Fix plugins action that patches any installed plugin that isn't properly localized, plus a sidebar globe for one-click language switch / on-demand translate. Ships neutral; en/zh/ko/ja.

包名
@muen/dsh-language-switcher
版本
0.1.0
最近更新
2026年9月11日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:muen-collective/muen-plugins#0b6fb6cc3f7036ddf1198558f4b8cfbff8c77d08&path:plugins/dsh-language-switcher

muen-plugins

Muen-authored plugins for the DeepSeek Harness (DSH) market. This is the source-of-truth repo for @muen/* plugin packages. They are published as GitHub Release tarballs (and installed by the standard market mechanism dsh plugin add), so they are versioned, updatable, and survive upstream DSH upgrades.

This is a monorepo: one subdirectory per plugin, so we can keep adding plugins (and forks of community plugins) without restructuring.

Naming schema (keep consistent — every plugin follows this)

ThingConventionExample
GitHub repomuen-collective/muen-plugins
Source dirplugins//plugins/dsh-brand-swap/
Package (package.json name)@muen/@muen/dsh-brand-swap
Version0.x.y semver0.1.0
Installabilitydsh.bundle.patch + a cordis.patch.yml (NOT just dsh.client)required
Market entry url.../tree/main/plugins/ (subdir of this monorepo)…/plugins/dsh-brand-swap
Market entry namemuen-collective/muen-plugins#muen-collective/muen-plugins#dsh-brand-swap
Market categoryfrom the market's valid set (theme, ui, docs, tools, …)theme
Market descriptionaccurate one-liner (checked against source)

`` is the plugin name after the @muen/ scope, so the package name, source dir, and market-entry short name all agree.

Layout

plugins/
  /                @muen/  (one subdir per plugin)
    package.json         name: @muen/, dsh.bundle.patch: ./cordis.patch.yml, files
    cordis.patch.yml     inserts the plugin row (id + name)
    lib/                 the built host + client bundles (raw JS, no build step)
    README.md            accurate description of what the plugin does

Adding a new plugin

  1. plugins// with package.json (declare dsh.bundle.patch + dsh.client if it has UI), cordis.patch.yml (row id/name = @muen/), lib/, README.md.
  2. Bump version. Add scripts to the root package.json (pack:).
  3. To publish: tag a v* Release (the release.yml packs every plugin and attaches the .tgz), then open a PR to awesome-dsh-plugin/awesome-dsh-plugin adding data/plugins/muen-collective__muen-plugins--plugins-.yml.

Forking a community plugin (to improve the UI)

Put it in its own subdir plugins//, name it @muen/, and:

  • Credit the original author — keep their LICENSE/copyright in your package (MIT etc.), and note the fork provenance in the plugin's README.md (a FORK.md like the product repo's plugins/dsh-file-explorer/FORK.md). The market's fork rule: real code that does something, and dependencies must point at the original author's repo/package — don't re-upload upstream copies under your account and depend on those.
  • Keep the plugin generic/configurable (no Muen secrets or a specific client baked in).

Publish (register with the DSH market)

The market (dshmarket) shows the curated catalog at awesome-dsh-plugin.com/plugins.json, which is generated from github.com/awesome-dsh-plugin/awesome-dsh-plugin's data/plugins/*.yml. To register a plugin:

  1. Push this repo to GitHub and make it public; add the dsh-plugin topic. The repo must be ≥1 day old and ≥10 commits (CI checks this).
  2. Optionally tag a Release (v*): release.yml runs node scripts/pack-all.mjs and attaches each .tgz to the GitHub Release (the market prefers a published npm package or a Release tarball over build-from-source).
  3. Open a PR to awesome-dsh-plugin/awesome-dsh-plugin adding ONE file data/plugins/muen-collective__muen-plugins--plugins-.yml. Example:
    url: https://github.com/muen-collective/muen-plugins/tree/main/plugins/dsh-brand-swap
    name: muen-collective/muen-plugins#dsh-brand-swap
    category: theme
    description:
      en: White-label brand swap for DeepSeek Harness. Replaces the DeepSeek mark in the sidebar and conversation-hero brand slots with a per-profile wordmark, colors and font (each Brand OS configures its own identity on the plugin row). Ships neutral defaults.
    
  4. Verify from a fresh profile: dsh plugin --profile demo add .

Update an entry the same way — edit only your data/plugins/*.yml and regenerate (node scripts/generate-readme.mjs).

Value separation

Published plugins are neutral/generic — no client (or Muen) brand is baked into the package. Per-profile config: on a plugin's cordis.patch.yml row supplies the specific values (e.g. a client's wordmark via the brand-swap row's wordmark/fontFamily/dotColor). The market card can show a branded screenshot as an illustration; the shipped package stays neutral.

History note

This repo previously held the old @muen/mitsu-* surface plugins (assets, docs, write, krea, runninghub, modes, rail, settings, sidebar-tree, task-switcher, starter-pack, updater, open-in-sidebar, browser). Those were failed experiments and are permanently deleted. The brand plugin was generalized on 2026-09-04 to the white-label @muen/dsh-brand-swap (row brand-swap, service brand) — one generic plugin every Brand OS (mitsu, yammaman, vent) configures with its own identity; the Mitsumeru app's internal copy keeps the legacy @muen/mitsu-brand identity (row mitsu-brand, service mitsu.brand) until the next app release. Everything else is sourced from the community DSH market. Do not recreate, publish, or reference deleted @muen/mitsu-* names as live plugins.

Optional: npm

If you later prefer the @muen npm scope, npm publish each package (needs @muen scope ownership

  • auth) and point the catalog url at the npm package instead.