Repository navigation
Releases
v3.2.4
发布说明 v3.2.4
日期: 2026-10-03
修复 / Fixes
- 依赖模型重构:
@deepseek-ai/schemastery和react从运行时dependencies移到peerDependencies(schemastery标optional),仅保留@deepseek-ai/cordis作为必选 peer。- 根因:本插件是 DSH 宿主扩展,运行时在宿主进程内执行。宿主已经把
schemastery加载进同一进程作为宿主模块。本插件若再以dependencies携带同版本包,pnpm 会在插件树里再实例化一份,与宿主单实例不一致。 - 影响:插件自身代码行为不变,只改变了"谁提供这些包"——现在统一由 DSH 宿主提供,单实例。
- 根因:本插件是 DSH 宿主扩展,运行时在宿主进程内执行。宿主已经把
react保持为 devDependency:客户端 bundle 在构建时内嵌react代码(tsdown.config.ts的CLIENT_EXTERNALS不含react),不需要宿主提供react实例,因此不移到 peer。
不变 / Unchanged
dsh-tools/dsh-system-prompt/dsh-settings等宿主模块仍是peerDependencies(^0.2.0-rc.1匹配宿主 0.2.0-rc.2,宿主提供单实例)。- 斜杠命令
/language、详情页开关、宿主轮询同步全部保持不变。
升级指引 / Upgrade
- 从 3.2.3 升到 3.2.4 无 breaking change,直接
pnpm update @dingpenghui/dsh-conversation-language即可。
v3.2.3 — 宿主包移出 dependencies
Fixed
- 9 个宿主包(dsh-tools、cordis、dsh-settings、dsh-system-prompt、dsh-client-*)从 dependencies 移入 peerDependencies,devDependencies 保留供本地构建。
- 原因:dsh-tools 出现在 dependencies 会让 pnpm 在 profile 内装出第二份副本,破坏模块级 Symbol TOOL_RUNTIME_SCHEDULER 的身份,导致任何工具调用抛 Cannot read properties of undefined (reading 'prepare'),且卸载插件后仍复现。
- 升级后需完全重启 DSH。
v3.2.2 — 包名 scoped 化
Changed
- 包名由
dsh-conversation-language变更为@dingpenghui/dsh-conversation-language,插件 id、plugins.bundle.config/plugins.row.configslot key、cordis.patch.yml、README 与契约测试断言同步更新。 - 补充
publishConfig.access = public,确保 scoped 包以公开方式发布。
Changed
- Package renamed from
dsh-conversation-languageto@dingpenghui/dsh-conversation-language; the plugin id,plugins.bundle.config/plugins.row.configslot keys,cordis.patch.yml, README and contract-test assertions were updated accordingly. - Added
publishConfig.access = publicso the scoped package publishes publicly.
工具名
get_conversation_language仅含字母与下划线,本身符合 provider 的 function-name 约束^[a-zA-Z0-9_-]+$,不存在 obsidian-sync 那类 400 问题。
v3.2.1 — 契约测试可移植化 / portable contract test
更新内容
修复
contract-test.mjs不再硬编码作者机器上的 profile 路径(C:/Users/braindge/.dsh/profiles/web/...),改为按优先级解析客户端 bundle:环境变量DSH_CONVERSATION_LANGUAGE_CLIENT→ 本地构建产物lib/client.js→ DSH web profile 中的安装副本。断言逻辑完全未变,契约测试现在可在任意机器上复现(此前在其他机器上必然以 ENOENT 失败)。- 补记缺失的
3.2.0CHANGELOG 条目(tag/release 已发但 changelog 未记)。
说明
- 本版本为工具链补丁:
lib/构建产物与 3.2.0 完全一致,npm 包内容除version字段外无变化。 - 宿主侧与客户端侧运行时行为不变,升级无需任何配置调整。
验证
node build-and-verify.mjs 全绿:tsdown 构建 → tsc --noEmit → lib 产物校验 → 0.1.7-alpha.2 回归 → 0.2.0-rc.1 客户端契约测试(6/6 PASS)
安装
npm install dsh-conversation-language@3.2.1What's Changed
Fixed
contract-test.mjsno longer hardcodes the author's profile path. The client bundle is now resolved in priority order:DSH_CONVERSATION_LANGUAGE_CLIENT→ locally builtlib/client.js→ installed copy in a DSH web profile. Assertions are unchanged — the contract test now runs on any machine (it previously failed with ENOENT everywhere else).- Backfilled the missing
3.2.0CHANGELOG entry.
Notes
- Toolchain patch: the built
lib/output is identical to 3.2.0, and the npm tarball differs only in theversionfield. - No runtime behaviour change on the host or client side; no configuration changes required.
Verification
node build-and-verify.mjs fully green: tsdown build → tsc --noEmit → lib artifact check → 0.1.7-alpha.2 regression → 0.2.0-rc.1 client contract test (6/6 PASS)
Install
npm install dsh-conversation-language@3.2.1v3.2.0 — DSH 0.2.0-rc.1 + 详情页 UI
更新内容
新增
- 点击插件名字即可打开详情页(plugins.bundle.config / plugins.row.config slot),页面内含语言选择表单、保存与恢复默认按钮
- 一键构建 + 全量验证流水线(build-and-verify.mjs)
- 0.2.0-rc.1 客户端契约模拟验证(contract-test.mjs)
变更
- 适配 DSH 0.2.0-rc.1:全部 @deepseek-ai/* 依赖升级,宿主侧 settings API 迁移
- 移除通用设置(设置 → 通用)中的"对话语言"行,语言设置仅在插件详情页提供,避免同一功能两个入口重复
- 客户端 bundle 精简(15.2 kB → 10.0 kB)
兼容性
| DSH 版本 | 说明 |
|---|---|
| 0.2.0-rc.1 | 完整支持(详情页 + whileServed 守卫 + SettingsFormModel staged form) |
| 0.1.7-alpha.2 | 降级支持:详情页 slot 不存在时静默 no-op,设置行不受影响 |
开发
- 宿主侧 system-prompt/assemble 拦截与 get_conversation_language tool 不变
- 语言切换保存后下一轮模型步骤即时生效,无需重启
What's Changed
Added
- Plugin detail page: click the plugin name in the Plugins list to open a detail view with a language picker, Save, and Reset-to-default buttons (registered via the plugins.bundle.config / plugins.row.config slots)
- One-shot build + full verification pipeline (build-and-verify.mjs)
- 0.2.0-rc.1 client contract simulation (contract-test.mjs)
Changed
- Adapted to DSH 0.2.0-rc.1: all @deepseek-ai/* deps upgraded, host-side settings API migrated
- Removed the "Conversation language" row from General Settings; language configuration now lives only on the plugin detail page, eliminating the duplicate entry point
- Client bundle trimmed (15.2 kB → 10.0 kB)
Compatibility
| DSH version | Notes |
|---|---|
| 0.2.0-rc.1 | Full support (detail page + whileServed guard + SettingsFormModel staged form) |
| 0.1.7-alpha.2 | Graceful degradation: detail-page slots no-op silently when absent |
Development
- Host-side system-prompt/assemble interception and the get_conversation_language tool are unchanged
- A language change takes effect on the very next model step after saving — no restart needed
v2.0.0 — 适配 DSH 0.1.7-alpha.2 settings 框架 / Adapted to the DSH 0.1.7-alpha.2 settings framework
v2.0.0 — 适配 DSH 0.1.7-alpha.2 settings 框架
⚠️ Breaking Changes(破坏性变更)
- 适配 DSH
0.1.7-alpha.2+的 settings 框架重构:旧宿主侧settings.register(namespace, schema)命名空间模式已移除,本版本改为声明 plugin entryConfigschema - 全部
@deepseek-ai/dsh-*依赖区间^0.1.5-rc.1→^0.1.7-alpha.2;@deepseek-ai/schemastery升至^3.18.4(.volatile()元数据 API) - Settings 持久化目标变更:由
~/.dsh/settings.yaml改为当前 profile 的cordis.patch.yml。旧settings.yaml中的conversation-language:section 不在 legacy 迁移映射表内,升级后请通过设置界面重新选择语言(或手动编辑 profile patch)
变更内容
- 宿主侧:声明 plugin entry
Configschema(z.union(['zh','en']).volatile().default('zh')),settings 框架按 profile entry id(tool-conversation-language)自动投影命名空间;system-prompt/assemble拦截器在每次组装时通过ctx.settings.describe()读取实时值,语言切换无需重启 - 宿主侧 inject:
['settings', 'systemPrompt', 'tools']→['systemPrompt', 'tools']。Cordis 要求 inject 列表中的服务全部已挂载,而 settings 服务仅在 profile 上下文(configEditor + profileContext)中可用;缺失时getLanguage()回退默认zh - 客户端侧:移除已废弃的
settingsScope服务通道,改用ctx.configForms.get('tool-conversation-language')的getSnapshot()/subscribe()/set();写入经remote.settings.mutate落到当前 profile 的 Cordis patch - 共享常量(namespace、语言类型)抽到
src/shared.ts,客户端 bundle 不再 value-import 任何宿主侧包(purity gate) - 新增
client-verify.mjs(客户端 bundle 结构回归)与重写runtime-verify.mjs(宿主侧 0.1.7 服务回归)
验证
node runtime-verify.mjs # 宿主侧:tool 注册/执行、system-prompt/assemble 拦截 — 全部 PASS
node client-verify.mjs # 客户端:bundle 模块面、slot 注册、configForms 通道 — 全部 PASSv2.0.0 — Adapted to the DSH 0.1.7-alpha.2 settings framework
⚠️ Breaking Changes
- DSH
0.1.7-alpha.2+settings framework rework: the old Hostsettings.register(namespace, schema)seam no longer exists; this release declares a plugin entryConfigschema instead - Every
@deepseek-ai/dsh-*range^0.1.5-rc.1→^0.1.7-alpha.2;@deepseek-ai/schemasterybumped to^3.18.4(the.volatile()metadata API) - Settings persistence target changed: from
~/.dsh/settings.yamlto the active profile'scordis.patch.yml. A legacyconversation-language:section insettings.yamlis not in the migration mapping table — after upgrading, re-select the language via the settings UI (or edit the profile patch manually)
Changes
- Host half: declares a plugin entry
Configschema (z.union(['zh','en']).volatile().default('zh')); the settings framework projects the namespace by profile entry id (tool-conversation-language), and thesystem-prompt/assembleinterceptor reads the live value throughctx.settings.describe()on every assembly — language switches take effect without a restart - Host inject list:
['settings', 'systemPrompt', 'tools']→['systemPrompt', 'tools']. Cordis requires every injected service to be mounted; the settings service only exists in profile contexts (configEditor + profileContext), sogetLanguage()falls back to thezhdefault when it is absent - Client half: the removed
settingsScopeservice is replaced byctx.configForms.get('tool-conversation-language')—getSnapshot()/subscribe()/set(), with writes flowing throughremote.settings.mutateinto the active profile's Cordis patch - Shared constants (namespace, language type) moved to
src/shared.tsso the client bundle no longer value-imports any Host-only package (purity gate) - Added
client-verify.mjs(client bundle structure regression) and reworkedruntime-verify.mjsfor the 0.1.7 service surface
Verification
node runtime-verify.mjs # Host: tool registration/execution, system-prompt/assemble interception — all PASS
node client-verify.mjs # Client: bundle module face, slot registration, configForms channel — all PASSv1.5.1 - 语言指令扩展到工具调用参数值 / language instruction covers tool arguments
中文
修复
pwsh/bash卡片上显示的描述不再固定为英文。该文案来自工具调用的description
参数值,此前不在语言指令的作用域内(旧指令只约束「思考过程」与「回复内容」),
而dsh-tool-pwsh的参数 schema 自带英文示例("ls" → "List files in current directory"),
离调用点更近,于是稳定输出英文 active voice。
变更
- 语言指令新增一条:所有面向用户可见的文本都必须使用当前对话语言,包括工具调用的参数值
——pwsh/bash的description、todo_write的content、subagent的
description、任务与作业名称等;并禁止沿用工具 schema 中的英文示例措辞。
验证
pnpm run build通过node runtime-verify.mjs12/12 PASS(exit 0)
安装
dsh plugin --profile web add dsh-conversation-language升级后需重启 DeepSeek Harness 才能生效。
English
Fixed
- The description shown on
pwsh/bashcards is no longer stuck in English.
That text is the call'sdescriptionargument, which sat outside the old language
instruction (it covered only "thinking" and "response content"), while
dsh-tool-pwshships English examples in its parameter schema
("ls" → "List files in current directory").
Changed
- New rule in the language instruction: every user-visible string must use the
current conversation language, including tool-call argument values —pwsh/bash
description,todo_writecontent,subagentdescription, job and task
titles — and must not reuse the English wording of a tool schema's examples.
Verified
pnpm run buildpassesnode runtime-verify.mjs12/12 PASS (exit 0)
Install
dsh plugin --profile web add dsh-conversation-languageRestart DeepSeek Harness after upgrading.
v1.5.0 — DSH 0.1.5-rc.1 兼容 / DSH 0.1.5-rc.1 compatibility
v1.5.0 — 适配 DSH 0.1.5-rc.1
中文
DSH 0.1.5-rc.1 将 system-prompt 的单一 persona section 拆分为两个 section,并移除了
PERSONA_SECTION 导出:
deployment:persona(order 0,旧)→deployment:persona-prefix(order 0,
PERSONA_PREFIX_SECTION)+deployment:persona-suffix(order 10200,
PERSONA_SUFFIX_SECTION)
旧版 1.4.0 的 import { PERSONA_SECTION } from '@deepseek-ai/dsh-system-prompt'
在 0.1.5+ 运行时会抛出 ESM 链接错误,导致插件宿主半整体失效(settings 命名空间、
get_conversation_language 工具、system-prompt/assemble 拦截全部不加载),
客户端设置行静默显示为不可用;即使依赖回落到旧的 0.1.2-rc.1 包,section 名也不再
匹配,语言注入静默空转。
变更内容
- 宿主侧改用
PERSONA_PREFIX_SECTION(缺失时回退PERSONA_SUFFIX_SECTION)追加语言指令,
位置语义与旧版 order-0 一致 - 全部
@deepseek-ai/dsh-*依赖区间^0.1.2-rc.1→^0.1.5-rc.1
(npm/pnpm 预发布 semver 规则下旧区间永远解析不到0.1.5-rc.1) tsdown.config.ts中失效 external@deepseek-ai/dsh-client-web-react
→@deepseek-ai/dsh-client-web- 新增
runtime-verify.mjs:针对真实 0.1.5-rc.1 服务的宿主侧运行时回归脚本
(settings 注册 / tool 注册与执行 / global 与 scoped assembly 拦截),
node runtime-verify.mjs全部 PASS 即表示兼容 - README 增加兼容性表与 pnpm 说明
注意事项
- 安装/构建请使用 pnpm:
0.1.5-rc.1等预发布版本在 npm 注册表处于不可被 npm
解析的状态,npm install会以ETARGET失败 - 安装后重启 DSH 方可生效
- 客户端 API(slots / settingsScope / locale / store / primitives)在 0.1.5-rc.1 中
未变,客户端半无需改动
English
DSH 0.1.5-rc.1 split the single system-prompt persona section into two and removed
the PERSONA_SECTION export:
deployment:persona(order 0, old) →deployment:persona-prefix(order 0,
PERSONA_PREFIX_SECTION) +deployment:persona-suffix(order 10200,
PERSONA_SUFFIX_SECTION)
The 1.4.0 import { PERSONA_SECTION } from '@deepseek-ai/dsh-system-prompt' throws an
ESM link error on 0.1.5+ runtimes, disabling the entire host half of the plugin
(settings namespace, get_conversation_language tool, system-prompt/assemble
interception all fail to load) and leaving the client settings row silently
unavailable; even with dependencies falling back to stale 0.1.2-rc.1 packages the
section name no longer matches and language injection silently no-ops.
Changes
- The host half now appends the language instruction to
PERSONA_PREFIX_SECTION
(falling back toPERSONA_SUFFIX_SECTION), matching the old order-0 placement - Every
@deepseek-ai/dsh-*range bumped^0.1.2-rc.1→^0.1.5-rc.1(under
prerelease semver rules the old range can never resolve to0.1.5-rc.1) tsdown.config.ts: stale external@deepseek-ai/dsh-client-web-reactrenamed to
@deepseek-ai/dsh-client-web- New
runtime-verify.mjs: host-side runtime regression against the real 0.1.5-rc.1
services (settings registration, tool register/execute, assembly interception on
both global and scoped assemblies) — all PASS means compatible - README gains a compatibility table and a pnpm note
Notes
- Use pnpm for install/build: prerelease versions such as
0.1.5-rc.1are
unresolvable by npm on the registry (ETARGET), pnpm resolves them fine - Restart DSH after installing for the plugin to take effect
- Client APIs (slots / settingsScope / locale / store / primitives) are unchanged in
0.1.5-rc.1; no client-side changes were needed
v1.3.0 - Fix module table resolution
修复内容
将 settings-store.ts 中的导入源从 @deepseek-ai/dsh-client-runtime/client 替换为 @deepseek-ai/dsh-client-store。
dsh-client-store 是 DSH 平台模块(在 PLATFORM_MODULES 中),可在客户端模块表中直接访问;而 dsh-client-runtime/client 不在模块表内,会导致运行时 require() 失败。
改动清单
- src/client/settings-store.ts:导入源替换
- src/client/index.ts:ClientContext 类型改用 @deepseek-ai/cordis 的 Context
- tsdown.config.ts:移除 RUNTIME_STORE_EXEMPTION,将 @deepseek-ai/dsh-client-store 加入平台外部依赖
- package.json:替换依赖,版本升为 1.3.0
English
Replace the import source in settings-store.ts from @deepseek-ai/dsh-client-runtime/client to @deepseek-ai/dsh-client-store.
dsh-client-store is a DSH platform module (included in PLATFORM_MODULES) and is accessible directly in the client module table; dsh-client-runtime/client is not in the module table and causes a runtime require() failure.
Changes
- src/client/settings-store.ts: import source replaced
- src/client/index.ts: ClientContext type now uses Context from @deepseek-ai/cordis
- tsdown.config.ts: removed RUNTIME_STORE_EXEMPTION, added @deepseek-ai/dsh-client-store to platform externals
- package.json: swapped dependency, bumped version to 1.3.0
v1.2.4 - DSH 0.1.2-alpha.4 兼容更新
变更
- 升级 dsh-client-ui-primitives, dsh-client-ui-slots, dsh-settings, dsh-tools 至 0.1.2-alpha.4
- 升级 @deepseek-ai/cordis 至 4.0.2
- 升级 @deepseek-ai/schemastery 至 3.18.2
- 新增 @deepseek-ai/dsh-client-ui-settings 依赖
- 新增 typescript 构建依赖
- dsh-client-runtime 维持 0.1.1-rc.2(npm 尚未发布 alpha.4)
适配 DSH 0.1.2-alpha.4 运行时环境。