DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Mxpage — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
M

dsh-mxpage

Mxpage

MxPage for DeepSeek Harness: ecommerce product-image workbench (analyze → plan → Visual Prompt Agent → generate) on top of an extracted, host-agnostic core of ziguishian/MxPage.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:kim1232aa/dsh-mxpage#8f825b5994c61f971a829c2562f16ca2c7a88925
READMECompatibilityVersions

Compatibility and provenance

Mxpage is published as dsh-mxpage and currently resolves to version 0.3.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
9/13/2026

Versions

0.3.0stable
9/13/2026
0.2.0stable
9/13/2026
0.1.0stable
9/12/2026

Related plugins

Loading related plugins…

Latest
0.3.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
9/13/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in ui-customization.

Web App@deepseek-ai/dsh-web-appThe dsh browser-surface bundle: the web patch layer over dsh-base plus the runtime glue plugin (frontend dist serving, web-surface prompt, bash runtime variables, URL line)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profileExperimental Web profile layer for Agent Teams Remote and UI pluginsClient Ui Task Board@linxin666/dsh-client-ui-task-boardHost-authoritative task board for the DSH Web GUI with real session execution, Host cron scheduling, and optional cross-platform idle-sleep protection; mounted without DSH source changes.Pet@linxin666/dsh-petMulti-pet companion plugin for the dsh web GUI: a registry-driven floating pet that reacts to model activity, with per-pet naming, petting/feeding interactions and an affinity score

README

dsh-mxpage

English | 简体中文

DeepSeek Harness plugin that brings MxPage's ecommerce product-image workbench into the official DSH web profile:

register photos → analyze selling points → plan hero/detail sections → Visual Prompt Agent → generate → edit → export

This is not a generic gallery, and it is not a thin prompt wrapper. Community plugins such as dsh-imagegen register a one-shot generate_image. dsh-mxpage does not. Every tool is named mxpage_*, and the model must walk analyze → plan → VPA → generate so a product photo becomes a coherent detail-page set rather than a pile of unrelated images.

Verified against DSH 0.1.2-rc.1 host packages. Requires the official web profile (not sdk-minimal).

Not an official DeepSeek product. Not affiliated with DeepSeek AI. MxPage prompts/schemas remain MIT (灵矩绘境); see NOTICE.


Architecture — "换芯留壳"

v0.1 reimplemented MxPage's pipeline by hand and threw away the parts that make it a product. v0.2 inverts that: the upstream kernel is ported, the DSH adapter is thin, and the upstream UI is in scope.

