Skip to content

Releases: KannaKuron/dsh-ide-git

v0.6.0

Choose a tag to compare

@KannaKuron KannaKuron released this 20 Sep 14:41

新特性

子模块作为独立仓库出现在仓库选择器里(PR #3,by @sitns)

桌面 Git 客户端式行为:git 把每个子模块记成独立工作树(自己的 HEAD / 索引 / 分支),现在它们会被发现出来——点一下子模块,面板就切进那个子仓库,暂存、提交、历史、分支全部作用于它。

  • 发现通道:工作区自身 + 目录扫描 + 每个已发现仓库的子模块(容器工作区同样受益);未初始化的子模块(有登记、无工作树)不出现。
  • 去重按归一化路径(Windows 大小写不敏感),子模块行优先;分支查询并发;扫描结果按 cwd 缓存 60 秒(新仓库/新子模块最多 1 分钟后出现)。
  • 客户端零改动;kind 仍为 nested,渲染为「子仓库」。

同时包含 v0.5.6:exports 修复(npm 安装 + DSH Desktop 用户必升,issue #1)。

v0.5.6

Choose a tag to compare

@KannaKuron KannaKuron released this 20 Sep 14:36

修复

npm 安装后在打包宿主上插件完全不出现(issue #1,PR #2 by @sitns)

package.jsonexports 补上 "./package.json": "./package.json"

DSH Desktop 等打包宿主(loader 无内部 resolveSync)上,dsh-client-modules 组合器走 createRequire 回退分支解析 <pkg>/package.json,缺该导出会抛 ERR_PACKAGE_PATH_NOT_EXPORTED静默跳过客户端半区——插件不出现、零报错,而宿主半区照常工作。开发环境(loader 有内部 resolver)不受影响。

升级建议:npm 通道 + DSH Desktop 用户务必升级。

v0.5.5

Choose a tag to compare

@KannaKuron KannaKuron released this 19 Sep 09:00

Full Changelog: v0.5.4...v0.5.5

v0.5.4

Choose a tag to compare

@KannaKuron KannaKuron released this 19 Sep 08:37

Full Changelog: v0.5.3...v0.5.4

v0.5.3 — 原生右侧栏座位等待服务(v0.5.2 的回落只修了一半)

Choose a tag to compare

@KannaKuron KannaKuron released this 18 Sep 10:36

v0.5.3 — 2026-09-18

类型:fix(原生座位的时序竞态:apply 早于服务就绪时静默漏注册)

  • 现象(用户实测,桌面客户端 + 干净实例):没有 better-sidebar 的宿主上,原生右侧栏「开始」页看不到 Git 卡片,控制台零错误——插件看起来装好了、启用了,就是没有入口。
  • 根因:hostNatively()ctx.get('sidebarRightTabs') 同步探测服务;本插件的 apply 可能早于 ui-sidebar-right 提供该注册表(桌面客户端与干净实例都命中),探测得到 undefined 后直接 return,而且没有任何重试路径——原生座位永不注册。对照:better-sidebar 通道用 ctx.inject(['betterSidebar']) 等待服务,所以同一份代码在有底座的宿主上从不出问题。v0.5.2 的运行时回落之所以能通过,是因为回落发生在服务全部就绪之后,恰好绕开了这个竞态。
  • 修法:原生通道也改为 ctx.inject(['sidebarRightTabs', 'slots'], …) 等待两个服务就位再注册,注册体放进 nativeCtx.effect;fiber 句柄取代旧的 disposeNative 闭包(better-sidebar 接管时 takeNativeDown() 撤下原生座位,语义不变)。
  • 自检补盲:SSR 自检的 fake ctx 过去用「同步 get + inject 永不回调」模拟无底座宿主,恰好把这个竞态模拟没了;现在它同时建模两种等待——better-sidebar 永不到达、原生两服务到达并触发回调。复现与验证:干净实例(只挂本插件)复现「无 Git 卡片、零报错」→ 修复后同一实例原生右侧栏出现 Git 卡片。
  • 相关:不变量 6(两通道互斥)不变;这条是「等待服务」纪律从底座通道补齐到原生通道。

v0.5.2 — 运行时禁用底座后回落原生右侧栏

Choose a tag to compare

@KannaKuron KannaKuron released this 18 Sep 10:06

v0.5.2 — 2026-09-18

类型:fix(运行时禁用底座后,面板从两侧栏一起消失)

  • 现象(用户实测):同时装着 dsh-better-sidebar 与 dsh-ide-git 时,在插件面板里禁用 dsh-better-sidebar,Git 面板在 DSH 原生右侧栏里也不出现了——两条通道同时失效,除非刷新页面。
  • 根因:v0.4.0 的两通道选择是一次性的。better-sidebar 在场时走 Tab 通道(hostedByBetterSidebar = true),原生座位从未挂载;而 ctx.inject(['betterSidebar']) 的回调只在「服务可用」时执行,基础被禁用后 cordis 卸载该回调创建的 effect(Tab 注册随之撤销),但没有任何代码路径把原生座位补回来——if (!hostedByBetterSidebar) hostNatively() 只在外层 apply 时跑过一次,而 apply 的 fiber 不依赖 betterSidebar,不会重载。
  • 修法:把 Tab 注册改成显式 effect(registerTab → 返回清理函数),在清理函数里撤 Tab、复位 hostedByBetterSidebar、调 hostNatively() 回落原生座位。cordis 的依赖语义保证这条清理恰好在基础的服务消失时运行,基础回归时同一 inject 重新触发、回调里的 disposeNative() 分支再把原生座位撤下(两通道互斥不变)。
  • 回归守卫(冒烟测试):断言清理函数存在、复位 hostedByBetterSidebar = false、清理路径调用 hostNatively();SSR 自检三条(native seat / Tab / workspace-less)全绿。
  • 相关:不变量 6(两条通道互斥、自动选)语义不变,只是把「自动选」从一次性快照升级为随服务生命周期变化。

v0.5.1 — 语言切换实时生效

Choose a tag to compare

@KannaKuron KannaKuron released this 15 Sep 12:41

v0.5.1 — 2026-09-15

类型:fix

  • 语言切换现在实时生效(用户提问暴露的缺陷):v0.5.0 把词典选在了 apply() 里一次性算好,于是用户在 DSH 设置里换语言之后必须刷新页面才生效 —— 而 DSH 的 locale 偏好本来就是实时推送的。现在:
    • translatorOf(ctx) 每次查表重新解析语言(按 tag 缓存,一次字符串比较),那个 const dict = dictionaryOf(ctx) 的一次性捕获已删除;
    • 新增 LocaleLive 包装组件订阅 ctx.locale.subscribe,DSH 的 snapshot 一变就重渲染面板 —— 这是 DSH 官方组件的做法,面板不是 DSH 的组件,所以自己订阅;
    • 两条通道(better-sidebar 的 Tab 与 DSH 原生右侧栏座位)都走这层包装。
  • 冒烟测试相应加强:断言 t实时查表(translatorOf(ctx))、dictionaryFor 存在、面板订阅了 locale.subscribe,并显式禁止 const dict = dictionaryOf(ctx) 这种一次性捕获再回来。
  • 兼容性:未覆盖的语言(包括 DSH 将来新增、而我们没有词典的)一律回退英文 —— 英文始终是键完整的那本,不会露出键名,也不会串到中文。
  • 只改客户端半:硬刷新页面即可,不需要重启

v0.5.0 — 21 种界面语言

Choose a tag to compare

@KannaKuron KannaKuron released this 15 Sep 12:35

v0.5.0 — 2026-09-15

类型:feat

  • 界面支持 21 种语言(按 DSH 官方 ctx.locale 规范 + dsh-better-sidebar 的词典规范实现):简繁中文(含 zh-HK / zh-MO / zh-TW)、英语、日语、韩语、德语、法语、意大利语、葡萄牙语、俄语、荷兰语、波兰语、瑞典语、土耳其语、印尼语、越南语、泰语、印地语、阿拉伯语。
    • 语言跟随 ctx.locale 的 active(宿主侧偏好优先,浏览器语言兜底)并实时切换;解析顺序是「精确 tag → 主语言子标签 → 英文」,zh-Hant-* 归到港式繁体。
    • 词典同时注册进 DSH 的 locale 注册表(ctx.locale.register('dsh-ide-git', …)),宿主侧消费者读到的与面板完全一致。
    • 英文始终是键完整的那本:任何未覆盖的语言都回退英文,不会露出键名。
  • 结构:中文与英文是文件内的 ZH / EN,其余语言在 LOCALES 表里一门一条,每条前面有一行 /* locale: <tag> */ 标记;查找从「中文就 ZH、否则 EN」改成表驱动的 dictionaryFor()。加一门语言现在是追加一个条目,不改任何逻辑。
  • 新增守护测试:冒烟测试强制每本词典的键集与中文完全相等——缺键会静默回退英文,面板就成了半翻译状态,这正是它要挡住的(上游 dsh-better-sidebar 用同一条规则,tests/locales.spec.ts)。
  • 代价是客户端半从约 90 KB 涨到 316 KB(gzip 后 70 KB):DSH 的客户端半是无构建单文件,词典只能内嵌,不能像上游那样切懒加载 chunk。
  • 语言文案为机器辅助翻译,欢迎在 issue / PR 里修正——每门语言只改一处,互不影响。
  • 只改客户端半:硬刷新页面即可,不需要重启

v0.4.2

Choose a tag to compare

@KannaKuron KannaKuron released this 15 Sep 11:52

npm 正式通道的第二个版本,也是第一个由 Release 自动发布(OIDC Trusted Publishing)的版本

发布通道

  • 新增 .github/workflows/npm-publish.yml(node 24 + id-token: write,零令牌);npm 侧已登记 Trusted Publisher(repo=KannaKuron/dsh-ide-git,file=npm-publish.yml)。
  • v0.4.1 为手动 bootstrap 首版(令牌建包,无 Release);本版起 GitHub Release published 自动触发 npm publish。

修复

  • 测试夹具跨平台修复(Windows):api 集成测试的临时仓库显式固定 core.autocrlf=false + core.eol=lf——Windows 上 Git for Windows 系统级 autocrlf=true 会让 discard/undo 检回的文件 LF→CRLF,字节级断言全挂(macOS/Linux/CI 不受影响)。43/43 全绿。

安装 / 更新

  • DSH 内安装:dsh plugin --profile add dsh-ide-git(需要 dsh >= 0.1.2)
  • 可选 peer:dsh-better-sidebar >= 0.12.0——未安装时自动挂载 DSH 原生右侧栏,功能一致