PerryLink/dsh-translate

Plugin插件 Native原生 ⭐ 7 Apache-2.0 Docs & Writing文档与写作Data & Analysis数据与分析

针对DeepSeek Harness的供应商参数翻译与确定性JSON修复:/translate可将temperature/top_p/max_tokens/stop/system映射至11家供应商,执行后的修复层(及fix_json)在不虚构数据的前提下,修正损坏的JSON工具输出。

Project Overview项目介绍

dsh-translate is a host-only JS plugin for DeepSeek Harness that ships two independent surfaces: a vendor parameter translation table mapping canonical parameters across 11 vendors (OpenAI, Anthropic, Qwen, Google, DeepSeek, Mistral, Cohere, xAI, Groq, ERNIE, Azure), and a deterministic JSON repair layer that runs as a tools/post-execute listener with a fix_json tool. Use it to normalize requests across vendors and to rescue lightly malformed tool outputs without re-querying models. Caveat: repair only triggers on string-rooted or json-rooted tool results, never invents values, and leaves unrepairable results unchanged without flipping failed tool calls to successes.

dsh-translate 是面向 DeepSeek Harness 的纯宿主 JS 插件,提供厂商参数映射与确定性 JSON 修复两条独立通道。其 /translate 表覆盖 OpenAI、Anthropic、Qwen 等 11 家厂商共十余个规范参数;修复层通过 tools/post-execute 监听器和 fix_json 工具,对工具结果中字符串型 JSON 做去围栏、转义、尾逗号、截断闭合与必填字段补 null 等处理,失败则保留原值。适用于统一多厂商请求格式与模型返回轻量修复场景。需注意:仅当工具结果为 JSON 字符串或标记为字符串根模式时才触发,不发明数据且不翻转失败状态。

Or use CLI install (for developers)或使用命令行安装(适合开发者)

CLI Install命令行安装

dsh plugin --profile web add dsh-translate

PerryLink/dsh-translate 加入你的 DSH 配置(web profile)即可启用。

READMEREADME

🔁 dsh-translate

  • 1024 store channel: npm i -g dsh1024 once, then dsh1024 plugin --profile web add dsh-translate (counts toward the deepseek1024.com install ranking). Gitee

Vendor parameter translation and deterministic JSON repair for DeepSeek Harness.

Same request, every vendor. Broken JSON, fixed without inventing data.

Official repository. This is the only official repository of dsh-translate, maintained by PerryLink. Same-name repositories under other accounts are not affiliated.

License DSH plugin dsh-doctor Node CI Version npm version npm downloads

English · 简体中文 · Español · Português · हिन्दी


Compatibility