src/core/     host-agnostic port of upstream lib/   (never imports @deepseek-ai/*)
   └── ports/   Repository · ProviderResolver · Logger · StorageDriver · TaskRunner
src/host/     the five port implementations (JSON repository, fs storage, channels,
              jobs-backed task runner)
src/shared/   route paths shared by host and browser
src/tools/    thin mxpage_* wrappers over core services
src/client/   the browser panel

src/core/** cannot import @deepseek-ai/*, schemastery, Next.js, Prisma or React, and cannot touch process.cwd() / process.env — enforced by a test.

Long-running work goes through ctx.jobs (@deepseek-ai/dsh-jobs-local), so the shell owns job identity, session scoping, lifecycle state, completion notices and owner-disposal cancellation. src/host/task-runner.ts is the fallback for hosts without a registry — the plugin still boots either way, because jobs is read through the optional ctx.get('jobs') accessor.

Why the extraction was cheap, with evidence:

FactEvidence
Zero next/* imports inside upstream lib/the one exception, provider-runtime.ts, imported NextRequest solely to read two headers
@prisma/client appears 9 timestwo are type-only; four use only the Prisma namespace
The 1344-line OpenAI adapter had one hard couplingimport { inferCategory, logApiUsage } from "@/lib/monitor/api-usage"

See src/core/README.md for the full seam list.


Configuration — channels, not an env var

v0.1 required MXPAGE_IMAGE_API_KEY. v0.2 uses a channel list, so several endpoints can be configured and rotated:

设置 → 插件 → MxPage → 渠道, or in cordis.patch.yml:

- insert:
    - id: mxpage
      name: dsh-mxpage
      config:
        channels:
          - id: xai
            label: xAI (Grok)
            baseUrl: https://api.example.com/v1
            apiKeyEnv: MXPAGE_XAI_KEY   # preferred: keeps the secret out of the doc
            models: [grok-imagine-image-2.0]
            textModel: grok-4
            imageModel: grok-imagine-image-2.0
        rotateChannelOnQuotaExhausted: true
FieldMeaning
id / labelrotation key and display name
baseUrlOpenAI-compatible base URL; a missing /v1 is retried automatically
apiKey / apiKeyEnvliteral secret, or (preferred) the name of an env var
modelsexplicit image model ids; leave empty to discover via GET /models
textModel / imageModelpreferred models for analyze+plan / generate on this channel
disabledskip this channel without deleting it

Run mxpage_channels first whenever something fails — it reports which channel is active, its catalog, and whether any image-capable model was found.

Model capability is inferred from the model name. Upstream deliberately skips real endpoint probing to avoid burning image quota, so "the name looks like an image model" does not prove the gateway can render images. A gateway that advertises a model it cannot serve is discovered by failing.


Paid Images API — read this first

Generation and edit tools call an OpenAI-compatible Images API (/images/generations, /images/edits). That API is paid. Each mxpage_generate_section, mxpage_generate_page and mxpage_edit_section consumes quota. The shipped skills instruct the model to confirm with you before a whole-page job.

Secrets never appear in tool output, logs or session events — sk- and Bearer tokens are redacted (src/util/redact.ts).


Install

# from a checkout
dsh plugin add link:/absolute/path/to/mxpage

# or from the built tarball
dsh plugin add ./dsh-mxpage-0.3.0.tgz

dsh plugin add registers the bundle in the profile's dsh.profile.bundles for you. Then configure a channel (above) and restart the profile so the layer loads.

Skills catalog

The skills ship inside the package. Copy them next to the DSH catalog so they are discoverable:

mkdir -p "${DSH_HOME:-$HOME/.dsh}/skills"
cp -R skills/mxpage-ecommerce-page skills/mxpage-xiaohongshu skills/mxpage-batch-sku \
      "${DSH_HOME:-$HOME/.dsh}/skills/"

Chat example

Attach a product photo and say:

根据这张商品图出一套淘宝详情页

Expected: the agent runs create → analyze → plan → generate and you get a hero set plus detail sections, each as a new version (never overwriting), stored under $DSH_HOME/mxpage/projects/<projectId>/ and returned as attachments.


Panel — the eight screens

The plugin ships a browser half (lib/client.js) that mounts a workbench into the DSH centre column, with a sidebar toggle. This is the part upstream MxPage actually lives in: a stateful workspace, not a prompt wrapper.

ScreenWhat it does
分析Project meta (name / platform / style, delete project), the product-asset grid (upload, reorder, set main image, delete), and the structured analysis editor with one-click analyze / save
规划Output config (hero/detail counts, aspect, in-image language), analyze → plan, the project-level visual style guide, the section list with per-section generation and a whole-page job, plus whole-page translation into a target language
编辑Per-section preview, inline editing of title/goal/copy/visualPrompt, generate / regenerate / repaint / enhance / translate, and the version list with activate
导出One-click ZIP / JSON export, export notes, the model snapshot, and a gallery of everything currently exportable
小红书The four-step carousel flow: plan → review each imagePrompt → generate → edit, with per-page download
批量 SKUUp to 20 product images per batch — one project per SKU, optional background analyze+plan with per-SKU failure isolation
监控The API usage ledger: totals, token counts, top models / projects, quota-state classification, per-entry delete / clear, plus task history with retry for failed tasks
渠道Channel diagnostics: the active channel, its model catalog, image/vision/text counts, per-channel key presence, connection test and model discovery with role recommendations, and the quota-rotation note

Re-planning is guarded behind an explicit confirmation, because it deletes every section, version and generated image in the project.

Build-format note. The DSH web shell does not load client halves as ESM. It hands each bundle a window.__ModuleLoader__.load({ id, factory }) façade and a require that resolves the shell's live module table. tsdown therefore emits the browser half as CJS into lib/client.raw.cjs, and scripts/wrap-client.mjs wraps it into the envelope. test/client-bundle.test.ts loads the built bundle through a simulated façade and asserts apply + inject come back — that test exists because an ESM bundle would silently never apply.

The panel's data API lives at /api/dsh-mxpage/* (src/host/routes.ts), registered on the host webServer and fenced to loopback requests.


Tools (all mxpage_*)

ToolRole
mxpage_create_projectNew project from 1–10 photos via attachment_ids (chat) and/or image_paths
mxpage_add_assetAppend a photo; role: "main" swaps the primary reference
mxpage_project_statusRead-only: analysis, sections, versions, running tasks
mxpage_analyze_productVision analysis → category, materials, selling points, suggested plan
mxpage_plan_pageSection plan + project-level visualStyleGuide. Re-planning deletes existing sections and images
mxpage_generate_sectionOne frame; runs the VPA unless prompt_override is set
mxpage_edit_sectionrepaint / enhance / translate; new version, never overwrites
mxpage_generate_pageWhole page as a background job; mode: "missing" fills gaps only
mxpage_job_status / mxpage_job_cancelJob control; completed sections stay on disk
mxpage_export_pageZIP (00-头图/ + 01-详情页/ + export-manifest.json) or project JSON
mxpage_xiaohongshu_planXiaohongshu step 1 — has a fully local Chinese fallback plan
mxpage_xiaohongshu_generateStep 3 — one image per page, VPA-gated
mxpage_xiaohongshu_editStep 4 — edit one page in place
mxpage_translate_pageWhole-page translation as a background job — one translate edit per generated section
mxpage_update_projectRename a project or change its platform / style
mxpage_delete_projectDelete a project and its workspace; requires confirm: true
mxpage_set_main_assetSwap the primary reference image by asset id or image path

Skills

SkillWhen
mxpage-ecommerce-pageTaobao / Tmall / JD / Shopee hero + detail pages
mxpage-xiaohongshuThe four-step carousel flow
mxpage-batch-skuOne project per SKU; never mix reference images

Differences from upstream, and fixes made during the port

Fixed (each documented at its call site):

  1. Visual Prompt Agent retry bug. Upstream requestRaw read if (urls.length === 1 || options?.suppressUsageLog), conflating "skip usage logging" with "skip the base-URL retry". The VPA is the only caller passing suppressUsageLog: true, so it silently lost the /v1-vs-root fallback and degraded to the template prompt on gateways needing a versioned base URL.
  2. Path traversal. Upstream's /api/files/[...path] route joined rootDir() with an unvalidated relative path. The storage port rejects escapes (normalizeRelPath) and the route is gone entirely.
  3. Cross-platform paths. Upstream stored path.join output (backslashes on Windows) while its URL builder converted back with split(path.sep).
  4. Production cancellation. Upstream's abort registry was guarded by process.env.NODE_ENV !== "production", so production builds could not cancel.
  5. Dead values dropped: ProjectStatus.COMPLETED and GenerationStatus.QUEUED were never written by any upstream service.

Preserved deliberately (flagged, not silently changed):

  • Quota does not rotate models. Upstream shouldFallbackToNextImageModel returns false for 429 / quota / 403 / 401, so an exhausted channel aborts instead of trying the next candidate. Exposed as the rotateChannelOnQuotaExhausted config flag.
  • editSectionImage is not cancellable — upstream never registered an abort controller on that path.
  • archiver was replaced by a dependency-free ZIP writer, which also removes upstream's process.cwd() temp file.

Develop

npm install
npm run build     # tsdown → lib/index.js (+ lib/client.js when src/client exists)
npm test          # node --experimental-strip-types --test
npx tsc --noEmit  # 0 errors expected

Tests worth knowing about:

  • test/bundle.test.ts — package manifest sanity and the host-agnostic invariant on src/core/**
  • test/core.test.ts — ZIP header/CRC format, repository semantics (terminal-state stickiness, system-project hiding, stale recovery), storage path containment, task cancellation
  • test/smoke.test.ts — loads the built lib/index.js, runs the real apply() against a mock Cordis context, and asserts all 20 tools register

License

MIT. MxPage prompts, schemas and pipeline logic are MIT (灵矩绘境) — see NOTICE and LICENSE.

Topics: dsh-plugin · dsh · deepseek-harness · mxpage · ecommerce

mxpage_usage_statsUsage-ledger summary: calls, tokens, quota events, top models / projects, recent errors
mxpage_channelsChannel diagnostics