@xbzbing/dsh-git-panel 1.1.0 → 1.1.1

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/README.md CHANGED
@@ -20,6 +20,8 @@ dsh plugin --profile web add github:xbzbing/dsh-git-panel
20
20
 
21
21
  安装或更新后,重启 `dsh web` 服务再刷新页面,工作区标签栏(「对话」「轨迹」之后)就会出现 **Git** 面板。插件分 host 与 client 两半,宿主挂载和 client bundle 清单都在服务启动时定型,因此代码更新(安装、`add` 覆盖 `lib`)通常需要重启服务,仅刷新页面可能看不到变化。面板内的配置项(详情页的输入框标记开关、差异默认视图)走配置热写,改动即时生效、无需重启。
22
22
 
23
+ > **兼容性**:已在 `dsh@0.2.1-alpha.1` 上实测,安装、Git 面板、输入框标记与 host RPC 均可正常使用。
24
+
23
25
  ## 功能
24
26
 
25
27
  - **Git 总览**:三栏布局。左栏是分支 / 标签列表,点击某个引用即按它过滤历史;中栏是提交历史图,支持按提交信息、commit 哈希、作者、日期搜索,悬停某条提交弹出卡片显示完整提交信息(comment);右栏是选中提交的变更文件树与提交信息,点击文件在弹出的 modal 里查看该文件在此提交中的差异。
package/README_EN.md CHANGED
@@ -20,6 +20,8 @@ dsh plugin --profile web add github:xbzbing/dsh-git-panel
20
20
 
21
21
  After installing or updating, restart the `dsh web` service and refresh the page; the **Git** panel then appears in the workspace tab bar (after Chat and Trajectory). The plugin has a host half and a client half, and both the host mount and the client bundle manifest are fixed when the service starts, so code updates (installing, or an `add` that overwrites `lib`) usually need a service restart — a page refresh alone may not pick them up. In-panel settings (the input-bar marker toggle and the default diff view on the detail page) are hot-written and apply immediately without a restart.
22
22
 
23
+ > **Compatibility**: verified on `dsh@0.2.1-alpha.1` — installation, the Git panel, the input-bar marker, and the host RPC all work normally.
24
+
23
25
  ## Features
24
26
 
25
27
  - **Overview** — three columns. The left column is the branch / tag list; clicking a ref filters history by it. The middle column is the commit history graph, searchable by commit message, commit hash, author, or date; hovering a commit shows a card with its full commit message (comment). The right column is the selected commit's changed-file tree and commit message; click a file to see its diff within that commit in a modal.
package/lib/client.js CHANGED
@@ -1,6 +1,6 @@
1
1
  window.__ModuleLoader__.load({ id: "@xbzbing/dsh-git-panel", factory: (require) => {
2
2
  var module = { exports: {} }; var exports = module.exports;
3
- "use strict";var Ze=require("react");var _n=`
3
+ "use strict";var Ze=require("react");var Sn=`
4
4
  .gp-panel{display:flex;flex-direction:column;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-size:13px;position:relative;
5
5
  /* One selection language across the three list panes (Overview commits,
6
6
  * Changes rows, Files tree): primary-tinted fill + a 3px inset left bar. */
@@ -46,6 +46,9 @@ var module = { exports: {} }; var exports = module.exports;
46
46
  .gp-font button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
47
47
  .gp-font button:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:-2px}
48
48
  .gp-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;height:100%;color:var(--dsw-alias-label-tertiary);font-size:12px;padding:24px;text-align:center}
49
+ .gp-files-wrap{display:flex;flex-direction:column;width:100%;height:100%;min-height:0}
50
+ .gp-files-wrap>.gp-files{flex:1;min-height:0;height:auto}
51
+ .gp-notice{flex:none;padding:8px 14px;font-size:12px;line-height:1.5;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-2);border-bottom:1px solid var(--dsw-alias-border-l2)}
49
52
  .gp-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:6px 8px;border-bottom:1px solid var(--dsw-alias-border-l2);flex:none}
50
53
  .gp-btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);font:inherit;font-size:12px;cursor:pointer}
51
54
  .gp-btn:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}
@@ -345,10 +348,10 @@ var module = { exports: {} }; var exports = module.exports;
345
348
  .gp-tip{position:fixed;z-index:60;max-width:520px;padding:8px 12px;border:1px solid var(--dsw-alias-border-l1,var(--dsw-alias-border-l2));border-radius:12px;background:var(--dsw-alias-bg-layer-3,var(--dsw-alias-bg-layer-2));box-shadow:0 6px 24px rgba(0,0,0,.18),0 1px 3px rgba(0,0,0,.12);font-size:12px;line-height:1.5;pointer-events:none}
346
349
  .gp-tip__path{color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-mono,ui-monospace,monospace);word-break:break-all}
347
350
  .gp-tip__note{margin-top:4px;color:var(--dsw-alias-label-tertiary)}