Surface Status
Harness Main version dsh-v0.1.5-rc.2 (GitHub tag, verified 2026-09-11: full gate chain + profile install smoke). npm dependency line pinned to 0.1.5-rc.2; peers `>=0.1.2-rc.1 <0.2.0
Node ^22.19.0 || >=24.0.0
Form Pure-host JS plugin (no browser half)
Model Any model — repair is deterministic, no extra model calls

What you get

Two independent surfaces, one bundle:

  • /translate — the vendor parameter translation table: temperature, top_p, max_tokens, stop, system, and 8 more canonical parameters mapped across 11 vendors (OpenAI, ERNIE, Qwen, Anthropic, Google, DeepSeek, Mistral, Cohere, xAI, Groq, Azure). Ask for a pairwise mapping, list vendors/params, or convert a whole standard request (transformRequest in lib/rosetta.mjs).
  • The repair layer — a tools/post-execute listener plus the fix_json tool. When a successful tool result carries broken JSON as a string (string-rooted or json-rooted output schema, or a tool opted in by name), the layer repairs it deterministically: markdown-fence extraction, escape repair, trailing-comma removal, truncation closure, and required-field completion with explicit null placeholders. No value is ever invented — a result that still violates the schema fails closed, and failed tool results are never flipped into successes.
tool result (success, JSON text) ──▶ extract fence ──▶ parse
    │ ok? ──▶ schema-validate ──▶ accept { kind: 'accept', value }  (registry re-validates + re-renders)
    │ broken ──▶ escape / trailing-comma / close / fill-null ──▶ validate
    │ unrepairable ──▶ next()  (original value preserved) + translate/fix audit (counts only)

Quick start

# 1. install the bundle into your profile
dsh plugin --profile web add "github:PerryLink/dsh-translate#main"

# or from npm (published releases)
dsh plugin --profile web add dsh-translate

# 2. restart and verify the row
dsh --profile web --dump-config | grep -A2 'id: dsh-translate'

Then ask the agent to check a mapping or repair a payload:

> /translate openai ernie max_tokens
> Use fix_json to repair: {"a": 1,} against {"type":"object","properties":{"a":{"type":"integer"}},"required":["a"]}

Install & uninstall

  • git channel (latest main): dsh plugin --profile web add "github:PerryLink/dsh-translate#main" — pure JS, no build step.
  • npm channel (published releases): dsh plugin --profile web add dsh-translate.
  • tarball channel: pnpm pack in this repo, then dsh plugin --profile web add ./dsh-translate-<version>.tgz.
  • uninstall: dsh plugin --profile web remove dsh-translate (or remove the row from the profile patch).

Configuration

All tunables are Schemastery Config fields (changeable from cordis.yml). An id-targeted override replaces the whole row — restate every key you need. cordis.patch.yml documents each key inline.

Key Default Meaning
enabled true Master switch; false registers nothing
repair.enabled true Post-execute repair layer switch
repair.toolNames [] Extra tool names whose JSON-text results may be repaired (on top of string-rooted / json-rooted schemas)
repair.strategies.escapeRepair true Escape raw control characters inside strings
repair.strategies.trailingComma true Remove commas directly before a closing bracket
repair.strategies.truncationClosure true Close an unclosed string or container cut off by truncation
repair.strategies.fieldCompletion true Complete missing required fields with explicit null placeholders
repair.maxSteps 8 Strategy application budget (repair-loop passes, 1..64)
diffMaxChars 200 Cap on one logged diff fragment, in characters
diffMaxEntries 50 Cap on logged diff entries
registerCommand true Register the /translate command
registerTool true Register the fix_json tool
rosettaDataPath (none) Optional external rosetta data file (same shape as the bundled lib/rosetta-data.json); overrides the built-in mapping table

Example override in your profile patch:

- insert:
    - id: dsh-translate
      name: dsh-translate
      config:
        enabled: true
        repair:
          enabled: true
          toolNames: ['emit-json']
          strategies:
            escapeRepair: true
            trailingComma: true
            truncationClosure: true
            fieldCompletion: true
          maxSteps: 8
        diffMaxChars: 200
        diffMaxEntries: 50
        registerCommand: true
        registerTool: true

Tools & surfaces

Surface Kind Notes
/translate command vendors, params, or <from> <to> [param] pairwise mapping
fix_json tool { text, schema?, strategies? }{ ok, repaired?, diff?, strategies, truncated, validated, error? }; diff fragments are bounded and sanitized
post-execute repair listener Automatic for successful string results from string-rooted / json-rooted schemas (plus repair.toolNames); always calls next() unless it claims the call

Permissions & data

  • Permissions: no network, no subprocess, no credentials — the plugin only consumes the official commands and tools services and appends to the session log.
  • Data: repair never fabricates values; the only model-visible additions are the repaired canonical value and the fix_json diff. Session audit events (translate/fix) carry tool name, call id, strategy names, edit counts, and truncation flags — never payloads. The audit write is gated by the host’s session-event vocabulary: hosts that know translate/fix get the plain two-argument append, hosts with the ignorable append envelope get the marked append, and envelope-less hosts (0.1.0-rc.60.1.1-rc.2, 0.1.2-rc.1) get no audit append — the tool result remains the model-visible log. 0.1.2-rc.1 (adapted 2026-09-04): the session envelope keeps its ignorable field for stored-log read compatibility only - Session.append still cannot stamp it, so audit-gate behavior is unchanged.

Security boundaries

  • Deterministic only. Repair is bounded text surgery; the upstream LLM-retry arm of JSON-Schema-Enforcer-Proxy was deliberately not ported — a post-execute listener never calls a model.
  • Fail closed. Unrepairable syntax and schema violations leave the original result untouched (or return a structured error from fix_json); null placeholders only land when the schema accepts null.
  • Hostile input bounded. Unsupported schema keywords and circular schemas are rejected; oneOf validation is capped by depth (MAX_ONE_OF_DEPTH) and a branch budget (MAX_ONE_OF_BUDGET), so an exponential schema cannot exhaust the process.
  • No payload leakage. Logs and audit events never contain repaired payloads; diffs are truncated and capped before display or storage.

Known limitations

  • The supported JSON Schema subset mirrors the harness tool registry (type/oneOf/properties/required/additionalProperties/items/enum/const); other keywords are rejected as unsupported, not silently ignored.
  • Repair only applies to successful results whose canonical value is a JSON-text string; a value that already failed schema validation arrives as a failed result and is never flipped.
  • The translation table covers 11 vendors × 13 canonical parameters; extended rows follow public API references (not the upstream trio) and are marked as such in lib/rosetta.mjs.
  • On hosts that neither know translate/fix nor expose the ignorable append envelope — the published 0.1.0-rc.60.1.1-rc.2 line and 0.1.2-rc.1, which fails closed on unknown event types at read — the adaptive gate skips the audit append so the session log is never polluted; the in-log audit mirror is lost on those hosts until the event type is registered.

Development

pnpm install        # node ^22.19 || >=24
pnpm test           # node --test: 79 tests (pure lib suites + real-service assembly suite)
pnpm run check      # tsc checkJs against types.d.ts
pnpm run verify:self-contained  # dependency specs resolve from the registry
pnpm run verify:artifacts       # ESM face imports under plain Node + lib exports present
node scripts/check-readme-sync.mjs  # five-language README sync gate (also in CI)
pnpm pack           # the published tarball

Topics

dsh, dsh-plugin, deepseek-harness, deepseek, cordis, json-repair, schema-validation, parameter-mapping, llm-api, tooling

Contributors

  • @PerryLink — creator and maintainer: translation table and repair pipeline ports, plugin surfaces, tests, and the five-language docs.

PerryLink DSH Plugin Family

This project is one of the 40 DeepSeek Harness plugins maintained by PerryLink. If this one helps you, the others likely will too:

Plugin One-liner
dsh-auto-review Second-model auto-review on the approval chain, fail-closed by default
dsh-background-agents Durable background child agents with a Web UI sidebar, messaging and interrupt
dsh-budget Cost governance for DeepSeek Harness: budgets, carbon, and latency in one panel.
dsh-checkpoint-rewind Claude Code /rewind-equivalent: snapshots, session forks, one-shot restore
dsh-claude-move Migrate Claude Code sessions, memory, skills and CLAUDE.md into DSH
dsh-click Cross-platform native desktop control for DeepSeek Harness — Windows first.
dsh-composer-history Terminal-style input history for the web composer: arrows, Ctrl+R search
dsh-data-quality Dataset quality checks and citation cross-checks (the optional numeric bridge consumed here)
dsh-defend Prompt-injection, jailbreak, and secret-leak defense for DeepSeek Harness.
dsh-doublecheck Engineering-discipline guard: requirements grill, test gates, adversary review
dsh-draw Unified static-image generation routing for DeepSeek Harness.
dsh-fast Read-only performance diagnostics for DeepSeek Harness.
dsh-fund-research Deterministic research reports for Chinese public mutual funds
dsh-github GitHub PR/issues integration for DSH, every write gated by approval
dsh-industry-research Industry research orchestration that seals its deliverables through this plugin's ctx.researchReport.assemble
dsh-library Local document knowledge base for DeepSeek Harness.
dsh-local-ai Local-model (Ollama) integration for DeepSeek Harness.
dsh-lsp-actions LSP diagnostics, formatting, completion, code actions and rename over language servers
dsh-mask PII masking middleware: anonymize at the model boundary, restore at the display layer
dsh-mcp-panel Read-only MCP runtime panel: /mcp command + Settings tab with status, tools and errors
dsh-memento Approval-gated cross-session memory: ctx.memory seam + SQLite + memory tool
dsh-observe OpenTelemetry and Langfuse observability exporter for DeepSeek Harness.
dsh-output-styles Claude Code outputStyles-equivalent runtime style switching
dsh-permission-rules Claude Code-style declarative allow/deny/ask permission rules with audit
dsh-personal-directive Personal directive injector with top-bar toggle (framework edition)
dsh-plugin-guide Plugin-development knowledge base as an on-demand agent skill
dsh-plugin-doctor Zero-dependency static + sandbox smoke detector for DSH plugins
dsh-reach Multi-channel approval/question bridge: WeChat/Telegram/Feishu, session console
dsh-research-report Verifiable research-report engine: content-addressed evidence ledger and sealed versions
dsh-score Multi-dimensional quality scoring for DeepSeek Harness plugins.
dsh-session-pin Pin sessions in the Web sidebar with durable ordering
dsh-session-sync Cross-device session sync for DeepSeek Harness — a dedicated git mirror of your session store.
dsh-skill-pack-security Security-audit skill pack: secret scan, dependency and supply-chain review
dsh-talk Voice-first session loop for DeepSeek Harness: talk to it, hear it answer.
dsh-test-drive Isolated install-and-smoke test drives for DeepSeek Harness plugins.
dsh-ticktick TickTick/Dida365 task bridge: session-header panel + 11 tools
dsh-wechat WeChat ↔ DSH bridge (Tencent iLink bot): text/image/file/voice, approvals in chat
dsh-autotier Automatic strong/cheap model-tier routing with deterministic risk guards and a /tier command
dsh-catalog DSH Desktop Market standard catalog source for the PerryLink family
dsh-cert-mcp Read-only MCP server exposing the certification registry: grades, snapshots and five-dimension evidence
dsh-kit One-command starter pack that installs the core family
dsh-plugin-certification Community certification registry with repro-checkable grades and badges
dsh-plugin-kit Shared zero-runtime-dependency toolkit for the PerryLink DSH plugins
dsh-plugin-portal Zero-dependency static portal rendering the whole plugin family as one page
dsh-plugin-upgrade-015 Merged 0.1.3-alpha.10.1.5-rc.1 upgrade corridor card plus a zero-dependency seam scanner
dsh-team-rooms Cross-session team rooms: shared message bus, task board and timeline

Install from the DSH Desktop Market

All PerryLink plugins are browsable in the built-in DSH Desktop Market: Market → Sources → add source → paste https://perrylink-dsh-catalog.perrylink.workers.dev/catalog-source.json → select it. Installation still goes through the Market's npm-identity verification and your confirmation.

License

Apache License 2.0 © 2026 dsh-translate contributors

上一个 Prev dsh-super-advisor 下一个 Next deepseek-harness-cloud