dsh-ide-git 0.18.1 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dsh.plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "dsh-external/dsh-ide-git",
3
- "version": "0.18.1",
3
+ "version": "0.18.2",
4
4
  "main": "./src/index.js",
5
5
  "description": "IDE 级 Git 操作面板:分支树 + 提交图谱 + 变更/暂存/提交 + 提交详情。装了 dsh-better-sidebar 时挂成它的原生 tab(右侧栏 + 底部工作台);没装时直接挂 DSH 原生右侧栏,单独安装即可用。JetBrains 风格 Git 工具窗口 for DeepSeek Harness.",
6
6
  "engines": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-ide-git",
3
- "version": "0.18.1",
3
+ "version": "0.18.2",
4
4
  "description": "DSH plugin: an IDE-grade Git tool window as a native dsh-better-sidebar tab — branch tree, commit graph, changes, commit details, JetBrains-style actions, in the right sidebar and the bottom panel. | DSH 插件:IDE 级 Git 工具窗口,以 dsh-better-sidebar 原生 Tab 挂载——分支树 / 提交图谱 / 变更与提交详情 / JetBrains 风格操作,右侧栏与底部面板双布局自适应。",
5
5
  "type": "module",
6
6
  "repository": {
package/src/client.js CHANGED
@@ -9829,8 +9829,12 @@ window.__ModuleLoader__.load({
9829
9829
  }
9830
9830
  const handlePick = useCallback((event, entry, selKey) => {
9831
9831
  const ordered = visibleRef.current.map((leaf) => branchSelKeyOf(leaf.entry))
9832
- if (event.shiftKey === true && pickAnchor.current !== null) {
9833
- const from = ordered.indexOf(pickAnchor.current)
9832
+ if (event.shiftKey === true) {
9833
+ /* No anchor yet (fresh tree, nothing clicked): VS Code semantics —
9834
+ the range starts at the FIRST visible row, so a first-click Shift
9835
+ still multi-selects instead of silently degrading to single. */
9836
+ const anchorKey = pickAnchor.current !== null ? pickAnchor.current : ordered[0]
9837
+ const from = ordered.indexOf(anchorKey)
9834
9838
  const to = ordered.indexOf(selKey)
9835
9839
  if (from >= 0 && to >= 0) {
9836
9840
  const low = Math.min(from, to)
@@ -10075,9 +10079,12 @@ window.__ModuleLoader__.load({
10075
10079
  of this handler (their memo compares item/group/t/selected, not the
10076
10080
  callback — same stale-callback trade-off as the stage buttons), so
10077
10081
  the selection must never be read from it. */
10078
- if (event.shiftKey === true && anchorRef !== undefined && anchorRef.current !== null) {
10082
+ if (event.shiftKey === true && anchorRef !== undefined) {
10079
10083
  const ordered = orderedRowKeys()
10080
- const from = ordered.indexOf(anchorRef.current)
10084
+ /* Anchor falls back to the FIRST row (VS Code semantics): a Shift
10085
+ click on a fresh list must multi-select, not degrade to single. */
10086
+ const anchorKey = anchorRef.current !== null ? anchorRef.current : ordered[0]
10087
+ const from = ordered.indexOf(anchorKey)
10081
10088
  const to = ordered.indexOf(key)
10082
10089
  if (from >= 0 && to >= 0) {
10083
10090
  const low = Math.min(from, to)
@@ -10704,8 +10711,11 @@ window.__ModuleLoader__.load({
10704
10711
  /* Functional updates only — memoised CommitRows may hold a stale
10705
10712
  closure of this handler (their memo compares commit/row/selected),
10706
10713
  so the picked set is never read from it. */
10707
- if (event.shiftKey === true && pickAnchor.current !== null) {
10708
- const from = ordered.indexOf(pickAnchor.current)
10714
+ if (event.shiftKey === true) {
10715
+ /* Anchor falls back to the FIRST row (VS Code semantics): a Shift
10716
+ click on a fresh list must multi-select, not degrade to single. */
10717
+ const anchorHash = pickAnchor.current !== null ? pickAnchor.current : ordered[0]
10718
+ const from = ordered.indexOf(anchorHash)
10709
10719
  if (from >= 0 && index >= 0) {
10710
10720
  const low = Math.min(from, index)
10711
10721
  const high = Math.max(from, index)
@@ -13279,10 +13289,12 @@ window.__ModuleLoader__.load({
13279
13289
  '.dig-row-sub{color:var(--dsw-alias-label-tertiary);font-size:11px;flex:none;max-width:45%;overflow:hidden;text-overflow:ellipsis}',
13280
13290
  '.dig-row-dir{margin-left:auto;opacity:.75}',
13281
13291
  '.dig-badge{font-size:10px;padding:0 5px;border-radius:999px;corner-shape:round;background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary);flex:none}',
13282
- /* Ahead/behind colours (user request): pending pushes read green, pending
13283
- pulls read blue — the same semantics in the tree rows and the top bar. */
13284
- '.dig-badge-ahead,.dig-track-ahead{color:var(--dsw-alias-state-success-primary)}',
13285
- '.dig-badge-behind,.dig-track-behind{color:var(--dsw-alias-state-business-primary,var(--dsw-alias-brand-primary))}',
13292
+ /* Ahead/behind colours + size (user request): pending pushes read green,
13293
+ pending pulls read blue — the same semantics in the tree rows and the
13294
+ top bar. 12px/600 keeps the counts legible at a glance. */
13295
+ '.dig-badge-ahead,.dig-track-ahead{color:var(--dsw-alias-state-success-primary);font-size:12px;font-weight:600}',
13296
+ '.dig-badge-behind,.dig-track-behind{color:var(--dsw-alias-state-business-primary,var(--dsw-alias-brand-primary));font-size:12px;font-weight:600}',
13297
+ '.dig-badge.dig-badge-ahead,.dig-badge.dig-badge-behind{padding:0 6px}',
13286
13298
  '.dig-badge-muted{opacity:.8}',
13287
13299
  '.dig-badge-worktree{padding:0 3px;display:inline-flex;align-items:center;height:14px}',
13288
13300
  '.dig-history{display:flex;flex-direction:column;min-height:0;flex:1}',