Repository navigation
Releases: Jiyr0119/dsh-service-console
Release list
v0.7.2
i18n 真修复——修复用户下载安装后(桌面 dsh 客户端)界面退回 entry.label 等原始键。0.7.1 只覆盖了热挂载双装载的一半场景,以下两个根因当时均未修复。
- 根因 1 · 桌面竞态(0.7.1 未修复):桌面客户端由
dsh-app:协议 preload 注入__DSH_LOCALE__原生桥,dsh-client-locale的 apply 必须先await bridge.read()(Electron IPC)才ctx.provide('locale');本插件 apply 先跑,0.7.1 的一次性ctx.get('locale')取到undefined即整体跳过 i18n(注册+绑定全部不做),UI 永久回显原始键。浏览器开发环境无该桥、provide 同步完成,所以本地验证“通过”;热挂载时服务早已就绪也会恢复——两者共同掩盖了竞态。另注:cordisctx.get(strict)在 provider fiber 尚未落定时同样返回undefined。 - 根因 2 · 热更新 dispose 顺序(0.7.1 未修复):dshmarket 更新双装载时第二次
register抛already has locale被跳过,随后旧实例卸载把词典 disposer 撤走,留下没有词典的新实例回显原始键。 - Client:新增
attachLocale(src/client/i18n.ts)——改用ctx.inject(['locale'], …)平台注入等待语义,等 locale 服务真正可用后注册/绑定;provider 重启、热更新重载自动重绑;词典注册保持幂等且不再随实例卸载撤销(双装载安全);非重复类注册错误不再被裸 catch 静默吞掉(console.warn留痕)。 - 回归:typecheck + 39 单测(新增 4 个真实 cordis fiber 驱动用例:locale 晚到、双装载 dispose 顺序、locale 服务重启、locale 缺失降级);时序复现(真实 cordis + 真实词典/绑定代码)确认桌面时序下修复前回显
entry.label、修复后为服务。
v0.7.1 — 热挂载幂等修复(国际化丢失)
修复:桌面 dshmarket 更新后界面国际化丢失
事故链:dshmarket 热更新会把插件装载两次,第二次 locale.register 抛 already has locale、webServer.register 抛 duplicate exact route → 旧版 i18n 初始化放弃绑定(UI 退回 entry.label 原始键)、更新验证失败进入脏状态。
修复:
- Client:词典注册逐条幂等,注册异常也完成翻译绑定(
src/client/i18n.ts) - Host:路由/工具注册
ctx.effect+ 单条 try/catch,重复注册跳过不炸激活 - 新增 6 个热挂载幂等单测(35/35 绿);真机 DSH 回归通过
升级方式:dshmarket 更新到 0.7.1(先停止运行中的 agent),或 dsh plugin 重装 @latest。当前脏状态下热挂载即可恢复翻译。
v0.7.0 — P0 里程碑
P0 功能/体验优化里程碑
真机 DSH 0.2.0-rc.2 全套验证通过(API + 浏览器 QA),typecheck / 29 单测全绿。
- P0-1 受保护进程防护:DSH Web 端口与插件宿主进程不可被面板/API 停止或重启(
PROTECTED_PROCESS) - P0-2 只读
service_list模型工具:LLM 可查询本机服务(含 protected 标记与归属证据) - P0-3 操作结果 Toast:停止/重启结果平台 Toast 横幅,不再随重扫消失
- P0-4 设置页补全 + 自动轮询 + 范围切换:刷新间隔(关闭/2/5/10/30s)、默认范围、显示未知服务;按间隔自动重扫;本次对话/当前工作区/本机范围分段控件(本机警示)
- P0-5 客户端类型化:i18n 键域与 slot/locale 注册编译期校验
依赖新增(devDeps,^0.2.0-rc.2):@deepseek-ai/dsh-tools、@deepseek-ai/dsh-client-ui-primitives
完整变更见 CHANGELOG。
v0.6.0 — DSH v0.2.0-rc.2
v0.6.0 — DSH v0.2.0-rc.2
Breaking Changes
- Requires DSH >= 0.2.0-rc.2 (previously >= 0.1.5-rc.2) —
dsh.plugin.jsonengines updated. - Peer
@deepseek-ai/cordisnarrowed^4.0.2→~4.0.4, matching what the 0.2.0 platform packages declare.
Changes
- Upgraded all
@deepseek-ai/*devDependencies to^0.2.0-rc.2. dynamic/host.js: DSH 0.2.0 removedShellExecutor.run()/start()—runCommandnow usesshell.execute()+execution.result();shell.resolve({ timeoutMs })(wastimeout); stdout/stderr read fromCollectedOutput { text }(the previoustypeof res.stdout === 'string'branch could never be true, so command output was always empty).tsdown.config.tsPLATFORM_MODULESnow mirrors the 0.2.0 module-table seed: added@deepseek-ai/dsh-client-storeand@deepseek-ai/dsh-client-ui-dockkit, removeddsh-client-web-react/dsh-client-ui-attachment/dsh-client-schema-form/dsh-client-runtimewhich no longer exist.- Removed the unused
@deepseek-ai/dsh-invariantsdevDependency. - Version synced across
package.json/dsh.plugin.json/manifest.json/CHANGELOG.md.
Compatibility
Verified against DSH v0.2.0-rc.2: npm run typecheck, npm run build, npm test (17/17), npm pack --dry-run, preflight profile install + --dump-config, and live dsh --profile web --dump-config. The client bundle only leaves react and react/jsx-runtime external — both are in the 0.2.0 seed table, so no new dsh.client.external entries are needed. The new 0.2.0 peer gate only inspects @deepseek-ai/dsh* peers; this package's cordis/react peers are not affected.
v0.5.0 — DSH v0.1.5-rc.2
v0.5.0
Breaking Changes
- Requires DSH >= 0.1.5-rc.2 (previously >= 0.1.2-rc.1)
Changes
- Upgraded all
@deepseek-ai/*devDependencies to^0.1.5-rc.2 - Updated
dsh.plugin.jsonengines to>=0.1.5-rc.2 - Rebuilt
pnpm-lock.yaml
Compatibility
This release is compatible with DSH v0.1.5-rc.2 and later. The plugin APIs used (webServer.register(), slots.inject/register(), locale.register/bind(), ctx.on('tools/result')) remain unchanged in v0.1.5.
v0.4.1
v0.4.0
- Upgrade devDependencies to 0.1.2-rc.1
- Remove deprecated dsh-client-runtime from inject and devDeps
- Update engines constraint to >=0.1.2-rc.1
- Internationalize slot labels (header button, settings section) with locale-aware plugin.name
- Add plugin.name key to zh/en dictionaries
v0.3.2
v0.3.1
v0.3.1 (2026-08-21)
Changes
- Fix README language switch link (was missing Chinese link)
- Add interactive demo (demo/index.html) for browser-based UI preview
- Update README files with demo links
- Update CHANGELOG.md
Fixes
- Simplify ownership logic: allow stopping all non-protected services
- Remove UNKNOWN_OWNERSHIP restriction (only protected processes are read-only)
v0.3.0
v0.3.0 (2026-08-21)
Fixes
- i18n: adopt locale.register + locale.bind mechanism (align with dsh-workspace-explorer)
- API: client uses fetch directly, stop/restart not going through LLM
Features
- Drawer-style popup with tab bar (services / settings)
- Card-based service list with word wrap and auto height
- Add docs/local-debugging.md for symlink-based plugin development
Chore
- Bump version to 0.3.0