Skip to content

Releases

v3.2.4

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 03 Oct 07:13

发布说明 v3.2.4

日期: 2026-10-03

修复 / Fixes

  • 依赖模型重构:@deepseek-ai/schemastery 和 react 从运行时 dependencies 移到 peerDependencies(schemastery 标 optional),仅保留 @deepseek-ai/cordis 作为必选 peer。
    • 根因:本插件是 DSH 宿主扩展,运行时在宿主进程内执行。宿主已经把 schemastery 加载进同一进程作为宿主模块。本插件若再以 dependencies 携带同版本包,pnpm 会在插件树里再实例化一份,与宿主单实例不一致。
    • 影响:插件自身代码行为不变,只改变了"谁提供这些包"——现在统一由 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

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 01 Oct 10:45

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 化

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 01 Oct 10:18

Changed

  • 包名由 dsh-conversation-language 变更为 @dingpenghui/dsh-conversation-language,插件 id、plugins.bundle.config / plugins.row.config slot key、cordis.patch.yml、README 与契约测试断言同步更新。
  • 补充 publishConfig.access = public,确保 scoped 包以公开方式发布。

Changed

  • Package renamed from dsh-conversation-language to @dingpenghui/dsh-conversation-language; the plugin id, plugins.bundle.config / plugins.row.config slot keys, cordis.patch.yml, README and contract-test assertions were updated accordingly.
  • Added publishConfig.access = public so the scoped package publishes publicly.

工具名 get_conversation_language 仅含字母与下划线,本身符合 provider 的 function-name 约束 ^[a-zA-Z0-9_-]+$,不存在 obsidian-sync 那类 400 问题。

v3.2.1 — 契约测试可移植化 / portable contract test

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 01 Oct 08:55

更新内容

修复

  • contract-test.mjs 不再硬编码作者机器上的 profile 路径(C:/Users/braindge/.dsh/profiles/web/...),改为按优先级解析客户端 bundle:环境变量 DSH_CONVERSATION_LANGUAGE_CLIENT → 本地构建产物 lib/client.js → DSH web profile 中的安装副本。断言逻辑完全未变,契约测试现在可在任意机器上复现(此前在其他机器上必然以 ENOENT 失败)。
  • 补记缺失的 3.2.0 CHANGELOG 条目(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.1

What's Changed

Fixed

  • contract-test.mjs no longer hardcodes the author's profile path. The client bundle is now resolved in priority order: DSH_CONVERSATION_LANGUAGE_CLIENT → locally built lib/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.0 CHANGELOG entry.

Notes

  • Toolchain patch: the built lib/ output is identical to 3.2.0, and the npm tarball differs only in the version field.
  • 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.1

v3.2.0 — DSH 0.2.0-rc.1 + 详情页 UI

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 29 Sep 04:53

更新内容

新增

  • 点击插件名字即可打开详情页(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

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 23 Sep 08:56

v2.0.0 — 适配 DSH 0.1.7-alpha.2 settings 框架

⚠️ Breaking Changes(破坏性变更)

  • 适配 DSH 0.1.7-alpha.2+ 的 settings 框架重构:旧宿主侧 settings.register(namespace, schema) 命名空间模式已移除,本版本改为声明 plugin entry Config schema
  • 全部 @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 Config schema(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 通道 — 全部 PASS

v2.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 Host settings.register(namespace, schema) seam no longer exists; this release declares a plugin entry Config schema instead
  • Every @deepseek-ai/dsh-* range ^0.1.5-rc.1 → ^0.1.7-alpha.2; @deepseek-ai/schemastery bumped to ^3.18.4 (the .volatile() metadata API)
  • Settings persistence target changed: from ~/.dsh/settings.yaml to the active profile's cordis.patch.yml. A legacy conversation-language: section in settings.yaml is 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 Config schema (z.union(['zh','en']).volatile().default('zh')); the settings framework projects the namespace by profile entry id (tool-conversation-language), and the system-prompt/assemble interceptor reads the live value through ctx.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), so getLanguage() falls back to the zh default when it is absent
  • Client half: the removed settingsScope service is replaced by ctx.configForms.get('tool-conversation-language') — getSnapshot()/subscribe()/set(), with writes flowing through remote.settings.mutate into the active profile's Cordis patch
  • Shared constants (namespace, language type) moved to src/shared.ts so the client bundle no longer value-imports any Host-only package (purity gate)
  • Added client-verify.mjs (client bundle structure regression) and reworked runtime-verify.mjs for 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 PASS

v1.5.1 - 语言指令扩展到工具调用参数值 / language instruction covers tool arguments

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 12 Sep 10:27

中文

修复

  • 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.mjs 12/12 PASS(exit 0)

安装

dsh plugin --profile web add dsh-conversation-language

升级后需重启 DeepSeek Harness 才能生效。


English

Fixed

  • The description shown on pwsh / bash cards is no longer stuck in English.
    That text is the call's description argument, which sat outside the old language
    instruction (it covered only "thinking" and "response content"), while
    dsh-tool-pwsh ships 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_write content, subagent description, job and task
    titles — and must not reuse the English wording of a tool schema's examples.

Verified

  • pnpm run build passes
  • node runtime-verify.mjs 12/12 PASS (exit 0)

Install

dsh plugin --profile web add dsh-conversation-language

Restart DeepSeek Harness after upgrading.

v1.5.0 — DSH 0.1.5-rc.1 兼容 / DSH 0.1.5-rc.1 compatibility

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 10 Sep 14:34

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 to PERSONA_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 to 0.1.5-rc.1)
  • tsdown.config.ts: stale external @deepseek-ai/dsh-client-web-react renamed 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.1 are
    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

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 04 Sep 09:22

修复内容

将 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 兼容更新

Choose a tag to compare

@Dingpenghui-good Dingpenghui-good released this 03 Sep 06:57

变更

  • 升级 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 运行时环境。