Skip to content

Releases

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 29 Sep 06:22

v0.1.8 — DSH 0.2.0-rc.1 compatibility / 适配 DSH 0.2.0-rc.1

English first, 中文说明在后。

English

This release declares compatibility with DeepSeek Harness 0.2.0-rc.1, so the desktop and web builds on the 0.2.0 line load the plugin again instead of refusing it as incompatible. There are no functional changes: every seam the plugin consumes was verified unchanged between 0.1.7-alpha.2 and 0.2.0-rc.1, and the full check suite plus an isolated-instance run on the 0.2.0-rc.1 host all passed.

What's Changed

Compatibility

  • Declare DSH 0.2.0-rc.1 support: the four @deepseek-ai/* peer ranges gain a 0.2.0-rc.1 arm, clearing the "plugin is incompatible with DSH" rejection on the 0.2.0-rc.1 host.
  • Raise the devDependencies compile baseline to 0.2.0-rc.1, and update the README compatibility badges, requirement lines and header comments. Verified unchanged seams: the conversation.view slot, the ui-slots registration API, both settings generations (.volatile() Config and configForms), the webServer carrier and the platform module table.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness 0.1.2-rc.1 through 0.2.0-rc.1, a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.7...v0.1.8

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明(与英文严格镜像:亮点/安装/要求/变更/反馈,链接相同)

本版本声明兼容 DeepSeek Harness 0.2.0-rc.1:0.2.0 线的桌面端与 web 端可重新加载本插件,不再以「不兼容」为由拒载。无任何功能性变更——插件消费的全部接缝已逐面核实,在 0.1.7-alpha.2 与 0.2.0-rc.1 之间零结构变化;完整检查套件与 0.2.0-rc.1 宿主上的隔离实例实测均通过。

变更内容

兼容性

  • 声明支持 DSH 0.2.0-rc.1:四个 @deepseek-ai/* peer 范围补 0.2.0-rc.1 一节,解除 0.2.0-rc.1 宿主(含桌面版)的「插件与 DSH 不兼容」拒载。
  • devDependencies 编译基线升至 0.2.0-rc.1,并同步 README 兼容徽章、要求行与头注释。已核实不变的接缝:conversation.view 插槽、ui-slots 注册 API、两代设置接缝(.volatile() Config 与 configForms)、webServer 载体与平台模块表。

安装

dsh plugin --profile web add dsh-git-review
dsh web

或从下方附件获取 tarball(dsh-git-review.tgz 恒指向最新发布)。要求 DeepSeek Harness 0.1.2-rc.1 至 0.2.0-rc.1、git 仓库工作区,且宿主 PATH 里有 git。

完整变更

Full Changelog: v0.1.7...v0.1.8

反馈

欢迎提 Issue 与想法:https://github.com/HaoyueQin/dsh-git-review/issues

v0.1.7

Choose a tag to compare

@github-actions github-actions released this 22 Sep 18:12

v0.1.7 — Preferences that survive the harness settings rewrite / 宿主重做设置域后偏好依旧

English first, 中文说明在后。

English

This release moves the plugin onto DeepSeek Harness 0.1.7-alpha.2, whose settings domain was replaced outright: configuration forms now come from a plugin's own .volatile() Config, keyed by the profile entry id, and the browser binds ctx.configForms.get(entryId) instead of ctx.settingsScope. The previous seam still works, so one artifact serves every host from 0.1.2-rc.1 through 0.1.7-alpha.2.

Features

  • The preference surface returns on 0.1.7 hosts. The rewrite removed settings.register and ctx.settingsScope, and its failure mode was silent: the host half's registration threw with nothing in the log (the server booted, the review tab and its API kept working) while the client half's old inject never ran — so the Plugins page dropped the plugin's entire configuration section and preferences fell back to localStorage. The host half now exports its own volatile Config and re-exports it from the entry module, applying the .volatile() marker behind a capability probe (schemastery 3.18.1/3.18.2 has no such method, and an unguarded call while the module loads would fail the whole plugin tree); installSettings probes register/configure and serves whichever generation the host offers, and the client half binds configForms or settingsScope, mutually exclusive, both feeding one store and one shared publisher for the two preference surfaces.
  • Preferences also live on the Plugins page (harness 0.1.6-alpha.2). That version retired the settings modal's plugin cards in favour of plugins.bundle.config; the plugin registers both slots against the same store, so the form follows whichever surface the host declares.

Fixes

  • Refs, paths and file names sort naturally. Ref lists, file lists and tree rows used plain codepoint comparison, so v0.3.10 sat between v0.3.1 and v0.3.2 in the branch popover and the compare pickers, and f10.txt preceded f9.txt in every path feed. They now share one locale-pinned numeric comparator (Intl.Collator) across refs, status, commit files, file lists, fs-list and the client file tree.

Compatibility

  • Targets DeepSeek Harness 0.1.7-alpha.2. conversation.view and its label thunk, the session-scope standard props, InputActions.setDraft, MarkdownText/MarkdownLabels, the panelInfo hook, the slots / sessions / locale / webServer service names, webServer.register and the dsh.client manifest are all unchanged; a scan of every --dsw-* token the plugin uses against the 0.1.7 stylesheets found no gaps. typecheck is clean against the 0.1.7 type definitions and lib/ comes out byte-identical across rebuilds. The peer range gains the 0.1.7-alpha.1 series (prerelease series stay enumerated by hand — a semver prerelease comparator never covers the next minor).
  • Two new regression gates. check-boot now also composes a ≤0.1.6 settings provider, a 0.1.7 provider, and a child process that deletes Schema.prototype.volatile before importing the built artifact; check-meta locks the two seams in source and in the bundle (no unguarded settings.register, .volatile() only through its helper, namespace == patch id == package name, the entry module must re-export Config, and the built client half must carry both service reads). Each new lock was verified against a deliberately broken build.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness 0.1.2-rc.1 through 0.1.7-alpha.2 (each prerelease series is pinned by hand in peerDependencies), a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.6...v0.1.7

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明

本版把插件推进到 DeepSeek Harness 0.1.7-alpha.2——该版本把设置域整体换掉了:配置表单改由插件自己的 .volatile() Config 提供、以 profile 条目 id 为键,浏览器侧从 ctx.settingsScope 改为 ctx.configForms.get(entryId)。旧接缝仍然可用,因此一份产物同时服务 0.1.2-rc.1 至 0.1.7-alpha.2 的全部宿主。

新功能

  • 0.1.7 宿主上偏好配置区回来了。 那次重做删掉了 settings.register 与 ctx.settingsScope,而失效方式是完全静默的:host 半的注册抛错、日志一行都没有(服务照常启动、审查 tab 与它的接口都正常),client 半的旧 inject 则永远不会执行——于是 Plugins 页里本插件的配置区整块消失、偏好悄悄回落 localStorage。现在 host 半导出自己的 volatile Config 并从入口模块再导出,.volatile() 标记走能力探测(schemastery 3.18.1/3.18.2 没有这个方法,模块加载期裸调会失败整棵插件树);installSettings 按探测到的 register/configure 各走一条路径,client 半则二选一绑定 configForms 或 settingsScope,两者互斥、共用同一个 store,并由同一个发布函数负责两个偏好出口。
  • 偏好也随 Plugins 页(harness 0.1.6-alpha.2)。 该版本下线了设置弹窗的插件卡片、改为 plugins.bundle.config;本插件把两个 slot 都注册到同一个 store,于是表单跟着宿主声明的那一面走。

修复

  • 引用列表、路径与文件名改为自然序。 此前引用列表、文件列表与树行都用码点比较:v0.3.10 会排在 v0.3.1 与 v0.3.2 之间(分支弹层与对比选择器同时中招),f10.txt 也会排在 f9.txt 前面。现在这些地方统一共用同一个锁定 locale 的数字比较器(Intl.Collator),覆盖 refs、status、commit files、list-files、fs-list 与客户端文件树。

兼容性

  • 目标宿主 DeepSeek Harness 0.1.7-alpha.2。 conversation.view 及其 label thunk、会话作用域标准 props、InputActions.setDraft、MarkdownText/MarkdownLabels、panelInfo 钩子、slots / sessions / locale / webServer 服务名、webServer.register 与 dsh.client 清单均未变化;插件用到的每一个 --dsw-* token 也与 0.1.7 的样式表逐个比对过,无缺口。typecheck 在 0.1.7 类型定义下零错误,lib/ 多次重建字节一致。peer 范围新增 0.1.7-alpha.1 系列(prerelease 系列仍逐个手写枚举——semver 的 prerelease 比较器永远覆盖不到下一个 minor)。
  • 新增两道回归门。 check-boot 增加了三种组合:≤0.1.6 形状的 settings 提供方、0.1.7 形状的提供方,以及一个在导入构建产物前删掉 Schema.prototype.volatile 的子进程;check-meta 则在源码与产物两侧锁死两代接缝(禁止裸调 settings.register、.volatile() 只许走助手、命名空间 == patch id == 包名、入口必须再导出 Config、构建出的 client 半必须同时携带两代服务读取)。每一道新锁都用"故意弄坏一遍"验证过非恒真。

安装

dsh plugin --profile web add dsh-git-review
dsh web

或取下方 tarball(dsh-git-review.tgz 始终指向最新版)。要求 DeepSeek Harness 0.1.2-rc.1 至 0.1.7-alpha.2(每个 prerelease 系列在 peerDependencies 里逐个钉住)、工作区是一个 git 仓库,且宿主 PATH 里有 git。

完整变更

Full Changelog: v0.1.6...v0.1.7

反馈

问题与建议欢迎提:https://github.com/HaoyueQin/dsh-git-review/issues

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 15 Sep 13:10

v0.1.6 — Script-aware previews, one glass recipe, harness 0.1.6 support / 脚本感知预览、统一毛玻璃配方与 harness 0.1.6 适配

English first, 中文说明在后。

English

This release explains the HTML previews that never start, hands the commit-graph header over to the frosted-glass bridge so it stops reading as a solid slab among glass neighbours, and moves the plugin onto DeepSeek Harness 0.1.6-alpha.1.

Features

  • Script-dependent HTML previews now say why they are blank. The preview renders inside a sandbox="" iframe, so a page that needs JavaScript (or a canvas) sits black or frozen while a pure CSS/SMIL page keeps animating — and a reader had no way to tell a broken pane from a sandboxed one. The pane now detects <script> / <canvas> in the file (word boundaries keep <noscript> from tripping it, covered by check-parse #64) and shows an in-flow notice strip above the preview — never covering it — with an open-in-browser shortcut wired to the existing open-with endpoint. Both the worktree file view and the non-repo file view get it.

Fixes

  • The commit-graph header joins the frosted glass. The column header (graph / subject / date / commit / author) is a sticky row nested inside the registered [data-git-review-graph] panel. A glass-registry rule addresses the registered element itself and never its descendants, so no panel rule ever reached the header: it kept its own opaque paint while the toolbar, tree, diff and graph panels all frosted — exactly the "the table head will not join the glass" symptom. It is now registered as its own fill surface (data-git-review-graph-header), which also removes a hand-written recipe that carried the same specificity as the generated rule (body[attr] [attr], so the winner was stylesheet insertion order), froze the fill at 55%, and shipped no sheen gradient, no dark-scheme calibration and no -webkit-backdrop-filter. The header now tracks the panel-opacity slider like every other surface (0.2 → 0.176, 0.5 → 0.38, 0.9 → 0.65), and falls back to --dsw-alias-bg-layer-1 with the blur chain dropped when the glass gate is off.

Compatibility

  • Targets DeepSeek Harness 0.1.6-alpha.1. Every contract this plugin touches was re-verified against the new tag: conversation.view, the session-scope runtime shares and the settings.plugin.item card are unchanged; ui-session, ui-layout, ui-renderer and dsh-settings carry no client-visible change (docs, JSDoc and lint comments only); ui-conversation moved composer-only types into contract/draft-editor.ts and added the conversation.input.permission seat, neither of which this plugin touches; ui-primitives left MarkdownText itself alone. The plugin relies on no host DOM class name or structural selector, so the 512 changed client files cannot reach it. typecheck is clean against the 0.1.6 type definitions and lib/ comes out byte-identical, so this release changes no plugin behaviour beyond the two items above. The peer range gains the 0.1.6-alpha.1 series (^0.1.6-alpha.1); prerelease series stay enumerated by hand because a semver prerelease comparator never covers the next minor.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness 0.1.2-rc.1 through 0.1.6-alpha.1 (each prerelease series is pinned by hand in peerDependencies), a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.5...v0.1.6

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明

本版解释「HTML 预览为什么一直不亮」,把提交图谱的表头交给毛玻璃桥接(它不再是玻璃邻居之间的一块实心板),并把插件推进到 DeepSeek Harness 0.1.6-alpha.1。

新功能

  • 依赖脚本的 HTML 预览现在会说明它为什么是黑的。 预览跑在 sandbox="" iframe 里,需要 JavaScript(或 canvas)的页面会停在黑屏或冻结,而纯 CSS/SMIL 页面照常动——读者分不清「预览坏了」还是「被沙箱限制了」。现在预览面板会检测文件里的 <script> / <canvas>(词边界避免 <noscript> 误报,check-parse #64 覆盖),并在预览上方显示一条流内提示条(绝不遮挡预览),附「在浏览器打开」快捷方式(走既有的 open-with 端点)。工作区文件视图与非仓库文件视图都已接入。

修复

  • 提交图谱表头接入毛玻璃。 列表头(图 / 描述 / 日期 / 提交 / 作者)是嵌在已注册的 [data-git-review-graph] 面板里的 sticky 行。玻璃注册表的规则只作用于注册元素本身、不覆盖后代,所以任何面板规则都到不了表头:它一直保持自己的不透明涂料,而工具条、文件树、差异、图谱面板全是毛玻璃——正是「表头不能正常对接毛玻璃接口」的症状。现在它作为独立的 fill 表面注册(data-git-review-graph-header),同时删掉了一段手写配方:那段配方与 bridge 生成的规则特异度完全相同(body[attr] [attr],胜负取决于样式表插入顺序),把填充锁死在 55%,且没有高光渐变、没有暗色校准、也没有 -webkit-backdrop-filter。如今表头与其它表面一样跟随「面板不透明度」滑块(0.2 → 0.176、0.5 → 0.38、0.9 → 0.65),毛玻璃门控关闭时回落到 --dsw-alias-bg-layer-1 并撤掉模糊链。

兼容性

  • 目标宿主 DeepSeek Harness 0.1.6-alpha.1。 本插件触及的每一处契约都已对新 tag 重新核对:conversation.view、会话作用域运行时共享与 settings.plugin.item 卡片均未变;ui-session、ui-layout、ui-renderer、dsh-settings 无可被客户端感知的变化(仅文档、JSDoc 与 lint 注释);ui-conversation 把 composer 专用类型搬进 contract/draft-editor.ts 并新增 conversation.input.permission 座位,两者本插件都不碰;ui-primitives 的 MarkdownText 本体未动。插件不依赖任何宿主 DOM 类名或结构选择器,因此 0.1.6 那 512 个客户端文件变更到不了它。typecheck 在 0.1.6 类型定义下零错误、lib/ 产物字节不变——除上面两项外,本版不改变插件行为。peer 范围新增 0.1.6-alpha.1 系列(^0.1.6-alpha.1);prerelease 系列仍逐个手写枚举,因为 semver 的 prerelease 比较器永远覆盖不到下一个 minor。

安装

dsh plugin --profile web add dsh-git-review
dsh web

或取下方 tarball(dsh-git-review.tgz 始终指向最新版)。要求 DeepSeek Harness 0.1.2-rc.1 至 0.1.6-alpha.1(每个 prerelease 系列在 peerDependencies 里逐个钉住)、工作区是一个 git 仓库,且宿主 PATH 里有 git。

完整变更

Full Changelog: v0.1.5...v0.1.6

反馈

问题与建议欢迎提:https://github.com/HaoyueQin/dsh-git-review/issues

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 11 Sep 12:18

v0.1.5 — Picture diffs and a correctness pass / 图片 diff 与一轮正确性修复

English first, 中文说明在后。

English

This release brings picture comparison into the review tab and closes a round of correctness bugs found while auditing the previous release: timeouts, transport reporting, sha256 repositories, quoted paths, search marking, the file tree's row budget and Markdown reference images.

Features

  • Picture diffs — a changed image (raster, SVG, ICO) now renders inside the diff view instead of a byte-level text diff, in four modes: 2-up (side by side in the split view, stacked in unified), swipe, onion skin and a difference blend, each with a one-click switch back to the source diff. Pictures show by default, both ends are labelled with their W × H size, and an added/deleted file draws a placeholder on the missing side. The host's file-bytes gained stage: 'index' and answers missing for an end with no file — the added/deleted side of a picture is a state, not an error — and image-sides.ts derives each end's byte source (worktree, index, ref, empty) from the active mode and scope, with one shared frame that aspect-fits, never upscales, and takes the larger end.

Fixes

  • Timeouts now read from one table (src/action-timeouts.ts). The browser used to abort every request at 10s while the host allows network actions 120s, so a slow push/fetch/pull/conflict-finish reported "host unavailable" while git kept working; tag-push was worse — the client's hand-written list missed it entirely. Both halves read the shared table now (the host's budget plus a 30s margin), and the abort timer also covers the BODY read, since fetch resolves on headers and a stalled body would leave the promise pending forever. The unused hostAvailable probe with its misleading "probed once per page" doc is gone.
  • Transport failures no longer impersonate git's exit code 1. runGitCapture folded execFile's timeout/maxBuffer failures (a string code plus killed) into the same 1 that callers read as a real answer — git grep's "no match", commit's "nothing to commit" — so a timed-out or over-buffer search silently answered "0 matches". runGitBytes and runGitStreamed still did the same; every git path now reports -1 for a transport failure and keeps git's real exit code otherwise, and the branch/tag guards no longer read a timeout as an invalid name.
  • A truncated log feed drops its unterminated tail record — the guard file-history already had. The graph used to show a half subject where the history popover showed none.
  • sha256 repositories work. Object ids accept 40 or 64 hex; a sha256 repository used to blank the graph, blame and commit-files while porcelain and name-status stayed fine.
  • Quoted paths decode once, in git-parse. unquoteHeaderPath moved out of the diff pane (the pane and the host's search sections read the same header paths), and splitDiffSections decodes a C-quoted path instead of counting matches under a quoted phantom name.
  • \ No newline at end of file marks the line it follows. It used to land on the last +/- cell, so a file whose unchanged final line had no trailing newline showed the marker on the wrong line, and a marker after a hunk's first context line was dropped entirely; it now marks both cells of the context row.
  • Search marks span syntax tokens. A query crossing a token boundary (const foo) still counted as a hit and stayed navigable while nothing on the row was marked; matches are now computed on the whole line and cut into the token segments, with a forward cursor (O(segments + ranges) instead of the product). The search header also counts only the rows the pane actually renders, so it stops advertising an unreachable n / m on huge diffs.
  • The file tree keeps its directory shape under a row budget. A workspace past the page size used to mount every recursive node at once — thousands of untracked files in one go — and the first fix degraded the panel to the flat list; the tree is now flattened (flattenTree, collapsing respected) and rendered as one bounded row slice, so large repositories keep the tree without mounting every node.
  • Markdown collapsed references (![alt][]) carry the alt text as their id: such an image is now collected and rewritten to the same-origin asset URL, and a remote definition is defanged into a click-to-load link instead of slipping past that step.
  • Stricter parsing and guards. A hunk ended by junk settles its counts, so damaged flags it instead of silently dropping lines; buildHunkPatch rejects a fractional or NaN index rather than slicing a bogus patch; parseDecorations splits on ', ', so a ref name containing a comma no longer produces a phantom badge; resolveMdAsset rejects protocol-relative URLs.
  • Smaller client fixes. branch-rename's Enter path and its confirm button honour the agent-running gate like every other write in that popover; onGraphResizeKey depends on effectiveGraphWidth, so the first arrow press no longer jumps from a width the user was not looking at; the truncated / empty-direction banners moved out of .body (a flex row that collapsed them into a narrow left column and squeezed the panes); the graph pane joins the frosted-glass registry and the glass commit header blurs instead of letting scrolled rows show through; .scopeBtnActive keeps its active look when disabled and .pluginPrefBtn gained a disabled state; the guide-bubble shadow and the PDF letterbox use theme tokens; two dead aliases and one dead locale key are gone; the settings card registers through its injected scope; English count strings read correctly at 1.

Regression gates (so this class of bug cannot ship again)

  • check-meta gains a tenth lock: the host's NETWORK_TIMEOUT_MS actions must equal NETWORK_ACTIONS in both directions, and the client must keep no private slow-action list — the tag-push gap was exactly a hand-written second list.
  • Two locks that could never fail are real now: the font lock matched only the --dsw-font-* prefix while the code stack is --ds-font-family-code, so it compared [] with [] (it scans every font variable against an allow-list and asserts the scan found something); the hook-order lock missed the generic call form (useState<T>(…)), leaving 73 of review-view's 256 hook calls invisible, so a hook below the early return would still have passed.
  • check-git claimed to cover the streaming caps while asserting no truncation anywhere: a diff past DIFF_CAP must now come back truncated and still parse. The rest of the suite was tightened as well (read PLATFORM_MODULES itself and lock the reverse direction, strip url(...) before collecting CSS class definitions, make the paging assertion unconditional, drop a tautological conjunction, pass undefined instead of a stray ref argument, fix a fixture hunk header that was actually damaged, cover the malformed-record guards with inputs), and check-parse covers the new pure functions: side resolution, rename × scope and SVG prolog for pictures, flattenTree order/collapse, and collapsed references.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness 0.1.2-rc.1 through 0.1.5-rc.1 (the peer range also covers 0.1.5-rc.2), a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.4...v0.1.5

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明

本版为审查页加入图片对比,并修复上一版审查中发现的一批正确性问题:超时、传输错误上报、sha256 仓库、引号路径、搜索标记、文件树行预算与 Markdown 引用式图片。

新功能

  • 图片 diff —— 变更的图片(栅格 / SVG / ICO)现在直接在差异视图内渲染,而不是字节级文本 diff,四种模式:并排(双列左右、单列上下)、滑动、叠加、差异混合,每种都能一键切回源码 diff。图片默认显示,两端标注 W × H 尺寸,新增/删除文件的缺失侧画占位。host 的 file-bytes 新增 stage: 'index',并在某一端没有文件时返回 missing——图片的新增/删除侧是一种状态而非错误;image-sides.ts 依据当前模式与 scope 推导每端的字节来源(工作树 / 索引 / ref / 空),四种模式共用一个帧:等比适配、只缩不放、取较大的一端。

修复

  • 超时统一到一张表(src/action-timeouts.ts)。浏览器原本每次请求 10s 就中止,而 host 给网络动作 120s,于是慢速的 push/fetch/pull/conflict-finish 会误报「host 不可用」而 git 仍在工作;tag-push 更糟——客户端手写的清单把它整个漏掉了。现在两端同读共享表(host 预算 + 30s 余量),且 abort 计时器也覆盖 BODY 读取:fetch 在响应头阶段就 resolve,卡住的响应体会让 promise 永远挂着。未使用的 hostAvailable 探测连同它那句误导性的「每页只探测一次」注释一并删除。
  • 传输失败不再冒充 git 的退出码 1。 runGitCapture 曾把 execFile 的超时/maxBuffer 失败(字符串 code 加 killed)归一成与调用方所读的「真实答案」相同的 1——git grep 的「无匹配」、commit 的「无改动可提交」——于是超时或超缓冲的搜索静默回答「0 个匹配」。runGitBytes 与 runGitStreamed 当时仍是同样处理;现在所有 git 路径的传输失败统一报 -1,其余保留 git 真实退出码,分支/tag guard 也不再把它读成「名字非法」。
  • 截断的 log 流丢弃未闭合的尾记录 —— 与 file-history 早已有的守卫一致。此前图谱会显示半截 subject,而历史弹层什么都不显示。
  • sha256 仓库可用。 对象 id 同时接受 40 或 64 位十六进制;sha256 仓库此前会让图谱、blame、commit-files 全空,而 porcelain 与 name-status 却正常。
  • 引号路径统一在 git-parse 解码一次。 unquoteHeaderPath 从 diff 面板移出(面板与 host 搜索段落读的是同一批头路径),splitDiffSections 也解码 C 引号路径,不再按引号包裹的幻影文件名计数。
  • \ No newline at end of file 标注它跟随的那一行。 此前它会落到最后一个 +/- 格上,于是「末行无换行且未修改」的文件会把标记显示在错行;hunk 首个上下文行之后的标记则被整个丢弃。现在它同时标注上下文行两侧的格子。
  • 搜索标记可跨语法 token。 跨 token 边界的查询(const foo)此前仍算命中、仍可导航,但行内什么都不标;现在匹配在整行上计算再切进各 token 段,并用前向游标(O(段数 + 匹配数),不再是乘积)。搜索头也只统计面板实际渲染的行,巨型 diff 上不再显示够不到的 n / m。
  • 文件树在行预算下保持目录结构。 超出单页的工作区此前会一次性挂载所有递归节点——上千个未跟踪文件一起上——而第一次修复又把面板降级成了平铺列表;现在树被扁平化(flattenTree,尊重折叠状态)后按一页的行切片渲染,大仓库既保留树形又不全量挂载。
  • Markdown 引用式图片(![alt][])以 alt 文本作为 id:这类图片现在会被收集并重写为同源 asset URL,远程定义也会被 defang 成点击加载的链接,不再从这一步溜过去。
  • 更严格的解析与守卫。 被垃圾行结束的 hunk 会结算计数,damaged 能标出它而不是静默丢行;buildHunkPatch 拒绝小数或 NaN 索引,不再切出畸形补丁;parseDecorations 按 ', ' 分割,名字含逗号的 ref 不再产生幻影徽标;resolveMdAsset 拒绝协议相对 URL。
  • 其他客户端小修。 branch-rename 的回车路径与确认按钮像该弹出层里其他写操作一样遵循 agent 运行门控;onGraphResizeKey 依赖 effectiveGraphWidth,首个方向键不再从用户根本没看到的宽度起跳;截断 / 空方向横幅移出 .body(一个 flex...
Read more

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 10 Sep 15:28

v0.1.4 — Boot fix / 启动修复

English first, 中文说明在后。

English

v0.1.3 has been withdrawn (GitHub release, tag and the npm package) a few hours after it shipped: it read ctx.webServer as a property while declaring no dependency on it, and cordis throws cannot get property "webServer" without inject on exactly that read when the provider is absent or not yet composed. Because the loader applies a profile's patch list as one group, that single line failed the entire plugin tree — dsh would not start at all. If you installed 0.1.3, upgrade to this release (or fall back to 0.1.2, which boots).

Fixes

  • Boot (the withdrawal reason): the optional web carrier is now handled from an injected child scope — ctx.inject(['webServer'], (wctx) => wctx.effect(() => wctx.webServer.register(…))). That covers every composition order: no web carrier at all (the settings card still loads), carrier already composed, and carrier composed later. It also keeps the route attached to a carrier that is restarted or replaced, which the first fix attempt lost — a replaced carrier used to leave the tab's API answering 404 with no log.
  • Draft-panel font: .draftRowPath referenced --dsw-font-mono, a token the theme never defined, so it silently fell back to the system monospace stack; it now uses the theme's real --ds-font-family-code.

Regression gates (so this class of bug cannot ship again)

  • pnpm check:boot loads the built artifact lib/index.js into a bare cordis context and asserts four compositions: carrier absent, carrier first, carrier later, and carrier replaced (the route must move to the new carrier, release the old registration, and not duplicate). It fails on the withdrawn 0.1.3 build and on the intermediate fix — both verified against archived artifacts.
  • check-meta gains two static locks: service properties may only be read inside a scope that declares them (covering ctx?.x, ctx['x'] and Reflect.get(ctx, 'x')), and font tokens must exist in the theme.
  • CI and Release workflows run the new check against the committed lib/.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness 0.1.2-rc.1 through 0.1.5-rc.1 (the peer range also covers 0.1.5-rc.2), a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.2...v0.1.4

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明

v0.1.3 已撤回(GitHub Release、tag 与 npm 包一并撤回)。它把 ctx.webServer 当属性读却没有声明依赖,而提供方缺席或尚未就绪时,cordis 正好在这一次读取上抛 cannot get property "webServer" without inject;loader 又把整个 patch 列表当一组 apply,于是这一行让整棵插件树加载失败——dsh 完全起不来。装过 0.1.3 的请升级到本版(或临时回退 0.1.2,它能正常启动)。

修复

  • 启动(撤回原因):可选 web 载体改为在注入子 scope 里处理——ctx.inject(['webServer'], (wctx) => wctx.effect(() => wctx.webServer.register(…)))。三种时序全覆盖:完全没有 web 载体(设置卡照常加载)、载体已就绪、载体稍后就绪。它还让路由跟随载体的重启/替换——第一版修复丢掉了这一点,载体被替换后标签页 API 会在毫无日志的情况下 404。
  • 草稿箱字体:.draftRowPath 引用了主题从未定义的 --dsw-font-mono,静默回落系统等宽字体;改用主题真实 token --ds-font-family-code。

回归门(这类问题不会再发出去)

  • pnpm check:boot 把构建产物 lib/index.js 装进裸 cordis,断言四种组合:载体缺席 / 载体先到 / 载体后到 / 载体被替换(路由必须迁到新载体、释放旧注册、且不重复)。对已撤回的 0.1.3 产物与中间版修复都会红(均以归档产物实测)。
  • check-meta 新增两道静态锁:服务属性只能在声明了它的 scope 内读取(覆盖 ctx?.x、ctx['x']、Reflect.get(ctx, 'x'));字体 token 必须真实存在于主题。
  • CI 与 Release 工作流都会对已提交的 lib/ 跑这道新检查。

安装

dsh plugin --profile web add dsh-git-review
dsh web

或下载下方 tarball(dsh-git-review.tgz 恒指最新)。要求 DeepSeek Harness 0.1.2-rc.1 至 0.1.5-rc.1(peer 范围同样覆盖 0.1.5-rc.2)、git 仓库工作区,以及宿主 PATH 里的 git。

完整变更

Full Changelog: v0.1.2...v0.1.4

反馈

问题与建议:https://github.com/HaoyueQin/dsh-git-review/issues

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 08 Sep 02:14

v0.1.2

English first, 中文说明在后。

English

An interaction-completeness release over v0.1.1: every directory row in every file list now right-clicks exactly like a file row — open, reveal, copy, add-to-chat, rename and recursive delete, plus the worktree tree aggregates each folder's staged/unstaged/discard actions from the files beneath it.

What's Changed

Features

  • Right-click any folder: the main changes tree, the commit-detail tree, the graph worktree tree and the non-repository browser all open the same file-manager menu on directories — open, reveal in file manager, open-with, copy path/folder name, add to conversation, rename, recursive delete.
  • Aggregate folder SCM actions: a worktree directory offers stage/unstage/discard rolled up from its changed files; directory discard restores tracked children to HEAD while cleaning untracked ones (including nested untracked directories).
  • Render markdown previews in non-repository workspaces: the file browser previews markdown instead of source-only.

Fixes

  • Render non-ready states after every hook: the review view keeps hook order across all early returns (new check-meta gate pins it).

Docs

  • Record harness 0.1.3-alpha.2 compatibility.

Chores

  • Mirror to Gitee on every push; sync the CI workflow to v2.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness >=0.1.2-rc.1, a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.1...v0.1.2

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文

v0.1.1 之后的交互补全版本:全部文件列表里的每一行目录都能像文件一样右键——打开、显示、复制、添加到对话、重命名、递归删除;工作区变更树还按目录聚合了暂存/取消暂存/放弃更改。

变更内容

功能

  • 文件夹右键全覆盖:变更主树、commit 详情树、图谱工作树、非仓库浏览页,目录行弹出与文件同一套资源管理器菜单——打开、显示、打开方式、复制路径/文件夹名、添加到对话、重命名、递归删除。
  • 目录级 SCM 聚合:工作区目录按其下变更文件聚合出暂存/取消暂存/放弃更改;目录放弃时已跟踪子文件恢复到 HEAD、未跟踪子文件(含嵌套未跟踪目录)一并清理。
  • 非仓库浏览也渲染 markdown 预览:文件浏览页不再只给源码。

修复

  • 所有 hooks 之后都渲染非就绪态:审查视图跨全部分支保持 hook 顺序(新增 check-meta 门禁锁定)。

文档

  • 记录 harness 0.1.3-alpha.2 兼容性。

工程

  • 每次推送自动镜像到 Gitee;CI 工作流同步到 v2。

安装

dsh plugin --profile web add dsh-git-review
dsh web

或在下方下载 tarball(dsh-git-review.tgz 恒指最新版)。要求 DeepSeek Harness >=0.1.2-rc.1、git 仓库工作区,且宿主 PATH 里有 git。

完整变更记录

Full Changelog: v0.1.1...v0.1.2

反馈

欢迎提 Issue: https://github.com/HaoyueQin/dsh-git-review/issues

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 07 Sep 07:26

v0.1.1 — Harden everything, smooth the graph / 全面加固与图谱体验

English first, 中文说明在后。

English

A hardening release over v0.1.0: a full-repo audit closed one fatal and eight severe issues across the host and client, the graph page gained an order guard plus a reworked collapse/width model, and the checks now bite.

What's Changed

Features

  • Guard ref-range order: ends that would compare empty are disabled in the pickers; an empty result gets a hint with one-click swap.
  • Rework graph collapsing: drag snaps into the clickable rail and back out with no jump; the toggle expands to content width (900 cap); opening defaults widest, selecting narrows to reading width.
  • Resize commit file trees: the graph detail trees share the changes tree drag/keyboard/double-click contract.
  • Float return buttons: graph↔file crossings ride bottom-right pills above the composer clearance.
  • Defang remote images: markdown preview turns remote images into click-to-load links; unsafe link schemes drop to text.
  • Show market badges: Awesome DSH Plugin, commit activity and last-commit shields.

Fixes

  • Revive truncated streaming: over-cap git output returns partial results instead of errors; HEAD fallback only for the empty-tree literal.
  • Close write-race holes: hunk lockup on patch failure, missing running gate on commit/push, probe caching, cross-workspace mark leaks, readonly preference wipe.
  • Stop silent wrong baselines: file-diff/search no longer fall back to HEAD on any failure.
  • Block ReDoS: nested-quantifier search patterns degrade to literal on host and client.
  • Fix commit tree scrolling: the graph detail file list fills and scrolls; audited every other scroll container.
  • Unoverlap the toolbar: the ref-range cluster fits two full pickers before totals.

Docs

  • Split the scale guards: stream/preview caps documented separately; install no longer pins a version; English confirmations keep their Confirm.

Chores

  • Checks bite: exact 40 actions, dead-CSS assertions, coverage for commit-files/list-files/open-with, quoting and damage regressions.
  • Raise engines to Node >= 23.6; unify peer/dev ranges; typecheck the build config; CI watches the manifest.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness >=0.1.2-rc.1, a git-repository workspace, and git on the host PATH.

Full Changelog

Full Changelog: v0.1.0...v0.1.1

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明(与英文严格镜像:亮点/安装/要求/变更/反馈,链接相同)

中文

v0.1.0 之后的加固版本:全仓审计关掉 1 个致命和 8 个严重问题,图谱页加上顺序守卫并重做了折叠/宽度模型,自检开始真正咬人。

变更内容

功能

  • 区间顺序守卫:必空的选择端直接禁用;空结果给提示加一键交换。
  • 重做图谱折叠:拖拽进出点阵列无跳变;三角展开到内容宽度(900 封顶);点开默认最宽,选中收窄到阅读宽度。
  • commit 文件树可调宽:与变更树同一套拖拽/键盘/双击契约。
  • 返回按钮浮动:图谱↔文件穿越按钮落到内容区右下角,避开输入框。
  • 远程图片点击加载:markdown 预览不再自动拉第三方图片;危险链接协议退化为纯文本。
  • 市场徽章:Awesome DSH Plugin、提交活跃度、末次提交。

修复

  • 复活流式截断:超限 git 输出返回部分结果而非报错;HEAD 回退只限空树字面量。
  • 堵住写竞态:hunk 裁剪失败锁死、提交推送缺门控、探针缓存、跨仓标记泄漏、只读偏好误删。
  • 不再静默错基线:file-diff/search 不再任意失败都回退 HEAD。
  • 拦住 ReDoS:嵌套量词搜索在 host 与客户端都降级为字面量。
  • 修好 commit 文件树滚动:图谱详情文件列填满可滚;其余 11 个滚动容器逐个审计。
  • 工具栏不重叠:区间簇放下两枚完整选择框,统计不再盖上去。

文档

  • 拆分规模帽:流式/预览上限分开写;安装不再钉版本号;英文二次确认补回 Confirm。

工程

  • 自检咬人:40 动作精确断言、死 CSS 断言、commit-files/list-files/open-with 覆盖、引号与受损回归。
  • engines 提到 Node >= 23.6;peer/dev 写法统一;构建配置进类型检查;CI 盯住 manifest。

安装

dsh plugin --profile web add dsh-git-review
dsh web

或在下方下载 tarball(dsh-git-review.tgz 恒指最新版)。要求 DeepSeek Harness >=0.1.2-rc.1、git 仓库工作区,且宿主 PATH 里有 git。

完整变更记录

Full Changelog: v0.1.0...v0.1.1

反馈

欢迎提 Issue: https://github.com/HaoyueQin/dsh-git-review/issues

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 06 Sep 14:16

v0.1.0 — First release / 首次发布 🎉

English first, 中文说明在后。

English

The first release of DSH Git Review: a Review tab plus fenced git workbench for DeepSeek Harness. Everything an agent changed, laid out for a decision — file tree, diffs, commit graph — with guarded git operations in the same place.

Changes view
Graph view

Highlights

  • Review first: filterable file tree with status badges, side-by-side / unified / full-file diffs, hunk folding, word-level change highlights, syntax coloring, and three-scope search (file names, diff text, file content). Keyboard-first (j/k, /).
  • Decide with history: lane commit graph with per-commit files and diffs, blame gutters, per-file history, and full-file reads at any revision — including uncommitted work drawn into the graph.
  • Act under guard: stage / unstage / discard per file or per hunk, commit (amend, Ctrl+Enter) and push, branches, lightweight tags, stash, reset / revert / cherry-pick / merge / pull, and merge-conflict resolution (ours / theirs). Every write confirms explicitly, destructive ones twice, and everything locks while the agent is running.
  • Close the loop: line comments into the composer draft, Viewed markers that clear when the file changes, per-workspace draft box, file previews (markdown / HTML / images / PDF), and a preferences card in the harness settings.

Install

dsh plugin --profile web add dsh-git-review
dsh web

Or grab a tarball below (dsh-git-review.tgz always tracks the newest release). Requires DeepSeek Harness >=0.1.2-rc.1, a git-repository workspace, and git on the host PATH.

Full changelog

First release — everything is new. Browse the history: https://github.com/HaoyueQin/dsh-git-review/commits/v0.1.0

Feedback

Issues and ideas welcome: https://github.com/HaoyueQin/dsh-git-review/issues


中文说明

DSH Git Review 首个版本:DeepSeek Harness 的审查标签页 + 围栏 Git 工作台。把 agent 改了什么摆在一页里做决定——文件树、差异、提交图谱,设防的 Git 操作同处一页。

亮点

  • 先审后动:可过滤文件树(状态徽标)、双列 / 单列 / 全文三档差异、hunk 折叠、词级改动高亮、语法着色、三范围搜索(文件名 / 差异内容 / 文件内容)。键盘优先(j/k 切文件,/ 聚焦搜索)。
  • 用历史做判断:泳道提交图谱(每提交的文件与差异)、blame 边栏、单文件历史、任意版本全文,未提交改动也会画进图里。
  • 设防的操作:按文件或按 hunk 暂存 / 取消暂存 / 放弃,提交(含 amend、Ctrl+Enter)与推送,分支、轻量标签、贮藏、reset / revert / cherry-pick / merge / pull,以及合并冲突解决(ours / theirs)。每次写操作明确确认,破坏性操作确认两遍,agent 运行中全部上锁。
  • 审查闭环:差异行评论直达对话输入框、文件再改自动取消的已审标记、按工作区分存的草稿箱、文件预览(markdown / HTML / 图片 / PDF),以及设置页偏好卡(即时双向同步)。

安装

dsh plugin --profile web add dsh-git-review
dsh web

也可以下载下方的 tarball(dsh-git-review.tgz 恒为最新版)。要求 DeepSeek Harness >=0.1.2-rc.1、工作区在 git 仓库内、宿主 PATH 有 git。

完整变更

首个版本,一切都是新的。提交历史:https://github.com/HaoyueQin/dsh-git-review/commits/v0.1.0

反馈

欢迎提 Issue:https://github.com/HaoyueQin/dsh-git-review/issues