348
- `,et=!1;function vt(){if(et||typeof document>"u")return;let e="dsh-git-panel/client.css";if(document.querySelector(`style[data-plugin-css="${e}"]`)!==null){et=!0;return}let t=document.createElement("style");t.dataset.plugin="@xbzbing/dsh-git-panel",t.dataset.pluginCss=e,t.textContent=_n,document.head.appendChild(t),et=!0}var xt={"panel.tab":"Git","panel.fontDecrease":"\u7F29\u5C0F\u5B57\u4F53","panel.fontReset":"\u91CD\u7F6E\u5B57\u4F53\u5927\u5C0F","panel.fontIncrease":"\u653E\u5927\u5B57\u4F53","tab.overview":"Git \u603B\u89C8","tab.changes":"\u53D8\u66F4\u8BB0\u5F55","tab.files":"\u6587\u4EF6\u6D4F\u89C8","pill.unavailable":"Git \u4E0D\u53EF\u7528","pill.detached":"\u6E38\u79BB HEAD","pill.synced":"\u672C\u5730\u5DF2\u540C\u6B65","pill.dirty":"\u6709\u5F85\u63D0\u4EA4\u7684\u53D8\u66F4","common.loading":"\u52A0\u8F7D\u4E2D\u2026","common.retry":"\u91CD\u8BD5","common.close":"\u5173\u95ED","version.check":"\u68C0\u67E5\u65B0\u7248\u672C","version.checking":"\u68C0\u67E5\u4E2D\u2026","version.upToDate":"\u5DF2\u662F\u6700\u65B0\uFF08{current}\uFF09","version.updateAvailable":"\u6709\u65B0\u7248\u672C {latest}\uFF08\u5F53\u524D {current}\uFF09","version.viewRelease":"\u67E5\u770B\u53D1\u5E03","version.error":"\u68C0\u67E5\u5931\u8D25","version.noRepo":"\u672A\u914D\u7F6E\u4ED3\u5E93\u5730\u5740","version.openRepo":"\u5728 GitHub \u4E0A\u6253\u5F00\u4ED3\u5E93","overview.head":"HEAD\uFF08\u5F53\u524D\u5206\u652F\uFF09","overview.local":"\u672C\u5730","overview.remote":"\u8FDC\u7A0B","overview.tags":"\u6807\u7B7E","overview.search":"\u641C\u7D22\u63D0\u4EA4\uFF08\u6D88\u606F / \u54C8\u5E0C\uFF09","overview.searchShort":"\u641C\u7D22\u63D0\u4EA4","overview.allUsers":"\u5168\u90E8\u4F5C\u8005","overview.allTime":"\u5168\u90E8\u65F6\u95F4","overview.today":"\u4ECA\u5929","overview.last7d":"\u8FD1 7 \u5929","overview.last30d":"\u8FD1 30 \u5929","overview.selectCommit":"\u9009\u62E9\u4E00\u4E2A\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5","overview.noMessage":"\uFF08\u65E0\u63D0\u4EA4\u6B63\u6587\uFF09","overview.noResults":"\u6CA1\u6709\u5339\u914D\u7684\u63D0\u4EA4","overview.loadFailed":"\u52A0\u8F7D\u5931\u8D25","overview.detailFailed":"\u8BE6\u60C5\u52A0\u8F7D\u5931\u8D25","overview.diffFailed":"\u5DEE\u5F02\u52A0\u8F7D\u5931\u8D25","overview.openFileDiff":"\u67E5\u770B\u8BE5\u6587\u4EF6\u5728\u6B64\u63D0\u4EA4\u4E2D\u7684\u53D8\u66F4","overview.fetch":"\u62C9\u53D6\u8FDC\u7A0B","overview.branchesError":"\u5206\u652F\u52A0\u8F7D\u5931\u8D25","changes.groupStaged":"\u5DF2\u6682\u5B58\u7684\u66F4\u6539","changes.groupUnstaged":"\u66F4\u6539","changes.groupUntracked":"\u672A\u7248\u672C\u63A7\u5236\u7684\u6587\u4EF6","changes.selectFile":"\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u67E5\u770B\u53D8\u66F4","changes.noChanges":"\u6CA1\u6709\u672A\u63D0\u4EA4\u7684\u53D8\u66F4","changes.stageAll":"\u5168\u90E8\u6682\u5B58","changes.unstageAll":"\u5168\u90E8\u53D6\u6D88\u6682\u5B58","changes.stage":"\u6682\u5B58","changes.unstage":"\u53D6\u6D88\u6682\u5B58","changes.discard":"\u653E\u5F03\u66F4\u6539","changes.discardConfirm":"\u518D\u6B21\u70B9\u51FB\u4EE5\u786E\u8BA4\u653E\u5F03","files.selectFile":"\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u67E5\u770B\u5185\u5BB9","files.loadFailed":"\u52A0\u8F7D\u5931\u8D25","files.truncated":"\u6761\u76EE\u8FC7\u591A\uFF0C\u5DF2\u622A\u65AD","files.tooLarge":"\u6587\u4EF6\u8FC7\u5927\uFF0C\u65E0\u6CD5\u9884\u89C8","files.binary":"\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u9884\u89C8","files.highlightOff":"\u6587\u4EF6\u8F83\u5927\uFF0C\u5DF2\u5173\u95ED\u8BED\u6CD5\u9AD8\u4EAE\u4EE5\u4FDD\u6301\u6D41\u7545","files.lineTruncated":" \u2026\uFF08\u6B64\u884C\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09","files.findPlaceholder":"\u5728\u6B64\u6587\u4EF6\u4E2D\u67E5\u627E","files.findNoMatch":"\u65E0\u5339\u914D","files.findPrev":"\u4E0A\u4E00\u4E2A","files.findNext":"\u4E0B\u4E00\u4E2A","files.findClose":"\u5173\u95ED\u67E5\u627E","files.findCase":"\u533A\u5206\u5927\u5C0F\u5199","files.previewMode":"\u9884\u89C8\u65B9\u5F0F","files.source":"\u6E90\u7801","files.render":"\u6E32\u67D3","files.copyPath":"\u590D\u5236\u76F8\u5BF9\u8DEF\u5F84","files.pathCopied":"\u8DEF\u5F84\u5DF2\u590D\u5236","files.pathCopyFailed":"\u590D\u5236\u5931\u8D25","files.ignored":"\u5DF2\u88AB Git \u5FFD\u7565","files.copy":"\u590D\u5236\u4EE3\u7801","files.copied":"\u5DF2\u590D\u5236","files.footnotes":"\u6CE8\u91CA","stats.files":"{n} \u4E2A\u6587\u4EF6","stats.lastChange":"\u6700\u8FD1\u53D8\u66F4 {time}","stats.lastCommit":"\u4E0A\u6B21\u63D0\u4EA4 {time}","stats.staged":"\u5DF2\u6682\u5B58 {n}","stats.modified":"\u5DF2\u4FEE\u6539 {n}","stats.untracked":"\u672A\u8DDF\u8E2A {n}","commit.placeholder":"\u63D0\u4EA4\u4FE1\u606F","commit.commit":"\u63D0\u4EA4","commit.amend":"\u4FEE\u6B63\u4E0A\u6B21\u63D0\u4EA4\uFF08amend\uFF09","diff.unified":"\u7EDF\u4E00","diff.split":"\u5BF9\u7167","diff.before":"\u53D8\u66F4\u524D","diff.after":"\u53D8\u66F4\u540E","diff.binary":"\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u663E\u793A\u5BF9\u7167","diff.tooLarge":"\u56FE\u7247\u8FC7\u5927\uFF0C\u65E0\u6CD5\u663E\u793A\u5BF9\u7167","diff.imageMissing":"\u4E0D\u5B58\u5728","diff.svgRender":"\u6E32\u67D3","diff.svgSource":"\u6E90\u7801","diff.empty":"\u65E0\u5DEE\u5F02","diff.expandAll":"\u5C55\u5F00\u5168\u90E8","diff.collapse":"\u6298\u53E0\u672A\u53D8\u66F4","diff.expandGap":"\u5C55\u5F00\u5168\u90E8 {n} \u884C","diff.expandUp":"\u5411\u4E0A\u5C55\u5F00 {n} \u884C","diff.expandDown":"\u5411\u4E0B\u5C55\u5F00 {n} \u884C","time.justNow":"\u521A\u521A","time.minutesAgo":"{n} \u5206\u949F\u524D","time.hoursAgo":"{n} \u5C0F\u65F6\u524D","time.daysAgo":"{n} \u5929\u524D","error.generic":"\u64CD\u4F5C\u5931\u8D25","error.notARepo":"\u5F53\u524D\u76EE\u5F55\u4E0D\u662F Git \u4ED3\u5E93","error.noCwd":"\u5F53\u524D\u4F1A\u8BDD\u65E0\u5DE5\u4F5C\u76EE\u5F55","error.localChangesBlock":"\u672C\u5730\u6709\u672A\u63D0\u4EA4\u53D8\u66F4\uFF0C\u65E0\u6CD5\u5207\u6362","error.emptyMessage":"\u63D0\u4EA4\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A","cfg.title":"\u8F93\u5165\u6846\u5206\u652F\u6807\u8BB0","cfg.toggle":"\u663E\u793A\u8F93\u5165\u6846\u6807\u8BB0","cfg.hint":"\u5F00\u542F\u65F6\u5728\u8F93\u5165\u6846\u663E\u793A zsh \u98CE\u683C\u7684 <\u4ED3\u5E93\u540D> (\u5206\u652F) \u6807\u8BB0\uFF1B\u5173\u95ED\u540E\u6539\u4E3A\u5728 Git \u6807\u7B7E\u65C1\u663E\u793A\u72B6\u6001\u5706\u70B9\u3002\u4FDD\u5B58\u540E\u7ACB\u5373\u751F\u6548\u3002","cfg.diffTitle":"\u5DEE\u5F02\u5BF9\u6BD4\u9ED8\u8BA4\u89C6\u56FE","cfg.diffHint":"\u9009\u62E9\u53D8\u66F4\u5BF9\u6BD4\u9ED8\u8BA4\u6253\u5F00\u7684\u5E03\u5C40\uFF1A\u7EDF\u4E00\u89C6\u56FE\u4E3A\u5355\u680F\u884C\u5185\u5BF9\u6BD4\uFF0C\u5E76\u6392\u89C6\u56FE\u4E3A\u5DE6\u53F3\u5206\u680F\u5BF9\u6BD4\u3002\u4ECD\u53EF\u5728\u6BCF\u4E2A\u5DEE\u5F02\u89C6\u56FE\u4E2D\u4E34\u65F6\u5207\u6362\u3002\u4FDD\u5B58\u540E\u7ACB\u5373\u751F\u6548\u3002","cfg.diffUnified":"\u7EDF\u4E00\u89C6\u56FE\uFF08\u5355\u680F\u884C\u5185\uFF09","cfg.diffSplit":"\u5E76\u6392\u89C6\u56FE\uFF08\u5DE6\u53F3\u5206\u680F\uFF09","cfg.notLoaded":"\u914D\u7F6E\u672A\u52A0\u8F7D\uFF1A\u8BE5\u914D\u7F6E\u7531\u8FD0\u884C\u4E2D\u7684\u5BBF\u4E3B\u63D0\u4F9B\uFF0C\u82E5\u957F\u65F6\u95F4\u7A7A\u767D\u8BF7\u91CD\u542F DSH \u540E\u91CD\u8BD5\u3002","cfg.saveFailed":"\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"},wt={"panel.tab":"Git","panel.fontDecrease":"Decrease font size","panel.fontReset":"Reset font size","panel.fontIncrease":"Increase font size","tab.overview":"Overview","tab.changes":"Changes","tab.files":"Files","pill.unavailable":"Git unavailable","pill.detached":"detached HEAD","pill.synced":"Everything committed","pill.dirty":"Uncommitted changes","common.loading":"Loading\u2026","common.retry":"Retry","common.close":"Close","version.check":"Check for updates","version.checking":"Checking\u2026","version.upToDate":"Up to date ({current})","version.updateAvailable":"New version {latest} available (current {current})","version.viewRelease":"View release","version.error":"Check failed","version.noRepo":"Repository not configured","version.openRepo":"Open repository on GitHub","overview.head":"HEAD (Current Branch)","overview.local":"Local","overview.remote":"Remote","overview.tags":"Tags","overview.search":"Search commits (message / hash)","overview.searchShort":"Search","overview.allUsers":"All authors","overview.allTime":"All time","overview.today":"Today","overview.last7d":"Last 7 days","overview.last30d":"Last 30 days","overview.selectCommit":"Select a commit to see details","overview.noMessage":"(no commit body)","overview.noResults":"No matching commits","overview.loadFailed":"Load failed","overview.detailFailed":"Failed to load details","overview.diffFailed":"Failed to load diff","overview.openFileDiff":"View this file\u2019s changes in this commit","overview.fetch":"Fetch","overview.branchesError":"Failed to load branches","changes.groupStaged":"Staged changes","changes.groupUnstaged":"Changes","changes.groupUntracked":"Unversioned files","changes.selectFile":"Select a file to see its diff","changes.noChanges":"No uncommitted changes","changes.stageAll":"Stage all","changes.unstageAll":"Unstage all","changes.stage":"Stage","changes.unstage":"Unstage","changes.discard":"Discard changes","changes.discardConfirm":"Click again to confirm discard","files.selectFile":"Select a file to preview","files.loadFailed":"Load failed","files.truncated":"Too many entries \u2014 truncated","files.tooLarge":"File too large to preview","files.binary":"Binary file \u2014 no preview","files.highlightOff":"Large file \u2014 syntax highlighting disabled for performance","files.lineTruncated":" \u2026 (line too long, truncated)","files.findPlaceholder":"Find in file","files.findNoMatch":"No results","files.findPrev":"Previous match","files.findNext":"Next match","files.findClose":"Close find","files.findCase":"Match case","files.previewMode":"Preview mode","files.source":"Source","files.render":"Rendered","files.copyPath":"Copy relative path","files.pathCopied":"Path copied","files.pathCopyFailed":"Copy failed","files.ignored":"Ignored by Git","files.copy":"Copy code","files.copied":"Copied","files.footnotes":"Footnotes","stats.files":"{n} files","stats.lastChange":"changed {time}","stats.lastCommit":"last commit {time}","stats.staged":"{n} staged","stats.modified":"{n} modified","stats.untracked":"{n} untracked","commit.placeholder":"Commit message","commit.commit":"Commit","commit.amend":"Amend previous commit","diff.unified":"Unified","diff.split":"Split","diff.before":"Before","diff.after":"After","diff.binary":"Binary file \u2014 no diff to show","diff.tooLarge":"Image too large to compare","diff.imageMissing":"Does not exist","diff.svgRender":"Rendered","diff.svgSource":"Source","diff.empty":"No differences","diff.expandAll":"Expand all","diff.collapse":"Collapse unchanged","diff.expandGap":"Expand all {n} lines","diff.expandUp":"Expand up {n} lines","diff.expandDown":"Expand down {n} lines","time.justNow":"just now","time.minutesAgo":"{n}m ago","time.hoursAgo":"{n}h ago","time.daysAgo":"{n}d ago","error.generic":"Operation failed","error.notARepo":"Not a Git repository","error.noCwd":"This session has no working directory","error.localChangesBlock":"Local changes block the checkout","error.emptyMessage":"Commit message cannot be empty","cfg.title":"Input-bar branch marker","cfg.toggle":"Show input-bar marker","cfg.hint":"When on, the input bar shows the zsh-style <repo> (branch) marker; when off, a status dot appears beside the Git tab instead. Saved changes apply immediately.","cfg.diffTitle":"Default diff view","cfg.diffHint":"Choose the layout diffs open with: unified is a single inline column, split is side-by-side. You can still switch per diff. Saved changes apply immediately.","cfg.diffUnified":"Unified (single inline column)","cfg.diffSplit":"Split (side-by-side)","cfg.notLoaded":"Config not loaded: it is served by the running host. Restart DSH if this stays blank.","cfg.saveFailed":"Save failed, please retry"};var Re=require("react");var Sn=new Set(["cwd-unavailable"]),tt=3e4,Cn=6e4,Ee=class{constructor(t,n){this.remote=t;this.sessionId=n}view={state:"cold"};listeners=new Set;timer;inflight;pendingRefresh=!1;disposed=!1;pollMs=tt;subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}getSnapshot(){return this.view}ensure(){this.view.state!=="cold"&&this.view.state!=="no-cwd"||this.refresh()}refresh(){return this.inflight!==void 0?(this.pendingRefresh=!0,this.inflight):this.disposed?Promise.resolve():(this.view.state==="cold"&&this.setView({state:"loading"}),this.inflight=this.remote.snapshot({sessionId:this.sessionId}).then(t=>{if(!this.disposed){if(t.ok)this.pollMs=t.value.refreshIntervalMs||tt,this.setView({state:"ready",snapshot:t.value});else if(t.error.code!=="cancelled")if(Sn.has(t.error.code))this.pollMs=Cn,this.setView({state:"no-cwd"});else if(t.error.code==="not-a-git-repo"){let n=t.error;this.setView({state:"error",error:{code:"not-a-git-repo",...n.cwd?{cwd:n.cwd}:{},...n.showInputPill!==void 0?{showInputPill:n.showInputPill}:{}}})}else this.setView({state:"error",error:{code:t.error.code,..."detail"in t.error?{detail:t.error.detail}:{}}})}}).catch(t=>{this.disposed||this.setView({state:"error",error:{code:"git-unavailable",detail:t instanceof Error?t.message:String(t)}})}).finally(()=>{this.inflight=void 0,this.pendingRefresh&&!this.disposed?(this.pendingRefresh=!1,this.refresh()):this.schedulePoll()}),this.inflight)}resync(){this.disposed||this.refresh()}accept(t){this.disposed||(this.pollMs=t.refreshIntervalMs||tt,this.setView({state:"ready",snapshot:t}),this.schedulePoll())}schedulePoll(){this.disposed||(this.timer!==void 0&&clearTimeout(this.timer),!(this.pollMs<=0)&&(this.timer=setTimeout(()=>{this.refresh()},this.pollMs)))}setView(t){this.view=t;for(let n of this.listeners)n()}dispose(){this.disposed=!0,this.timer!==void 0&&clearTimeout(this.timer),this.timer=void 0,this.listeners.clear()}};var Nn="/api",Gn="gitPanel";function En(e){try{let t=e.get("connection")?.rpc,n=t?.call;if(t!==void 0&&typeof n=="function")return(r,i,a)=>n.call(t,Nn,r,i,a)}catch{}}function Tn(e){let t=e;if(t===null||typeof t!="object")return{ok:!1,error:{code:"git-unavailable",message:"malformed rpc result"}};if(t.ok!==!0){let n=t.error;return{ok:!1,error:{code:typeof n?.code=="string"?n.code:"git-unavailable",message:typeof n?.message=="string"?n.message:void 0}}}return t.value===void 0?{ok:!1,error:{code:"git-unavailable",message:"missing value"}}:t.value}function Q(e,t){return!e.ok||e.value.kind!==t?null:e.value}function pe(e){return e!==void 0&&e!==""}var kt=new WeakMap;function ke(e){let t=kt.get(e);if(t!==void 0)return t;let n=async(i,a,s)=>{let o=En(e);if(o===void 0)return{ok:!1,error:{code:"git-unavailable",message:"no connection"}};try{let l=await o(`${Gn}/${i}`,{args:{request:a}},s);return Tn(l)}catch(l){return{ok:!1,error:{code:"git-unavailable",message:l instanceof Error?l.message:String(l)}}}},r={snapshot:(i,a)=>n("snapshot",i,a),run:(i,a)=>n("run",i,a),query:(i,a)=>n("query",i,a),version:(i,a)=>n("version",i,a)};return kt.set(e,r),r}var fe=new Map,_t,nt;function St(e){nt=e,_t=ke(e)}function rt(e){let t=fe.get(e);if(t===void 0){let n=_t??(nt?ke(nt):void 0);t=new Ee(n??Pn(),e),fe.set(e,t)}return t}var Rn=6e4,Te=new Map;function Mn(e){let t=Te.get(e);t!==void 0&&(clearTimeout(t),Te.delete(e)),me.set(e,(me.get(e)??0)+1)}function Dn(e){let t=(me.get(e)??1)-1;if(t>0){me.set(e,t);return}me.delete(e);let n=setTimeout(()=>{Te.delete(e),!((me.get(e)??0)>0)&&(fe.get(e)?.dispose(),fe.delete(e))},Rn);Te.set(e,n)}var me=new Map;function _e(){for(let e of fe.values())e.resync()}function Ct(){for(let e of fe.values())e.dispose();fe.clear()}function Pn(){let e=async()=>({ok:!1,error:{code:"git-unavailable"}});return{snapshot:e,run:e,query:e,version:e}}function Me(e){let[,t]=(0,Re.useState)(0),n=e?rt(e):void 0;return(0,Re.useEffect)(()=>{if(n===void 0||e===void 0)return;Mn(e);let r=n.subscribe(()=>t(i=>i+1));return n.ensure(),()=>{r(),Dn(e)}},[n,e]),n?n.getSnapshot():{state:"cold"}}var G=require("react");var Nt="[data-conversation-tabs]",Ce='[data-conversation-tabs] button[role="tab"]',it=new Map,Se=new Map;function Gt(e,t){let n=Se.get(e);if(n!==void 0&&n.size>0){for(let r of n)r(t);return}it.set(e,t)}function Et(e){let t=it.get(e);return t===void 0?null:(it.delete(e),t)}function Tt(e,t){let n=Se.get(e);return n===void 0&&(n=new Set,Se.set(e,n)),n.add(t),()=>{let r=Se.get(e);r!==void 0&&(r.delete(t),r.size===0&&Se.delete(e))}}function Rt(e){if(typeof document>"u")return!1;let t=document.querySelectorAll(Ce);for(let n of t)if((n.textContent??"").trim()===e)return n.getAttribute("aria-selected")!=="true"&&n.click(),!0;return!1}function Mt(e){if(typeof document>"u")return!1;let t=document.querySelectorAll(Ce);for(let n of t)if((n.textContent??"").trim()===e)return n.getAttribute("aria-selected")==="true";return!1}function Dt(e){if(typeof document>"u")return!1;let t=document.querySelectorAll(Ce);for(let n of t)if((n.textContent??"").trim()!==e)return n.getAttribute("aria-selected")!=="true"&&n.click(),!0;return!1}var p=require("react"),pt=require("react-dom");var H=require("react");function le(e,t=15){return(0,H.createElement)("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round"},e)}function De({size:e}){return le([(0,H.createElement)("circle",{key:"c",cx:8,cy:8,r:2.4}),(0,H.createElement)("line",{key:"l1",x1:8,y1:1.5,x2:8,y2:5.6}),(0,H.createElement)("line",{key:"l2",x1:8,y1:10.4,x2:8,y2:14.5})],e)}function Pt({size:e}){return le([(0,H.createElement)("path",{key:"a",d:"M4 2v8"}),(0,H.createElement)("path",{key:"b",d:"M2 4h4"}),(0,H.createElement)("circle",{key:"c",cx:4,cy:12,r:1.6}),(0,H.createElement)("circle",{key:"d",cx:12,cy:4,r:1.6}),(0,H.createElement)("path",{key:"e",d:"M12 6v4"}),(0,H.createElement)("path",{key:"f",d:"M10 12h4"})],e)}function at({size:e}){return le([(0,H.createElement)("circle",{key:"a",cx:4,cy:3,r:1.6}),(0,H.createElement)("circle",{key:"b",cx:4,cy:13,r:1.6}),(0,H.createElement)("circle",{key:"c",cx:12,cy:5,r:1.6}),(0,H.createElement)("path",{key:"d",d:"M4 4.6v6.8"}),(0,H.createElement)("path",{key:"e",d:"M12 6.6c0 3-4 2.4-8 4"})],e)}function At({size:e}){return le([(0,H.createElement)("path",{key:"a",d:"M2 7V3h4l8 8-4 4z"}),(0,H.createElement)("circle",{key:"b",cx:4.5,cy:5.5,r:.8,fill:"currentColor"})],e)}function ge({size:e,open:t}){return le([(0,H.createElement)("path",{key:"a",d:t?"M3 6l5 5 5-5":"M6 3l5 5-5 5"})],e)}function Ft({size:e}){return le([(0,H.createElement)("path",{key:"a",d:"M4 4l8 8M12 4l-8 8"})],e)}function Pe({size:e}){return le([(0,H.createElement)("path",{key:"a",d:"M13 8a5 5 0 1 1-1.5-3.5"}),(0,H.createElement)("path",{key:"b",d:"M13 2v3h-3"})],e)}function Lt({size:e}){return le([(0,H.createElement)("path",{key:"a",d:"M4 2h5l3 3v9H4z"}),(0,H.createElement)("path",{key:"b",d:"M9 2v3h3"})],e)}function $t({size:e}){return le([(0,H.createElement)("path",{key:"a",d:"M5 2.5h4l2.5 2.5v7.5h-6.5z"}),(0,H.createElement)("path",{key:"b",d:"M9 2.5V5h2.5"}),(0,H.createElement)("path",{key:"c",d:"M11 12.5v1.5h-6.5V6"})],e)}function Ht({size:e=15}){return(0,H.createElement)("svg",{width:e,height:e,viewBox:"0 0 16 16",fill:"currentColor"},(0,H.createElement)("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z"}))}function zt(e){let t=0;for(let n of e){t=Math.max(t,n.lane+1);for(let r of n.edges)t=Math.max(t,r.fromLane+1,r.toLane+1)}return t}function It(e){let t=[],n=[],r=new Map,i=0,a=s=>{let o=r.get(s);return o===void 0&&(o=i++,r.set(s,o)),o};for(let s of e){let o=x=>{let w=n.findIndex(M=>M===x);return w===-1&&(w=n.findIndex(M=>M===null),w===-1&&(w=n.length,n.push(null)),n[w]=x),w},l=o(s.hash),d=a(s.hash),f=[...n],c=s.parents,v=c.length>=2;for(let x=0;x<n.length;x++)x!==l&&n[x]===s.hash&&(n[x]=null);if(c.length===0)n[l]=null;else{n[l]=c[0],a(c[0]);for(let x=1;x<c.length;x++){let w=c[x];o(w),a(w)}}let y=[],S=n;for(let x=0;x<f.length;x++){let w=f[x];if(w!==null)if(w===s.hash)y.push({fromLane:x,toLane:l,color:a(s.hash)});else{let M=S.findIndex(b=>b===w);M!==-1&&y.push({fromLane:x,toLane:M,color:a(w)})}}for(let x of c){let w=S.findIndex(M=>M===x);w!==-1&&y.push({fromLane:l,toLane:w,color:a(x)})}for(t.push({commit:s,lane:l,color:d,edges:y,merge:v});n.length>0&&n[n.length-1]===null;)n=n.slice(0,-1)}return t}function Xt(e){let t={name:"",path:"",dir:!0,children:[]};for(let n of e){let r=n.path.split("/").filter(s=>s!==""),i=t,a="";for(let s=0;s<r.length;s++){let o=r[s];a=a===""?o:`${a}/${o}`;let l=s===r.length-1,d=i.children.find(f=>f.name===o&&f.dir===!l);d===void 0&&(d={name:o,path:a,dir:!l,children:[],...l?{meta:n.meta}:{}},i.children.push(d)),i=d}}return Vt(t),Kt(t.children)}function Vt(e){e.children.sort((t,n)=>t.dir!==n.dir?t.dir?-1:1:t.name.localeCompare(n.name));for(let t of e.children)Vt(t)}function Kt(e){return e.map(t=>{if(!t.dir)return t;let n=t;for(;n.children.length===1&&n.children[0].dir;){let r=n.children[0];n={name:`${n.name}/${r.name}`,path:r.path,dir:!0,children:r.children}}return{...n,children:Kt(n.children)}})}function he(e,t,n){if(e===null)return"";let r=typeof e=="number"?e:Date.parse(e);if(!Number.isFinite(r))return"";let i=Math.max(0,t-r),a=Math.floor(i/6e4);if(a<1)return n("time.justNow");if(a<60)return n("time.minutesAgo",{n:a});let s=Math.floor(a/60);if(s<24)return n("time.hoursAgo",{n:s});let o=Math.floor(s/24);return n("time.daysAgo",{n:o})}function ye(e){if(e===null)return"";let t=new Date(typeof e=="number"?e:Date.parse(e));if(Number.isNaN(t.getTime()))return"";let n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}var Ae={added:"A",modified:"M",deleted:"D",renamed:"R",untracked:"U",conflicted:"!",typechange:"T"};function Fe(e){return e==="added"||e==="untracked"?"gp-status--added":e==="deleted"?"gp-status--deleted":e==="renamed"?"gp-status--renamed":"gp-status--modified"}var u=require("react");var An={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",avif:"image/avif",bmp:"image/bmp",svg:"image/svg+xml",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff"};function ot(e){let t=e.lastIndexOf(".");return t<0?null:An[e.slice(t+1).toLowerCase()]??null}function Jt(e){return/^Binary files .* differ$/m.test(e)||/^GIT binary patch$/m.test(e)}function qt(e){return ot(e)!==null}function Bt(e){return/\.svg$/i.test(e)}function Fn(e){let t=st(e);return t.length===0?!1:t.every(n=>n.startsWith("+")||n.startsWith(" "))&&t.some(n=>n.startsWith("+"))&&/^\+\+\+ /m.test(e)&&/--- \/dev\/null/m.test(e)}function Ln(e){let t=st(e);return t.length===0?!1:t.every(n=>n.startsWith("-")||n.startsWith(" "))&&t.some(n=>n.startsWith("-"))&&/^\+\+\+ \/dev\/null/m.test(e)}function st(e){let t=e.split(`
349
- `),n=[],r=!1;for(let i of t){if(i.startsWith("@@")){r=!0;continue}if(r){if(i.startsWith("diff ")||i.startsWith("index ")){r=!1;continue}i!==""&&n.push(i)}}return n}function Ot(e){let t=0,n=0;for(let r of st(e))r.startsWith("+")?t++:r.startsWith("-")&&n++;return{add:t,del:n}}var $n=/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/;function Wt(e){let t=[],n=e.split(`
350
- `),r=0,i=0,a=!0,s=!1,o=0;for(;o<n.length&&!n[o].startsWith("@@");o++);for(;o<n.length;o++){let l=n[o];if(l.startsWith("@@")){let c=$n.exec(l);if(c){let v=Number(c[1]),y=Number(c[3]),S=v-y;if(a)y>1&&t.push(be({rightStart:1,count:y-1,delta:S,atStart:!0,atEnd:!1}));else{let x=y-i;x>0&&t.push(be({rightStart:i,count:x,delta:S,atStart:!1,atEnd:!1}))}r=v,i=y,a=!1}t.push({kind:"hunk",leftNo:null,rightNo:null,leftText:null,rightText:null,text:l});continue}if(l.startsWith("\\"))continue;let d=l[0],f=l.slice(1);d==="+"?(t.push({kind:"add",leftNo:null,rightNo:i,leftText:null,rightText:f}),i++,s=!0):d==="-"?(t.push({kind:"del",leftNo:r,rightNo:null,leftText:f,rightText:null}),r++,s=!0):d===" "&&(t.push({kind:"context",leftNo:r,rightNo:i,leftText:f,rightText:f}),r++,i++,s=!0)}return s&&!a&&!Fn(e)&&!Ln(e)&&t.push(be({rightStart:i,count:null,delta:r-i,atStart:!1,atEnd:!0})),Hn(t)}function be(e){return{kind:"gap",leftNo:null,rightNo:null,leftText:null,rightText:null,gap:e}}function Hn(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r.kind==="del"){let i=[],a=n;for(;a<e.length&&e[a].kind==="del";)i.push(e[a]),a++;let s=[];for(;a<e.length&&e[a].kind==="add";)s.push(e[a]),a++;let o=Math.max(i.length,s.length);for(let l=0;l<o;l++){let d=i[l],f=s[l];if(d&&f){let c=zn(d.leftText??"",f.rightText??"");t.push({kind:"mod",leftNo:d.leftNo,rightNo:f.rightNo,leftText:d.leftText,rightText:f.rightText,...c!==null?{leftWord:c.left,rightWord:c.right}:{}})}else d?t.push({kind:"del",leftNo:d.leftNo,rightNo:null,leftText:d.leftText,rightText:null}):f&&t.push({kind:"add",leftNo:null,rightNo:f.rightNo,leftText:null,rightText:f.rightText})}n=a}else t.push(r),n++}return t}function zn(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;let i=0;for(;i<n-r&&e[e.length-1-i]===t[t.length-1-i];)i++;return r===0&&i===0?null:{left:[r,e.length-i],right:[r,t.length-i]}}function In(e,t,n){return n.map((r,i)=>{let a=t+i;return{kind:"context",leftNo:a+e,rightNo:a,leftText:r,rightText:r}})}var oe=20;function lt(e){let t=[];for(let n of e)n.kind==="mod"?(t.push({kind:"del",leftNo:n.leftNo,rightNo:null,leftText:n.leftText,rightText:null,...n.leftWord!==void 0?{leftWord:n.leftWord}:{}}),t.push({kind:"add",leftNo:null,rightNo:n.rightNo,leftText:null,rightText:n.rightText,...n.rightWord!==void 0?{rightWord:n.rightWord}:{}})):t.push(n);return t}function Ut(e,t,n,r,i,a){let s=e.findIndex(c=>c.kind==="gap"&&c.gap?.rightStart===t);if(s<0)return e.slice();let o=e[s].gap,l=In(o.delta,r,i),d=[];if(o.atEnd)return d.push(...l),!a&&i.length>0&&d.push(be({rightStart:r+i.length,count:null,delta:o.delta,atStart:!1,atEnd:!0})),[...e.slice(0,s),...d,...e.slice(s+1)];let f=o.count??i.length;if(n==="all"||i.length>=f)d.push(...l);else if(n==="down"){d.push(...l);let c=f-i.length;d.push(be({rightStart:o.rightStart+i.length,count:c,delta:o.delta,atStart:!1,atEnd:!1}))}else{let c=f-i.length;d.push(be({rightStart:o.rightStart,count:c,delta:o.delta,atStart:o.atStart,atEnd:!1})),d.push(...l)}return[...e.slice(0,s),...d,...e.slice(s+1)]}var qe=require("@deepseek-ai/dsh-client-ui-primitives");function jt(e,t){let n=[[],[],[]],r=0;for(let i of e){let a=r+i.text.length,s=[r,Math.max(r,Math.min(a,t[0])),Math.max(r,Math.min(a,t[1])),a];for(let o=0;o<3;o++){let l=i.text.slice(s[o]-r,s[o+1]-r);l!==""&&n[o].push({text:l,style:i.style})}r=a}return n}var Z=require("react"),Le=5e3,$e=120;function He(e,t){let[n,r]=(0,Z.useState)(e);return(0,Z.useEffect)(()=>{let i=setTimeout(()=>r(e),t);return()=>clearTimeout(i)},[e,t]),n}function ze(e,t){if(t==="")return[];let n=[],r=0;for(;;){let i=e.indexOf(t,r);if(i<0)break;n.push([i,i+t.length]),r=i+t.length}return n}function dt(e,t,n,r,i){if(n>=r)return[];if(e===void 0)return[t.slice(n,r)];let a=[],s=0,o=0;for(let l of e){let d=s+l.text.length,f=Math.max(n,s),c=Math.min(r,d);if(c>f&&a.push((0,Z.createElement)("span",{key:`${i}-${o++}`,style:l.style},l.text.slice(f-s,c-s))),s=d,s>=r)break}return a}function Ie(e,t,n,r,i,a){let s=[],o=0,l=[...t].sort((d,f)=>d[0]-f[0]);for(let[d,f]of l){if(d<o)continue;d>o&&s.push(...dt(n,e,o,d,`${r}b${o}`));let c=i!==null&&i[0]===d&&i[1]===f;s.push((0,Z.createElement)("mark",{key:`mk${r}-${d}`,className:`gp-find-hit${c?" gp-find-hit--active":""}`,...c?{ref:a}:{}},dt(n,e,d,f,`mk${r}-${d}`))),o=f}return o<e.length&&s.push(...dt(n,e,o,e.length,`${r}e`)),s}function Xe(e){return(0,Z.createElement)("div",{key:"find",className:"gp-find"},[(0,Z.createElement)("input",{key:"in",ref:e.inputRef,className:"gp-find__input",type:"text",placeholder:e.t("files.findPlaceholder"),value:e.query,spellCheck:!1,"aria-label":e.t("files.findPlaceholder"),onChange:t=>e.onChange(t.target.value),onKeyDown:t=>{t.key==="Escape"?(t.preventDefault(),t.stopPropagation(),e.onClose()):t.key==="Enter"&&(t.preventDefault(),e.onStep(t.shiftKey?-1:1))}}),(0,Z.createElement)("button",{key:"case",type:"button",className:`gp-find__btn gp-find__case${e.caseSensitive?" gp-find__case--active":""}`,title:e.t("files.findCase"),"aria-label":e.t("files.findCase"),"aria-pressed":e.caseSensitive,onClick:()=>e.onToggleCase()},"Aa"),(0,Z.createElement)("span",{key:"cnt",className:"gp-find__count"},e.query===""?"":e.matches===0?e.t("files.findNoMatch"):`${e.active+1}/${e.matches}`),(0,Z.createElement)("button",{key:"prev",type:"button",className:"gp-find__btn",title:e.t("files.findPrev"),"aria-label":e.t("files.findPrev"),disabled:e.matches===0,onClick:()=>e.onStep(-1)},"\u2039"),(0,Z.createElement)("button",{key:"next",type:"button",className:"gp-find__btn",title:e.t("files.findNext"),"aria-label":e.t("files.findNext"),disabled:e.matches===0,onClick:()=>e.onStep(1)},"\u203A"),(0,Z.createElement)("button",{key:"x",type:"button",className:"gp-find__btn",title:e.t("files.findClose"),"aria-label":e.t("files.findClose"),onClick:()=>e.onClose()},"\u2715")])}var de=require("react");function Ve(e,t,n){let r=n(`diff.${e}`);return(0,de.createElement)("div",{className:`gp-imgcmp__pane gp-imgcmp__pane--${e}`},[(0,de.createElement)("div",{key:"head",className:"gp-imgcmp__head"},r),t===void 0?(0,de.createElement)("div",{key:"missing",className:"gp-imgcmp__missing"},n("diff.imageMissing")):(0,de.createElement)("div",{key:"img",className:"gp-imgcmp__img"},(0,de.createElement)("img",{src:t,alt:r}))])}function Qt({oldUrl:e,newUrl:t,mode:n,t:r}){return n==="before"?(0,de.createElement)("div",{className:"gp-imgcmp gp-imgcmp--single"},Ve("before",e,r)):n==="after"?(0,de.createElement)("div",{className:"gp-imgcmp gp-imgcmp--single"},Ve("after",t,r)):(0,de.createElement)("div",{className:"gp-imgcmp"},[Ve("before",e,r),Ve("after",t,r)])}var Be=(0,u.memo)(function({text:t,mode:n,path:r,remote:i,sessionId:a,imageSpec:s,t:o}){let l=(0,u.useMemo)(()=>Wt(t),[t]),d=Jt(t),f=(0,qe.useCodeHighlighter)(r===void 0?void 0:(0,qe.languageForPath)(r)),[c,v]=(0,u.useState)(l);(0,u.useEffect)(()=>{v(l)},[l]);let y=Kn(c,v,i,a,r,s),S=r!==void 0&&Bt(r),[x,w]=(0,u.useState)("render");(0,u.useEffect)(()=>{w("render")},[r]);let b=(d||S)&&r!==void 0&&qt(r)&&i!==void 0&&a!==void 0&&s!==void 0&&(!S||x==="render"),_=qn(b?i:void 0,b?a:void 0,b?r:void 0,b?s:void 0),[K,P]=(0,u.useState)(!1),[J,C]=(0,u.useState)(""),[A,N]=(0,u.useState)(!1),[F,O]=(0,u.useState)(0),W=(0,u.useRef)(null),ae=(0,u.useRef)(null),Y=(0,u.useRef)(null);(0,u.useEffect)(()=>{P(!1),C(""),O(0)},[t,r]);let U=(0,u.useMemo)(()=>Xn(n,c),[n,c]),te=(0,u.useMemo)(()=>U.map(X=>({key:X.key,text:X.text.toLowerCase()})),[U]),q=He(J,$e),ee=A?q:q.toLowerCase(),L=A?U:te,k=(0,u.useMemo)(()=>Vn(L,ee),[L,ee]);(0,u.useEffect)(()=>{O(0)},[ee]);let D=k.length===0?0:Math.min(F,k.length-1),I=k.length>0?k[D]:null,ne=(0,u.useMemo)(()=>{let X=new Map;for(let $ of k){let se=X.get($.cellKey)??[];se.push([$.start,$.end]),X.set($.cellKey,se)}return X},[k]);(0,u.useEffect)(()=>{let X=$=>{if(!(($.ctrlKey||$.metaKey)&&($.key==="f"||$.key==="F")))return;let se=W.current;se===null||se.offsetParent===null||($.preventDefault(),P(!0),requestAnimationFrame(()=>ae.current?.select()))};return document.addEventListener("keydown",X),()=>document.removeEventListener("keydown",X)},[]),(0,u.useEffect)(()=>{Y.current?.scrollIntoView({block:"center",inline:"nearest"})},[D,k]);let j=(0,u.useCallback)(X=>{O($=>k.length===0?0:($+X+k.length)%k.length)},[k.length]),E=K&&ee!==""?{perCell:ne,activeKey:I?.cellKey??null,activeRange:I?[I.start,I.end]:null,activeRef:Y}:null;if(b){let X=(()=>{if(_.kind==="idle"||_.kind==="loading")return(0,u.createElement)("div",{className:"gp-empty"},o("common.loading"));if(_.kind==="ready"){let $=_.res;if($.tooLarge===!0)return(0,u.createElement)("div",{className:"gp-empty"},o("diff.tooLarge"));if($.mime!==null&&($.old!==void 0||$.new!==void 0))return(0,u.createElement)(Qt,{oldUrl:$.old,newUrl:$.new,mode:n,t:o})}return(0,u.createElement)("div",{className:"gp-empty"},o("diff.binary"))})();return S?Yt(x,w,X,o):X}if(d&&!S)return(0,u.createElement)("div",{className:"gp-empty"},o("diff.binary"));let m=(()=>{if(t.trim()==="")return(0,u.createElement)("div",{className:"gp-empty"},o("diff.empty"));if(n==="before")return Zt(tn(c),f,E);if(n==="after")return Zt(nn(c),f,E);if(n==="unified"){let X=lt(c);return(0,u.createElement)("div",{className:"gp-diff__unified"},X.flatMap(($,se)=>On($,se,f,y,E,o)))}return(0,u.createElement)("div",{className:"gp-diff__side"},c.flatMap((X,$)=>Bn(X,$,f,y,E,o)))})(),T=K?(0,u.createElement)(Xe,{inputRef:ae,query:J,matches:k.length,active:D,caseSensitive:A,onChange:C,onToggleCase:()=>N(X=>!X),onStep:j,onClose:()=>P(!1),t:o}):null,z=(0,u.createElement)("div",{className:"gp-diff__wrap",ref:W},[T,m]);return S?Yt(x,w,z,o):z});function Xn(e,t){let n=[];return e==="before"?(tn(t).forEach((r,i)=>n.push({key:`c${i}`,text:r.text})),n):e==="after"?(nn(t).forEach((r,i)=>n.push({key:`c${i}`,text:r.text})),n):e==="unified"?(lt(t).forEach((r,i)=>{if(r.kind==="hunk"||r.kind==="gap")return;let a=r.rightText??r.leftText??"";a!==""&&n.push({key:`c${i}`,text:a})}),n):(t.forEach((r,i)=>{r.kind==="hunk"||r.kind==="gap"||(r.leftText!==null&&r.leftText!==""&&n.push({key:`l${i}`,text:r.leftText}),r.rightText!==null&&r.rightText!==""&&n.push({key:`r${i}`,text:r.rightText}))}),n)}function Vn(e,t){if(t==="")return[];let n=[];for(let r of e)for(let[i,a]of ze(r.text,t))if(n.push({cellKey:r.key,start:i,end:a}),n.length>=Le)return n;return n}function Yt(e,t,n,r){let i=(a,s)=>(0,u.createElement)("button",{key:a,type:"button",className:`gp-seg__btn${e===a?" gp-seg__btn--active":""}`,"aria-pressed":e===a,onClick:()=>t(a)},s);return(0,u.createElement)("div",{className:"gp-svgdiff"},[(0,u.createElement)("div",{key:"bar",className:"gp-svgdiff__bar"},(0,u.createElement)("div",{className:"gp-seg"},[i("render",r("diff.svgRender")),i("source",r("diff.svgSource"))])),(0,u.createElement)("div",{key:"body",className:"gp-svgdiff__body"},n)])}function Kn(e,t,n,r,i,a){let[s,o]=(0,u.useState)(null),l=(0,u.useRef)(0);(0,u.useEffect)(()=>{l.current+=1,o(null)},[e]);let d=(0,u.useCallback)((f,c)=>{if(n===void 0||r===void 0||i===void 0||a===void 0)return;let v=`${f.rightStart}:${c}`;o(v);let y=++l.current,{start:S,end:x}=Jn(f,c),w=a.base==="commit"&&a.commit!==void 0?{kind:"file-lines",path:i,base:"commit",commit:a.commit,start:S,end:x}:a.base==="staged"?{kind:"file-lines",path:i,base:"staged",start:S,end:x}:{kind:"file-lines",path:i,base:"worktree",start:S,end:x};n.query({sessionId:r,query:w}).then(M=>{if(y!==l.current)return;let b=Q(M,"file-lines");o(null),b!==null&&t(_=>Ut(_,f.rightStart,c,b.start,b.lines,b.eof))}).catch(()=>{y===l.current&&o(null)})},[n,r,i,a,t]);return{busy:s,run:d}}function Jn(e,t){if(e.atEnd)return{start:e.rightStart,end:e.rightStart+oe-1};let n=e.count??oe;return t==="all"||n<=oe?{start:e.rightStart,end:e.rightStart+n-1}:t==="down"?{start:e.rightStart,end:e.rightStart+oe-1}:{start:e.rightStart+n-oe,end:e.rightStart+n-1}}function qn(e,t,n,r){let[i,a]=(0,u.useState)({kind:"idle"}),s=r?.base,o=r?.commit;return(0,u.useEffect)(()=>{if(e===void 0||t===void 0||n===void 0||s===void 0)return;let l=!0;a({kind:"loading"});let d=s==="commit"&&o!==void 0?{kind:"image-diff",path:n,base:"commit",commit:o}:s==="staged"?{kind:"image-diff",path:n,base:"staged"}:{kind:"image-diff",path:n,base:"worktree"};return e.query({sessionId:t,query:d}).then(f=>{if(!l)return;let c=Q(f,"image-diff");a(c!==null?{kind:"ready",res:c}:{kind:"failed"})}).catch(()=>{l&&a({kind:"failed"})}),()=>{l=!1}},[e,t,n,s,o]),i}function Ke(e,t=""){return e.map((n,r)=>(0,u.createElement)("span",{key:`${t}${r}`,style:n.style},n.text))}function en(e,t,n,r){if(n===null)return null;let i=n.perCell.get(t);if(i===void 0||i.length===0)return null;let a=n.activeKey===t?n.activeRange:null;return Ie(e,i,r,t,a,n.activeRef)}function Je(e,t,n,r,i=null){if(n==="")return(0,u.createElement)("div",{key:t,className:e},"\xA0");let a=r(n)?.[0],s=en(n,t,i,a);return s!==null?(0,u.createElement)("div",{key:t,className:e},s):(0,u.createElement)("div",{key:t,className:e},a===void 0?n:Ke(a))}function ct(e,t,n,r,i,a,s=null){let o=a(n)?.[0]??[{text:n,style:{}}],l=en(n,t,s,o);if(l!==null)return(0,u.createElement)("div",{key:t,className:e},l);let[d,f,c]=jt(o,r);return(0,u.createElement)("div",{key:t,className:e},[...Ke(d,"p"),(0,u.createElement)("span",{key:"w",className:i},f.length===0?"\xA0":Ke(f)),...Ke(c,"s")])}function tn(e){return e.filter(t=>t.leftText!==null).map(t=>({no:t.leftNo,text:t.leftText}))}function nn(e){return e.filter(t=>t.rightText!==null).map(t=>({no:t.rightNo,text:t.rightText}))}function Zt(e,t,n=null){return(0,u.createElement)("div",{className:"gp-diff__single"},e.flatMap((r,i)=>[(0,u.createElement)("div",{key:`n${i}`,className:"gp-diff-no"},r.no??""),Je("gp-diff-cell",`c${i}`,r.text,t,n)]))}function Bn(e,t,n,r,i,a){if(e.kind==="hunk")return[(0,u.createElement)("div",{key:`h${t}`,className:"gp-diff-row--hunk gp-diff-cell",style:{gridColumn:"1 / -1"}},e.text??"")];if(e.kind==="gap")return[rn(e.gap,t,r,a)];let s=e.kind==="del"||e.kind==="mod"?"gp-diff-row--del":"",o=e.kind==="add"||e.kind==="mod"?"gp-diff-row--add":"",l=e.leftText===null?(0,u.createElement)("div",{key:`l${t}`,className:`gp-diff-cell ${s}`}):e.kind==="mod"&&e.leftWord!==void 0?ct(`gp-diff-cell ${s}`,`l${t}`,e.leftText,e.leftWord,"gp-diff-word gp-diff-word--del",n,i):Je(`gp-diff-cell ${s}`,`l${t}`,e.leftText,n,i),d=e.rightText===null?(0,u.createElement)("div",{key:`r${t}`,className:`gp-diff-cell ${o}`}):e.kind==="mod"&&e.rightWord!==void 0?ct(`gp-diff-cell ${o}`,`r${t}`,e.rightText,e.rightWord,"gp-diff-word gp-diff-word--add",n,i):Je(`gp-diff-cell ${o}`,`r${t}`,e.rightText,n,i);return[(0,u.createElement)("div",{key:`ln${t}`,className:"gp-diff-no"},e.leftNo??""),l,(0,u.createElement)("div",{key:`rn${t}`,className:"gp-diff-no"},e.rightNo??""),d]}function On(e,t,n,r,i,a){if(e.kind==="hunk")return[(0,u.createElement)("div",{key:`h${t}`,className:"gp-diff-row--hunk gp-diff-cell",style:{gridColumn:"1 / -1"}},e.text??"")];if(e.kind==="gap")return[rn(e.gap,t,r,a)];let s=e.kind==="del",o=e.kind==="add",l=o?"gp-diff-row--add":s?"gp-diff-row--del":"",d=o?"+":s?"\u2212":"\xA0",f=e.rightText??e.leftText??"",c=o?e.rightWord:s?e.leftWord:void 0,v=o?"gp-diff-word gp-diff-word--add":"gp-diff-word gp-diff-word--del",y=`gp-diff-cell gp-diff-uni__code ${l}`,S=c!==void 0?ct(y,`c${t}`,f,c,v,n,i):Je(y,`c${t}`,f,n,i);return[(0,u.createElement)("div",{key:`ol${t}`,className:"gp-diff-no"},e.leftNo??""),(0,u.createElement)("div",{key:`nl${t}`,className:"gp-diff-no"},e.rightNo??""),(0,u.createElement)("div",{key:`sg${t}`,className:`gp-diff-uni__sign ${l}`},d),S]}function rn(e,t,n,r){let i=n.busy===`${e.rightStart}:all`,a=n.busy===`${e.rightStart}:up`,s=n.busy===`${e.rightStart}:down`,o=(d,f,c)=>(0,u.createElement)("button",{key:d,type:"button",className:"gp-gap__btn",disabled:n.busy!==null,onClick:v=>{v.stopPropagation(),n.run(e,d)}},c?r("common.loading"):f),l=[];if(e.atEnd)l.push(o("down",r("diff.expandDown",{n:oe}),s));else{let d=e.count??0;d>0&&d<=oe?l.push(o("all",r("diff.expandGap",{n:d}),i)):(e.atStart||l.push(o("up",r("diff.expandUp",{n:oe}),a)),l.push(o("all",r("diff.expandGap",{n:d}),i)),l.push(o("down",r("diff.expandDown",{n:oe}),s)))}return(0,u.createElement)("div",{key:`g${t}`,className:"gp-diff-row--gap",style:{gridColumn:"1 / -1"}},l)}function Oe(e){return Ot(e)}var R=require("react");var Wn=100;function an(e,t,n){let[r,i]=(0,R.useState)(null),[a,s]=(0,R.useState)(!1),[o,l]=(0,R.useState)([]),d=(0,R.useCallback)(()=>{s(!1),(async()=>{let[f,c]=await Promise.all([e.query({sessionId:t,query:{kind:"branches"}}),e.query({sessionId:t,query:{kind:"tags"}})]),v=Q(f,"branches");if(v===null){s(!0);return}let y=Q(c,"tags");i({current:v.current,defaultBranch:v.defaultBranch,local:v.local,remote:v.remote,tags:y?.tags??[]}),e.query({sessionId:t,query:{kind:"authors"}}).then(S=>{l(Q(S,"authors")?.authors??[])})})()},[e,t]);return(0,R.useEffect)(()=>{d()},[n]),{tree:r,treeError:a,authors:o,reload:d}}function on(e,t,n,r,i){let[a,s]=(0,R.useState)([]),[o,l]=(0,R.useState)(0),[d,f]=(0,R.useState)(!1),[c,v]=(0,R.useState)(!1),y=(0,R.useRef)(0),S=(0,R.useRef)(!1),x=(0,R.useRef)(null),w=(0,R.useCallback)(async(K,P)=>{if(S.current)return;S.current=!0;let J=y.current;f(!0),v(!1);let C=await e.query({sessionId:t,query:{kind:"history",limit:Wn,skip:K,...P.ref?{ref:P.ref}:{},...P.search?{search:P.search}:{},...P.author?{author:P.author}:{},...P.since?{since:P.since}:{}}});if(S.current=!1,J!==y.current)return;f(!1);let A=Q(C,"history");if(A===null){v(!0);return}let N=A.commits;s(F=>K===0?N:[...F,...N]),l(A.total)},[e,t]),M=(0,R.useRef)(n);(0,R.useEffect)(()=>{y.current+=1,S.current=!1,M.current!==n&&(M.current=n,i(),x.current&&(x.current.scrollTop=0)),w(0,n)},[n,r]);let b=o<0?!0:a.length<o,_=(0,R.useCallback)(()=>{S.current||!b||w(a.length,n)},[w,a.length,n,b]);return{commits:a,total:o,loading:d,listError:c,hasMore:b,listRef:x,loadMore:_}}function sn(e,t,n){let[r,i]=(0,R.useState)(null),[a,s]=(0,R.useState)(null),[o,l]=(0,R.useState)(!1),[d,f]=(0,R.useState)(null),[c,v]=(0,R.useState)(null),[y,S]=(0,R.useState)(!1),[x,w]=(0,R.useState)(n),[M,b]=(0,R.useState)(!1),_=(0,R.useRef)(0),K=(0,R.useRef)(null),P=(0,R.useRef)(new Map),J=(0,R.useCallback)((L,k)=>{let D=P.current;for(D.set(L,k);D.size>50;){let I=D.keys().next().value;if(I===void 0)break;D.delete(I)}},[]),C=(0,R.useCallback)(()=>{i(null),s(null),K.current=null},[]),A=(0,R.useCallback)(async L=>{K.current=L.hash,i(L),l(!1),_.current+=1,f(null),v(null),S(!1);let k=P.current.get(L.hash);if(k!==void 0){s(k);return}s(null);let D=await e.query({sessionId:t,query:{kind:"show",ref:L.hash}});if(K.current!==L.hash)return;let I=Q(D,"show");if(I!==null){let ne={commit:I.commit,body:I.body,stats:I.stats};J(L.hash,ne),s(ne)}else l(!0)},[e,t,J]),N=(0,R.useCallback)(async(L,k,D,I=!1)=>{let ne=++_.current;f({path:L,hash:k,shortHash:D}),v(null),S(!1),b(I);let j=await e.query({sessionId:t,query:{kind:"diff",path:L,base:"commit",commit:k,...I?{context:1e5}:{}}});if(ne!==_.current)return;let E=Q(j,"diff");E!==null?v(E.text):S(!0)},[e,t]),F=(0,R.useCallback)(()=>{_.current+=1,f(null),v(null),S(!1),b(!1)},[]);(0,R.useEffect)(()=>{if(d===null)return;let L=k=>{k.key==="Escape"&&F()};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[d,F]);let[O,W]=(0,R.useState)(null),[ae,Y]=(0,R.useState)(null),U=(0,R.useRef)(void 0),te=(0,R.useRef)(null),q=(0,R.useCallback)((L,k,D)=>{U.current!==void 0&&clearTimeout(U.current),U.current=setTimeout(()=>{te.current=L.hash,W({commit:L,x:k,y:D});let I=P.current.get(L.hash);if(I!==void 0){Y(I.body);return}Y(null),e.query({sessionId:t,query:{kind:"show",ref:L.hash}}).then(ne=>{if(te.current!==L.hash)return;let j=Q(ne,"show");j!==null?(J(L.hash,{commit:j.commit,body:j.body,stats:j.stats}),Y(j.body)):Y("")})},260)},[e,t,J]),ee=(0,R.useCallback)(()=>{U.current!==void 0&&clearTimeout(U.current),te.current=null,W(null),Y(null)},[]);return(0,R.useEffect)(()=>()=>{U.current!==void 0&&clearTimeout(U.current)},[]),{selected:r,detail:a,detailError:o,select:A,clearSelection:C,fileDiff:d,fileDiffText:c,fileDiffError:y,fileDiffMode:x,setFileDiffMode:w,fileDiffExpanded:M,openFileDiff:N,closeFileDiff:F,hover:O,hoverBody:ae,onHoverEnter:q,onHoverLeave:ee}}var ie=require("react"),Un=(e,t,n)=>Math.max(t,Math.min(n,e));function jn(e,t){try{let n=typeof localStorage<"u"?localStorage.getItem(e):null,r=n===null?NaN:Number(n);return Number.isFinite(r)?r:t}catch{return t}}function Qn(e,t){try{typeof localStorage<"u"&&localStorage.setItem(e,String(Math.round(t)))}catch{}}function ue(e){let{storageKey:t,initial:n,min:r,reserve:i,edge:a}=e,[s,o]=(0,ie.useState)(()=>jn(t,n)),l=(0,ie.useRef)(null),d=(0,ie.useRef)(null),f=(0,ie.useCallback)(v=>{let S=l.current?.parentElement?.clientWidth??Number.MAX_SAFE_INTEGER;d.current={x:v.clientX,w:s,max:Math.max(r,S-i)},v.preventDefault(),typeof document<"u"&&(document.body.style.cursor="col-resize",document.body.style.userSelect="none")},[s,r,i]);(0,ie.useEffect)(()=>{if(typeof window>"u")return;let v=S=>{let x=d.current;if(x===null)return;let w=S.clientX-x.x;o(Un(x.w+(a==="end"?w:-w),r,x.max))},y=()=>{d.current!==null&&(d.current=null,typeof document<"u"&&(document.body.style.cursor="",document.body.style.userSelect=""),o(S=>(Qn(t,S),S)))};return window.addEventListener("pointermove",v),window.addEventListener("pointerup",y),()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",y)}},[a,r,t]);let c=(0,ie.createElement)("div",{key:`rz-${t}`,ref:l,className:"gp-resizer",role:"separator","aria-orientation":"vertical",onPointerDown:f});return{width:s,divider:c}}var ln=require("react");function ve(e,t,n,r,i=!1){return e.map(a=>(0,ln.createElement)("button",{key:a,type:"button",className:`gp-seg__btn${t===a?" gp-seg__btn--active":""}`,...i?{disabled:!0}:{},onClick:()=>n(a)},r(a)))}var xe=14,Ne=30,Yn=260;function Zn(e,t){let[n,r]=(0,p.useState)(!1);return(0,p.useEffect)(()=>{if(e===null||typeof ResizeObserver>"u")return;let i=()=>r(e.clientWidth>0&&e.clientWidth<t);i();let a=new ResizeObserver(i);return a.observe(e),()=>a.disconnect()},[e,t]),n}function dn({remote:e,sessionId:t,refreshKey:n,defaultDiffView:r,t:i}){let[a,s]=(0,p.useState)({ref:null,search:"",author:"",since:""}),[o,l]=(0,p.useState)(""),[d,f]=(0,p.useState)(null),c=Zn(d,Yn),[v,y]=(0,p.useState)(new Set(["tags","remote"])),{tree:S,treeError:x,authors:w,reload:M}=an(e,t,n),b=sn(e,t,r),{commits:_,loading:K,listError:P,hasMore:J,listRef:C,loadMore:A}=on(e,t,a,n,b.clearSelection);(0,p.useEffect)(()=>{let k=setTimeout(()=>s(D=>D.search===o?D:{...D,search:o}),300);return()=>clearTimeout(k)},[o]);let N=a.search!=="",F=(0,p.useMemo)(()=>N?_.map(k=>({commit:k,lane:0,color:0,edges:[],merge:!1})):It(_),[_,N]),O=(0,p.useMemo)(()=>N?0:zt(F),[F,N]),W=N?12:Math.max(xe,O*xe),ae=`${W}px minmax(120px,1fr) 72px 120px 96px`,Y=()=>{let k=C.current;k===null||!J||k.scrollTop+k.clientHeight>=k.scrollHeight-240&&A()},U=(0,p.useMemo)(()=>Date.now(),[_]),te=(0,p.useMemo)(()=>b.detail===null?[]:Xt(b.detail.stats.map(k=>({path:k.path,meta:k.status}))),[b.detail]),q=b.selected,ee=ue({storageKey:"gp.overview.left",initial:200,min:130,reserve:360,edge:"end"}),L=ue({storageKey:"gp.overview.right",initial:340,min:190,reserve:360,edge:"start"});return(0,p.createElement)("div",{className:"gp-overview"},[ar(b.fileDiff,{text:b.fileDiffText,error:b.fileDiffError,mode:b.fileDiffMode,onMode:b.setFileDiffMode,expanded:b.fileDiffExpanded,onExpand:k=>{b.fileDiff!==null&&b.openFileDiff(b.fileDiff.path,b.fileDiff.hash,b.fileDiff.shortHash,k)},onClose:b.closeFileDiff,remote:e,sessionId:t,t:i}),(0,p.createElement)("div",{key:"left",className:"gp-col gp-col--left",style:{flex:`0 0 ${ee.width}px`}},tr(S,x,a.ref,v,{onFilter:k=>s(D=>({...D,ref:k})),onToggle:k=>y(D=>{let I=new Set(D);return I.has(k)?I.delete(k):I.add(k),I}),onRetry:M,t:i})),ee.divider,(0,p.createElement)("div",{key:"mid",className:"gp-col gp-col--mid gp-history"},[(0,p.createElement)("div",{key:"tb",className:"gp-toolbar",ref:f},[(0,p.createElement)("input",{key:"search",className:"gp-search",placeholder:i(c?"overview.searchShort":"overview.search"),value:o,onChange:k=>l(k.target.value)}),(0,p.createElement)("select",{key:"author",className:"gp-select",value:a.author,onChange:k=>s(D=>({...D,author:k.target.value}))},[(0,p.createElement)("option",{key:"",value:""},i("overview.allUsers")),...w.map(k=>(0,p.createElement)("option",{key:k,value:k},k))]),(0,p.createElement)("select",{key:"since",className:"gp-select",value:a.since,onChange:k=>s(D=>({...D,since:k.target.value}))},[(0,p.createElement)("option",{key:"",value:""},i("overview.allTime")),(0,p.createElement)("option",{key:"today",value:"1 day ago"},i("overview.today")),(0,p.createElement)("option",{key:"7d",value:"7 days ago"},i("overview.last7d")),(0,p.createElement)("option",{key:"30d",value:"30 days ago"},i("overview.last30d"))]),(0,p.createElement)("button",{key:"fetch",type:"button",className:"gp-icon-btn",title:i("overview.fetch"),onClick:()=>{e.run({sessionId:t,action:{kind:"fetch"}}).then(()=>M())}},(0,p.createElement)(Pe,{size:14}))]),(0,p.createElement)("div",{key:"list",className:"gp-history__list",ref:C,onScroll:Y},_.length===0?(0,p.createElement)("div",{className:"gp-empty"},i(K?"common.loading":P?"overview.loadFailed":"overview.noResults")):F.map(k=>nr(k,{selected:q?.hash===k.commit.hash,gridTpl:ae,graphW:W,laneCount:O,searching:N,now:U,onSelect:()=>void b.select(k.commit),onHoverEnter:b.onHoverEnter,onHoverLeave:b.onHoverLeave,t:i})))]),L.divider,(0,p.createElement)("div",{key:"right",className:"gp-col gp-col--right gp-detail",style:{flex:`0 0 ${L.width}px`}},q===null?(0,p.createElement)("div",{className:"gp-empty"},[(0,p.createElement)(De,{key:"i",size:20}),i("overview.selectCommit")]):[(0,p.createElement)("div",{key:"files",className:"gp-detail__files"},b.detail===null?(0,p.createElement)("div",{className:"gp-empty"},b.detailError?i("overview.detailFailed"):i("common.loading")):ir(te,{activePath:b.fileDiff?.path??null,openTitle:i("overview.openFileDiff"),onOpen:k=>{q!==null&&b.openFileDiff(k,q.hash,q.shortHash)}})),(0,p.createElement)("div",{key:"msg",className:"gp-detail__msg"},[(0,p.createElement)("div",{key:"subj",className:"gp-detail__subject"},q.subject),(0,p.createElement)("div",{key:"meta",className:"gp-detail__meta"},[(0,p.createElement)("span",{key:"h",className:"gp-commit-hash"},q.shortHash),(0,p.createElement)("span",{key:"a"},q.author),(0,p.createElement)("span",{key:"t",title:ye(q.dateIso)},he(q.dateIso,U,i))]),b.detail!==null&&b.detail.body!==""?(0,p.createElement)("pre",{key:"body",className:"gp-detail__body"},b.detail.body):(0,p.createElement)("div",{key:"nb",className:"gp-empty"},i("overview.noMessage"))])]),er(b.hover,b.hoverBody,i)])}function er(e,t,n){if(e===null||typeof document>"u")return null;let r=460,i=Math.min(e.x+16,(typeof window<"u"?window.innerWidth:1200)-r-12),a=e.y+14,s=(0,p.createElement)("div",{className:"gp-hovercard",style:{left:i,top:a,maxWidth:r}},[(0,p.createElement)("div",{key:"subj",className:"gp-hovercard__subject"},e.commit.subject),(0,p.createElement)("div",{key:"meta",className:"gp-hovercard__meta"},[(0,p.createElement)("span",{key:"h",className:"gp-commit-hash"},e.commit.shortHash),(0,p.createElement)("span",{key:"a"},e.commit.author)]),t===null?(0,p.createElement)("div",{key:"l",className:"gp-hovercard__loading"},n("common.loading")):t===""?(0,p.createElement)("div",{key:"e",className:"gp-hovercard__loading"},n("overview.noMessage")):(0,p.createElement)("pre",{key:"body",className:"gp-hovercard__body"},t)]);return(0,pt.createPortal)(s,document.body,"commit-hovercard")}function tr(e,t,n,r,i){if(t)return(0,p.createElement)("div",{className:"gp-empty"},[(0,p.createElement)("span",{key:"m"},i.t("overview.branchesError")),(0,p.createElement)("button",{key:"r",type:"button",className:"gp-btn",style:{marginTop:8},onClick:i.onRetry},i.t("common.retry"))]);if(e===null)return(0,p.createElement)("div",{className:"gp-empty"},i.t("common.loading"));let a=(s,o,l,d,f="")=>(0,p.createElement)("div",{key:s,className:"gp-branch-group"},[(0,p.createElement)("div",{key:"head",className:"gp-branch-group__head",onClick:()=>i.onToggle(s)},[(0,p.createElement)(ge,{key:"c",size:11,open:!r.has(s)}),`${i.t(o)} (${l.length})`]),r.has(s)?null:l.map(c=>{let v=f+c.name,y=e.current===c.name,S=`gp-branch-row${n===v?" gp-branch-row--active":""}${y?" gp-branch-row--current":""}`;return(0,p.createElement)("div",{key:c.name,className:S,title:c.name,onClick:()=>i.onFilter(n===v?null:v)},[(0,p.createElement)("span",{key:"i",style:{display:"inline-flex",width:14}},d),(0,p.createElement)("span",{key:"n",className:"gp-tree-name"},c.name),c.ahead||c.behind?(0,p.createElement)("span",{key:"t",className:"gp-branch-row__track"},`${c.ahead?`\u2191${c.ahead}`:""}${c.behind?`\u2193${c.behind}`:""}`):null])})]);return(0,p.createElement)("div",{},[(0,p.createElement)("div",{key:"head-row",className:"gp-branch-row",style:{fontWeight:600,paddingLeft:10},onClick:()=>i.onFilter(null)},i.t("overview.head")),a("local","overview.local",e.local,(0,p.createElement)(at,{size:13})),a("remote","overview.remote",e.remote,(0,p.createElement)(at,{size:13})),a("tags","overview.tags",e.tags,(0,p.createElement)(At,{size:13}))])}function nr(e,t){let n=e.commit;return(0,p.createElement)("div",{key:n.hash,className:`gp-commit-row${t.selected?" gp-commit-row--active":""}`,style:{gridTemplateColumns:t.gridTpl},onClick:t.onSelect,onMouseEnter:r=>t.onHoverEnter(n,r.clientX,r.clientY),onMouseLeave:t.onHoverLeave},[(0,p.createElement)("div",{key:"g",className:"gp-graph-cell"},t.searching?null:rr(e,t.laneCount)),(0,p.createElement)("div",{key:"s",className:"gp-commit-subject"},[...n.refs.map(r=>(0,p.createElement)("span",{key:r.name,className:`gp-ref-chip${r.head?" gp-ref-chip--head":""}${r.kind==="remote"?" gp-ref-chip--remote":""}${r.kind==="tag"?" gp-ref-chip--tag":""}`},r.name)),n.subject]),(0,p.createElement)("div",{key:"h",className:"gp-commit-hash"},n.shortHash),(0,p.createElement)("div",{key:"a",className:"gp-commit-author"},n.author),(0,p.createElement)("div",{key:"d",className:"gp-commit-date",title:ye(n.dateIso)},he(n.dateIso,t.now,t.t))])}var We=["#4e9bff","#3fb950","#e0982e","#d05ce3","#e5534b","#2dc6c6","#d29922","#8b949e"];function rr(e,t){let n=Math.max(xe,t*xe),r=a=>a*xe+xe/2,i=[];for(let a of e.edges){let s=We[a.color%We.length];i.push((0,p.createElement)("path",{key:`e${a.fromLane}-${a.toLane}-${a.color}`,d:`M ${r(a.fromLane)} 0 C ${r(a.fromLane)} ${Ne/2}, ${r(a.toLane)} ${Ne/2}, ${r(a.toLane)} ${Ne}`,stroke:s,strokeWidth:1.6,fill:"none"}))}return i.push((0,p.createElement)("circle",{key:"node",cx:r(e.lane),cy:Ne/2,r:e.merge?4:3.2,fill:We[e.color%We.length],stroke:"var(--dsw-alias-bg-layer-1)",strokeWidth:1})),(0,p.createElement)("svg",{className:"gp-graph-svg",width:n,height:Ne},i)}function ir(e,t){let n=[],r=(i,a)=>{for(let s of i)if(s.dir)n.push((0,p.createElement)("div",{key:s.path,className:"gp-tree-row",style:{paddingLeft:10+a*14}},[(0,p.createElement)(ge,{key:"c",size:11,open:!0}),(0,p.createElement)("span",{key:"n",className:"gp-tree-name"},s.name)])),r(s.children,a+1);else{let o=String(s.meta??"modified"),l=t.activePath===s.path;n.push((0,p.createElement)("div",{key:s.path,className:`gp-tree-row${l?" gp-tree-row--active":""}`,style:{paddingLeft:10+a*14},title:t.openTitle,onClick:()=>t.onOpen(s.path)},[(0,p.createElement)("span",{key:"st",className:`gp-status-badge ${Fe(o)}`},(Ae[o]??o[0]??"M").toUpperCase()),(0,p.createElement)("span",{key:"n",className:"gp-tree-name"},s.name)]))}};return r(e,0),(0,p.createElement)("div",{},n)}function ar(e,t){if(e===null||typeof document>"u")return null;let{text:n,error:r,mode:i,onMode:a,expanded:s,onExpand:o,onClose:l,remote:d,sessionId:f,t:c}=t,v=(0,p.createElement)("div",{className:"gp-modal-backdrop",onClick:y=>{y.target===y.currentTarget&&l()}},(0,p.createElement)("div",{className:"gp-modal",role:"dialog","aria-modal":!0},[(0,p.createElement)("div",{key:"bar",className:"gp-modal__bar"},[(0,p.createElement)("span",{key:"fileicon",className:"gp-modal__fileicon"},(0,p.createElement)(Lt,{size:15})),(0,p.createElement)("span",{key:"path",className:"gp-modal__path",title:e.path},or(e.path)),(0,p.createElement)("span",{key:"hash",className:"gp-modal__hash"},e.shortHash),n!==null&&n!==""?(()=>{let y=Oe(n);return(0,p.createElement)("span",{key:"sum",className:"gp-modal__sum"},[(0,p.createElement)("span",{key:"a",className:"gp-stats__add"},`+${y.add}`),(0,p.createElement)("span",{key:"d",className:"gp-stats__del"},`\u2212${y.del}`)])})():null,(0,p.createElement)("button",{key:"expand",type:"button",className:`gp-seg__btn gp-diff__expand${s?" gp-seg__btn--active":""}`,disabled:i!=="split"&&i!=="unified",title:c(s?"diff.collapse":"diff.expandAll"),onClick:()=>o(!s)},c(s?"diff.collapse":"diff.expandAll")),(0,p.createElement)("div",{key:"seg",className:"gp-seg"},ve(["unified","split","before","after"],i,a,y=>c(`diff.${y}`))),(0,p.createElement)("button",{key:"close",type:"button",className:"gp-icon-btn gp-modal__close",title:c("common.close"),onClick:l},(0,p.createElement)(Ft,{size:15}))]),(0,p.createElement)("div",{key:"scroll",className:"gp-modal__scroll"},n===null?(0,p.createElement)("div",{className:"gp-empty"},c(r?"overview.diffFailed":"common.loading")):(0,p.createElement)(Be,{text:n,mode:i,path:e.path,remote:d,sessionId:f,imageSpec:{base:"commit",commit:e.hash},t:c}))]));return(0,pt.createPortal)(v,document.body,"file-diff-modal")}function or(e){let t=e.lastIndexOf("/");return t<0?[(0,p.createElement)("span",{key:"n",className:"gp-modal__name"},e)]:[(0,p.createElement)("span",{key:"d",className:"gp-modal__dir"},e.slice(0,t+1)),(0,p.createElement)("span",{key:"n",className:"gp-modal__name"},e.slice(t+1))]}var h=require("react");var re=require("react");function cn({stats:e,t}){let n=Date.now(),r=[(0,re.createElement)("span",{key:"files",className:"gp-stats__item"},t("stats.files",{n:e.fileCount})),(0,re.createElement)("span",{key:"lines",className:"gp-stats__item"},[(0,re.createElement)("span",{key:"a",className:"gp-stats__add"},`+${e.insertions}`)," ",(0,re.createElement)("span",{key:"d",className:"gp-stats__del"},`\u2212${e.deletions}`)])];e.staged>0&&r.push((0,re.createElement)("span",{key:"st",className:"gp-stats__item"},t("stats.staged",{n:e.staged}))),e.modified>0&&r.push((0,re.createElement)("span",{key:"mo",className:"gp-stats__item"},t("stats.modified",{n:e.modified}))),e.untracked>0&&r.push((0,re.createElement)("span",{key:"un",className:"gp-stats__item"},t("stats.untracked",{n:e.untracked})));let i=[];return e.lastChangeAt!==null&&i.push((0,re.createElement)("span",{key:"lc",className:"gp-stats__item",title:ye(e.lastChangeAt)},t("stats.lastChange",{time:he(e.lastChangeAt,n,t)}))),e.headCommittedAt!==null&&i.push((0,re.createElement)("span",{key:"hc",className:"gp-stats__item",title:ye(e.headCommittedAt)},t("stats.lastCommit",{time:he(e.headCommittedAt,n,t)}))),i.length>0&&r.push((0,re.createElement)("span",{key:"times",className:"gp-stats__times"},i)),(0,re.createElement)("div",{className:"gp-stats"},r)}function pn({remote:e,sessionId:t,snapshot:n,onAction:r,t:i}){let[a,s]=(0,h.useState)(new Set),[o,l]=(0,h.useState)(""),[d,f]=(0,h.useState)(!1),[c,v]=(0,h.useState)(!1),[y,S]=(0,h.useState)(null),[x,w]=(0,h.useState)(new Set),[M,b]=(0,h.useState)(null),[_,K]=(0,h.useState)(null),[P,J]=(0,h.useState)(null),[C,A]=(0,h.useState)(()=>n.defaultDiffView),[N,F]=(0,h.useState)(!1),[O,W]=(0,h.useState)(!1),ae=(0,h.useRef)(0),Y=(0,h.useMemo)(()=>n.changes.filter(m=>m.staged).sort(ft),[n]),U=(0,h.useMemo)(()=>n.changes.filter(m=>!m.staged&&m.status!=="untracked").sort(ft),[n]),te=(0,h.useMemo)(()=>n.changes.filter(m=>m.status==="untracked").sort(ft),[n]),ee=[{key:"staged",labelKey:"changes.groupStaged",items:Y},{key:"unstaged",labelKey:"changes.groupUnstaged",items:U},{key:"untracked",labelKey:"changes.groupUntracked",items:te}].filter(m=>m.items.length>0);(0,h.useEffect)(()=>{s(m=>{if(m.size===0)return m;let T=new Set(n.changes.map($=>$.path+($.staged?":s":":w"))),z=new Set,X=!1;for(let $ of m)T.has($)?z.add($):X=!0;return X?z:m})},[n]),(0,h.useEffect)(()=>{if(!d||O||o.trim()!=="")return;let m=!0;return e.query({sessionId:t,query:{kind:"last-commit-message"}}).then(T=>{let z=Q(T,"last-commit-message");m&&z!==null&&(l(z.message),W(!0))}),()=>{m=!1}},[d,O,o,e,t]);let L=(0,h.useCallback)(async(m,T,z=!1,X=!1)=>{let $=++ae.current;K({path:m,base:T}),X||J(null),F(z);let se=await e.query({sessionId:t,query:{kind:"diff",path:m,base:T,...z?{context:1e5}:{}}});if($!==ae.current)return;let bt=Q(se,"diff");J(bt!==null?bt.text:"")},[e,t]);(0,h.useEffect)(()=>{if(_===null)return;if(!n.changes.some(T=>T.path===_.path)){K(null),J(null);return}L(_.path,_.base,N,!0)},[n]),(0,h.useEffect)(()=>{b(null)},[n]);let k=m=>{s(T=>{let z=new Set(T);return z.has(m)?z.delete(m):z.add(m),z})},D=async m=>{if(c)return!1;v(!0),S(null);try{let T=await r(m);return T.ok?!0:(S(T.error??i("error.generic")),!1)}catch(T){return S(T instanceof Error?T.message:i("error.generic")),!1}finally{v(!1)}},I=async()=>{let m=o.trim();if(m===""&&!d){S(i("error.emptyMessage"));return}let T=a.size>0?[...new Set([...a].map(X=>X.replace(/:[sw]$/,"")))]:void 0;await D({kind:"commit",message:m,...T?{paths:T}:{},...d?{amend:!0}:{}})&&(l(""),s(new Set),f(!1),W(!1))},ne=m=>{w(T=>{let z=new Set(T);return z.has(m)?z.delete(m):z.add(m),z})},j=P!==null&&P!==""?Oe(P):null,E=ue({storageKey:"gp.changes.left",initial:380,min:220,reserve:200,edge:"end"});return(0,h.createElement)("div",{className:"gp-changes"},[(0,h.createElement)("div",{key:"left",className:"gp-changes__left",style:{flex:`0 0 ${E.width}px`}},[(0,h.createElement)(cn,{key:"stats",stats:n.stats,t:i}),(0,h.createElement)("div",{key:"toolbar",className:"gp-toolbar"},[(0,h.createElement)("button",{key:"sa",type:"button",className:"gp-btn",disabled:c||n.changes.length===0,onClick:()=>void D({kind:"stage-all"})},i("changes.stageAll")),(0,h.createElement)("button",{key:"ua",type:"button",className:"gp-btn",disabled:c||n.staged===0,onClick:()=>void D({kind:"unstage-all"})},i("changes.unstageAll"))]),y!==null?(0,h.createElement)("div",{key:"err",className:"gp-feedback"},y):null,(0,h.createElement)("div",{key:"list",className:"gp-changes__list"},n.changes.length===0?(0,h.createElement)("div",{className:"gp-empty"},i("changes.noChanges")):ee.map(m=>(0,h.createElement)("div",{key:m.key},[(0,h.createElement)("div",{key:"head",className:"gp-group-head",onClick:()=>ne(m.key)},[(0,h.createElement)(ge,{key:"chev",size:12,open:!x.has(m.key)}),`${i(m.labelKey)} (${m.items.length})`]),x.has(m.key)?null:m.items.map(T=>{let z=T.path+(T.staged?":s":":w");return sr(T,{selected:a.has(z),active:_?.path===T.path&&_.base===(T.staged?"staged":"worktree"),busy:c,armed:M===z,onToggle:()=>k(z),onOpen:()=>void L(T.path,T.staged?"staged":"worktree"),onStage:()=>void D(T.staged?{kind:"unstage",paths:[T.path]}:{kind:"stage",paths:[T.path]}),onDiscard:()=>{M===z?(D({kind:"discard",paths:[T.path]}),b(null)):b(z)},t:i})})]))),(0,h.createElement)("div",{key:"box",className:"gp-commitbox"},[(0,h.createElement)("textarea",{key:"msg",className:"gp-commitbox__msg",placeholder:i("commit.placeholder"),value:o,onChange:m=>l(m.target.value)}),(0,h.createElement)("div",{key:"row",className:"gp-commitbox__row"},[(0,h.createElement)("label",{key:"amend",className:"gp-commitbox__amend"},[(0,h.createElement)("input",{key:"cb",type:"checkbox",className:"gp-check",checked:d,onChange:()=>{f(m=>!m),W(!1)}}),i("commit.amend")]),(0,h.createElement)("div",{key:"actions",className:"gp-commitbox__actions"},[(0,h.createElement)("button",{key:"commit",type:"button",className:"gp-btn gp-btn--primary",disabled:c||o.trim()==="",onClick:()=>void I()},i("commit.commit"))])])])]),E.divider,(0,h.createElement)("div",{key:"right",className:"gp-changes__right"},_===null?(0,h.createElement)("div",{className:"gp-empty"},i("changes.selectFile")):(0,h.createElement)("div",{className:"gp-diff"},[(0,h.createElement)("div",{key:"tb",className:"gp-diff__toolbar"},[(0,h.createElement)("span",{key:"path",className:"gp-diff__path"},_.path),j?(0,h.createElement)("span",{key:"sum",className:"gp-stats__item",style:{marginLeft:"auto"}},[(0,h.createElement)("span",{key:"a",className:"gp-stats__add"},`+${j.add}`)," ",(0,h.createElement)("span",{key:"d",className:"gp-stats__del"},`\u2212${j.del}`)]):null,(0,h.createElement)("button",{key:"expand",type:"button",className:`gp-seg__btn gp-diff__expand${N?" gp-seg__btn--active":""}`,style:j?{}:{marginLeft:"auto"},disabled:C!=="split"&&C!=="unified",title:i(N?"diff.collapse":"diff.expandAll"),onClick:()=>void L(_.path,_.base,!N)},i(N?"diff.collapse":"diff.expandAll")),(0,h.createElement)("div",{key:"seg",className:"gp-seg"},ve(["unified","split","before","after"],C,A,m=>i(`diff.${m}`)))]),(0,h.createElement)("div",{key:"scroll",className:"gp-diff__scroll"},P===null?(0,h.createElement)("div",{className:"gp-empty"},i("common.loading")):(0,h.createElement)(Be,{text:P,mode:C,path:_.path,remote:e,sessionId:t,imageSpec:{base:_.base},t:i}))]))])}function ft(e,t){return e.path.localeCompare(t.path)}function sr(e,t){let n=e.path.split("/").pop()??e.path,r=e.path.includes("/")?e.path.slice(0,e.path.lastIndexOf("/")):"";return(0,h.createElement)("div",{key:e.path+(e.staged?":s":":w"),className:`gp-file-row${t.active?" gp-file-row--active":""}`,onClick:t.onOpen},[(0,h.createElement)("input",{key:"cb",type:"checkbox",className:"gp-check",checked:t.selected,onClick:i=>i.stopPropagation(),onChange:t.onToggle}),(0,h.createElement)("span",{key:"st",className:`gp-status-badge ${Fe(e.status)}`},Ae[e.status]??"?"),(0,h.createElement)("span",{key:"nm",className:"gp-tree-name",title:e.path},[n,r?(0,h.createElement)("span",{key:"d",style:{color:"var(--dsw-alias-label-tertiary)",marginLeft:6,fontSize:11}},r):null]),(0,h.createElement)("span",{key:"act",className:"gp-file-row__actions"},[(0,h.createElement)("button",{key:"stg",type:"button",className:"gp-icon-btn",title:e.staged?t.t("changes.unstage"):t.t("changes.stage"),disabled:t.busy,onClick:i=>{i.stopPropagation(),t.onStage()}},e.staged?"\u2212":"+"),(0,h.createElement)("button",{key:"dis",type:"button",className:"gp-icon-btn",title:t.armed?t.t("changes.discardConfirm"):t.t("changes.discard"),style:t.armed?{color:"var(--dsw-alias-state-error-primary)"}:{},disabled:t.busy,onClick:i=>{i.stopPropagation(),t.onDiscard()}},"\u21BA")])])}var g=require("react");var ce=require("@deepseek-ai/dsh-client-ui-primitives");function gn(e){return/\.(?:md|markdown)$/i.test(e)}function gt(e){return/\.(?:html?|xhtml)$/i.test(e)}function lr(e){return gn(e)||gt(e)}var dr=256*1024,cr=5e3,fn=5e3,Ue=20,je=12;function ut({remote:e,sessionId:t,t:n}){let[r,i]=(0,g.useState)(new Map),[a,s]=(0,g.useState)(new Set([""])),[o,l]=(0,g.useState)(null),[d,f]=(0,g.useState)({kind:"idle"}),[c,v]=(0,g.useState)(!0),[y,S]=(0,g.useState)("idle"),x=(0,g.useMemo)(()=>({code:{copyLabel:n("files.copy"),copiedLabel:n("files.copied")},footnotes:n("files.footnotes")}),[n]),w=(0,g.useRef)(0),M=ue({storageKey:"gp.files.left",initial:300,min:180,reserve:220,edge:"end"}),b=(0,g.useCallback)(C=>{i(A=>{let N=A.get(C);if(N!==void 0&&N.status!=="error")return A;let F=new Map(A);return F.set(C,{status:"loading"}),F}),e.query({sessionId:t,query:{kind:"dir-list",path:C}}).then(A=>{let N=Q(A,"dir-list");i(F=>{let O=new Map(F);return O.set(C,N===null?{status:"error"}:{status:"ready",entries:N.entries,truncated:N.truncated}),O})}).catch(()=>{i(A=>{let N=new Map(A);return N.set(C,{status:"error"}),N})})},[e,t]);(0,g.useEffect)(()=>{b("")},[b]);let _=(0,g.useCallback)(C=>{s(A=>{let N=new Set(A);return N.has(C)?(N.delete(C),N):(N.add(C),r.get(C)===void 0&&b(C),N)})},[r,b]),K=(0,g.useCallback)(C=>{l(C),v(!gt(C)),S("idle");let A=++w.current;f({kind:"loading",path:C}),e.query({sessionId:t,query:{kind:"file-content",path:C}}).then(N=>{if(A!==w.current)return;let F=Q(N,"file-content");if(F===null){f({kind:"error",path:C});return}if(F.tooLarge===!0){f({kind:"tooLarge",path:C});return}if(F.variant==="image"&&F.dataUrl!==void 0){f({kind:"image",path:C,dataUrl:F.dataUrl});return}if(F.variant==="text"){f({kind:"text",path:C,content:F.content??"",lines:F.lines??0});return}f({kind:"binary",path:C})}).catch(()=>{A===w.current&&f({kind:"error",path:C})})},[e,t]),P=(0,g.useMemo)(()=>un("",0,{dirs:r,open:a,selected:o,toggleDir:_,selectFile:K,t:n}),[r,a,o,_,K,n]),J=async()=>{if(o===null)return;let C=w.current;try{await navigator.clipboard.writeText(o),C===w.current&&S("copied")}catch{C===w.current&&S("error")}};return(0,g.createElement)("div",{className:"gp-files"},[(0,g.createElement)("div",{key:"left",className:"gp-files__tree",style:{flex:`0 0 ${M.width}px`}},P),M.divider,(0,g.createElement)("div",{key:"right",className:"gp-files__preview"},[o!==null?(0,g.createElement)("div",{key:"bar",className:"gp-files__bar"},[(0,g.createElement)("code",{key:"path",className:"gp-files__path",title:o},o),d.kind==="text"&&lr(d.path)?(0,g.createElement)("div",{key:"mode",className:"gp-files__mode",role:"group","aria-label":n("files.previewMode")},[(0,g.createElement)("button",{key:"source",type:"button",className:`gp-files__mode-btn${c?"":" gp-files__mode-btn--active"}`,"aria-pressed":!c,onClick:()=>v(!1)},n("files.source")),(0,g.createElement)("button",{key:"render",type:"button",className:`gp-files__mode-btn${c?" gp-files__mode-btn--active":""}`,"aria-pressed":c,onClick:()=>v(!0)},n("files.render"))]):null,(0,g.createElement)("button",{key:"copy",type:"button",className:`gp-files__copy-path${y==="error"?" gp-files__copy-path--error":""}`,"aria-live":"polite",onClick:()=>{J()}},n(y==="copied"?"files.pathCopied":y==="error"?"files.pathCopyFailed":"files.copyPath"))]):null,(0,g.createElement)("div",{key:"content",className:"gp-files__preview-content"},pr(d,c,x,n))])])}function pr(e,t,n,r){return e.kind==="text"&&t&&gn(e.path)?(0,g.createElement)("div",{className:"gp-files__markdown"},(0,g.createElement)(ce.MarkdownText,{text:e.content,labels:n,variant:"body"})):e.kind==="text"&&t&&gt(e.path)?(0,g.createElement)("iframe",{className:"gp-files__html",title:e.path,srcDoc:e.content,sandbox:"allow-scripts",referrerPolicy:"no-referrer"}):fr(e,r)}function un(e,t,n){let r=n.dirs.get(e);if(r===void 0||r.status==="loading")return t===0?[(0,g.createElement)("div",{key:"l",className:"gp-empty"},n.t("common.loading"))]:[(0,g.createElement)("div",{key:`l${e}`,className:"gp-tree-row gp-tree-row--muted",style:{paddingLeft:10+t*14}},n.t("common.loading"))];if(r.status==="error")return[(0,g.createElement)("div",{key:`e${e}`,className:"gp-tree-row gp-tree-row--muted",style:{paddingLeft:10+t*14}},n.t("files.loadFailed"))];let i=[];for(let a of r.entries){let s=e===""?a.name:`${e}/${a.name}`;if(a.dir){let o=n.open.has(s);i.push((0,g.createElement)("button",{key:s,type:"button",className:`gp-tree-row gp-files__entry gp-files__entry--dir${a.ignored?" gp-tree-row--ignored":""}`,style:{paddingLeft:10+t*14},"aria-expanded":o,"aria-label":a.ignored?`${a.name} (${n.t("files.ignored")})`:a.name,onClick:()=>n.toggleDir(s)},[(0,g.createElement)("span",{key:"c",className:"gp-tree-chev"},(0,g.createElement)(ge,{size:11,open:o})),(0,g.createElement)("span",{key:"i",className:"gp-tree-ic"},(0,g.createElement)(ce.FileTypeIcon,{kind:"folder",size:18})),(0,g.createElement)("span",{key:"n",className:"gp-tree-name"},a.name)])),o&&i.push(...un(s,t+1,n))}else{let o=n.selected===s;i.push((0,g.createElement)("button",{key:s,type:"button",className:`gp-tree-row gp-files__entry${o?" gp-tree-row--active":""}${a.ignored?" gp-tree-row--ignored":""}`,style:{paddingLeft:10+t*14},"aria-current":o?"true":void 0,"aria-label":a.ignored?`${a.name} (${n.t("files.ignored")})`:a.name,onClick:()=>n.selectFile(s)},[(0,g.createElement)("span",{key:"c",className:"gp-tree-chev"}),(0,g.createElement)("span",{key:"i",className:"gp-tree-ic"},(0,g.createElement)(ce.FileTypeIcon,{path:s,size:18})),(0,g.createElement)("span",{key:"n",className:"gp-tree-name"},a.name)]))}}return r.truncated&&i.push((0,g.createElement)("div",{key:`t${e}`,className:"gp-tree-row gp-tree-row--muted",style:{paddingLeft:10+t*14}},n.t("files.truncated"))),i}function fr(e,t){switch(e.kind){case"idle":return(0,g.createElement)("div",{className:"gp-empty"},t("files.selectFile"));case"loading":return(0,g.createElement)("div",{className:"gp-empty"},t("common.loading"));case"error":return(0,g.createElement)("div",{className:"gp-empty"},t("files.loadFailed"));case"tooLarge":return(0,g.createElement)("div",{className:"gp-empty"},t("files.tooLarge"));case"binary":return(0,g.createElement)("div",{className:"gp-empty"},t("files.binary"));case"image":return(0,g.createElement)("div",{className:"gp-files__image"},(0,g.createElement)("img",{src:e.dataUrl,alt:e.path}));case"text":return(0,g.createElement)(ur,{content:e.content,path:e.path,t})}}function gr(e,t){if(t==="")return[];let n=[];for(let r=0;r<e.length;r++)for(let[i,a]of ze(e[r],t))if(n.push({line:r,start:i,end:a}),n.length>=Le)return n;return n}function ur({content:e,path:t,t:n}){let r=(0,g.useMemo)(()=>{let E=e.split(`
351
- `);return E.length>0&&E[E.length-1]===""&&E.pop(),E},[e]),i=e.length>dr||r.length>cr,a=i?void 0:(0,ce.languageForPath)(t),s=(0,ce.useCodeHighlighter)(a),o=(0,g.useMemo)(()=>i?void 0:s(r.join(`
352
- `)),[i,s,r]),[l,d]=(0,g.useState)(!1),[f,c]=(0,g.useState)(""),[v,y]=(0,g.useState)(!1),[S,x]=(0,g.useState)(0),w=(0,g.useRef)(null),M=(0,g.useRef)(null),b=(0,g.useRef)(null);(0,g.useEffect)(()=>{d(!1),c(""),x(0)},[t]);let _=He(f,$e),K=(0,g.useMemo)(()=>r.map(E=>E.toLowerCase()),[r]),P=v?_:_.toLowerCase(),J=v?r:K,C=(0,g.useMemo)(()=>gr(J,P),[J,P]);(0,g.useEffect)(()=>{x(0)},[P]);let A=C.length===0?0:Math.min(S,C.length-1),N=(0,g.useMemo)(()=>{let E=new Map;for(let m of C){let T=E.get(m.line)??[];T.push([m.start,m.end]),E.set(m.line,T)}return E},[C]);(0,g.useEffect)(()=>{let E=m=>{if(!((m.ctrlKey||m.metaKey)&&(m.key==="f"||m.key==="F")))return;let T=w.current;T===null||T.offsetParent===null||(m.preventDefault(),d(!0),requestAnimationFrame(()=>M.current?.select()))};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[]);let[F,O]=(0,g.useState)({top:0,height:0});(0,g.useLayoutEffect)(()=>{let E=w.current;if(E===null)return;let m=()=>O({top:E.scrollTop,height:E.clientHeight});m(),E.addEventListener("scroll",m,{passive:!0});let T=typeof ResizeObserver<"u"?new ResizeObserver(m):null;return T?.observe(E),()=>{E.removeEventListener("scroll",m),T?.disconnect()}},[]);let W=r.length,Y=Math.max(0,Math.floor((F.top-0)/Ue)-je),U=F.height===0?W:Math.ceil(F.height/Ue)+je*2,te=Math.min(W,Y+U),q=C.length>0?C[A].line:-1,ee=q>=0?Math.min(Y,Math.max(0,q-je)):Y,L=q>=0?Math.max(te,Math.min(W,q+je)):te;(0,g.useEffect)(()=>{if(q<0)return;let E=requestAnimationFrame(()=>b.current?.scrollIntoView({block:"center",inline:"nearest"}));return()=>cancelAnimationFrame(E)},[A,C,q]);let k=(0,g.useCallback)(E=>{x(m=>C.length===0?0:(m+E+C.length)%C.length)},[C.length]),D=C.length>0?C[A]:null,I=l?(0,g.createElement)(Xe,{inputRef:M,query:f,matches:C.length,active:A,caseSensitive:v,onChange:c,onToggleCase:()=>y(E=>!E),onStep:k,onClose:()=>d(!1),t:n}):null,ne=i||l?(0,g.createElement)("div",{key:"hd",className:"gp-files__header"},[i?(0,g.createElement)("div",{key:"note",className:"gp-files__note"},n("files.highlightOff")):null,I]):null,j=[];for(let E=ee;E<L;E++)j.push((0,g.createElement)("div",{key:E,className:"gp-files__row",style:{top:E*Ue}},[(0,g.createElement)("div",{key:"n",className:"gp-diff-no"},E+1),mr(r[E],E,o?.[E],N.get(E),D,b,n)]));return(0,g.createElement)("div",{className:"gp-files__code gp-diff__scroll",ref:w},[ne,(0,g.createElement)("div",{key:"grid",className:"gp-files__single gp-files__single--virt",style:{height:W*Ue}},j)])}function mr(e,t,n,r,i,a,s){if(e==="")return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},"\xA0");if(e.length>fn)return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},[e.slice(0,fn),(0,g.createElement)("span",{key:"trunc",className:"gp-files__trunc"},s("files.lineTruncated"))]);if(r===void 0||r.length===0)return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},n!==void 0?n.map((l,d)=>(0,g.createElement)("span",{key:d,style:l.style},l.text)):e);let o=i!==null&&i.line===t?[i.start,i.end]:null;return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},Ie(e,r,n,`c${t}`,o,a))}var mn="gp.panel.fontDelta";function hr(){if(typeof localStorage>"u")return 0;let e=Number(localStorage.getItem(mn));return e===-1||e===1?e:0}function hn({ctx:e,sessionId:t,t:n}){let[r,i]=(0,G.useState)(hr),[a,s]=(0,G.useState)(null),o=Me(t),l=ke(e),d=o.state==="error"&&o.error.code==="not-a-git-repo",f=d?"files":a!==null&&a.sessionId===t?a.tab:null,c=(0,G.useRef)({tabs:new Set});c.current.sessionId!==t&&(c.current={sessionId:t,tabs:new Set}),f!==null&&c.current.tabs.add(f);let v=c.current.tabs.has("files");(0,G.useEffect)(()=>{if(!pe(t))return;if(d){s(null);return}if(a?.sessionId===t)return;let _=Et(t);if(_!==null){s({sessionId:t,tab:_});return}o.state==="ready"&&s({sessionId:t,tab:o.snapshot.dirty?"changes":"overview"})},[t,o,d,a?.sessionId]),(0,G.useEffect)(()=>{if(pe(t))return Tt(t,_=>s({sessionId:t,tab:_}))},[t]);let y=o.state==="ready"?o.snapshot.checkedAt:0,S=async _=>{if(!pe(t))return{ok:!1,error:n("error.noCwd")};let K=await l.run({sessionId:t,action:_});return K.ok?(rt(t).accept(K.snapshot),{ok:!0}):{ok:!1,error:yr(K.error.code,K.error.message,n)}},x=_=>{i(_),typeof localStorage<"u"&&localStorage.setItem(mn,String(_))},w=[{key:"overview",label:n("tab.overview"),icon:(0,G.createElement)(De,{size:14})},{key:"changes",label:n("tab.changes"),icon:(0,G.createElement)(Pt,{size:14})},{key:"files",label:n("tab.files"),icon:(0,G.createElement)($t,{size:14})}],M=d?w.filter(_=>_.key==="files"):w,b=(()=>{if(!pe(t))return(0,G.createElement)("div",{className:"gp-empty"},n("error.noCwd"));if(o.state==="no-cwd")return(0,G.createElement)("div",{className:"gp-empty"},n("error.noCwd"));if(d)return(0,G.createElement)("div",{style:{display:"contents"}},v?(0,G.createElement)(ut,{key:t,remote:l,sessionId:t,t:n}):null);if(o.state==="error")return(0,G.createElement)("div",{className:"gp-empty"},n("pill.unavailable"));if(o.state==="cold"||o.state==="loading"||f===null)return(0,G.createElement)("div",{className:"gp-empty"},n("common.loading"));let _=o.snapshot;return(0,G.createElement)("div",{style:{display:"contents"}},[c.current.tabs.has("overview")?(0,G.createElement)("div",{key:"overview",style:f==="overview"?{display:"contents"}:{display:"none"}},(0,G.createElement)(dn,{key:t,remote:l,sessionId:t,refreshKey:y,defaultDiffView:_.defaultDiffView,t:n})):null,c.current.tabs.has("changes")?(0,G.createElement)("div",{key:"changes",style:f==="changes"?{display:"contents"}:{display:"none"}},(0,G.createElement)(pn,{key:t,remote:l,sessionId:t,snapshot:_,onAction:S,t:n})):null,v?(0,G.createElement)("div",{key:"files",style:f==="files"?{display:"contents"}:{display:"none"}},(0,G.createElement)(ut,{key:t,remote:l,sessionId:t,t:n})):null])})();return(0,G.createElement)("div",{className:"gp-panel","data-conversation-composer-overlay":"","data-font-delta":r},[(0,G.createElement)("div",{key:"tabs",className:"gp-tabbar",role:"tablist"},[...M.map(_=>(0,G.createElement)("button",{key:_.key,type:"button",role:"tab","aria-selected":f===_.key,className:`gp-tab${f===_.key?" gp-tab--active":""}`,onClick:()=>{pe(t)&&s({sessionId:t,tab:_.key})}},[(0,G.createElement)("span",{key:"i",className:"gp-tab__icon"},_.icon),(0,G.createElement)("span",{key:"l",className:"gp-tab__label"},_.label)])),(0,G.createElement)("div",{key:"font",className:"gp-font"},[(0,G.createElement)("button",{key:"dec",type:"button",className:"gp-font__decrease",onClick:()=>x(-1),"aria-label":n("panel.fontDecrease")},"A\u2212"),(0,G.createElement)("button",{key:"reset",type:"button",className:"gp-font__reset",onClick:()=>x(0),"aria-label":n("panel.fontReset")},"A"),(0,G.createElement)("button",{key:"inc",type:"button",className:"gp-font__increase",onClick:()=>x(1),"aria-label":n("panel.fontIncrease")},"A+")]),(0,G.createElement)(br,{key:"ver",remote:l,t:n})]),(0,G.createElement)("div",{key:"body",className:"gp-body"},b)])}function yr(e,t,n){switch(e){case"empty-message":return n("error.emptyMessage");case"not-a-git-repo":return n("error.notARepo");case"cwd-unavailable":return n("error.noCwd");case"local-changes-block":return n("error.localChangesBlock");default:return t??n("error.generic")}}function br({remote:e,t}){let[n,r]=(0,G.useState)({kind:"idle"});(0,G.useEffect)(()=>{let o=!0;return e.version({}).then(l=>{o&&"current"in l&&r(d=>({...d,info:l}))}),()=>{o=!1}},[e]);let i=async()=>{r(l=>({kind:"checking",info:l.info}));let o=await e.version({check:!0});r({kind:"idle",info:"current"in o?o:void 0})},a=n.info,s=n.kind==="checking"?(0,G.createElement)("span",{className:"gp-verbar__status"},t("version.checking")):a===void 0||!a.checkedRemote?null:a.error!==void 0?(0,G.createElement)("span",{className:"gp-verbar__status gp-verbar__status--err",title:a.error},a.error==="repository is not configured"?t("version.noRepo"):t("version.error")):a.updateAvailable&&a.latest!==void 0?(0,G.createElement)("span",{},[(0,G.createElement)("span",{key:"s",className:"gp-verbar__status gp-verbar__status--new"},t("version.updateAvailable",{latest:a.latest,current:a.current})),a.releaseUrl!==void 0?(0,G.createElement)("a",{key:"l",className:"gp-verbar__link",href:a.releaseUrl,target:"_blank",rel:"noreferrer",style:{marginLeft:8}},t("version.viewRelease")):null]):(0,G.createElement)("span",{className:"gp-verbar__status gp-verbar__status--ok"},t("version.upToDate",{current:a.current}));return(0,G.createElement)("div",{className:"gp-verbar"},[a!==void 0?(0,G.createElement)("span",{key:"tag",className:"gp-verbar__tag"},`v${a.current}`):null,s,(0,G.createElement)("button",{key:"btn",type:"button",className:"gp-verbar__btn",disabled:n.kind==="checking",onClick:()=>void i()},[(0,G.createElement)("span",{key:"i",className:"gp-tab__icon"},(0,G.createElement)(Pe,{size:12})),t("version.check")]),a?.repositoryUrl!==void 0?(0,G.createElement)("a",{key:"gh",className:"gp-icon-btn gp-verbar__gh",href:a.repositoryUrl,target:"_blank",rel:"noreferrer",title:t("version.openRepo"),"aria-label":t("version.openRepo")},(0,G.createElement)(Ht,{size:15})):null])}var B=require("react"),xn=require("react-dom");var yn="data-gp-tab-dot",we,mt=null,bn="",Ye=null,Qe;function vr(e){if(typeof document>"u")return null;let t=document.querySelectorAll(Ce);for(let n of t)if((n.textContent??"").trim()===e)return n;return null}function ht(){let e=vr(bn);if(e===null)return;let t=e.querySelector(`[${yn}]`);if(Ye===null){t?.remove();return}let n=`gp-tab-dot gp-tab-dot--${Ye}`;if(t!==null){t.className!==n&&(t.className=n);return}let r=document.createElement("span");r.className=n,r.setAttribute(yn,""),r.setAttribute("aria-hidden","true"),e.appendChild(r)}function xr(){if(typeof document>"u"||typeof MutationObserver>"u")return;let e=document.querySelector(Nt);if(e!==mt){if(we?.disconnect(),mt=e,e===null){we=void 0;return}we=new MutationObserver(()=>ht()),we.observe(e,{childList:!0,subtree:!0})}}function wr(){we?.disconnect(),we=void 0,mt=null}function vn(e,t,n){if(!(typeof document>"u")){if(n===null){yt(e);return}Qe=e,bn=t,Ye=n,xr(),ht()}}function yt(e){Qe!==void 0&&Qe!==e||(Qe=void 0,Ye=null,ht(),wr())}function kr(e){let t=e.replace(/[/\\]+$/,"").split(/[/\\]/);return t[t.length-1]||e}function _r(){let[e,t]=(0,B.useState)(!1),[n,r]=(0,B.useState)(null),i=(0,B.useRef)(null);return(0,B.useLayoutEffect)(()=>{if(!e||i.current===null){r(null);return}let o=i.current.getBoundingClientRect();r({left:o.left,bottom:window.innerHeight-o.top+8})},[e]),{bind:{ref:o=>{i.current=o},onMouseEnter:()=>t(!0),onMouseLeave:()=>t(!1)},render:o=>!e||n===null||typeof document>"u"?null:(0,xn.createPortal)((0,B.createElement)("div",{className:"gp-tip",style:{left:n.left,bottom:n.bottom}},o.map((l,d)=>(0,B.createElement)("div",{key:d,className:d===0?"gp-tip__path":"gp-tip__note"},l))),document.body)}}function Sr(e){let[t,n]=(0,B.useState)(!1);return(0,B.useEffect)(()=>{if(e===null||typeof ResizeObserver>"u")return;let i=e.closest("[data-conversation-region]")??document.body,a=()=>n(i.clientWidth>0&&i.clientWidth<Cr);a();let s=new ResizeObserver(a);return s.observe(i),()=>s.disconnect()},[e]),t}var Cr=620;function wn({sessionId:e,t}){let n=Me(e),r=_r(),[i,a]=(0,B.useState)(null),s=Sr(i),o=(0,B.useRef)(Symbol("gp-tab-dot")),l=n.state==="ready"&&n.snapshot.showInputPill===!1?n.snapshot.dirty?"dirty":"synced":null,d=t("panel.tab");if((0,B.useEffect)(()=>{vn(o.current,d,l);let w=o.current;return()=>{yt(w)}},[d,l]),n.state==="cold"||n.state==="loading"||n.state==="no-cwd")return null;if(n.state==="error")return n.error.code==="not-a-git-repo"||n.error.showInputPill===!1?null:(0,B.createElement)("span",{className:"gp-pill gp-pill--degraded",title:n.error.detail??t("pill.unavailable")},t("pill.unavailable"));let f=n.snapshot;if(f.showInputPill===!1)return null;let c=kr(f.root),v=f.branch??`(${t("pill.detached")})`,y=f.dirty,S=y?"gp-pill--dirty":"gp-pill--synced",x=()=>{let w=t("panel.tab");if(Mt(w)){Dt(w);return}pe(e)&&Gt(e,y?"changes":"overview"),Rt(w)};return(0,B.createElement)("span",{className:"gp-pill-wrap",ref:a},[(0,B.createElement)("button",{key:"btn",type:"button",className:`gp-pill ${S}${s?" gp-pill--compact":""}`,onClick:x,ref:r.bind.ref,onMouseEnter:r.bind.onMouseEnter,onMouseLeave:r.bind.onMouseLeave},[(0,B.createElement)("span",{key:"dot",className:"gp-pill__dot","aria-hidden":"true"}),(0,B.createElement)("span",{key:"repo",className:"gp-pill__repo"},c),(0,B.createElement)("span",{key:"git",className:"gp-pill__git"},["(",(0,B.createElement)("span",{key:"b",className:"gp-pill__branch"},v),")"])]),r.render([f.root,t(y?"pill.dirty":"pill.synced")])])}var V=require("react");function Nr(e){for(let t of e){let n=t.schema?.dict;if(n!==void 0&&"showInputPill"in n||JSON.stringify(t.schema).includes("showInputPill"))return t.ns}}function kn({ctx:e,t}){let[,n]=(0,V.useState)(0),[r,i]=(0,V.useState)(!1),[a,s]=(0,V.useState)(!1),[o,l]=(0,V.useState)(null),[d,f]=(0,V.useState)(null),c=()=>{n(N=>N+1)},v=e.get("configForms"),y=(0,V.useMemo)(()=>v?.describe(),[v]);(0,V.useEffect)(()=>{if(y!==void 0)return y.ensure(),y.subscribe(c)},[y]);let S=y?.getSnapshot().view,x=(0,V.useMemo)(()=>S===void 0?void 0:Nr(S.namespaces),[S]),w=(0,V.useMemo)(()=>v!==void 0&&x!==void 0?v.get(x):void 0,[v,x]);(0,V.useEffect)(()=>{if(w!==void 0)return w.subscribe(c)},[w]);let M=w?.getSnapshot(),b=w!==void 0&&M!==void 0&&M.status==="ready",_=y?.getSnapshot().status,K=o??(typeof M?.value?.showInputPill=="boolean"?M.value.showInputPill:!0),P=d??(M?.value?.defaultDiffView==="split"?"split":"unified"),J=async(N,F,O)=>{if(w!==void 0){s(!1),i(!0);try{let W=await w.set(N,F);O(),W?(_e(),setTimeout(()=>_e(),1e3)):s(!0)}catch{O(),s(!0)}finally{i(!1)}}},C=N=>(l(N),J("showInputPill",N,()=>l(null))),A=N=>N===P?Promise.resolve():(f(N),J("defaultDiffView",N,()=>f(null)));return v===void 0?(0,V.createElement)("p",{className:"gp-cfg__hint"},t("cfg.notLoaded")):b?(0,V.createElement)("div",{className:"gp-cfg"},[(0,V.createElement)("h3",{key:"title",className:"gp-cfg__title"},t("cfg.title")),(0,V.createElement)("label",{key:"row",className:"gp-cfg__row"},[(0,V.createElement)("input",{key:"switch",type:"checkbox",role:"switch",className:"gp-cfg__switch",checked:K,disabled:r||M?.writable===!1,onChange:N=>{C(N.currentTarget.checked)}}),(0,V.createElement)("span",{key:"text",className:"gp-cfg__text"},t("cfg.toggle"))]),(0,V.createElement)("p",{key:"hint",className:"gp-cfg__hint"},t("cfg.hint")),(0,V.createElement)("h3",{key:"difftitle",className:"gp-cfg__title",style:{marginTop:6}},t("cfg.diffTitle")),(0,V.createElement)("div",{key:"diffseg",className:"gp-seg gp-cfg__seg"},ve(["unified","split"],P,N=>{A(N)},N=>t(N==="unified"?"cfg.diffUnified":"cfg.diffSplit"),r||M?.writable===!1)),(0,V.createElement)("p",{key:"diffhint",className:"gp-cfg__hint"},t("cfg.diffHint")),a?(0,V.createElement)("p",{key:"error",className:"gp-cfg__err",role:"alert"},t("cfg.saveFailed")):null]):_==="idle"||_==="loading"?(0,V.createElement)("p",{className:"gp-cfg__hint"},t("common.loading")):(0,V.createElement)("p",{className:"gp-cfg__hint"},t("cfg.notLoaded"))}var Ge="gitPanel",Gr=["dsh-git-panel","@xbzbing/dsh-git-panel"],Er=["slots","locale","connection"],Tr="dsh-git-panel";function Rr(e){vt(),St(e),e.effect(()=>e.locale.register(Ge,{zh:xt,en:wt})??void 0,"dsh-git-panel: dictionaries");let t=e.locale.bind(Ge),n=[],r=i=>{typeof i=="function"&&n.push(i)};r(e.slots.inject("conversation.view",()=>e.slots.register({name:"conversation.view",id:"git-panel",order:30,locale:Ge,label:()=>t("panel.tab")},i=>(0,Ze.createElement)(hn,{ctx:e,sessionId:i.sessionId,t})))),r(e.slots.inject("conversation.input.left",()=>e.slots.register({name:"conversation.input.left",id:"git-panel-pill",order:100,locale:Ge},i=>(0,Ze.createElement)(wn,{sessionId:i.sessionId,t}))));for(let i of Gr)r(e.slots.inject("plugins.bundle.config",()=>e.slots.register({name:"plugins.bundle.config",key:i,locale:Ge},a=>a.view==="summary"?t("cfg.title"):(0,Ze.createElement)(kn,{ctx:e,t}))));e.effect(()=>{let i=e.on("connection/reset",()=>_e());return()=>{typeof i=="function"&&i();for(let a of n.splice(0))try{a()}catch{}Ct()}},"dsh-git-panel: lifecycle")}module.exports={name:Tr,inject:Er,apply:Rr};
351
+ `,et=!1;function vt(){if(et||typeof document>"u")return;let e="dsh-git-panel/client.css";if(document.querySelector(`style[data-plugin-css="${e}"]`)!==null){et=!0;return}let t=document.createElement("style");t.dataset.plugin="@xbzbing/dsh-git-panel",t.dataset.pluginCss=e,t.textContent=Sn,document.head.appendChild(t),et=!0}var xt={"panel.tab":"Git","panel.fontDecrease":"\u7F29\u5C0F\u5B57\u4F53","panel.fontReset":"\u91CD\u7F6E\u5B57\u4F53\u5927\u5C0F","panel.fontIncrease":"\u653E\u5927\u5B57\u4F53","tab.overview":"Git \u603B\u89C8","tab.changes":"\u53D8\u66F4\u8BB0\u5F55","tab.files":"\u6587\u4EF6\u6D4F\u89C8","pill.unavailable":"Git \u4E0D\u53EF\u7528","pill.detached":"\u6E38\u79BB HEAD","pill.synced":"\u672C\u5730\u5DF2\u540C\u6B65","pill.dirty":"\u6709\u5F85\u63D0\u4EA4\u7684\u53D8\u66F4","common.loading":"\u52A0\u8F7D\u4E2D\u2026","common.retry":"\u91CD\u8BD5","common.close":"\u5173\u95ED","version.check":"\u68C0\u67E5\u65B0\u7248\u672C","version.checking":"\u68C0\u67E5\u4E2D\u2026","version.upToDate":"\u5DF2\u662F\u6700\u65B0\uFF08{current}\uFF09","version.updateAvailable":"\u6709\u65B0\u7248\u672C {latest}\uFF08\u5F53\u524D {current}\uFF09","version.viewRelease":"\u67E5\u770B\u53D1\u5E03","version.error":"\u68C0\u67E5\u5931\u8D25","version.noRepo":"\u672A\u914D\u7F6E\u4ED3\u5E93\u5730\u5740","version.openRepo":"\u5728 GitHub \u4E0A\u6253\u5F00\u4ED3\u5E93","overview.head":"HEAD\uFF08\u5F53\u524D\u5206\u652F\uFF09","overview.local":"\u672C\u5730","overview.remote":"\u8FDC\u7A0B","overview.tags":"\u6807\u7B7E","overview.search":"\u641C\u7D22\u63D0\u4EA4\uFF08\u6D88\u606F / \u54C8\u5E0C\uFF09","overview.searchShort":"\u641C\u7D22\u63D0\u4EA4","overview.allUsers":"\u5168\u90E8\u4F5C\u8005","overview.allTime":"\u5168\u90E8\u65F6\u95F4","overview.today":"\u4ECA\u5929","overview.last7d":"\u8FD1 7 \u5929","overview.last30d":"\u8FD1 30 \u5929","overview.selectCommit":"\u9009\u62E9\u4E00\u4E2A\u63D0\u4EA4\u67E5\u770B\u8BE6\u60C5","overview.noMessage":"\uFF08\u65E0\u63D0\u4EA4\u6B63\u6587\uFF09","overview.noResults":"\u6CA1\u6709\u5339\u914D\u7684\u63D0\u4EA4","overview.loadFailed":"\u52A0\u8F7D\u5931\u8D25","overview.detailFailed":"\u8BE6\u60C5\u52A0\u8F7D\u5931\u8D25","overview.diffFailed":"\u5DEE\u5F02\u52A0\u8F7D\u5931\u8D25","overview.openFileDiff":"\u67E5\u770B\u8BE5\u6587\u4EF6\u5728\u6B64\u63D0\u4EA4\u4E2D\u7684\u53D8\u66F4","overview.fetch":"\u62C9\u53D6\u8FDC\u7A0B","overview.branchesError":"\u5206\u652F\u52A0\u8F7D\u5931\u8D25","changes.groupStaged":"\u5DF2\u6682\u5B58\u7684\u66F4\u6539","changes.groupUnstaged":"\u66F4\u6539","changes.groupUntracked":"\u672A\u7248\u672C\u63A7\u5236\u7684\u6587\u4EF6","changes.selectFile":"\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u67E5\u770B\u53D8\u66F4","changes.noChanges":"\u6CA1\u6709\u672A\u63D0\u4EA4\u7684\u53D8\u66F4","changes.stageAll":"\u5168\u90E8\u6682\u5B58","changes.unstageAll":"\u5168\u90E8\u53D6\u6D88\u6682\u5B58","changes.stage":"\u6682\u5B58","changes.unstage":"\u53D6\u6D88\u6682\u5B58","changes.discard":"\u653E\u5F03\u66F4\u6539","changes.discardConfirm":"\u518D\u6B21\u70B9\u51FB\u4EE5\u786E\u8BA4\u653E\u5F03","files.selectFile":"\u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u67E5\u770B\u5185\u5BB9","files.loadFailed":"\u52A0\u8F7D\u5931\u8D25","files.truncated":"\u6761\u76EE\u8FC7\u591A\uFF0C\u5DF2\u622A\u65AD","files.tooLarge":"\u6587\u4EF6\u8FC7\u5927\uFF0C\u65E0\u6CD5\u9884\u89C8","files.binary":"\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u9884\u89C8","files.highlightOff":"\u6587\u4EF6\u8F83\u5927\uFF0C\u5DF2\u5173\u95ED\u8BED\u6CD5\u9AD8\u4EAE\u4EE5\u4FDD\u6301\u6D41\u7545","files.lineTruncated":" \u2026\uFF08\u6B64\u884C\u8FC7\u957F\uFF0C\u5DF2\u622A\u65AD\uFF09","files.findPlaceholder":"\u5728\u6B64\u6587\u4EF6\u4E2D\u67E5\u627E","files.findNoMatch":"\u65E0\u5339\u914D","files.findPrev":"\u4E0A\u4E00\u4E2A","files.findNext":"\u4E0B\u4E00\u4E2A","files.findClose":"\u5173\u95ED\u67E5\u627E","files.findCase":"\u533A\u5206\u5927\u5C0F\u5199","files.previewMode":"\u9884\u89C8\u65B9\u5F0F","files.source":"\u6E90\u7801","files.render":"\u6E32\u67D3","files.copyPath":"\u590D\u5236\u76F8\u5BF9\u8DEF\u5F84","files.pathCopied":"\u8DEF\u5F84\u5DF2\u590D\u5236","files.pathCopyFailed":"\u590D\u5236\u5931\u8D25","files.ignored":"\u5DF2\u88AB Git \u5FFD\u7565","files.copy":"\u590D\u5236\u4EE3\u7801","files.copied":"\u5DF2\u590D\u5236","files.footnotes":"\u6CE8\u91CA","files.gitNotInstalled":"\u7CFB\u7EDF\u672A\u5B89\u88C5 Git\uFF0CGit \u9762\u677F\u4E0D\u53EF\u7528\uFF0C\u8BF7\u5B89\u88C5 Git \u5DE5\u5177\u540E\u91CD\u8BD5\u3002","stats.files":"{n} \u4E2A\u6587\u4EF6","stats.lastChange":"\u6700\u8FD1\u53D8\u66F4 {time}","stats.lastCommit":"\u4E0A\u6B21\u63D0\u4EA4 {time}","stats.staged":"\u5DF2\u6682\u5B58 {n}","stats.modified":"\u5DF2\u4FEE\u6539 {n}","stats.untracked":"\u672A\u8DDF\u8E2A {n}","commit.placeholder":"\u63D0\u4EA4\u4FE1\u606F","commit.commit":"\u63D0\u4EA4","commit.amend":"\u4FEE\u6B63\u4E0A\u6B21\u63D0\u4EA4\uFF08amend\uFF09","diff.unified":"\u7EDF\u4E00","diff.split":"\u5BF9\u7167","diff.before":"\u53D8\u66F4\u524D","diff.after":"\u53D8\u66F4\u540E","diff.binary":"\u4E8C\u8FDB\u5236\u6587\u4EF6\uFF0C\u65E0\u6CD5\u663E\u793A\u5BF9\u7167","diff.tooLarge":"\u56FE\u7247\u8FC7\u5927\uFF0C\u65E0\u6CD5\u663E\u793A\u5BF9\u7167","diff.imageMissing":"\u4E0D\u5B58\u5728","diff.svgRender":"\u6E32\u67D3","diff.svgSource":"\u6E90\u7801","diff.empty":"\u65E0\u5DEE\u5F02","diff.expandAll":"\u5C55\u5F00\u5168\u90E8","diff.collapse":"\u6298\u53E0\u672A\u53D8\u66F4","diff.expandGap":"\u5C55\u5F00\u5168\u90E8 {n} \u884C","diff.expandUp":"\u5411\u4E0A\u5C55\u5F00 {n} \u884C","diff.expandDown":"\u5411\u4E0B\u5C55\u5F00 {n} \u884C","time.justNow":"\u521A\u521A","time.minutesAgo":"{n} \u5206\u949F\u524D","time.hoursAgo":"{n} \u5C0F\u65F6\u524D","time.daysAgo":"{n} \u5929\u524D","error.generic":"\u64CD\u4F5C\u5931\u8D25","error.notARepo":"\u5F53\u524D\u76EE\u5F55\u4E0D\u662F Git \u4ED3\u5E93","error.noCwd":"\u5F53\u524D\u4F1A\u8BDD\u65E0\u5DE5\u4F5C\u76EE\u5F55","error.localChangesBlock":"\u672C\u5730\u6709\u672A\u63D0\u4EA4\u53D8\u66F4\uFF0C\u65E0\u6CD5\u5207\u6362","error.emptyMessage":"\u63D0\u4EA4\u4FE1\u606F\u4E0D\u80FD\u4E3A\u7A7A","cfg.title":"\u8F93\u5165\u6846\u5206\u652F\u6807\u8BB0","cfg.toggle":"\u663E\u793A\u8F93\u5165\u6846\u6807\u8BB0","cfg.hint":"\u5F00\u542F\u65F6\u5728\u8F93\u5165\u6846\u663E\u793A zsh \u98CE\u683C\u7684 <\u4ED3\u5E93\u540D> (\u5206\u652F) \u6807\u8BB0\uFF1B\u5173\u95ED\u540E\u6539\u4E3A\u5728 Git \u6807\u7B7E\u65C1\u663E\u793A\u72B6\u6001\u5706\u70B9\u3002\u4FDD\u5B58\u540E\u7ACB\u5373\u751F\u6548\u3002","cfg.diffTitle":"\u5DEE\u5F02\u5BF9\u6BD4\u9ED8\u8BA4\u89C6\u56FE","cfg.diffHint":"\u9009\u62E9\u53D8\u66F4\u5BF9\u6BD4\u9ED8\u8BA4\u6253\u5F00\u7684\u5E03\u5C40\uFF1A\u7EDF\u4E00\u89C6\u56FE\u4E3A\u5355\u680F\u884C\u5185\u5BF9\u6BD4\uFF0C\u5E76\u6392\u89C6\u56FE\u4E3A\u5DE6\u53F3\u5206\u680F\u5BF9\u6BD4\u3002\u4ECD\u53EF\u5728\u6BCF\u4E2A\u5DEE\u5F02\u89C6\u56FE\u4E2D\u4E34\u65F6\u5207\u6362\u3002\u4FDD\u5B58\u540E\u7ACB\u5373\u751F\u6548\u3002","cfg.diffUnified":"\u7EDF\u4E00\u89C6\u56FE\uFF08\u5355\u680F\u884C\u5185\uFF09","cfg.diffSplit":"\u5E76\u6392\u89C6\u56FE\uFF08\u5DE6\u53F3\u5206\u680F\uFF09","cfg.notLoaded":"\u914D\u7F6E\u672A\u52A0\u8F7D\uFF1A\u8BE5\u914D\u7F6E\u7531\u8FD0\u884C\u4E2D\u7684\u5BBF\u4E3B\u63D0\u4F9B\uFF0C\u82E5\u957F\u65F6\u95F4\u7A7A\u767D\u8BF7\u91CD\u542F DSH \u540E\u91CD\u8BD5\u3002","cfg.saveFailed":"\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5"},wt={"panel.tab":"Git","panel.fontDecrease":"Decrease font size","panel.fontReset":"Reset font size","panel.fontIncrease":"Increase font size","tab.overview":"Overview","tab.changes":"Changes","tab.files":"Files","pill.unavailable":"Git unavailable","pill.detached":"detached HEAD","pill.synced":"Everything committed","pill.dirty":"Uncommitted changes","common.loading":"Loading\u2026","common.retry":"Retry","common.close":"Close","version.check":"Check for updates","version.checking":"Checking\u2026","version.upToDate":"Up to date ({current})","version.updateAvailable":"New version {latest} available (current {current})","version.viewRelease":"View release","version.error":"Check failed","version.noRepo":"Repository not configured","version.openRepo":"Open repository on GitHub","overview.head":"HEAD (Current Branch)","overview.local":"Local","overview.remote":"Remote","overview.tags":"Tags","overview.search":"Search commits (message / hash)","overview.searchShort":"Search","overview.allUsers":"All authors","overview.allTime":"All time","overview.today":"Today","overview.last7d":"Last 7 days","overview.last30d":"Last 30 days","overview.selectCommit":"Select a commit to see details","overview.noMessage":"(no commit body)","overview.noResults":"No matching commits","overview.loadFailed":"Load failed","overview.detailFailed":"Failed to load details","overview.diffFailed":"Failed to load diff","overview.openFileDiff":"View this file\u2019s changes in this commit","overview.fetch":"Fetch","overview.branchesError":"Failed to load branches","changes.groupStaged":"Staged changes","changes.groupUnstaged":"Changes","changes.groupUntracked":"Unversioned files","changes.selectFile":"Select a file to see its diff","changes.noChanges":"No uncommitted changes","changes.stageAll":"Stage all","changes.unstageAll":"Unstage all","changes.stage":"Stage","changes.unstage":"Unstage","changes.discard":"Discard changes","changes.discardConfirm":"Click again to confirm discard","files.selectFile":"Select a file to preview","files.loadFailed":"Load failed","files.truncated":"Too many entries \u2014 truncated","files.tooLarge":"File too large to preview","files.binary":"Binary file \u2014 no preview","files.highlightOff":"Large file \u2014 syntax highlighting disabled for performance","files.lineTruncated":" \u2026 (line too long, truncated)","files.findPlaceholder":"Find in file","files.findNoMatch":"No results","files.findPrev":"Previous match","files.findNext":"Next match","files.findClose":"Close find","files.findCase":"Match case","files.previewMode":"Preview mode","files.source":"Source","files.render":"Rendered","files.copyPath":"Copy relative path","files.pathCopied":"Path copied","files.pathCopyFailed":"Copy failed","files.ignored":"Ignored by Git","files.copy":"Copy code","files.copied":"Copied","files.footnotes":"Footnotes","files.gitNotInstalled":"Git is not installed; the Git panel is unavailable. Please install Git and try again.","stats.files":"{n} files","stats.lastChange":"changed {time}","stats.lastCommit":"last commit {time}","stats.staged":"{n} staged","stats.modified":"{n} modified","stats.untracked":"{n} untracked","commit.placeholder":"Commit message","commit.commit":"Commit","commit.amend":"Amend previous commit","diff.unified":"Unified","diff.split":"Split","diff.before":"Before","diff.after":"After","diff.binary":"Binary file \u2014 no diff to show","diff.tooLarge":"Image too large to compare","diff.imageMissing":"Does not exist","diff.svgRender":"Rendered","diff.svgSource":"Source","diff.empty":"No differences","diff.expandAll":"Expand all","diff.collapse":"Collapse unchanged","diff.expandGap":"Expand all {n} lines","diff.expandUp":"Expand up {n} lines","diff.expandDown":"Expand down {n} lines","time.justNow":"just now","time.minutesAgo":"{n}m ago","time.hoursAgo":"{n}h ago","time.daysAgo":"{n}d ago","error.generic":"Operation failed","error.notARepo":"Not a Git repository","error.noCwd":"This session has no working directory","error.localChangesBlock":"Local changes block the checkout","error.emptyMessage":"Commit message cannot be empty","cfg.title":"Input-bar branch marker","cfg.toggle":"Show input-bar marker","cfg.hint":"When on, the input bar shows the zsh-style <repo> (branch) marker; when off, a status dot appears beside the Git tab instead. Saved changes apply immediately.","cfg.diffTitle":"Default diff view","cfg.diffHint":"Choose the layout diffs open with: unified is a single inline column, split is side-by-side. You can still switch per diff. Saved changes apply immediately.","cfg.diffUnified":"Unified (single inline column)","cfg.diffSplit":"Split (side-by-side)","cfg.notLoaded":"Config not loaded: it is served by the running host. Restart DSH if this stays blank.","cfg.saveFailed":"Save failed, please retry"};var Ee=require("react");var Cn=new Set(["cwd-unavailable"]),tt=3e4,Nn=6e4,Re=class{constructor(t,n){this.remote=t;this.sessionId=n}view={state:"cold"};listeners=new Set;timer;inflight;pendingRefresh=!1;disposed=!1;pollMs=tt;subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}getSnapshot(){return this.view}ensure(){this.view.state!=="cold"&&this.view.state!=="no-cwd"||this.refresh()}refresh(){return this.inflight!==void 0?(this.pendingRefresh=!0,this.inflight):this.disposed?Promise.resolve():(this.view.state==="cold"&&this.setView({state:"loading"}),this.inflight=this.remote.snapshot({sessionId:this.sessionId}).then(t=>{if(!this.disposed){if(t.ok)this.pollMs=t.value.refreshIntervalMs||tt,this.setView({state:"ready",snapshot:t.value});else if(t.error.code!=="cancelled")if(Cn.has(t.error.code))this.pollMs=Nn,this.setView({state:"no-cwd"});else if(t.error.code==="not-a-git-repo"){let n=t.error;this.setView({state:"error",error:{code:"not-a-git-repo",...n.cwd?{cwd:n.cwd}:{},...n.showInputPill!==void 0?{showInputPill:n.showInputPill}:{}}})}else if(t.error.code==="git-unavailable"){let n=t.error;this.setView({state:"error",error:{code:"git-unavailable",...n.detail?{detail:n.detail}:{},...n.cwd?{cwd:n.cwd}:{},...n.isGitRepo!==void 0?{isGitRepo:n.isGitRepo}:{}}})}else this.setView({state:"error",error:{code:t.error.code,..."detail"in t.error?{detail:t.error.detail}:{}}})}}).catch(t=>{this.disposed||this.setView({state:"error",error:{code:"git-unavailable",detail:t instanceof Error?t.message:String(t)}})}).finally(()=>{this.inflight=void 0,this.pendingRefresh&&!this.disposed?(this.pendingRefresh=!1,this.refresh()):this.schedulePoll()}),this.inflight)}resync(){this.disposed||this.refresh()}accept(t){this.disposed||(this.pollMs=t.refreshIntervalMs||tt,this.setView({state:"ready",snapshot:t}),this.schedulePoll())}schedulePoll(){this.disposed||(this.timer!==void 0&&clearTimeout(this.timer),!(this.pollMs<=0)&&(this.timer=setTimeout(()=>{this.refresh()},this.pollMs)))}setView(t){this.view=t;for(let n of this.listeners)n()}dispose(){this.disposed=!0,this.timer!==void 0&&clearTimeout(this.timer),this.timer=void 0,this.listeners.clear()}};var Gn="/api",Rn="gitPanel";function Tn(e){try{let t=e.get("connection")?.rpc,n=t?.call;if(t!==void 0&&typeof n=="function")return(r,i,a)=>n.call(t,Gn,r,i,a)}catch{}}function En(e){let t=e;if(t===null||typeof t!="object")return{ok:!1,error:{code:"git-unavailable",message:"malformed rpc result"}};if(t.ok!==!0){let n=t.error;return{ok:!1,error:{code:typeof n?.code=="string"?n.code:"git-unavailable",message:typeof n?.message=="string"?n.message:void 0}}}return t.value===void 0?{ok:!1,error:{code:"git-unavailable",message:"missing value"}}:t.value}function Q(e,t){return!e.ok||e.value.kind!==t?null:e.value}function pe(e){return e!==void 0&&e!==""}var kt=new WeakMap;function xe(e){let t=kt.get(e);if(t!==void 0)return t;let n=async(i,a,s)=>{let o=Tn(e);if(o===void 0)return{ok:!1,error:{code:"git-unavailable",message:"no connection"}};try{let l=await o(`${Rn}/${i}`,{args:{request:a}},s);return En(l)}catch(l){return{ok:!1,error:{code:"git-unavailable",message:l instanceof Error?l.message:String(l)}}}},r={snapshot:(i,a)=>n("snapshot",i,a),run:(i,a)=>n("run",i,a),query:(i,a)=>n("query",i,a),version:(i,a)=>n("version",i,a)};return kt.set(e,r),r}var fe=new Map,_t,nt;function St(e){nt=e,_t=xe(e)}function rt(e){let t=fe.get(e);if(t===void 0){let n=_t??(nt?xe(nt):void 0);t=new Re(n??Fn(),e),fe.set(e,t)}return t}var Mn=6e4,Te=new Map;function Dn(e){let t=Te.get(e);t!==void 0&&(clearTimeout(t),Te.delete(e)),me.set(e,(me.get(e)??0)+1)}function Pn(e){let t=(me.get(e)??1)-1;if(t>0){me.set(e,t);return}me.delete(e);let n=setTimeout(()=>{Te.delete(e),!((me.get(e)??0)>0)&&(fe.get(e)?.dispose(),fe.delete(e))},Mn);Te.set(e,n)}var me=new Map;function we(){for(let e of fe.values())e.resync()}function Ct(){for(let e of fe.values())e.dispose();fe.clear()}function Fn(){let e=async()=>({ok:!1,error:{code:"git-unavailable"}});return{snapshot:e,run:e,query:e,version:e}}function Me(e){let[,t]=(0,Ee.useState)(0),n=e?rt(e):void 0;return(0,Ee.useEffect)(()=>{if(n===void 0||e===void 0)return;Dn(e);let r=n.subscribe(()=>t(i=>i+1));return n.ensure(),()=>{r(),Pn(e)}},[n,e]),n?n.getSnapshot():{state:"cold"}}var G=require("react");var Nt="[data-conversation-tabs]",_e='[data-conversation-tabs] button[role="tab"]',it=new Map,ke=new Map;function Gt(e,t){let n=ke.get(e);if(n!==void 0&&n.size>0){for(let r of n)r(t);return}it.set(e,t)}function Rt(e){let t=it.get(e);return t===void 0?null:(it.delete(e),t)}function Tt(e,t){let n=ke.get(e);return n===void 0&&(n=new Set,ke.set(e,n)),n.add(t),()=>{let r=ke.get(e);r!==void 0&&(r.delete(t),r.size===0&&ke.delete(e))}}function Et(e){if(typeof document>"u")return!1;let t=document.querySelectorAll(_e);for(let n of t)if((n.textContent??"").trim()===e)return n.getAttribute("aria-selected")!=="true"&&n.click(),!0;return!1}function Mt(e){if(typeof document>"u")return!1;let t=document.querySelectorAll(_e);for(let n of t)if((n.textContent??"").trim()===e)return n.getAttribute("aria-selected")==="true";return!1}function Dt(e){if(typeof document>"u")return!1;let t=document.querySelectorAll(_e);for(let n of t)if((n.textContent??"").trim()!==e)return n.getAttribute("aria-selected")!=="true"&&n.click(),!0;return!1}var c=require("react"),pt=require("react-dom");var z=require("react");function le(e,t=15){return(0,z.createElement)("svg",{width:t,height:t,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round"},e)}function De({size:e}){return le([(0,z.createElement)("circle",{key:"c",cx:8,cy:8,r:2.4}),(0,z.createElement)("line",{key:"l1",x1:8,y1:1.5,x2:8,y2:5.6}),(0,z.createElement)("line",{key:"l2",x1:8,y1:10.4,x2:8,y2:14.5})],e)}function Pt({size:e}){return le([(0,z.createElement)("path",{key:"a",d:"M4 2v8"}),(0,z.createElement)("path",{key:"b",d:"M2 4h4"}),(0,z.createElement)("circle",{key:"c",cx:4,cy:12,r:1.6}),(0,z.createElement)("circle",{key:"d",cx:12,cy:4,r:1.6}),(0,z.createElement)("path",{key:"e",d:"M12 6v4"}),(0,z.createElement)("path",{key:"f",d:"M10 12h4"})],e)}function at({size:e}){return le([(0,z.createElement)("circle",{key:"a",cx:4,cy:3,r:1.6}),(0,z.createElement)("circle",{key:"b",cx:4,cy:13,r:1.6}),(0,z.createElement)("circle",{key:"c",cx:12,cy:5,r:1.6}),(0,z.createElement)("path",{key:"d",d:"M4 4.6v6.8"}),(0,z.createElement)("path",{key:"e",d:"M12 6.6c0 3-4 2.4-8 4"})],e)}function Ft({size:e}){return le([(0,z.createElement)("path",{key:"a",d:"M2 7V3h4l8 8-4 4z"}),(0,z.createElement)("circle",{key:"b",cx:4.5,cy:5.5,r:.8,fill:"currentColor"})],e)}function ge({size:e,open:t}){return le([(0,z.createElement)("path",{key:"a",d:t?"M3 6l5 5 5-5":"M6 3l5 5-5 5"})],e)}function At({size:e}){return le([(0,z.createElement)("path",{key:"a",d:"M4 4l8 8M12 4l-8 8"})],e)}function Pe({size:e}){return le([(0,z.createElement)("path",{key:"a",d:"M13 8a5 5 0 1 1-1.5-3.5"}),(0,z.createElement)("path",{key:"b",d:"M13 2v3h-3"})],e)}function Lt({size:e}){return le([(0,z.createElement)("path",{key:"a",d:"M4 2h5l3 3v9H4z"}),(0,z.createElement)("path",{key:"b",d:"M9 2v3h3"})],e)}function $t({size:e}){return le([(0,z.createElement)("path",{key:"a",d:"M5 2.5h4l2.5 2.5v7.5h-6.5z"}),(0,z.createElement)("path",{key:"b",d:"M9 2.5V5h2.5"}),(0,z.createElement)("path",{key:"c",d:"M11 12.5v1.5h-6.5V6"})],e)}function Ht({size:e=15}){return(0,z.createElement)("svg",{width:e,height:e,viewBox:"0 0 16 16",fill:"currentColor"},(0,z.createElement)("path",{"fill-rule":"evenodd",d:"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z"}))}function zt(e){let t=0;for(let n of e){t=Math.max(t,n.lane+1);for(let r of n.edges)t=Math.max(t,r.fromLane+1,r.toLane+1)}return t}function It(e){let t=[],n=[],r=new Map,i=0,a=s=>{let o=r.get(s);return o===void 0&&(o=i++,r.set(s,o)),o};for(let s of e){let o=k=>{let w=n.findIndex(D=>D===k);return w===-1&&(w=n.findIndex(D=>D===null),w===-1&&(w=n.length,n.push(null)),n[w]=k),w},l=o(s.hash),d=a(s.hash),f=[...n],p=s.parents,u=p.length>=2;for(let k=0;k<n.length;k++)k!==l&&n[k]===s.hash&&(n[k]=null);if(p.length===0)n[l]=null;else{n[l]=p[0],a(p[0]);for(let k=1;k<p.length;k++){let w=p[k];o(w),a(w)}}let m=[],_=n;for(let k=0;k<f.length;k++){let w=f[k];if(w!==null)if(w===s.hash)m.push({fromLane:k,toLane:l,color:a(s.hash)});else{let D=_.findIndex(v=>v===w);D!==-1&&m.push({fromLane:k,toLane:D,color:a(w)})}}for(let k of p){let w=_.findIndex(D=>D===k);w!==-1&&m.push({fromLane:l,toLane:w,color:a(k)})}for(t.push({commit:s,lane:l,color:d,edges:m,merge:u});n.length>0&&n[n.length-1]===null;)n=n.slice(0,-1)}return t}function Xt(e){let t={name:"",path:"",dir:!0,children:[]};for(let n of e){let r=n.path.split("/").filter(s=>s!==""),i=t,a="";for(let s=0;s<r.length;s++){let o=r[s];a=a===""?o:`${a}/${o}`;let l=s===r.length-1,d=i.children.find(f=>f.name===o&&f.dir===!l);d===void 0&&(d={name:o,path:a,dir:!l,children:[],...l?{meta:n.meta}:{}},i.children.push(d)),i=d}}return Vt(t),Kt(t.children)}function Vt(e){e.children.sort((t,n)=>t.dir!==n.dir?t.dir?-1:1:t.name.localeCompare(n.name));for(let t of e.children)Vt(t)}function Kt(e){return e.map(t=>{if(!t.dir)return t;let n=t;for(;n.children.length===1&&n.children[0].dir;){let r=n.children[0];n={name:`${n.name}/${r.name}`,path:r.path,dir:!0,children:r.children}}return{...n,children:Kt(n.children)}})}function Se(e,t,n){if(e===null)return"";let r=typeof e=="number"?e:Date.parse(e);if(!Number.isFinite(r))return"";let i=Math.max(0,t-r),a=Math.floor(i/6e4);if(a<1)return n("time.justNow");if(a<60)return n("time.minutesAgo",{n:a});let s=Math.floor(a/60);if(s<24)return n("time.hoursAgo",{n:s});let o=Math.floor(s/24);return n("time.daysAgo",{n:o})}function Ce(e){if(e===null)return"";let t=new Date(typeof e=="number"?e:Date.parse(e));if(Number.isNaN(t.getTime()))return"";let n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`}function Jt(e){if(e===null)return"";let t=new Date(typeof e=="number"?e:Date.parse(e));if(Number.isNaN(t.getTime()))return"";let n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}var Fe={added:"A",modified:"M",deleted:"D",renamed:"R",untracked:"U",conflicted:"!",typechange:"T"};function Ae(e){return e==="added"||e==="untracked"?"gp-status--added":e==="deleted"?"gp-status--deleted":e==="renamed"?"gp-status--renamed":"gp-status--modified"}var h=require("react");var An={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",avif:"image/avif",bmp:"image/bmp",svg:"image/svg+xml",ico:"image/x-icon",tif:"image/tiff",tiff:"image/tiff"};function ot(e){let t=e.lastIndexOf(".");return t<0?null:An[e.slice(t+1).toLowerCase()]??null}function qt(e){return/^Binary files .* differ$/m.test(e)||/^GIT binary patch$/m.test(e)}function Bt(e){return ot(e)!==null}function Ot(e){return/\.svg$/i.test(e)}function Ln(e){let t=st(e);return t.length===0?!1:t.every(n=>n.startsWith("+")||n.startsWith(" "))&&t.some(n=>n.startsWith("+"))&&/^\+\+\+ /m.test(e)&&/--- \/dev\/null/m.test(e)}function $n(e){let t=st(e);return t.length===0?!1:t.every(n=>n.startsWith("-")||n.startsWith(" "))&&t.some(n=>n.startsWith("-"))&&/^\+\+\+ \/dev\/null/m.test(e)}function st(e){let t=e.split(`
352
+ `),n=[],r=!1;for(let i of t){if(i.startsWith("@@")){r=!0;continue}if(r){if(i.startsWith("diff ")||i.startsWith("index ")){r=!1;continue}i!==""&&n.push(i)}}return n}function Wt(e){let t=0,n=0;for(let r of st(e))r.startsWith("+")?t++:r.startsWith("-")&&n++;return{add:t,del:n}}var Hn=/@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/;function Ut(e){let t=[],n=e.split(`
353
+ `),r=0,i=0,a=!0,s=!1,o=0;for(;o<n.length&&!n[o].startsWith("@@");o++);for(;o<n.length;o++){let l=n[o];if(l.startsWith("@@")){let p=Hn.exec(l);if(p){let u=Number(p[1]),m=Number(p[3]),_=u-m;if(a)m>1&&t.push(he({rightStart:1,count:m-1,delta:_,atStart:!0,atEnd:!1}));else{let k=m-i;k>0&&t.push(he({rightStart:i,count:k,delta:_,atStart:!1,atEnd:!1}))}r=u,i=m,a=!1}t.push({kind:"hunk",leftNo:null,rightNo:null,leftText:null,rightText:null,text:l});continue}if(l.startsWith("\\"))continue;let d=l[0],f=l.slice(1);d==="+"?(t.push({kind:"add",leftNo:null,rightNo:i,leftText:null,rightText:f}),i++,s=!0):d==="-"?(t.push({kind:"del",leftNo:r,rightNo:null,leftText:f,rightText:null}),r++,s=!0):d===" "&&(t.push({kind:"context",leftNo:r,rightNo:i,leftText:f,rightText:f}),r++,i++,s=!0)}return s&&!a&&!Ln(e)&&!$n(e)&&t.push(he({rightStart:i,count:null,delta:r-i,atStart:!1,atEnd:!0})),zn(t)}function he(e){return{kind:"gap",leftNo:null,rightNo:null,leftText:null,rightText:null,gap:e}}function zn(e){let t=[],n=0;for(;n<e.length;){let r=e[n];if(r.kind==="del"){let i=[],a=n;for(;a<e.length&&e[a].kind==="del";)i.push(e[a]),a++;let s=[];for(;a<e.length&&e[a].kind==="add";)s.push(e[a]),a++;let o=Math.max(i.length,s.length);for(let l=0;l<o;l++){let d=i[l],f=s[l];if(d&&f){let p=In(d.leftText??"",f.rightText??"");t.push({kind:"mod",leftNo:d.leftNo,rightNo:f.rightNo,leftText:d.leftText,rightText:f.rightText,...p!==null?{leftWord:p.left,rightWord:p.right}:{}})}else d?t.push({kind:"del",leftNo:d.leftNo,rightNo:null,leftText:d.leftText,rightText:null}):f&&t.push({kind:"add",leftNo:null,rightNo:f.rightNo,leftText:null,rightText:f.rightText})}n=a}else t.push(r),n++}return t}function In(e,t){let n=Math.min(e.length,t.length),r=0;for(;r<n&&e[r]===t[r];)r++;let i=0;for(;i<n-r&&e[e.length-1-i]===t[t.length-1-i];)i++;return r===0&&i===0?null:{left:[r,e.length-i],right:[r,t.length-i]}}function Xn(e,t,n){return n.map((r,i)=>{let a=t+i;return{kind:"context",leftNo:a+e,rightNo:a,leftText:r,rightText:r}})}var oe=20;function lt(e){let t=[];for(let n of e)n.kind==="mod"?(t.push({kind:"del",leftNo:n.leftNo,rightNo:null,leftText:n.leftText,rightText:null,...n.leftWord!==void 0?{leftWord:n.leftWord}:{}}),t.push({kind:"add",leftNo:null,rightNo:n.rightNo,leftText:null,rightText:n.rightText,...n.rightWord!==void 0?{rightWord:n.rightWord}:{}})):t.push(n);return t}function jt(e,t,n,r,i,a){let s=e.findIndex(p=>p.kind==="gap"&&p.gap?.rightStart===t);if(s<0)return e.slice();let o=e[s].gap,l=Xn(o.delta,r,i),d=[];if(o.atEnd)return d.push(...l),!a&&i.length>0&&d.push(he({rightStart:r+i.length,count:null,delta:o.delta,atStart:!1,atEnd:!0})),[...e.slice(0,s),...d,...e.slice(s+1)];let f=o.count??i.length;if(n==="all"||i.length>=f)d.push(...l);else if(n==="down"){d.push(...l);let p=f-i.length;d.push(he({rightStart:o.rightStart+i.length,count:p,delta:o.delta,atStart:!1,atEnd:!1}))}else{let p=f-i.length;d.push(he({rightStart:o.rightStart,count:p,delta:o.delta,atStart:o.atStart,atEnd:!1})),d.push(...l)}return[...e.slice(0,s),...d,...e.slice(s+1)]}var qe=require("@deepseek-ai/dsh-client-ui-primitives");function Qt(e,t){let n=[[],[],[]],r=0;for(let i of e){let a=r+i.text.length,s=[r,Math.max(r,Math.min(a,t[0])),Math.max(r,Math.min(a,t[1])),a];for(let o=0;o<3;o++){let l=i.text.slice(s[o]-r,s[o+1]-r);l!==""&&n[o].push({text:l,style:i.style})}r=a}return n}var Z=require("react"),Le=5e3,$e=120;function He(e,t){let[n,r]=(0,Z.useState)(e);return(0,Z.useEffect)(()=>{let i=setTimeout(()=>r(e),t);return()=>clearTimeout(i)},[e,t]),n}function ze(e,t){if(t==="")return[];let n=[],r=0;for(;;){let i=e.indexOf(t,r);if(i<0)break;n.push([i,i+t.length]),r=i+t.length}return n}function dt(e,t,n,r,i){if(n>=r)return[];if(e===void 0)return[t.slice(n,r)];let a=[],s=0,o=0;for(let l of e){let d=s+l.text.length,f=Math.max(n,s),p=Math.min(r,d);if(p>f&&a.push((0,Z.createElement)("span",{key:`${i}-${o++}`,style:l.style},l.text.slice(f-s,p-s))),s=d,s>=r)break}return a}function Ie(e,t,n,r,i,a){let s=[],o=0,l=[...t].sort((d,f)=>d[0]-f[0]);for(let[d,f]of l){if(d<o)continue;d>o&&s.push(...dt(n,e,o,d,`${r}b${o}`));let p=i!==null&&i[0]===d&&i[1]===f;s.push((0,Z.createElement)("mark",{key:`mk${r}-${d}`,className:`gp-find-hit${p?" gp-find-hit--active":""}`,...p?{ref:a}:{}},dt(n,e,d,f,`mk${r}-${d}`))),o=f}return o<e.length&&s.push(...dt(n,e,o,e.length,`${r}e`)),s}function Xe(e){return(0,Z.createElement)("div",{key:"find",className:"gp-find"},[(0,Z.createElement)("input",{key:"in",ref:e.inputRef,className:"gp-find__input",type:"text",placeholder:e.t("files.findPlaceholder"),value:e.query,spellCheck:!1,"aria-label":e.t("files.findPlaceholder"),onChange:t=>e.onChange(t.target.value),onKeyDown:t=>{t.key==="Escape"?(t.preventDefault(),t.stopPropagation(),e.onClose()):t.key==="Enter"&&(t.preventDefault(),e.onStep(t.shiftKey?-1:1))}}),(0,Z.createElement)("button",{key:"case",type:"button",className:`gp-find__btn gp-find__case${e.caseSensitive?" gp-find__case--active":""}`,title:e.t("files.findCase"),"aria-label":e.t("files.findCase"),"aria-pressed":e.caseSensitive,onClick:()=>e.onToggleCase()},"Aa"),(0,Z.createElement)("span",{key:"cnt",className:"gp-find__count"},e.query===""?"":e.matches===0?e.t("files.findNoMatch"):`${e.active+1}/${e.matches}`),(0,Z.createElement)("button",{key:"prev",type:"button",className:"gp-find__btn",title:e.t("files.findPrev"),"aria-label":e.t("files.findPrev"),disabled:e.matches===0,onClick:()=>e.onStep(-1)},"\u2039"),(0,Z.createElement)("button",{key:"next",type:"button",className:"gp-find__btn",title:e.t("files.findNext"),"aria-label":e.t("files.findNext"),disabled:e.matches===0,onClick:()=>e.onStep(1)},"\u203A"),(0,Z.createElement)("button",{key:"x",type:"button",className:"gp-find__btn",title:e.t("files.findClose"),"aria-label":e.t("files.findClose"),onClick:()=>e.onClose()},"\u2715")])}var de=require("react");function Ve(e,t,n){let r=n(`diff.${e}`);return(0,de.createElement)("div",{className:`gp-imgcmp__pane gp-imgcmp__pane--${e}`},[(0,de.createElement)("div",{key:"head",className:"gp-imgcmp__head"},r),t===void 0?(0,de.createElement)("div",{key:"missing",className:"gp-imgcmp__missing"},n("diff.imageMissing")):(0,de.createElement)("div",{key:"img",className:"gp-imgcmp__img"},(0,de.createElement)("img",{src:t,alt:r}))])}function Yt({oldUrl:e,newUrl:t,mode:n,t:r}){return n==="before"?(0,de.createElement)("div",{className:"gp-imgcmp gp-imgcmp--single"},Ve("before",e,r)):n==="after"?(0,de.createElement)("div",{className:"gp-imgcmp gp-imgcmp--single"},Ve("after",t,r)):(0,de.createElement)("div",{className:"gp-imgcmp"},[Ve("before",e,r),Ve("after",t,r)])}var Be=(0,h.memo)(function({text:t,mode:n,path:r,remote:i,sessionId:a,imageSpec:s,t:o}){let l=(0,h.useMemo)(()=>Ut(t),[t]),d=qt(t),f=(0,qe.useCodeHighlighter)(r===void 0?void 0:(0,qe.languageForPath)(r)),[p,u]=(0,h.useState)(l);(0,h.useEffect)(()=>{u(l)},[l]);let m=Jn(p,u,i,a,r,s),_=r!==void 0&&Ot(r),[k,w]=(0,h.useState)("render");(0,h.useEffect)(()=>{w("render")},[r]);let v=(d||_)&&r!==void 0&&Bt(r)&&i!==void 0&&a!==void 0&&s!==void 0&&(!_||k==="render"),M=Bn(v?i:void 0,v?a:void 0,v?r:void 0,v?s:void 0),[J,N]=(0,h.useState)(!1),[$,S]=(0,h.useState)(""),[F,C]=(0,h.useState)(!1),[A,O]=(0,h.useState)(0),W=(0,h.useRef)(null),ae=(0,h.useRef)(null),Y=(0,h.useRef)(null);(0,h.useEffect)(()=>{N(!1),S(""),O(0)},[t,r]);let U=(0,h.useMemo)(()=>Vn(n,p),[n,p]),te=(0,h.useMemo)(()=>U.map(V=>({key:V.key,text:V.text.toLowerCase()})),[U]),B=He($,$e),ee=F?B:B.toLowerCase(),L=F?U:te,x=(0,h.useMemo)(()=>Kn(L,ee),[L,ee]);(0,h.useEffect)(()=>{O(0)},[ee]);let P=x.length===0?0:Math.min(A,x.length-1),X=x.length>0?x[P]:null,ne=(0,h.useMemo)(()=>{let V=new Map;for(let H of x){let se=V.get(H.cellKey)??[];se.push([H.start,H.end]),V.set(H.cellKey,se)}return V},[x]);(0,h.useEffect)(()=>{let V=H=>{if(!((H.ctrlKey||H.metaKey)&&(H.key==="f"||H.key==="F")))return;let se=W.current;se===null||se.offsetParent===null||(H.preventDefault(),N(!0),requestAnimationFrame(()=>ae.current?.select()))};return document.addEventListener("keydown",V),()=>document.removeEventListener("keydown",V)},[]),(0,h.useEffect)(()=>{Y.current?.scrollIntoView({block:"center",inline:"nearest"})},[P,x]);let j=(0,h.useCallback)(V=>{O(H=>x.length===0?0:(H+V+x.length)%x.length)},[x.length]),R=J&&ee!==""?{perCell:ne,activeKey:X?.cellKey??null,activeRange:X?[X.start,X.end]:null,activeRef:Y}:null;if(v){let V=(()=>{if(M.kind==="idle"||M.kind==="loading")return(0,h.createElement)("div",{className:"gp-empty"},o("common.loading"));if(M.kind==="ready"){let H=M.res;if(H.tooLarge===!0)return(0,h.createElement)("div",{className:"gp-empty"},o("diff.tooLarge"));if(H.mime!==null&&(H.old!==void 0||H.new!==void 0))return(0,h.createElement)(Yt,{oldUrl:H.old,newUrl:H.new,mode:n,t:o})}return(0,h.createElement)("div",{className:"gp-empty"},o("diff.binary"))})();return _?Zt(k,w,V,o):V}if(d&&!_)return(0,h.createElement)("div",{className:"gp-empty"},o("diff.binary"));let y=(()=>{if(t.trim()==="")return(0,h.createElement)("div",{className:"gp-empty"},o("diff.empty"));if(n==="before")return en(nn(p),f,R);if(n==="after")return en(rn(p),f,R);if(n==="unified"){let V=lt(p);return(0,h.createElement)("div",{className:"gp-diff__unified"},V.flatMap((H,se)=>Wn(H,se,f,m,R,o)))}return(0,h.createElement)("div",{className:"gp-diff__side"},p.flatMap((V,H)=>On(V,H,f,m,R,o)))})(),T=J?(0,h.createElement)(Xe,{inputRef:ae,query:$,matches:x.length,active:P,caseSensitive:F,onChange:S,onToggleCase:()=>C(V=>!V),onStep:j,onClose:()=>N(!1),t:o}):null,I=(0,h.createElement)("div",{className:"gp-diff__wrap",ref:W},[T,y]);return _?Zt(k,w,I,o):I});function Vn(e,t){let n=[];return e==="before"?(nn(t).forEach((r,i)=>n.push({key:`c${i}`,text:r.text})),n):e==="after"?(rn(t).forEach((r,i)=>n.push({key:`c${i}`,text:r.text})),n):e==="unified"?(lt(t).forEach((r,i)=>{if(r.kind==="hunk"||r.kind==="gap")return;let a=r.rightText??r.leftText??"";a!==""&&n.push({key:`c${i}`,text:a})}),n):(t.forEach((r,i)=>{r.kind==="hunk"||r.kind==="gap"||(r.leftText!==null&&r.leftText!==""&&n.push({key:`l${i}`,text:r.leftText}),r.rightText!==null&&r.rightText!==""&&n.push({key:`r${i}`,text:r.rightText}))}),n)}function Kn(e,t){if(t==="")return[];let n=[];for(let r of e)for(let[i,a]of ze(r.text,t))if(n.push({cellKey:r.key,start:i,end:a}),n.length>=Le)return n;return n}function Zt(e,t,n,r){let i=(a,s)=>(0,h.createElement)("button",{key:a,type:"button",className:`gp-seg__btn${e===a?" gp-seg__btn--active":""}`,"aria-pressed":e===a,onClick:()=>t(a)},s);return(0,h.createElement)("div",{className:"gp-svgdiff"},[(0,h.createElement)("div",{key:"bar",className:"gp-svgdiff__bar"},(0,h.createElement)("div",{className:"gp-seg"},[i("render",r("diff.svgRender")),i("source",r("diff.svgSource"))])),(0,h.createElement)("div",{key:"body",className:"gp-svgdiff__body"},n)])}function Jn(e,t,n,r,i,a){let[s,o]=(0,h.useState)(null),l=(0,h.useRef)(0);(0,h.useEffect)(()=>{l.current+=1,o(null)},[e]);let d=(0,h.useCallback)((f,p)=>{if(n===void 0||r===void 0||i===void 0||a===void 0)return;let u=`${f.rightStart}:${p}`;o(u);let m=++l.current,{start:_,end:k}=qn(f,p),w=a.base==="commit"&&a.commit!==void 0?{kind:"file-lines",path:i,base:"commit",commit:a.commit,start:_,end:k}:a.base==="staged"?{kind:"file-lines",path:i,base:"staged",start:_,end:k}:{kind:"file-lines",path:i,base:"worktree",start:_,end:k};n.query({sessionId:r,query:w}).then(D=>{if(m!==l.current)return;let v=Q(D,"file-lines");o(null),v!==null&&t(M=>jt(M,f.rightStart,p,v.start,v.lines,v.eof))}).catch(()=>{m===l.current&&o(null)})},[n,r,i,a,t]);return{busy:s,run:d}}function qn(e,t){if(e.atEnd)return{start:e.rightStart,end:e.rightStart+oe-1};let n=e.count??oe;return t==="all"||n<=oe?{start:e.rightStart,end:e.rightStart+n-1}:t==="down"?{start:e.rightStart,end:e.rightStart+oe-1}:{start:e.rightStart+n-oe,end:e.rightStart+n-1}}function Bn(e,t,n,r){let[i,a]=(0,h.useState)({kind:"idle"}),s=r?.base,o=r?.commit;return(0,h.useEffect)(()=>{if(e===void 0||t===void 0||n===void 0||s===void 0)return;let l=!0;a({kind:"loading"});let d=s==="commit"&&o!==void 0?{kind:"image-diff",path:n,base:"commit",commit:o}:s==="staged"?{kind:"image-diff",path:n,base:"staged"}:{kind:"image-diff",path:n,base:"worktree"};return e.query({sessionId:t,query:d}).then(f=>{if(!l)return;let p=Q(f,"image-diff");a(p!==null?{kind:"ready",res:p}:{kind:"failed"})}).catch(()=>{l&&a({kind:"failed"})}),()=>{l=!1}},[e,t,n,s,o]),i}function Ke(e,t=""){return e.map((n,r)=>(0,h.createElement)("span",{key:`${t}${r}`,style:n.style},n.text))}function tn(e,t,n,r){if(n===null)return null;let i=n.perCell.get(t);if(i===void 0||i.length===0)return null;let a=n.activeKey===t?n.activeRange:null;return Ie(e,i,r,t,a,n.activeRef)}function Je(e,t,n,r,i=null){if(n==="")return(0,h.createElement)("div",{key:t,className:e},"\xA0");let a=r(n)?.[0],s=tn(n,t,i,a);return s!==null?(0,h.createElement)("div",{key:t,className:e},s):(0,h.createElement)("div",{key:t,className:e},a===void 0?n:Ke(a))}function ct(e,t,n,r,i,a,s=null){let o=a(n)?.[0]??[{text:n,style:{}}],l=tn(n,t,s,o);if(l!==null)return(0,h.createElement)("div",{key:t,className:e},l);let[d,f,p]=Qt(o,r);return(0,h.createElement)("div",{key:t,className:e},[...Ke(d,"p"),(0,h.createElement)("span",{key:"w",className:i},f.length===0?"\xA0":Ke(f)),...Ke(p,"s")])}function nn(e){return e.filter(t=>t.leftText!==null).map(t=>({no:t.leftNo,text:t.leftText}))}function rn(e){return e.filter(t=>t.rightText!==null).map(t=>({no:t.rightNo,text:t.rightText}))}function en(e,t,n=null){return(0,h.createElement)("div",{className:"gp-diff__single"},e.flatMap((r,i)=>[(0,h.createElement)("div",{key:`n${i}`,className:"gp-diff-no"},r.no??""),Je("gp-diff-cell",`c${i}`,r.text,t,n)]))}function On(e,t,n,r,i,a){if(e.kind==="hunk")return[(0,h.createElement)("div",{key:`h${t}`,className:"gp-diff-row--hunk gp-diff-cell",style:{gridColumn:"1 / -1"}},e.text??"")];if(e.kind==="gap")return[an(e.gap,t,r,a)];let s=e.kind==="del"||e.kind==="mod"?"gp-diff-row--del":"",o=e.kind==="add"||e.kind==="mod"?"gp-diff-row--add":"",l=e.leftText===null?(0,h.createElement)("div",{key:`l${t}`,className:`gp-diff-cell ${s}`}):e.kind==="mod"&&e.leftWord!==void 0?ct(`gp-diff-cell ${s}`,`l${t}`,e.leftText,e.leftWord,"gp-diff-word gp-diff-word--del",n,i):Je(`gp-diff-cell ${s}`,`l${t}`,e.leftText,n,i),d=e.rightText===null?(0,h.createElement)("div",{key:`r${t}`,className:`gp-diff-cell ${o}`}):e.kind==="mod"&&e.rightWord!==void 0?ct(`gp-diff-cell ${o}`,`r${t}`,e.rightText,e.rightWord,"gp-diff-word gp-diff-word--add",n,i):Je(`gp-diff-cell ${o}`,`r${t}`,e.rightText,n,i);return[(0,h.createElement)("div",{key:`ln${t}`,className:"gp-diff-no"},e.leftNo??""),l,(0,h.createElement)("div",{key:`rn${t}`,className:"gp-diff-no"},e.rightNo??""),d]}function Wn(e,t,n,r,i,a){if(e.kind==="hunk")return[(0,h.createElement)("div",{key:`h${t}`,className:"gp-diff-row--hunk gp-diff-cell",style:{gridColumn:"1 / -1"}},e.text??"")];if(e.kind==="gap")return[an(e.gap,t,r,a)];let s=e.kind==="del",o=e.kind==="add",l=o?"gp-diff-row--add":s?"gp-diff-row--del":"",d=o?"+":s?"\u2212":"\xA0",f=e.rightText??e.leftText??"",p=o?e.rightWord:s?e.leftWord:void 0,u=o?"gp-diff-word gp-diff-word--add":"gp-diff-word gp-diff-word--del",m=`gp-diff-cell gp-diff-uni__code ${l}`,_=p!==void 0?ct(m,`c${t}`,f,p,u,n,i):Je(m,`c${t}`,f,n,i);return[(0,h.createElement)("div",{key:`ol${t}`,className:"gp-diff-no"},e.leftNo??""),(0,h.createElement)("div",{key:`nl${t}`,className:"gp-diff-no"},e.rightNo??""),(0,h.createElement)("div",{key:`sg${t}`,className:`gp-diff-uni__sign ${l}`},d),_]}function an(e,t,n,r){let i=n.busy===`${e.rightStart}:all`,a=n.busy===`${e.rightStart}:up`,s=n.busy===`${e.rightStart}:down`,o=(d,f,p)=>(0,h.createElement)("button",{key:d,type:"button",className:"gp-gap__btn",disabled:n.busy!==null,onClick:u=>{u.stopPropagation(),n.run(e,d)}},p?r("common.loading"):f),l=[];if(e.atEnd)l.push(o("down",r("diff.expandDown",{n:oe}),s));else{let d=e.count??0;d>0&&d<=oe?l.push(o("all",r("diff.expandGap",{n:d}),i)):(e.atStart||l.push(o("up",r("diff.expandUp",{n:oe}),a)),l.push(o("all",r("diff.expandGap",{n:d}),i)),l.push(o("down",r("diff.expandDown",{n:oe}),s)))}return(0,h.createElement)("div",{key:`g${t}`,className:"gp-diff-row--gap",style:{gridColumn:"1 / -1"}},l)}function Oe(e){return Wt(e)}var E=require("react");var Un=100;function on(e,t,n){let[r,i]=(0,E.useState)(null),[a,s]=(0,E.useState)(!1),[o,l]=(0,E.useState)([]),d=(0,E.useCallback)(()=>{s(!1),(async()=>{let[f,p]=await Promise.all([e.query({sessionId:t,query:{kind:"branches"}}),e.query({sessionId:t,query:{kind:"tags"}})]),u=Q(f,"branches");if(u===null){s(!0);return}let m=Q(p,"tags");i({current:u.current,defaultBranch:u.defaultBranch,local:u.local,remote:u.remote,tags:m?.tags??[]}),e.query({sessionId:t,query:{kind:"authors"}}).then(_=>{l(Q(_,"authors")?.authors??[])})})()},[e,t]);return(0,E.useEffect)(()=>{d()},[n]),{tree:r,treeError:a,authors:o,reload:d}}function sn(e,t,n,r,i){let[a,s]=(0,E.useState)([]),[o,l]=(0,E.useState)(0),[d,f]=(0,E.useState)(!1),[p,u]=(0,E.useState)(!1),m=(0,E.useRef)(0),_=(0,E.useRef)(!1),k=(0,E.useRef)(null),w=(0,E.useCallback)(async(J,N)=>{if(_.current)return;_.current=!0;let $=m.current;f(!0),u(!1);let S=await e.query({sessionId:t,query:{kind:"history",limit:Un,skip:J,...N.ref?{ref:N.ref}:{},...N.search?{search:N.search}:{},...N.author?{author:N.author}:{},...N.since?{since:N.since}:{}}});if(_.current=!1,$!==m.current)return;f(!1);let F=Q(S,"history");if(F===null){u(!0);return}let C=F.commits;s(A=>J===0?C:[...A,...C]),l(F.total)},[e,t]),D=(0,E.useRef)(n);(0,E.useEffect)(()=>{m.current+=1,_.current=!1,D.current!==n&&(D.current=n,i(),k.current&&(k.current.scrollTop=0)),w(0,n)},[n,r]);let v=o<0?!0:a.length<o,M=(0,E.useCallback)(()=>{_.current||!v||w(a.length,n)},[w,a.length,n,v]);return{commits:a,total:o,loading:d,listError:p,hasMore:v,listRef:k,loadMore:M}}function ln(e,t,n){let[r,i]=(0,E.useState)(null),[a,s]=(0,E.useState)(null),[o,l]=(0,E.useState)(!1),[d,f]=(0,E.useState)(null),[p,u]=(0,E.useState)(null),[m,_]=(0,E.useState)(!1),[k,w]=(0,E.useState)(n),[D,v]=(0,E.useState)(!1),M=(0,E.useRef)(0),J=(0,E.useRef)(null),N=(0,E.useRef)(new Map),$=(0,E.useCallback)((L,x)=>{let P=N.current;for(P.set(L,x);P.size>50;){let X=P.keys().next().value;if(X===void 0)break;P.delete(X)}},[]),S=(0,E.useCallback)(()=>{i(null),s(null),J.current=null},[]),F=(0,E.useCallback)(async L=>{J.current=L.hash,i(L),l(!1),M.current+=1,f(null),u(null),_(!1);let x=N.current.get(L.hash);if(x!==void 0){s(x);return}s(null);let P=await e.query({sessionId:t,query:{kind:"show",ref:L.hash}});if(J.current!==L.hash)return;let X=Q(P,"show");if(X!==null){let ne={commit:X.commit,body:X.body,stats:X.stats};$(L.hash,ne),s(ne)}else l(!0)},[e,t,$]),C=(0,E.useCallback)(async(L,x,P,X=!1)=>{let ne=++M.current;f({path:L,hash:x,shortHash:P}),u(null),_(!1),v(X);let j=await e.query({sessionId:t,query:{kind:"diff",path:L,base:"commit",commit:x,...X?{context:1e5}:{}}});if(ne!==M.current)return;let R=Q(j,"diff");R!==null?u(R.text):_(!0)},[e,t]),A=(0,E.useCallback)(()=>{M.current+=1,f(null),u(null),_(!1),v(!1)},[]);(0,E.useEffect)(()=>{if(d===null)return;let L=x=>{x.key==="Escape"&&A()};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[d,A]);let[O,W]=(0,E.useState)(null),[ae,Y]=(0,E.useState)(null),U=(0,E.useRef)(void 0),te=(0,E.useRef)(null),B=(0,E.useCallback)((L,x,P)=>{U.current!==void 0&&clearTimeout(U.current),U.current=setTimeout(()=>{te.current=L.hash,W({commit:L,x,y:P});let X=N.current.get(L.hash);if(X!==void 0){Y(X.body);return}Y(null),e.query({sessionId:t,query:{kind:"show",ref:L.hash}}).then(ne=>{if(te.current!==L.hash)return;let j=Q(ne,"show");j!==null?($(L.hash,{commit:j.commit,body:j.body,stats:j.stats}),Y(j.body)):Y("")})},260)},[e,t,$]),ee=(0,E.useCallback)(()=>{U.current!==void 0&&clearTimeout(U.current),te.current=null,W(null),Y(null)},[]);return(0,E.useEffect)(()=>()=>{U.current!==void 0&&clearTimeout(U.current)},[]),{selected:r,detail:a,detailError:o,select:F,clearSelection:S,fileDiff:d,fileDiffText:p,fileDiffError:m,fileDiffMode:k,setFileDiffMode:w,fileDiffExpanded:D,openFileDiff:C,closeFileDiff:A,hover:O,hoverBody:ae,onHoverEnter:B,onHoverLeave:ee}}var ie=require("react"),jn=(e,t,n)=>Math.max(t,Math.min(n,e));function Qn(e,t){try{let n=typeof localStorage<"u"?localStorage.getItem(e):null,r=n===null?NaN:Number(n);return Number.isFinite(r)?r:t}catch{return t}}function Yn(e,t){try{typeof localStorage<"u"&&localStorage.setItem(e,String(Math.round(t)))}catch{}}function ue(e){let{storageKey:t,initial:n,min:r,reserve:i,edge:a}=e,[s,o]=(0,ie.useState)(()=>Qn(t,n)),l=(0,ie.useRef)(null),d=(0,ie.useRef)(null),f=(0,ie.useCallback)(u=>{let _=l.current?.parentElement?.clientWidth??Number.MAX_SAFE_INTEGER;d.current={x:u.clientX,w:s,max:Math.max(r,_-i)},u.preventDefault(),typeof document<"u"&&(document.body.style.cursor="col-resize",document.body.style.userSelect="none")},[s,r,i]);(0,ie.useEffect)(()=>{if(typeof window>"u")return;let u=_=>{let k=d.current;if(k===null)return;let w=_.clientX-k.x;o(jn(k.w+(a==="end"?w:-w),r,k.max))},m=()=>{d.current!==null&&(d.current=null,typeof document<"u"&&(document.body.style.cursor="",document.body.style.userSelect=""),o(_=>(Yn(t,_),_)))};return window.addEventListener("pointermove",u),window.addEventListener("pointerup",m),()=>{window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",m)}},[a,r,t]);let p=(0,ie.createElement)("div",{key:`rz-${t}`,ref:l,className:"gp-resizer",role:"separator","aria-orientation":"vertical",onPointerDown:f});return{width:s,divider:p}}var dn=require("react");function ye(e,t,n,r,i=!1){return e.map(a=>(0,dn.createElement)("button",{key:a,type:"button",className:`gp-seg__btn${t===a?" gp-seg__btn--active":""}`,...i?{disabled:!0}:{},onClick:()=>n(a)},r(a)))}var be=14,Ne=30,Zn=260;function er(e,t){let[n,r]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{if(e===null||typeof ResizeObserver>"u")return;let i=()=>r(e.clientWidth>0&&e.clientWidth<t);i();let a=new ResizeObserver(i);return a.observe(e),()=>a.disconnect()},[e,t]),n}function cn({remote:e,sessionId:t,refreshKey:n,defaultDiffView:r,t:i}){let[a,s]=(0,c.useState)({ref:null,search:"",author:"",since:""}),[o,l]=(0,c.useState)(""),[d,f]=(0,c.useState)(null),p=er(d,Zn),[u,m]=(0,c.useState)(new Set(["tags","remote"])),{tree:_,treeError:k,authors:w,reload:D}=on(e,t,n),v=ln(e,t,r),{commits:M,loading:J,listError:N,hasMore:$,listRef:S,loadMore:F}=sn(e,t,a,n,v.clearSelection);(0,c.useEffect)(()=>{let x=setTimeout(()=>s(P=>P.search===o?P:{...P,search:o}),300);return()=>clearTimeout(x)},[o]);let C=a.search!=="",A=(0,c.useMemo)(()=>C?M.map(x=>({commit:x,lane:0,color:0,edges:[],merge:!1})):It(M),[M,C]),O=(0,c.useMemo)(()=>C?0:zt(A),[A,C]),W=C?12:Math.max(be,O*be),ae=`${W}px minmax(120px,1fr) 72px 120px 96px`,Y=()=>{let x=S.current;x===null||!$||x.scrollTop+x.clientHeight>=x.scrollHeight-240&&F()},U=(0,c.useMemo)(()=>Date.now(),[M]),te=(0,c.useMemo)(()=>v.detail===null?[]:Xt(v.detail.stats.map(x=>({path:x.path,meta:x.status}))),[v.detail]),B=v.selected,ee=ue({storageKey:"gp.overview.left",initial:200,min:130,reserve:360,edge:"end"}),L=ue({storageKey:"gp.overview.right",initial:340,min:190,reserve:360,edge:"start"});return(0,c.createElement)("div",{className:"gp-overview"},[or(v.fileDiff,{text:v.fileDiffText,error:v.fileDiffError,mode:v.fileDiffMode,onMode:v.setFileDiffMode,expanded:v.fileDiffExpanded,onExpand:x=>{v.fileDiff!==null&&v.openFileDiff(v.fileDiff.path,v.fileDiff.hash,v.fileDiff.shortHash,x)},onClose:v.closeFileDiff,remote:e,sessionId:t,t:i}),(0,c.createElement)("div",{key:"left",className:"gp-col gp-col--left",style:{flex:`0 0 ${ee.width}px`}},nr(_,k,a.ref,u,{onFilter:x=>s(P=>({...P,ref:x})),onToggle:x=>m(P=>{let X=new Set(P);return X.has(x)?X.delete(x):X.add(x),X}),onRetry:D,t:i})),ee.divider,(0,c.createElement)("div",{key:"mid",className:"gp-col gp-col--mid gp-history"},[(0,c.createElement)("div",{key:"tb",className:"gp-toolbar",ref:f},[(0,c.createElement)("input",{key:"search",className:"gp-search",placeholder:i(p?"overview.searchShort":"overview.search"),value:o,onChange:x=>l(x.target.value)}),(0,c.createElement)("select",{key:"author",className:"gp-select",value:a.author,onChange:x=>s(P=>({...P,author:x.target.value}))},[(0,c.createElement)("option",{key:"",value:""},i("overview.allUsers")),...w.map(x=>(0,c.createElement)("option",{key:x,value:x},x))]),(0,c.createElement)("select",{key:"since",className:"gp-select",value:a.since,onChange:x=>s(P=>({...P,since:x.target.value}))},[(0,c.createElement)("option",{key:"",value:""},i("overview.allTime")),(0,c.createElement)("option",{key:"today",value:"1 day ago"},i("overview.today")),(0,c.createElement)("option",{key:"7d",value:"7 days ago"},i("overview.last7d")),(0,c.createElement)("option",{key:"30d",value:"30 days ago"},i("overview.last30d"))]),(0,c.createElement)("button",{key:"fetch",type:"button",className:"gp-icon-btn",title:i("overview.fetch"),onClick:()=>{e.run({sessionId:t,action:{kind:"fetch"}}).then(()=>D())}},(0,c.createElement)(Pe,{size:14}))]),(0,c.createElement)("div",{key:"list",className:"gp-history__list",ref:S,onScroll:Y},M.length===0?(0,c.createElement)("div",{className:"gp-empty"},i(J?"common.loading":N?"overview.loadFailed":"overview.noResults")):A.map(x=>rr(x,{selected:B?.hash===x.commit.hash,gridTpl:ae,graphW:W,laneCount:O,searching:C,now:U,onSelect:()=>void v.select(x.commit),onHoverEnter:v.onHoverEnter,onHoverLeave:v.onHoverLeave,t:i})))]),L.divider,(0,c.createElement)("div",{key:"right",className:"gp-col gp-col--right gp-detail",style:{flex:`0 0 ${L.width}px`}},B===null?(0,c.createElement)("div",{className:"gp-empty"},[(0,c.createElement)(De,{key:"i",size:20}),i("overview.selectCommit")]):[(0,c.createElement)("div",{key:"files",className:"gp-detail__files"},v.detail===null?(0,c.createElement)("div",{className:"gp-empty"},v.detailError?i("overview.detailFailed"):i("common.loading")):ar(te,{activePath:v.fileDiff?.path??null,openTitle:i("overview.openFileDiff"),onOpen:x=>{B!==null&&v.openFileDiff(x,B.hash,B.shortHash)}})),(0,c.createElement)("div",{key:"msg",className:"gp-detail__msg"},[(0,c.createElement)("div",{key:"subj",className:"gp-detail__subject"},B.subject),(0,c.createElement)("div",{key:"meta",className:"gp-detail__meta"},[(0,c.createElement)("span",{key:"h",className:"gp-commit-hash"},B.shortHash),(0,c.createElement)("span",{key:"a"},B.author),(0,c.createElement)("span",{key:"t"},Jt(B.dateIso))]),v.detail!==null&&v.detail.body!==""?(0,c.createElement)("pre",{key:"body",className:"gp-detail__body"},v.detail.body):(0,c.createElement)("div",{key:"nb",className:"gp-empty"},i("overview.noMessage"))])]),tr(v.hover,v.hoverBody,i)])}function tr(e,t,n){if(e===null||typeof document>"u")return null;let r=460,i=Math.min(e.x+16,(typeof window<"u"?window.innerWidth:1200)-r-12),a=e.y+14,s=(0,c.createElement)("div",{className:"gp-hovercard",style:{left:i,top:a,maxWidth:r}},[(0,c.createElement)("div",{key:"subj",className:"gp-hovercard__subject"},e.commit.subject),(0,c.createElement)("div",{key:"meta",className:"gp-hovercard__meta"},[(0,c.createElement)("span",{key:"h",className:"gp-commit-hash"},e.commit.shortHash),(0,c.createElement)("span",{key:"a"},e.commit.author)]),t===null?(0,c.createElement)("div",{key:"l",className:"gp-hovercard__loading"},n("common.loading")):t===""?(0,c.createElement)("div",{key:"e",className:"gp-hovercard__loading"},n("overview.noMessage")):(0,c.createElement)("pre",{key:"body",className:"gp-hovercard__body"},t)]);return(0,pt.createPortal)(s,document.body,"commit-hovercard")}function nr(e,t,n,r,i){if(t)return(0,c.createElement)("div",{className:"gp-empty"},[(0,c.createElement)("span",{key:"m"},i.t("overview.branchesError")),(0,c.createElement)("button",{key:"r",type:"button",className:"gp-btn",style:{marginTop:8},onClick:i.onRetry},i.t("common.retry"))]);if(e===null)return(0,c.createElement)("div",{className:"gp-empty"},i.t("common.loading"));let a=(s,o,l,d,f="")=>(0,c.createElement)("div",{key:s,className:"gp-branch-group"},[(0,c.createElement)("div",{key:"head",className:"gp-branch-group__head",onClick:()=>i.onToggle(s)},[(0,c.createElement)(ge,{key:"c",size:11,open:!r.has(s)}),`${i.t(o)} (${l.length})`]),r.has(s)?null:l.map(p=>{let u=f+p.name,m=e.current===p.name,_=`gp-branch-row${n===u?" gp-branch-row--active":""}${m?" gp-branch-row--current":""}`;return(0,c.createElement)("div",{key:p.name,className:_,title:p.name,onClick:()=>i.onFilter(n===u?null:u)},[(0,c.createElement)("span",{key:"i",style:{display:"inline-flex",width:14}},d),(0,c.createElement)("span",{key:"n",className:"gp-tree-name"},p.name),p.ahead||p.behind?(0,c.createElement)("span",{key:"t",className:"gp-branch-row__track"},`${p.ahead?`\u2191${p.ahead}`:""}${p.behind?`\u2193${p.behind}`:""}`):null])})]);return(0,c.createElement)("div",{},[(0,c.createElement)("div",{key:"head-row",className:"gp-branch-row",style:{fontWeight:600,paddingLeft:10},onClick:()=>i.onFilter(null)},i.t("overview.head")),a("local","overview.local",e.local,(0,c.createElement)(at,{size:13})),a("remote","overview.remote",e.remote,(0,c.createElement)(at,{size:13})),a("tags","overview.tags",e.tags,(0,c.createElement)(Ft,{size:13}))])}function rr(e,t){let n=e.commit;return(0,c.createElement)("div",{key:n.hash,className:`gp-commit-row${t.selected?" gp-commit-row--active":""}`,style:{gridTemplateColumns:t.gridTpl},onClick:t.onSelect,onMouseEnter:r=>t.onHoverEnter(n,r.clientX,r.clientY),onMouseLeave:t.onHoverLeave},[(0,c.createElement)("div",{key:"g",className:"gp-graph-cell"},t.searching?null:ir(e,t.laneCount)),(0,c.createElement)("div",{key:"s",className:"gp-commit-subject"},[...n.refs.map(r=>(0,c.createElement)("span",{key:r.name,className:`gp-ref-chip${r.head?" gp-ref-chip--head":""}${r.kind==="remote"?" gp-ref-chip--remote":""}${r.kind==="tag"?" gp-ref-chip--tag":""}`},r.name)),n.subject]),(0,c.createElement)("div",{key:"h",className:"gp-commit-hash"},n.shortHash),(0,c.createElement)("div",{key:"a",className:"gp-commit-author"},n.author),(0,c.createElement)("div",{key:"d",className:"gp-commit-date",title:Ce(n.dateIso)},Se(n.dateIso,t.now,t.t))])}var We=["#4e9bff","#3fb950","#e0982e","#d05ce3","#e5534b","#2dc6c6","#d29922","#8b949e"];function ir(e,t){let n=Math.max(be,t*be),r=a=>a*be+be/2,i=[];for(let a of e.edges){let s=We[a.color%We.length];i.push((0,c.createElement)("path",{key:`e${a.fromLane}-${a.toLane}-${a.color}`,d:`M ${r(a.fromLane)} 0 C ${r(a.fromLane)} ${Ne/2}, ${r(a.toLane)} ${Ne/2}, ${r(a.toLane)} ${Ne}`,stroke:s,strokeWidth:1.6,fill:"none"}))}return i.push((0,c.createElement)("circle",{key:"node",cx:r(e.lane),cy:Ne/2,r:e.merge?4:3.2,fill:We[e.color%We.length],stroke:"var(--dsw-alias-bg-layer-1)",strokeWidth:1})),(0,c.createElement)("svg",{className:"gp-graph-svg",width:n,height:Ne},i)}function ar(e,t){let n=[],r=(i,a)=>{for(let s of i)if(s.dir)n.push((0,c.createElement)("div",{key:s.path,className:"gp-tree-row",style:{paddingLeft:10+a*14}},[(0,c.createElement)(ge,{key:"c",size:11,open:!0}),(0,c.createElement)("span",{key:"n",className:"gp-tree-name"},s.name)])),r(s.children,a+1);else{let o=String(s.meta??"modified"),l=t.activePath===s.path;n.push((0,c.createElement)("div",{key:s.path,className:`gp-tree-row${l?" gp-tree-row--active":""}`,style:{paddingLeft:10+a*14},title:t.openTitle,onClick:()=>t.onOpen(s.path)},[(0,c.createElement)("span",{key:"st",className:`gp-status-badge ${Ae(o)}`},(Fe[o]??o[0]??"M").toUpperCase()),(0,c.createElement)("span",{key:"n",className:"gp-tree-name"},s.name)]))}};return r(e,0),(0,c.createElement)("div",{},n)}function or(e,t){if(e===null||typeof document>"u")return null;let{text:n,error:r,mode:i,onMode:a,expanded:s,onExpand:o,onClose:l,remote:d,sessionId:f,t:p}=t,u=(0,c.createElement)("div",{className:"gp-modal-backdrop",onClick:m=>{m.target===m.currentTarget&&l()}},(0,c.createElement)("div",{className:"gp-modal",role:"dialog","aria-modal":!0},[(0,c.createElement)("div",{key:"bar",className:"gp-modal__bar"},[(0,c.createElement)("span",{key:"fileicon",className:"gp-modal__fileicon"},(0,c.createElement)(Lt,{size:15})),(0,c.createElement)("span",{key:"path",className:"gp-modal__path",title:e.path},sr(e.path)),(0,c.createElement)("span",{key:"hash",className:"gp-modal__hash"},e.shortHash),n!==null&&n!==""?(()=>{let m=Oe(n);return(0,c.createElement)("span",{key:"sum",className:"gp-modal__sum"},[(0,c.createElement)("span",{key:"a",className:"gp-stats__add"},`+${m.add}`),(0,c.createElement)("span",{key:"d",className:"gp-stats__del"},`\u2212${m.del}`)])})():null,(0,c.createElement)("button",{key:"expand",type:"button",className:`gp-seg__btn gp-diff__expand${s?" gp-seg__btn--active":""}`,disabled:i!=="split"&&i!=="unified",title:p(s?"diff.collapse":"diff.expandAll"),onClick:()=>o(!s)},p(s?"diff.collapse":"diff.expandAll")),(0,c.createElement)("div",{key:"seg",className:"gp-seg"},ye(["unified","split","before","after"],i,a,m=>p(`diff.${m}`))),(0,c.createElement)("button",{key:"close",type:"button",className:"gp-icon-btn gp-modal__close",title:p("common.close"),onClick:l},(0,c.createElement)(At,{size:15}))]),(0,c.createElement)("div",{key:"scroll",className:"gp-modal__scroll"},n===null?(0,c.createElement)("div",{className:"gp-empty"},p(r?"overview.diffFailed":"common.loading")):(0,c.createElement)(Be,{text:n,mode:i,path:e.path,remote:d,sessionId:f,imageSpec:{base:"commit",commit:e.hash},t:p}))]));return(0,pt.createPortal)(u,document.body,"file-diff-modal")}function sr(e){let t=e.lastIndexOf("/");return t<0?[(0,c.createElement)("span",{key:"n",className:"gp-modal__name"},e)]:[(0,c.createElement)("span",{key:"d",className:"gp-modal__dir"},e.slice(0,t+1)),(0,c.createElement)("span",{key:"n",className:"gp-modal__name"},e.slice(t+1))]}var b=require("react");var re=require("react");function pn({stats:e,t}){let n=Date.now(),r=[(0,re.createElement)("span",{key:"files",className:"gp-stats__item"},t("stats.files",{n:e.fileCount})),(0,re.createElement)("span",{key:"lines",className:"gp-stats__item"},[(0,re.createElement)("span",{key:"a",className:"gp-stats__add"},`+${e.insertions}`)," ",(0,re.createElement)("span",{key:"d",className:"gp-stats__del"},`\u2212${e.deletions}`)])];e.staged>0&&r.push((0,re.createElement)("span",{key:"st",className:"gp-stats__item"},t("stats.staged",{n:e.staged}))),e.modified>0&&r.push((0,re.createElement)("span",{key:"mo",className:"gp-stats__item"},t("stats.modified",{n:e.modified}))),e.untracked>0&&r.push((0,re.createElement)("span",{key:"un",className:"gp-stats__item"},t("stats.untracked",{n:e.untracked})));let i=[];return e.lastChangeAt!==null&&i.push((0,re.createElement)("span",{key:"lc",className:"gp-stats__item",title:Ce(e.lastChangeAt)},t("stats.lastChange",{time:Se(e.lastChangeAt,n,t)}))),e.headCommittedAt!==null&&i.push((0,re.createElement)("span",{key:"hc",className:"gp-stats__item",title:Ce(e.headCommittedAt)},t("stats.lastCommit",{time:Se(e.headCommittedAt,n,t)}))),i.length>0&&r.push((0,re.createElement)("span",{key:"times",className:"gp-stats__times"},i)),(0,re.createElement)("div",{className:"gp-stats"},r)}function fn({remote:e,sessionId:t,snapshot:n,onAction:r,t:i}){let[a,s]=(0,b.useState)(new Set),[o,l]=(0,b.useState)(""),[d,f]=(0,b.useState)(!1),[p,u]=(0,b.useState)(!1),[m,_]=(0,b.useState)(null),[k,w]=(0,b.useState)(new Set),[D,v]=(0,b.useState)(null),[M,J]=(0,b.useState)(null),[N,$]=(0,b.useState)(null),[S,F]=(0,b.useState)(()=>n.defaultDiffView),[C,A]=(0,b.useState)(!1),[O,W]=(0,b.useState)(!1),ae=(0,b.useRef)(0),Y=(0,b.useMemo)(()=>n.changes.filter(y=>y.staged).sort(ft),[n]),U=(0,b.useMemo)(()=>n.changes.filter(y=>!y.staged&&y.status!=="untracked").sort(ft),[n]),te=(0,b.useMemo)(()=>n.changes.filter(y=>y.status==="untracked").sort(ft),[n]),ee=[{key:"staged",labelKey:"changes.groupStaged",items:Y},{key:"unstaged",labelKey:"changes.groupUnstaged",items:U},{key:"untracked",labelKey:"changes.groupUntracked",items:te}].filter(y=>y.items.length>0);(0,b.useEffect)(()=>{s(y=>{if(y.size===0)return y;let T=new Set(n.changes.map(H=>H.path+(H.staged?":s":":w"))),I=new Set,V=!1;for(let H of y)T.has(H)?I.add(H):V=!0;return V?I:y})},[n]),(0,b.useEffect)(()=>{if(!d||O||o.trim()!=="")return;let y=!0;return e.query({sessionId:t,query:{kind:"last-commit-message"}}).then(T=>{let I=Q(T,"last-commit-message");y&&I!==null&&(l(I.message),W(!0))}),()=>{y=!1}},[d,O,o,e,t]);let L=(0,b.useCallback)(async(y,T,I=!1,V=!1)=>{let H=++ae.current;J({path:y,base:T}),V||$(null),A(I);let se=await e.query({sessionId:t,query:{kind:"diff",path:y,base:T,...I?{context:1e5}:{}}});if(H!==ae.current)return;let bt=Q(se,"diff");$(bt!==null?bt.text:"")},[e,t]);(0,b.useEffect)(()=>{if(M===null)return;if(!n.changes.some(T=>T.path===M.path)){J(null),$(null);return}L(M.path,M.base,C,!0)},[n]),(0,b.useEffect)(()=>{v(null)},[n]);let x=y=>{s(T=>{let I=new Set(T);return I.has(y)?I.delete(y):I.add(y),I})},P=async y=>{if(p)return!1;u(!0),_(null);try{let T=await r(y);return T.ok?!0:(_(T.error??i("error.generic")),!1)}catch(T){return _(T instanceof Error?T.message:i("error.generic")),!1}finally{u(!1)}},X=async()=>{let y=o.trim();if(y===""&&!d){_(i("error.emptyMessage"));return}let T=a.size>0?[...new Set([...a].map(V=>V.replace(/:[sw]$/,"")))]:void 0;await P({kind:"commit",message:y,...T?{paths:T}:{},...d?{amend:!0}:{}})&&(l(""),s(new Set),f(!1),W(!1))},ne=y=>{w(T=>{let I=new Set(T);return I.has(y)?I.delete(y):I.add(y),I})},j=N!==null&&N!==""?Oe(N):null,R=ue({storageKey:"gp.changes.left",initial:380,min:220,reserve:200,edge:"end"});return(0,b.createElement)("div",{className:"gp-changes"},[(0,b.createElement)("div",{key:"left",className:"gp-changes__left",style:{flex:`0 0 ${R.width}px`}},[(0,b.createElement)(pn,{key:"stats",stats:n.stats,t:i}),(0,b.createElement)("div",{key:"toolbar",className:"gp-toolbar"},[(0,b.createElement)("button",{key:"sa",type:"button",className:"gp-btn",disabled:p||n.changes.length===0,onClick:()=>void P({kind:"stage-all"})},i("changes.stageAll")),(0,b.createElement)("button",{key:"ua",type:"button",className:"gp-btn",disabled:p||n.staged===0,onClick:()=>void P({kind:"unstage-all"})},i("changes.unstageAll"))]),m!==null?(0,b.createElement)("div",{key:"err",className:"gp-feedback"},m):null,(0,b.createElement)("div",{key:"list",className:"gp-changes__list"},n.changes.length===0?(0,b.createElement)("div",{className:"gp-empty"},i("changes.noChanges")):ee.map(y=>(0,b.createElement)("div",{key:y.key},[(0,b.createElement)("div",{key:"head",className:"gp-group-head",onClick:()=>ne(y.key)},[(0,b.createElement)(ge,{key:"chev",size:12,open:!k.has(y.key)}),`${i(y.labelKey)} (${y.items.length})`]),k.has(y.key)?null:y.items.map(T=>{let I=T.path+(T.staged?":s":":w");return lr(T,{selected:a.has(I),active:M?.path===T.path&&M.base===(T.staged?"staged":"worktree"),busy:p,armed:D===I,onToggle:()=>x(I),onOpen:()=>void L(T.path,T.staged?"staged":"worktree"),onStage:()=>void P(T.staged?{kind:"unstage",paths:[T.path]}:{kind:"stage",paths:[T.path]}),onDiscard:()=>{D===I?(P({kind:"discard",paths:[T.path]}),v(null)):v(I)},t:i})})]))),(0,b.createElement)("div",{key:"box",className:"gp-commitbox"},[(0,b.createElement)("textarea",{key:"msg",className:"gp-commitbox__msg",placeholder:i("commit.placeholder"),value:o,onChange:y=>l(y.target.value)}),(0,b.createElement)("div",{key:"row",className:"gp-commitbox__row"},[(0,b.createElement)("label",{key:"amend",className:"gp-commitbox__amend"},[(0,b.createElement)("input",{key:"cb",type:"checkbox",className:"gp-check",checked:d,onChange:()=>{f(y=>!y),W(!1)}}),i("commit.amend")]),(0,b.createElement)("div",{key:"actions",className:"gp-commitbox__actions"},[(0,b.createElement)("button",{key:"commit",type:"button",className:"gp-btn gp-btn--primary",disabled:p||o.trim()==="",onClick:()=>void X()},i("commit.commit"))])])])]),R.divider,(0,b.createElement)("div",{key:"right",className:"gp-changes__right"},M===null?(0,b.createElement)("div",{className:"gp-empty"},i("changes.selectFile")):(0,b.createElement)("div",{className:"gp-diff"},[(0,b.createElement)("div",{key:"tb",className:"gp-diff__toolbar"},[(0,b.createElement)("span",{key:"path",className:"gp-diff__path"},M.path),j?(0,b.createElement)("span",{key:"sum",className:"gp-stats__item",style:{marginLeft:"auto"}},[(0,b.createElement)("span",{key:"a",className:"gp-stats__add"},`+${j.add}`)," ",(0,b.createElement)("span",{key:"d",className:"gp-stats__del"},`\u2212${j.del}`)]):null,(0,b.createElement)("button",{key:"expand",type:"button",className:`gp-seg__btn gp-diff__expand${C?" gp-seg__btn--active":""}`,style:j?{}:{marginLeft:"auto"},disabled:S!=="split"&&S!=="unified",title:i(C?"diff.collapse":"diff.expandAll"),onClick:()=>void L(M.path,M.base,!C)},i(C?"diff.collapse":"diff.expandAll")),(0,b.createElement)("div",{key:"seg",className:"gp-seg"},ye(["unified","split","before","after"],S,F,y=>i(`diff.${y}`)))]),(0,b.createElement)("div",{key:"scroll",className:"gp-diff__scroll"},N===null?(0,b.createElement)("div",{className:"gp-empty"},i("common.loading")):(0,b.createElement)(Be,{text:N,mode:S,path:M.path,remote:e,sessionId:t,imageSpec:{base:M.base},t:i}))]))])}function ft(e,t){return e.path.localeCompare(t.path)}function lr(e,t){let n=e.path.split("/").pop()??e.path,r=e.path.includes("/")?e.path.slice(0,e.path.lastIndexOf("/")):"";return(0,b.createElement)("div",{key:e.path+(e.staged?":s":":w"),className:`gp-file-row${t.active?" gp-file-row--active":""}`,onClick:t.onOpen},[(0,b.createElement)("input",{key:"cb",type:"checkbox",className:"gp-check",checked:t.selected,onClick:i=>i.stopPropagation(),onChange:t.onToggle}),(0,b.createElement)("span",{key:"st",className:`gp-status-badge ${Ae(e.status)}`},Fe[e.status]??"?"),(0,b.createElement)("span",{key:"nm",className:"gp-tree-name",title:e.path},[n,r?(0,b.createElement)("span",{key:"d",style:{color:"var(--dsw-alias-label-tertiary)",marginLeft:6,fontSize:11}},r):null]),(0,b.createElement)("span",{key:"act",className:"gp-file-row__actions"},[(0,b.createElement)("button",{key:"stg",type:"button",className:"gp-icon-btn",title:e.staged?t.t("changes.unstage"):t.t("changes.stage"),disabled:t.busy,onClick:i=>{i.stopPropagation(),t.onStage()}},e.staged?"\u2212":"+"),(0,b.createElement)("button",{key:"dis",type:"button",className:"gp-icon-btn",title:t.armed?t.t("changes.discardConfirm"):t.t("changes.discard"),style:t.armed?{color:"var(--dsw-alias-state-error-primary)"}:{},disabled:t.busy,onClick:i=>{i.stopPropagation(),t.onDiscard()}},"\u21BA")])])}var g=require("react");var ce=require("@deepseek-ai/dsh-client-ui-primitives");function un(e){return/\.(?:md|markdown)$/i.test(e)}function gt(e){return/\.(?:html?|xhtml)$/i.test(e)}function dr(e){return un(e)||gt(e)}var cr=256*1024,pr=5e3,gn=5e3,Ue=20,je=12;function ut({remote:e,sessionId:t,t:n}){let[r,i]=(0,g.useState)(new Map),[a,s]=(0,g.useState)(new Set([""])),[o,l]=(0,g.useState)(null),[d,f]=(0,g.useState)({kind:"idle"}),[p,u]=(0,g.useState)(!0),[m,_]=(0,g.useState)("idle"),k=(0,g.useMemo)(()=>({code:{copyLabel:n("files.copy"),copiedLabel:n("files.copied")},footnotes:n("files.footnotes")}),[n]),w=(0,g.useRef)(0),D=ue({storageKey:"gp.files.left",initial:300,min:180,reserve:220,edge:"end"}),v=(0,g.useCallback)(S=>{i(F=>{let C=F.get(S);if(C!==void 0&&C.status!=="error")return F;let A=new Map(F);return A.set(S,{status:"loading"}),A}),e.query({sessionId:t,query:{kind:"dir-list",path:S}}).then(F=>{let C=Q(F,"dir-list");i(A=>{let O=new Map(A);return O.set(S,C===null?{status:"error"}:{status:"ready",entries:C.entries,truncated:C.truncated}),O})}).catch(()=>{i(F=>{let C=new Map(F);return C.set(S,{status:"error"}),C})})},[e,t]);(0,g.useEffect)(()=>{v("")},[v]);let M=(0,g.useCallback)(S=>{s(F=>{let C=new Set(F);return C.has(S)?(C.delete(S),C):(C.add(S),r.get(S)===void 0&&v(S),C)})},[r,v]),J=(0,g.useCallback)(S=>{l(S),u(!gt(S)),_("idle");let F=++w.current;f({kind:"loading",path:S}),e.query({sessionId:t,query:{kind:"file-content",path:S}}).then(C=>{if(F!==w.current)return;let A=Q(C,"file-content");if(A===null){f({kind:"error",path:S});return}if(A.tooLarge===!0){f({kind:"tooLarge",path:S});return}if(A.variant==="image"&&A.dataUrl!==void 0){f({kind:"image",path:S,dataUrl:A.dataUrl});return}if(A.variant==="text"){f({kind:"text",path:S,content:A.content??"",lines:A.lines??0});return}f({kind:"binary",path:S})}).catch(()=>{F===w.current&&f({kind:"error",path:S})})},[e,t]),N=(0,g.useMemo)(()=>mn("",0,{dirs:r,open:a,selected:o,toggleDir:M,selectFile:J,t:n}),[r,a,o,M,J,n]),$=async()=>{if(o===null)return;let S=w.current;try{await navigator.clipboard.writeText(o),S===w.current&&_("copied")}catch{S===w.current&&_("error")}};return(0,g.createElement)("div",{className:"gp-files"},[(0,g.createElement)("div",{key:"left",className:"gp-files__tree",style:{flex:`0 0 ${D.width}px`}},N),D.divider,(0,g.createElement)("div",{key:"right",className:"gp-files__preview"},[o!==null?(0,g.createElement)("div",{key:"bar",className:"gp-files__bar"},[(0,g.createElement)("code",{key:"path",className:"gp-files__path",title:o},o),d.kind==="text"&&dr(d.path)?(0,g.createElement)("div",{key:"mode",className:"gp-files__mode",role:"group","aria-label":n("files.previewMode")},[(0,g.createElement)("button",{key:"source",type:"button",className:`gp-files__mode-btn${p?"":" gp-files__mode-btn--active"}`,"aria-pressed":!p,onClick:()=>u(!1)},n("files.source")),(0,g.createElement)("button",{key:"render",type:"button",className:`gp-files__mode-btn${p?" gp-files__mode-btn--active":""}`,"aria-pressed":p,onClick:()=>u(!0)},n("files.render"))]):null,(0,g.createElement)("button",{key:"copy",type:"button",className:`gp-files__copy-path${m==="error"?" gp-files__copy-path--error":""}`,"aria-live":"polite",onClick:()=>{$()}},n(m==="copied"?"files.pathCopied":m==="error"?"files.pathCopyFailed":"files.copyPath"))]):null,(0,g.createElement)("div",{key:"content",className:"gp-files__preview-content"},fr(d,p,k,n))])])}function fr(e,t,n,r){return e.kind==="text"&&t&&un(e.path)?(0,g.createElement)("div",{className:"gp-files__markdown"},(0,g.createElement)(ce.MarkdownText,{text:e.content,labels:n,variant:"body"})):e.kind==="text"&&t&&gt(e.path)?(0,g.createElement)("iframe",{className:"gp-files__html",title:e.path,srcDoc:e.content,sandbox:"allow-scripts",referrerPolicy:"no-referrer"}):gr(e,r)}function mn(e,t,n){let r=n.dirs.get(e);if(r===void 0||r.status==="loading")return t===0?[(0,g.createElement)("div",{key:"l",className:"gp-empty"},n.t("common.loading"))]:[(0,g.createElement)("div",{key:`l${e}`,className:"gp-tree-row gp-tree-row--muted",style:{paddingLeft:10+t*14}},n.t("common.loading"))];if(r.status==="error")return[(0,g.createElement)("div",{key:`e${e}`,className:"gp-tree-row gp-tree-row--muted",style:{paddingLeft:10+t*14}},n.t("files.loadFailed"))];let i=[];for(let a of r.entries){let s=e===""?a.name:`${e}/${a.name}`;if(a.dir){let o=n.open.has(s);i.push((0,g.createElement)("button",{key:s,type:"button",className:`gp-tree-row gp-files__entry gp-files__entry--dir${a.ignored?" gp-tree-row--ignored":""}`,style:{paddingLeft:10+t*14},"aria-expanded":o,"aria-label":a.ignored?`${a.name} (${n.t("files.ignored")})`:a.name,onClick:()=>n.toggleDir(s)},[(0,g.createElement)("span",{key:"c",className:"gp-tree-chev"},(0,g.createElement)(ge,{size:11,open:o})),(0,g.createElement)("span",{key:"i",className:"gp-tree-ic"},(0,g.createElement)(ce.FileTypeIcon,{kind:"folder",size:18})),(0,g.createElement)("span",{key:"n",className:"gp-tree-name"},a.name)])),o&&i.push(...mn(s,t+1,n))}else{let o=n.selected===s;i.push((0,g.createElement)("button",{key:s,type:"button",className:`gp-tree-row gp-files__entry${o?" gp-tree-row--active":""}${a.ignored?" gp-tree-row--ignored":""}`,style:{paddingLeft:10+t*14},"aria-current":o?"true":void 0,"aria-label":a.ignored?`${a.name} (${n.t("files.ignored")})`:a.name,onClick:()=>n.selectFile(s)},[(0,g.createElement)("span",{key:"c",className:"gp-tree-chev"}),(0,g.createElement)("span",{key:"i",className:"gp-tree-ic"},(0,g.createElement)(ce.FileTypeIcon,{path:s,size:18})),(0,g.createElement)("span",{key:"n",className:"gp-tree-name"},a.name)]))}}return r.truncated&&i.push((0,g.createElement)("div",{key:`t${e}`,className:"gp-tree-row gp-tree-row--muted",style:{paddingLeft:10+t*14}},n.t("files.truncated"))),i}function gr(e,t){switch(e.kind){case"idle":return(0,g.createElement)("div",{className:"gp-empty"},t("files.selectFile"));case"loading":return(0,g.createElement)("div",{className:"gp-empty"},t("common.loading"));case"error":return(0,g.createElement)("div",{className:"gp-empty"},t("files.loadFailed"));case"tooLarge":return(0,g.createElement)("div",{className:"gp-empty"},t("files.tooLarge"));case"binary":return(0,g.createElement)("div",{className:"gp-empty"},t("files.binary"));case"image":return(0,g.createElement)("div",{className:"gp-files__image"},(0,g.createElement)("img",{src:e.dataUrl,alt:e.path}));case"text":return(0,g.createElement)(mr,{content:e.content,path:e.path,t})}}function ur(e,t){if(t==="")return[];let n=[];for(let r=0;r<e.length;r++)for(let[i,a]of ze(e[r],t))if(n.push({line:r,start:i,end:a}),n.length>=Le)return n;return n}function mr({content:e,path:t,t:n}){let r=(0,g.useMemo)(()=>{let R=e.split(`
354
+ `);return R.length>0&&R[R.length-1]===""&&R.pop(),R},[e]),i=e.length>cr||r.length>pr,a=i?void 0:(0,ce.languageForPath)(t),s=(0,ce.useCodeHighlighter)(a),o=(0,g.useMemo)(()=>i?void 0:s(r.join(`
355
+ `)),[i,s,r]),[l,d]=(0,g.useState)(!1),[f,p]=(0,g.useState)(""),[u,m]=(0,g.useState)(!1),[_,k]=(0,g.useState)(0),w=(0,g.useRef)(null),D=(0,g.useRef)(null),v=(0,g.useRef)(null);(0,g.useEffect)(()=>{d(!1),p(""),k(0)},[t]);let M=He(f,$e),J=(0,g.useMemo)(()=>r.map(R=>R.toLowerCase()),[r]),N=u?M:M.toLowerCase(),$=u?r:J,S=(0,g.useMemo)(()=>ur($,N),[$,N]);(0,g.useEffect)(()=>{k(0)},[N]);let F=S.length===0?0:Math.min(_,S.length-1),C=(0,g.useMemo)(()=>{let R=new Map;for(let y of S){let T=R.get(y.line)??[];T.push([y.start,y.end]),R.set(y.line,T)}return R},[S]);(0,g.useEffect)(()=>{let R=y=>{if(!((y.ctrlKey||y.metaKey)&&(y.key==="f"||y.key==="F")))return;let T=w.current;T===null||T.offsetParent===null||(y.preventDefault(),d(!0),requestAnimationFrame(()=>D.current?.select()))};return document.addEventListener("keydown",R),()=>document.removeEventListener("keydown",R)},[]);let[A,O]=(0,g.useState)({top:0,height:0});(0,g.useLayoutEffect)(()=>{let R=w.current;if(R===null)return;let y=()=>O({top:R.scrollTop,height:R.clientHeight});y(),R.addEventListener("scroll",y,{passive:!0});let T=typeof ResizeObserver<"u"?new ResizeObserver(y):null;return T?.observe(R),()=>{R.removeEventListener("scroll",y),T?.disconnect()}},[]);let W=r.length,Y=Math.max(0,Math.floor((A.top-0)/Ue)-je),U=A.height===0?W:Math.ceil(A.height/Ue)+je*2,te=Math.min(W,Y+U),B=S.length>0?S[F].line:-1,ee=B>=0?Math.min(Y,Math.max(0,B-je)):Y,L=B>=0?Math.max(te,Math.min(W,B+je)):te;(0,g.useEffect)(()=>{if(B<0)return;let R=requestAnimationFrame(()=>v.current?.scrollIntoView({block:"center",inline:"nearest"}));return()=>cancelAnimationFrame(R)},[F,S,B]);let x=(0,g.useCallback)(R=>{k(y=>S.length===0?0:(y+R+S.length)%S.length)},[S.length]),P=S.length>0?S[F]:null,X=l?(0,g.createElement)(Xe,{inputRef:D,query:f,matches:S.length,active:F,caseSensitive:u,onChange:p,onToggleCase:()=>m(R=>!R),onStep:x,onClose:()=>d(!1),t:n}):null,ne=i||l?(0,g.createElement)("div",{key:"hd",className:"gp-files__header"},[i?(0,g.createElement)("div",{key:"note",className:"gp-files__note"},n("files.highlightOff")):null,X]):null,j=[];for(let R=ee;R<L;R++)j.push((0,g.createElement)("div",{key:R,className:"gp-files__row",style:{top:R*Ue}},[(0,g.createElement)("div",{key:"n",className:"gp-diff-no"},R+1),hr(r[R],R,o?.[R],C.get(R),P,v,n)]));return(0,g.createElement)("div",{className:"gp-files__code gp-diff__scroll",ref:w},[ne,(0,g.createElement)("div",{key:"grid",className:"gp-files__single gp-files__single--virt",style:{height:W*Ue}},j)])}function hr(e,t,n,r,i,a,s){if(e==="")return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},"\xA0");if(e.length>gn)return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},[e.slice(0,gn),(0,g.createElement)("span",{key:"trunc",className:"gp-files__trunc"},s("files.lineTruncated"))]);if(r===void 0||r.length===0)return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},n!==void 0?n.map((l,d)=>(0,g.createElement)("span",{key:d,style:l.style},l.text)):e);let o=i!==null&&i.line===t?[i.start,i.end]:null;return(0,g.createElement)("div",{key:`c${t}`,className:"gp-diff-cell"},Ie(e,r,n,`c${t}`,o,a))}var hn="gp.panel.fontDelta";function yr(){if(typeof localStorage>"u")return 0;let e=Number(localStorage.getItem(hn));return e===-1||e===1?e:0}function yn({ctx:e,sessionId:t,t:n}){let[r,i]=(0,G.useState)(yr),[a,s]=(0,G.useState)(null),o=Me(t),l=xe(e),d=o.state==="error"&&o.error.code==="git-unavailable",f=o.state==="error"&&(o.error.code==="not-a-git-repo"||o.error.code==="git-unavailable"),p=d&&o.state==="error"&&o.error.isGitRepo===!0,u=f?"files":a!==null&&a.sessionId===t?a.tab:null,m=(0,G.useRef)({tabs:new Set});m.current.sessionId!==t&&(m.current={sessionId:t,tabs:new Set}),u!==null&&m.current.tabs.add(u);let _=m.current.tabs.has("files");(0,G.useEffect)(()=>{if(!pe(t))return;if(f){s(null);return}if(a?.sessionId===t)return;let N=Rt(t);if(N!==null){s({sessionId:t,tab:N});return}o.state==="ready"&&s({sessionId:t,tab:o.snapshot.dirty?"changes":"overview"})},[t,o,f,a?.sessionId]),(0,G.useEffect)(()=>{if(pe(t))return Tt(t,N=>s({sessionId:t,tab:N}))},[t]);let k=o.state==="ready"?o.snapshot.checkedAt:0,w=async N=>{if(!pe(t))return{ok:!1,error:n("error.noCwd")};let $=await l.run({sessionId:t,action:N});return $.ok?(rt(t).accept($.snapshot),{ok:!0}):{ok:!1,error:br($.error.code,$.error.message,n)}},D=N=>{i(N),typeof localStorage<"u"&&localStorage.setItem(hn,String(N))},v=[{key:"overview",label:n("tab.overview"),icon:(0,G.createElement)(De,{size:14})},{key:"changes",label:n("tab.changes"),icon:(0,G.createElement)(Pt,{size:14})},{key:"files",label:n("tab.files"),icon:(0,G.createElement)($t,{size:14})}],M=f?v.filter(N=>N.key==="files"):v,J=(()=>{if(!pe(t))return(0,G.createElement)("div",{className:"gp-empty"},n("error.noCwd"));if(o.state==="no-cwd")return(0,G.createElement)("div",{className:"gp-empty"},n("error.noCwd"));if(f){let $=_?(0,G.createElement)(ut,{key:t,remote:l,sessionId:t,t:n}):null;return p?(0,G.createElement)("div",{className:"gp-files-wrap"},[(0,G.createElement)("div",{key:"notice",className:"gp-notice"},n("files.gitNotInstalled")),$]):(0,G.createElement)("div",{style:{display:"contents"}},$)}if(o.state==="error")return(0,G.createElement)("div",{className:"gp-empty"},n("pill.unavailable"));if(o.state==="cold"||o.state==="loading"||u===null)return(0,G.createElement)("div",{className:"gp-empty"},n("common.loading"));let N=o.snapshot;return(0,G.createElement)("div",{style:{display:"contents"}},[m.current.tabs.has("overview")?(0,G.createElement)("div",{key:"overview",style:u==="overview"?{display:"contents"}:{display:"none"}},(0,G.createElement)(cn,{key:t,remote:l,sessionId:t,refreshKey:k,defaultDiffView:N.defaultDiffView,t:n})):null,m.current.tabs.has("changes")?(0,G.createElement)("div",{key:"changes",style:u==="changes"?{display:"contents"}:{display:"none"}},(0,G.createElement)(fn,{key:t,remote:l,sessionId:t,snapshot:N,onAction:w,t:n})):null,_?(0,G.createElement)("div",{key:"files",style:u==="files"?{display:"contents"}:{display:"none"}},(0,G.createElement)(ut,{key:t,remote:l,sessionId:t,t:n})):null])})();return(0,G.createElement)("div",{className:"gp-panel","data-conversation-composer-overlay":"","data-font-delta":r},[(0,G.createElement)("div",{key:"tabs",className:"gp-tabbar",role:"tablist"},[...M.map(N=>(0,G.createElement)("button",{key:N.key,type:"button",role:"tab","aria-selected":u===N.key,className:`gp-tab${u===N.key?" gp-tab--active":""}`,onClick:()=>{pe(t)&&s({sessionId:t,tab:N.key})}},[(0,G.createElement)("span",{key:"i",className:"gp-tab__icon"},N.icon),(0,G.createElement)("span",{key:"l",className:"gp-tab__label"},N.label)])),(0,G.createElement)("div",{key:"font",className:"gp-font"},[(0,G.createElement)("button",{key:"dec",type:"button",className:"gp-font__decrease",onClick:()=>D(-1),"aria-label":n("panel.fontDecrease")},"A\u2212"),(0,G.createElement)("button",{key:"reset",type:"button",className:"gp-font__reset",onClick:()=>D(0),"aria-label":n("panel.fontReset")},"A"),(0,G.createElement)("button",{key:"inc",type:"button",className:"gp-font__increase",onClick:()=>D(1),"aria-label":n("panel.fontIncrease")},"A+")]),(0,G.createElement)(vr,{key:"ver",remote:l,t:n})]),(0,G.createElement)("div",{key:"body",className:"gp-body"},J)])}function br(e,t,n){switch(e){case"empty-message":return n("error.emptyMessage");case"not-a-git-repo":return n("error.notARepo");case"cwd-unavailable":return n("error.noCwd");case"local-changes-block":return n("error.localChangesBlock");default:return t??n("error.generic")}}function vr({remote:e,t}){let[n,r]=(0,G.useState)({kind:"idle"});(0,G.useEffect)(()=>{let o=!0;return e.version({}).then(l=>{o&&"current"in l&&r(d=>({...d,info:l}))}),()=>{o=!1}},[e]);let i=async()=>{r(l=>({kind:"checking",info:l.info}));let o=await e.version({check:!0});r({kind:"idle",info:"current"in o?o:void 0})},a=n.info,s=n.kind==="checking"?(0,G.createElement)("span",{className:"gp-verbar__status"},t("version.checking")):a===void 0||!a.checkedRemote?null:a.error!==void 0?(0,G.createElement)("span",{className:"gp-verbar__status gp-verbar__status--err",title:a.error},a.error==="repository is not configured"?t("version.noRepo"):t("version.error")):a.updateAvailable&&a.latest!==void 0?(0,G.createElement)("span",{},[(0,G.createElement)("span",{key:"s",className:"gp-verbar__status gp-verbar__status--new"},t("version.updateAvailable",{latest:a.latest,current:a.current})),a.releaseUrl!==void 0?(0,G.createElement)("a",{key:"l",className:"gp-verbar__link",href:a.releaseUrl,target:"_blank",rel:"noreferrer",style:{marginLeft:8}},t("version.viewRelease")):null]):(0,G.createElement)("span",{className:"gp-verbar__status gp-verbar__status--ok"},t("version.upToDate",{current:a.current}));return(0,G.createElement)("div",{className:"gp-verbar"},[a!==void 0?(0,G.createElement)("span",{key:"tag",className:"gp-verbar__tag"},`v${a.current}`):null,s,(0,G.createElement)("button",{key:"btn",type:"button",className:"gp-verbar__btn",disabled:n.kind==="checking",onClick:()=>void i()},[(0,G.createElement)("span",{key:"i",className:"gp-tab__icon"},(0,G.createElement)(Pe,{size:12})),t("version.check")]),a?.repositoryUrl!==void 0?(0,G.createElement)("a",{key:"gh",className:"gp-icon-btn gp-verbar__gh",href:a.repositoryUrl,target:"_blank",rel:"noreferrer",title:t("version.openRepo"),"aria-label":t("version.openRepo")},(0,G.createElement)(Ht,{size:15})):null])}var q=require("react"),wn=require("react-dom");var bn="data-gp-tab-dot",ve,mt=null,vn="",Ye=null,Qe;function xr(e){if(typeof document>"u")return null;let t=document.querySelectorAll(_e);for(let n of t)if((n.textContent??"").trim()===e)return n;return null}function ht(){let e=xr(vn);if(e===null)return;let t=e.querySelector(`[${bn}]`);if(Ye===null){t?.remove();return}let n=`gp-tab-dot gp-tab-dot--${Ye}`;if(t!==null){t.className!==n&&(t.className=n);return}let r=document.createElement("span");r.className=n,r.setAttribute(bn,""),r.setAttribute("aria-hidden","true"),e.appendChild(r)}function wr(){if(typeof document>"u"||typeof MutationObserver>"u")return;let e=document.querySelector(Nt);if(e!==mt){if(ve?.disconnect(),mt=e,e===null){ve=void 0;return}ve=new MutationObserver(()=>ht()),ve.observe(e,{childList:!0,subtree:!0})}}function kr(){ve?.disconnect(),ve=void 0,mt=null}function xn(e,t,n){if(!(typeof document>"u")){if(n===null){yt(e);return}Qe=e,vn=t,Ye=n,wr(),ht()}}function yt(e){Qe!==void 0&&Qe!==e||(Qe=void 0,Ye=null,ht(),kr())}function _r(e){let t=e.replace(/[/\\]+$/,"").split(/[/\\]/);return t[t.length-1]||e}function Sr(){let[e,t]=(0,q.useState)(!1),[n,r]=(0,q.useState)(null),i=(0,q.useRef)(null);return(0,q.useLayoutEffect)(()=>{if(!e||i.current===null){r(null);return}let o=i.current.getBoundingClientRect();r({left:o.left,bottom:window.innerHeight-o.top+8})},[e]),{bind:{ref:o=>{i.current=o},onMouseEnter:()=>t(!0),onMouseLeave:()=>t(!1)},render:o=>!e||n===null||typeof document>"u"?null:(0,wn.createPortal)((0,q.createElement)("div",{className:"gp-tip",style:{left:n.left,bottom:n.bottom}},o.map((l,d)=>(0,q.createElement)("div",{key:d,className:d===0?"gp-tip__path":"gp-tip__note"},l))),document.body)}}function Cr(e){let[t,n]=(0,q.useState)(!1);return(0,q.useEffect)(()=>{if(e===null||typeof ResizeObserver>"u")return;let i=e.closest("[data-conversation-region]")??document.body,a=()=>n(i.clientWidth>0&&i.clientWidth<Nr);a();let s=new ResizeObserver(a);return s.observe(i),()=>s.disconnect()},[e]),t}var Nr=620;function kn({sessionId:e,t}){let n=Me(e),r=Sr(),[i,a]=(0,q.useState)(null),s=Cr(i),o=(0,q.useRef)(Symbol("gp-tab-dot")),l=n.state==="ready"&&n.snapshot.showInputPill===!1?n.snapshot.dirty?"dirty":"synced":null,d=t("panel.tab");if((0,q.useEffect)(()=>{xn(o.current,d,l);let w=o.current;return()=>{yt(w)}},[d,l]),n.state==="cold"||n.state==="loading"||n.state==="no-cwd")return null;if(n.state==="error")return n.error.code==="not-a-git-repo"||n.error.code==="git-unavailable"||n.error.showInputPill===!1?null:(0,q.createElement)("span",{className:"gp-pill gp-pill--degraded",title:n.error.detail??t("pill.unavailable")},t("pill.unavailable"));let f=n.snapshot;if(f.showInputPill===!1)return null;let p=_r(f.root),u=f.branch??`(${t("pill.detached")})`,m=f.dirty,_=m?"gp-pill--dirty":"gp-pill--synced",k=()=>{let w=t("panel.tab");if(Mt(w)){Dt(w);return}pe(e)&&Gt(e,m?"changes":"overview"),Et(w)};return(0,q.createElement)("span",{className:"gp-pill-wrap",ref:a},[(0,q.createElement)("button",{key:"btn",type:"button",className:`gp-pill ${_}${s?" gp-pill--compact":""}`,onClick:k,ref:r.bind.ref,onMouseEnter:r.bind.onMouseEnter,onMouseLeave:r.bind.onMouseLeave},[(0,q.createElement)("span",{key:"dot",className:"gp-pill__dot","aria-hidden":"true"}),(0,q.createElement)("span",{key:"repo",className:"gp-pill__repo"},p),(0,q.createElement)("span",{key:"git",className:"gp-pill__git"},["(",(0,q.createElement)("span",{key:"b",className:"gp-pill__branch"},u),")"])]),r.render([f.root,t(m?"pill.dirty":"pill.synced")])])}var K=require("react");function Gr(e){for(let t of e){let n=t.schema?.dict;if(n!==void 0&&"showInputPill"in n||JSON.stringify(t.schema).includes("showInputPill"))return t.ns}}function _n({ctx:e,t}){let[,n]=(0,K.useState)(0),[r,i]=(0,K.useState)(!1),[a,s]=(0,K.useState)(!1),[o,l]=(0,K.useState)(null),[d,f]=(0,K.useState)(null),p=()=>{n(C=>C+1)},u=e.get("configForms"),m=(0,K.useMemo)(()=>u?.describe(),[u]);(0,K.useEffect)(()=>{if(m!==void 0)return m.ensure(),m.subscribe(p)},[m]);let _=m?.getSnapshot().view,k=(0,K.useMemo)(()=>_===void 0?void 0:Gr(_.namespaces),[_]),w=(0,K.useMemo)(()=>u!==void 0&&k!==void 0?u.get(k):void 0,[u,k]);(0,K.useEffect)(()=>{if(w!==void 0)return w.subscribe(p)},[w]);let D=w?.getSnapshot(),v=w!==void 0&&D!==void 0&&D.status==="ready",M=m?.getSnapshot().status,J=o??(typeof D?.value?.showInputPill=="boolean"?D.value.showInputPill:!0),N=d??(D?.value?.defaultDiffView==="split"?"split":"unified"),$=async(C,A,O)=>{if(w!==void 0){s(!1),i(!0);try{let W=await w.set(C,A);O(),W?(we(),setTimeout(()=>we(),1e3)):s(!0)}catch{O(),s(!0)}finally{i(!1)}}},S=C=>(l(C),$("showInputPill",C,()=>l(null))),F=C=>C===N?Promise.resolve():(f(C),$("defaultDiffView",C,()=>f(null)));return u===void 0?(0,K.createElement)("p",{className:"gp-cfg__hint"},t("cfg.notLoaded")):v?(0,K.createElement)("div",{className:"gp-cfg"},[(0,K.createElement)("h3",{key:"title",className:"gp-cfg__title"},t("cfg.title")),(0,K.createElement)("label",{key:"row",className:"gp-cfg__row"},[(0,K.createElement)("input",{key:"switch",type:"checkbox",role:"switch",className:"gp-cfg__switch",checked:J,disabled:r||D?.writable===!1,onChange:C=>{S(C.currentTarget.checked)}}),(0,K.createElement)("span",{key:"text",className:"gp-cfg__text"},t("cfg.toggle"))]),(0,K.createElement)("p",{key:"hint",className:"gp-cfg__hint"},t("cfg.hint")),(0,K.createElement)("h3",{key:"difftitle",className:"gp-cfg__title",style:{marginTop:6}},t("cfg.diffTitle")),(0,K.createElement)("div",{key:"diffseg",className:"gp-seg gp-cfg__seg"},ye(["unified","split"],N,C=>{F(C)},C=>t(C==="unified"?"cfg.diffUnified":"cfg.diffSplit"),r||D?.writable===!1)),(0,K.createElement)("p",{key:"diffhint",className:"gp-cfg__hint"},t("cfg.diffHint")),a?(0,K.createElement)("p",{key:"error",className:"gp-cfg__err",role:"alert"},t("cfg.saveFailed")):null]):M==="idle"||M==="loading"?(0,K.createElement)("p",{className:"gp-cfg__hint"},t("common.loading")):(0,K.createElement)("p",{className:"gp-cfg__hint"},t("cfg.notLoaded"))}var Ge="gitPanel",Rr=["dsh-git-panel","@xbzbing/dsh-git-panel"],Tr=["slots","locale","connection"],Er="dsh-git-panel";function Mr(e){vt(),St(e),e.effect(()=>e.locale.register(Ge,{zh:xt,en:wt})??void 0,"dsh-git-panel: dictionaries");let t=e.locale.bind(Ge),n=[],r=i=>{typeof i=="function"&&n.push(i)};r(e.slots.inject("conversation.view",()=>e.slots.register({name:"conversation.view",id:"git-panel",order:30,locale:Ge,label:()=>t("panel.tab")},i=>(0,Ze.createElement)(yn,{ctx:e,sessionId:i.sessionId,t})))),r(e.slots.inject("conversation.input.left",()=>e.slots.register({name:"conversation.input.left",id:"git-panel-pill",order:100,locale:Ge},i=>(0,Ze.createElement)(kn,{sessionId:i.sessionId,t}))));for(let i of Rr)r(e.slots.inject("plugins.bundle.config",()=>e.slots.register({name:"plugins.bundle.config",key:i,locale:Ge},a=>a.view==="summary"?t("cfg.title"):(0,Ze.createElement)(_n,{ctx:e,t}))));e.effect(()=>{let i=e.on("connection/reset",()=>we());return()=>{typeof i=="function"&&i();for(let a of n.splice(0))try{a()}catch{}Ct()}},"dsh-git-panel: lifecycle")}module.exports={name:Er,inject:Tr,apply:Mr};
353
356
  return module.exports;
354
357
  } });
package/lib/host/index.js CHANGED
@@ -112,7 +112,7 @@ async function resolveStdout(read) {
112
112
  }
113
113
 
114
114
  // src/host/core.ts
115
- import { join } from "node:path";
115
+ import { dirname, join } from "node:path";
116
116
 
117
117
  // src/host/parser.ts
118
118
  function statusOf(code) {
@@ -336,7 +336,7 @@ async function resolveBrowseRoot(deps, sessionId) {
336
336
  const ws = await resolveWorkspace(deps, sessionId);
337
337
  if (ws.ok) return { ok: true, root: ws.root, isGitRepo: true };
338
338
  const err = ws.failure.error;
339
- if (err.code === "not-a-git-repo" && err.cwd !== void 0 && err.cwd !== "") {
339
+ if ((err.code === "not-a-git-repo" || err.code === "git-unavailable") && "cwd" in err && err.cwd !== void 0 && err.cwd !== "") {
340
340
  try {
341
341
  return { ok: true, root: await deps.fs.realpath(err.cwd), isGitRepo: false };
342
342
  } catch {
@@ -363,7 +363,7 @@ async function resolveWorkspace(deps, sessionId) {
363
363
  }
364
364
  const top = await runCommand(deps.run, ["git", "rev-parse", "--show-toplevel"], cwd, "toplevel", deps.signal);
365
365
  if ("failure" in top) {
366
- return { ok: false, failure: { ok: false, error: mapRunFailure(top.failure) } };
366
+ return { ok: false, failure: { ok: false, error: { ...mapRunFailure(top.failure), cwd } } };
367
367
  }
368
368
  if (top.run.cancelled) return { ok: false, failure: { ok: false, error: { code: "cancelled" } } };
369
369
  if (top.run.timedOut) return { ok: false, failure: { ok: false, error: { code: "timeout" } } };
@@ -397,6 +397,25 @@ function mapRunFailure(failure) {
397
397
  const message = failure instanceof Error ? failure.message : String(failure);
398
398
  return { code: "git-unavailable", detail: message };
399
399
  }
400
+ async function detectGitRepo(deps, cwd) {
401
+ let dir;
402
+ try {
403
+ dir = await deps.fs.realpath(cwd);
404
+ } catch {
405
+ dir = cwd;
406
+ }
407
+ for (let i = 0; i < 100; i++) {
408
+ try {
409
+ await deps.fs.stat(join(dir, ".git"));
410
+ return true;
411
+ } catch {
412
+ }
413
+ const parent = dirname(dir);
414
+ if (parent === dir) break;
415
+ dir = parent;
416
+ }
417
+ return false;
418
+ }
400
419
  function mapWorkspaceFailure(failure) {
401
420
  const error = failure.error;
402
421
  const message = "detail" in error ? error.detail : void 0;
@@ -409,6 +428,11 @@ async function snapshotForSession(deps, config, sessionId) {
409
428
  if (failure.error.code === "not-a-git-repo") {
410
429
  return { ok: false, error: { ...failure.error, showInputPill: config.showInputPill } };
411
430
  }
431
+ if (failure.error.code === "git-unavailable") {
432
+ const cwd = failure.error.cwd;
433
+ const isGitRepo = cwd !== void 0 && cwd !== "" ? await detectGitRepo(deps, cwd) : false;
434
+ return { ok: false, error: { ...failure.error, isGitRepo } };
435
+ }
412
436
  return failure;
413
437
  }
414
438
  const root = workspace.root;
@@ -1085,10 +1109,10 @@ async function queryWorktreeStats(deps, config, sessionId) {
1085
1109
 
1086
1110
  // src/host/version.ts
1087
1111
  import { readFile as readFile2 } from "node:fs/promises";
1088
- import { dirname, join as join4 } from "node:path";
1112
+ import { dirname as dirname2, join as join4 } from "node:path";
1089
1113
  import { fileURLToPath } from "node:url";
1090
1114
  function manifestPath() {
1091
- return join4(dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json");
1115
+ return join4(dirname2(fileURLToPath(import.meta.url)), "..", "..", "package.json");
1092
1116
  }
1093
1117
  function stringField(value) {
1094
1118
  return typeof value === "string" && value !== "" ? value : void 0;
@@ -26,6 +26,8 @@ export type GitFailure = {
26
26
  } | {
27
27
  readonly code: 'git-unavailable';
28
28
  readonly detail: string;
29
+ readonly cwd?: string;
30
+ readonly isGitRepo?: boolean;
29
31
  } | {
30
32
  readonly code: 'timeout';
31
33
  } | {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xbzbing/dsh-git-panel",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "DeepSeek Harness (dsh) plugin: an IDE-style Git panel in the Web GUI — branch/history overview, uncommitted changes with commit & amend, diff stats, and a zsh-style branch marker in the input bar.",
5
5
  "type": "module",
6
6
  "license": "MIT",