@cerbur/clutch-dsh-worktree 0.1.12 → 0.1.14

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.
Files changed (286) hide show
  1. package/README.md +312 -433
  2. package/README.zh.md +265 -348
  3. package/assets/screenshots/screenshots-dashboard.png +0 -0
  4. package/assets/screenshots/screenshots-git-reviewer.png +0 -0
  5. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  6. package/lib/client/WorktreeSurface.js +140 -18
  7. package/lib/client/WorktreeSurface.js.map +1 -1
  8. package/lib/client/context/WorktreeHeroContext.d.ts +4 -3
  9. package/lib/client/context/WorktreeHeroContext.d.ts.map +1 -1
  10. package/lib/client/context/WorktreeHeroContext.js +29 -11
  11. package/lib/client/context/WorktreeHeroContext.js.map +1 -1
  12. package/lib/client/dashboard/WorktreeDashboard.d.ts +9 -2
  13. package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
  14. package/lib/client/dashboard/WorktreeDashboard.js +165 -14
  15. package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
  16. package/lib/client/dashboard/dashboard-navigation.d.ts +35 -0
  17. package/lib/client/dashboard/dashboard-navigation.d.ts.map +1 -0
  18. package/lib/client/dashboard/dashboard-navigation.js +48 -0
  19. package/lib/client/dashboard/dashboard-navigation.js.map +1 -0
  20. package/lib/client/dashboard/dashboard-overlay.d.ts +7 -2
  21. package/lib/client/dashboard/dashboard-overlay.d.ts.map +1 -1
  22. package/lib/client/dashboard/dashboard-overlay.js +81 -16
  23. package/lib/client/dashboard/dashboard-overlay.js.map +1 -1
  24. package/lib/client/dashboard/dashboard-selection.d.ts +5 -3
  25. package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -1
  26. package/lib/client/dashboard/dashboard-selection.js +3 -2
  27. package/lib/client/dashboard/dashboard-selection.js.map +1 -1
  28. package/lib/client/dashboard/git/GitChangedFiles.d.ts +11 -0
  29. package/lib/client/dashboard/git/GitChangedFiles.d.ts.map +1 -0
  30. package/lib/client/dashboard/git/GitChangedFiles.js +101 -0
  31. package/lib/client/dashboard/git/GitChangedFiles.js.map +1 -0
  32. package/lib/client/dashboard/git/GitCommitList.d.ts +15 -0
  33. package/lib/client/dashboard/git/GitCommitList.d.ts.map +1 -0
  34. package/lib/client/dashboard/git/GitCommitList.js +55 -0
  35. package/lib/client/dashboard/git/GitCommitList.js.map +1 -0
  36. package/lib/client/dashboard/git/GitDiffView.d.ts +10 -0
  37. package/lib/client/dashboard/git/GitDiffView.d.ts.map +1 -0
  38. package/lib/client/dashboard/git/GitDiffView.js +65 -0
  39. package/lib/client/dashboard/git/GitDiffView.js.map +1 -0
  40. package/lib/client/dashboard/git/GitFileTypeIcon.d.ts +8 -0
  41. package/lib/client/dashboard/git/GitFileTypeIcon.d.ts.map +1 -0
  42. package/lib/client/dashboard/git/GitFileTypeIcon.js +24 -0
  43. package/lib/client/dashboard/git/GitFileTypeIcon.js.map +1 -0
  44. package/lib/client/dashboard/git/GitLineStats.d.ts +10 -0
  45. package/lib/client/dashboard/git/GitLineStats.d.ts.map +1 -0
  46. package/lib/client/dashboard/git/GitLineStats.js +9 -0
  47. package/lib/client/dashboard/git/GitLineStats.js.map +1 -0
  48. package/lib/client/dashboard/git/WorktreeGitOverview.d.ts +31 -0
  49. package/lib/client/dashboard/git/WorktreeGitOverview.d.ts.map +1 -0
  50. package/lib/client/dashboard/git/WorktreeGitOverview.js +89 -0
  51. package/lib/client/dashboard/git/WorktreeGitOverview.js.map +1 -0
  52. package/lib/client/dashboard/git/WorktreeGitPanel.d.ts +16 -0
  53. package/lib/client/dashboard/git/WorktreeGitPanel.d.ts.map +1 -0
  54. package/lib/client/dashboard/git/WorktreeGitPanel.js +126 -0
  55. package/lib/client/dashboard/git/WorktreeGitPanel.js.map +1 -0
  56. package/lib/client/dashboard/git/file-address.d.ts +2 -0
  57. package/lib/client/dashboard/git/file-address.d.ts.map +1 -0
  58. package/lib/client/dashboard/git/file-address.js +16 -0
  59. package/lib/client/dashboard/git/file-address.js.map +1 -0
  60. package/lib/client/dashboard/git/git-column-split.d.ts +34 -0
  61. package/lib/client/dashboard/git/git-column-split.d.ts.map +1 -0
  62. package/lib/client/dashboard/git/git-column-split.js +41 -0
  63. package/lib/client/dashboard/git/git-column-split.js.map +1 -0
  64. package/lib/client/dashboard/git/git-diff-parser.d.ts +24 -0
  65. package/lib/client/dashboard/git/git-diff-parser.d.ts.map +1 -0
  66. package/lib/client/dashboard/git/git-diff-parser.js +56 -0
  67. package/lib/client/dashboard/git/git-diff-parser.js.map +1 -0
  68. package/lib/client/dashboard/git/git-facts.d.ts +22 -0
  69. package/lib/client/dashboard/git/git-facts.d.ts.map +1 -0
  70. package/lib/client/dashboard/git/git-facts.js +37 -0
  71. package/lib/client/dashboard/git/git-facts.js.map +1 -0
  72. package/lib/client/dashboard/git/git-file-tree.d.ts +16 -0
  73. package/lib/client/dashboard/git/git-file-tree.d.ts.map +1 -0
  74. package/lib/client/dashboard/git/git-file-tree.js +52 -0
  75. package/lib/client/dashboard/git/git-file-tree.js.map +1 -0
  76. package/lib/client/dashboard/git/git-state-cache.d.ts +49 -0
  77. package/lib/client/dashboard/git/git-state-cache.d.ts.map +1 -0
  78. package/lib/client/dashboard/git/git-state-cache.js +80 -0
  79. package/lib/client/dashboard/git/git-state-cache.js.map +1 -0
  80. package/lib/client/dashboard/git/useGitPaneSplit.d.ts +33 -0
  81. package/lib/client/dashboard/git/useGitPaneSplit.d.ts.map +1 -0
  82. package/lib/client/dashboard/git/useGitPaneSplit.js +119 -0
  83. package/lib/client/dashboard/git/useGitPaneSplit.js.map +1 -0
  84. package/lib/client/dashboard/git/useWorktreeGitState.d.ts +60 -0
  85. package/lib/client/dashboard/git/useWorktreeGitState.d.ts.map +1 -0
  86. package/lib/client/dashboard/git/useWorktreeGitState.js +650 -0
  87. package/lib/client/dashboard/git/useWorktreeGitState.js.map +1 -0
  88. package/lib/client/dashboard/open-in-app-controller.d.ts +1 -0
  89. package/lib/client/dashboard/open-in-app-controller.d.ts.map +1 -1
  90. package/lib/client/dashboard/open-in-app-controller.js +6 -24
  91. package/lib/client/dashboard/open-in-app-controller.js.map +1 -1
  92. package/lib/client/dashboard/vscode-url.d.ts.map +1 -1
  93. package/lib/client/dashboard/vscode-url.js +6 -3
  94. package/lib/client/dashboard/vscode-url.js.map +1 -1
  95. package/lib/client/entry.d.ts.map +1 -1
  96. package/lib/client/entry.js +28 -0
  97. package/lib/client/entry.js.map +1 -1
  98. package/lib/client/locales.d.ts +158 -0
  99. package/lib/client/locales.d.ts.map +1 -1
  100. package/lib/client/locales.js +172 -14
  101. package/lib/client/locales.js.map +1 -1
  102. package/lib/client/session/session-view.d.ts +10 -0
  103. package/lib/client/session/session-view.d.ts.map +1 -1
  104. package/lib/client/session/session-view.js +57 -0
  105. package/lib/client/session/session-view.js.map +1 -1
  106. package/lib/client/session/worktree-session-order.d.ts +2 -5
  107. package/lib/client/session/worktree-session-order.d.ts.map +1 -1
  108. package/lib/client/session/worktree-session-order.js +35 -10
  109. package/lib/client/session/worktree-session-order.js.map +1 -1
  110. package/lib/client/session/worktree-session-position.d.ts +2 -1
  111. package/lib/client/session/worktree-session-position.d.ts.map +1 -1
  112. package/lib/client/session/worktree-session-position.js +10 -3
  113. package/lib/client/session/worktree-session-position.js.map +1 -1
  114. package/lib/client/session/worktree-session.d.ts +2 -0
  115. package/lib/client/session/worktree-session.d.ts.map +1 -1
  116. package/lib/client/session/worktree-session.js +15 -3
  117. package/lib/client/session/worktree-session.js.map +1 -1
  118. package/lib/client/surface/actions/useDragActions.d.ts +33 -2
  119. package/lib/client/surface/actions/useDragActions.d.ts.map +1 -1
  120. package/lib/client/surface/actions/useDragActions.js +66 -18
  121. package/lib/client/surface/actions/useDragActions.js.map +1 -1
  122. package/lib/client/surface/components/ActiveWorktree.js +2 -2
  123. package/lib/client/surface/components/ActiveWorktree.js.map +1 -1
  124. package/lib/client/surface/components/ArchivedWorktree.js +2 -2
  125. package/lib/client/surface/components/ArchivedWorktree.js.map +1 -1
  126. package/lib/client/surface/components/ArchivedWorktrees.js +2 -2
  127. package/lib/client/surface/components/ArchivedWorktrees.js.map +1 -1
  128. package/lib/client/surface/components/SurfaceContent.d.ts +1 -1
  129. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
  130. package/lib/client/surface/components/SurfaceContent.js +1 -1
  131. package/lib/client/surface/components/SurfaceContent.js.map +1 -1
  132. package/lib/client/surface/components/SurfaceHeader.d.ts +1 -1
  133. package/lib/client/surface/components/SurfaceHeader.d.ts.map +1 -1
  134. package/lib/client/surface/components/SurfaceHeader.js +12 -3
  135. package/lib/client/surface/components/SurfaceHeader.js.map +1 -1
  136. package/lib/client/surface/components/WorkspaceTree.js +4 -4
  137. package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
  138. package/lib/client/surface/components/rows.d.ts +2 -2
  139. package/lib/client/surface/components/rows.d.ts.map +1 -1
  140. package/lib/client/surface/components/rows.js +14 -9
  141. package/lib/client/surface/components/rows.js.map +1 -1
  142. package/lib/client/surface/selectors.d.ts +10 -0
  143. package/lib/client/surface/selectors.d.ts.map +1 -1
  144. package/lib/client/surface/selectors.js +14 -0
  145. package/lib/client/surface/selectors.js.map +1 -1
  146. package/lib/client/surface/state/useSessionExpansion.d.ts +2 -1
  147. package/lib/client/surface/state/useSessionExpansion.d.ts.map +1 -1
  148. package/lib/client/surface/state/useSessionExpansion.js +26 -13
  149. package/lib/client/surface/state/useSessionExpansion.js.map +1 -1
  150. package/lib/client/surface/state/useSessionOrdering.d.ts +1 -1
  151. package/lib/client/surface/state/useSessionOrdering.d.ts.map +1 -1
  152. package/lib/client/surface/state/useSessionOrdering.js +23 -8
  153. package/lib/client/surface/state/useSessionOrdering.js.map +1 -1
  154. package/lib/client/surface/types.d.ts +15 -3
  155. package/lib/client/surface/types.d.ts.map +1 -1
  156. package/lib/client/view/worktree-expand-state.d.ts +1 -1
  157. package/lib/client/view/worktree-expand-state.d.ts.map +1 -1
  158. package/lib/client/view/worktree-expand-state.js +8 -1
  159. package/lib/client/view/worktree-expand-state.js.map +1 -1
  160. package/lib/client/view/worktree-view-read.d.ts +3 -1
  161. package/lib/client/view/worktree-view-read.d.ts.map +1 -1
  162. package/lib/client/view/worktree-view-read.js +9 -2
  163. package/lib/client/view/worktree-view-read.js.map +1 -1
  164. package/lib/client/worktree-connection.d.ts +5 -0
  165. package/lib/client/worktree-connection.d.ts.map +1 -1
  166. package/lib/client/worktree-connection.js +14 -0
  167. package/lib/client/worktree-connection.js.map +1 -1
  168. package/lib/client.js +3520 -321
  169. package/lib/client.js.map +1 -1
  170. package/lib/contract/index.contract.js +10 -0
  171. package/lib/contract/index.contract.js.map +1 -1
  172. package/lib/contract/index.d.ts +155 -1
  173. package/lib/contract/index.d.ts.map +1 -1
  174. package/lib/contract/index.js +20 -0
  175. package/lib/contract/index.js.map +1 -1
  176. package/lib/contract/windows-path.d.ts +11 -0
  177. package/lib/contract/windows-path.d.ts.map +1 -0
  178. package/lib/contract/windows-path.js +41 -0
  179. package/lib/contract/windows-path.js.map +1 -0
  180. package/lib/host/remote.d.ts.map +1 -1
  181. package/lib/host/remote.js +5 -0
  182. package/lib/host/remote.js.map +1 -1
  183. package/lib/host/service.d.ts +18 -1
  184. package/lib/host/service.d.ts.map +1 -1
  185. package/lib/host/service.js +30 -0
  186. package/lib/host/service.js.map +1 -1
  187. package/lib/host/worktree-instructions.js +2 -2
  188. package/lib/host/worktree-instructions.js.map +1 -1
  189. package/lib/host/worktree-permission-manager.d.ts.map +1 -1
  190. package/lib/host/worktree-permission-manager.js +5 -1
  191. package/lib/host/worktree-permission-manager.js.map +1 -1
  192. package/lib/index.d.ts +4 -4
  193. package/lib/index.d.ts.map +1 -1
  194. package/lib/index.js +3 -3
  195. package/lib/index.js.map +1 -1
  196. package/lib/manage/manager-git-history.d.ts +17 -0
  197. package/lib/manage/manager-git-history.d.ts.map +1 -0
  198. package/lib/manage/manager-git-history.js +884 -0
  199. package/lib/manage/manager-git-history.js.map +1 -0
  200. package/lib/manage/manager-sessions.js +1 -1
  201. package/lib/manage/manager-sessions.js.map +1 -1
  202. package/lib/manage/manager-support.d.ts +3 -2
  203. package/lib/manage/manager-support.d.ts.map +1 -1
  204. package/lib/manage/manager-support.js +5 -13
  205. package/lib/manage/manager-support.js.map +1 -1
  206. package/lib/manage/manager-worktree-lifecycle.d.ts.map +1 -1
  207. package/lib/manage/manager-worktree-lifecycle.js +11 -3
  208. package/lib/manage/manager-worktree-lifecycle.js.map +1 -1
  209. package/lib/manage/manager-worktrees.d.ts.map +1 -1
  210. package/lib/manage/manager-worktrees.js +24 -0
  211. package/lib/manage/manager-worktrees.js.map +1 -1
  212. package/lib/manage/manager.d.ts +18 -1
  213. package/lib/manage/manager.d.ts.map +1 -1
  214. package/lib/manage/manager.js +74 -16
  215. package/lib/manage/manager.js.map +1 -1
  216. package/lib/provider/git/adapter.d.ts +54 -1
  217. package/lib/provider/git/adapter.d.ts.map +1 -1
  218. package/lib/provider/git/adapter.js +824 -2
  219. package/lib/provider/git/adapter.js.map +1 -1
  220. package/lib/provider/index.d.ts +2 -2
  221. package/lib/provider/index.d.ts.map +1 -1
  222. package/lib/provider/index.js +1 -1
  223. package/lib/provider/index.js.map +1 -1
  224. package/lib/provider/mutation-token.d.ts +1 -1
  225. package/lib/provider/mutation-token.d.ts.map +1 -1
  226. package/lib/provider/mutation-token.js +1 -0
  227. package/lib/provider/mutation-token.js.map +1 -1
  228. package/lib/provider/path-identity.d.ts +8 -0
  229. package/lib/provider/path-identity.d.ts.map +1 -0
  230. package/lib/provider/path-identity.js +62 -0
  231. package/lib/provider/path-identity.js.map +1 -0
  232. package/lib/provider/sidecar/mutation-lock.d.ts +4 -1
  233. package/lib/provider/sidecar/mutation-lock.d.ts.map +1 -1
  234. package/lib/provider/sidecar/mutation-lock.js +5 -11
  235. package/lib/provider/sidecar/mutation-lock.js.map +1 -1
  236. package/lib/provider/sidecar/process-liveness.d.ts +12 -0
  237. package/lib/provider/sidecar/process-liveness.d.ts.map +1 -0
  238. package/lib/provider/sidecar/process-liveness.js +39 -0
  239. package/lib/provider/sidecar/process-liveness.js.map +1 -0
  240. package/lib/provider/sidecar/repository.d.ts +1 -1
  241. package/lib/provider/sidecar/repository.d.ts.map +1 -1
  242. package/lib/provider/sidecar/repository.js +3 -2
  243. package/lib/provider/sidecar/repository.js.map +1 -1
  244. package/lib/provider/sidecar/sidecar-durability.d.ts +9 -0
  245. package/lib/provider/sidecar/sidecar-durability.d.ts.map +1 -0
  246. package/lib/provider/sidecar/sidecar-durability.js +36 -0
  247. package/lib/provider/sidecar/sidecar-durability.js.map +1 -0
  248. package/lib/provider/sidecar/sidecar-persistence.d.ts.map +1 -1
  249. package/lib/provider/sidecar/sidecar-persistence.js +2 -27
  250. package/lib/provider/sidecar/sidecar-persistence.js.map +1 -1
  251. package/lib/provider/sidecar/sidecar-schema.d.ts +16 -3
  252. package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
  253. package/lib/provider/sidecar/sidecar-schema.js +124 -25
  254. package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
  255. package/lib/provider/transaction/operations/create.d.ts.map +1 -1
  256. package/lib/provider/transaction/operations/create.js +21 -6
  257. package/lib/provider/transaction/operations/create.js.map +1 -1
  258. package/lib/provider/transaction/recovery/failure-recovery.d.ts.map +1 -1
  259. package/lib/provider/transaction/recovery/failure-recovery.js +11 -4
  260. package/lib/provider/transaction/recovery/failure-recovery.js.map +1 -1
  261. package/lib/provider/transaction/recovery/recover.d.ts.map +1 -1
  262. package/lib/provider/transaction/recovery/recover.js +9 -11
  263. package/lib/provider/transaction/recovery/recover.js.map +1 -1
  264. package/lib/provider/transaction/support/inspection.d.ts +0 -2
  265. package/lib/provider/transaction/support/inspection.d.ts.map +1 -1
  266. package/lib/provider/transaction/support/inspection.js +0 -4
  267. package/lib/provider/transaction/support/inspection.js.map +1 -1
  268. package/lib/provider/transaction/support/journal.d.ts.map +1 -1
  269. package/lib/provider/transaction/support/journal.js +2 -0
  270. package/lib/provider/transaction/support/journal.js.map +1 -1
  271. package/lib/provider/transaction/support/paths.d.ts +2 -1
  272. package/lib/provider/transaction/support/paths.d.ts.map +1 -1
  273. package/lib/provider/transaction/support/paths.js +2 -12
  274. package/lib/provider/transaction/support/paths.js.map +1 -1
  275. package/lib/provider/transaction/types.d.ts +1 -0
  276. package/lib/provider/transaction/types.d.ts.map +1 -1
  277. package/lib/provider/types.d.ts +58 -8
  278. package/lib/provider/types.d.ts.map +1 -1
  279. package/lib/provider/types.js +1 -1
  280. package/lib/provider/types.js.map +1 -1
  281. package/lib/typert.host.js +337 -35
  282. package/lib/typert.remote-client.d.ts +11 -1
  283. package/lib/typert.remote-client.d.ts.map +1 -1
  284. package/lib/typert.remote-client.js +337 -35
  285. package/package.json +3 -1
  286. package/assets/screenshots/screenshots-dashboard.webp +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitFileTypeIcon.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/GitFileTypeIcon.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAC;AASpE,SAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAyC;IACvF,OAAO,CACL,eACE,OAAO,EAAC,WAAW,EACnB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,SAAS,EAAE,SAAS,iBACR,MAAM,aAElB,eAAM,CAAC,EAAC,mBAAmB,GAAG,EAC9B,eAAM,CAAC,EAAC,UAAU,GAAG,IACjB,CACP,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH;;;GAGG;AACH,MAAM,gBAAgB,GAAG,UAAqC,CAAC;AAC/D,MAAM,YAAY,GAAG,gBAAgB,CAAC,YAEzB,CAAC;AACd,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,gBAE7B,CAAC;AAEd,MAAM,UAAU,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAwB;IAClF,IAAI,OAAO,YAAY,KAAK,UAAU,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE,CAAC;QACjF,OAAO,KAAC,YAAY,IAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;IAC1F,CAAC;IAED,OAAO,KAAC,gBAAgB,IAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC;AAChE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface GitLineStatsProps {
3
+ readonly additions?: number;
4
+ readonly deletions?: number;
5
+ readonly ariaLabel?: string;
6
+ readonly className?: string;
7
+ }
8
+ /** Compact, color-coded Git line counts shared by overview and changed-file rows. */
9
+ export declare function GitLineStats({ additions, deletions, ariaLabel, className, }: GitLineStatsProps): ReactNode;
10
+ //# sourceMappingURL=GitLineStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLineStats.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/GitLineStats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,GACV,EAAE,iBAAiB,GAAG,SAAS,CAoB/B"}
@@ -0,0 +1,9 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styles from './worktree-git.css';
3
+ /** Compact, color-coded Git line counts shared by overview and changed-file rows. */
4
+ export function GitLineStats({ additions, deletions, ariaLabel, className, }) {
5
+ if (additions === undefined && deletions === undefined)
6
+ return null;
7
+ return (_jsxs("span", { className: [styles.gitLineStats, className].filter(Boolean).join(' '), "aria-label": ariaLabel, "data-dashboard-git-line-stats": true, children: [additions !== undefined && (_jsxs("span", { className: styles.gitLineAdded, "data-dashboard-git-additions": true, children: ["+", additions] })), deletions !== undefined && (_jsxs("span", { className: styles.gitLineRemoved, "data-dashboard-git-deletions": true, children: ["-", deletions] }))] }));
8
+ }
9
+ //# sourceMappingURL=GitLineStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLineStats.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/GitLineStats.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AASxC,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,GACS;IAClB,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,CACL,gBACE,SAAS,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBACzD,SAAS,oDAGpB,SAAS,KAAK,SAAS,IAAI,CAC1B,gBAAM,SAAS,EAAE,MAAM,CAAC,YAAY,wDAChC,SAAS,IACN,CACR,EACA,SAAS,KAAK,SAAS,IAAI,CAC1B,gBAAM,SAAS,EAAE,MAAM,CAAC,cAAc,wDAClC,SAAS,IACN,CACR,IACI,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { WorktreeGitChangedFile, WorktreeGitHistory, WorktreeManager } from '../../../contract/index.js';
2
+ import type { WorktreeTranslate } from '../../surface/types.js';
3
+ export interface WorktreeGitOverviewInput {
4
+ readonly manager?: Pick<WorktreeManager, 'listWorktreeCommits' | 'listWorktreeCommitFiles'>;
5
+ readonly workspaceId: string;
6
+ readonly worktreeId: string;
7
+ readonly defaultBaselineBranch?: string;
8
+ readonly currentBranch?: string;
9
+ /** The record captured an acquisition commit the Manager can use implicitly. */
10
+ readonly capturedBaseline?: boolean;
11
+ }
12
+ export type WorktreeGitOverviewState = {
13
+ readonly status: 'unavailable';
14
+ } | {
15
+ readonly status: 'loading';
16
+ } | {
17
+ readonly status: 'ready';
18
+ readonly history: WorktreeGitHistory;
19
+ readonly committedFiles: readonly WorktreeGitChangedFile[];
20
+ readonly workingTreeFiles: readonly WorktreeGitChangedFile[];
21
+ } | {
22
+ readonly status: 'error';
23
+ };
24
+ /** Read the compact Git projections needed by the Overview status facts. */
25
+ export declare function useWorktreeGitOverview(input: WorktreeGitOverviewInput): WorktreeGitOverviewState;
26
+ export declare function WorktreeGitOverviewValue({ state, metric, t, }: {
27
+ readonly state: WorktreeGitOverviewState;
28
+ readonly metric: 'aheadBehind' | 'committed' | 'workingTree';
29
+ readonly t: WorktreeTranslate;
30
+ }): import("react").JSX.Element;
31
+ //# sourceMappingURL=WorktreeGitOverview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitOverview.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitOverview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAKhE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,qBAAqB,GAAG,yBAAyB,CAAC,CAAC;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IACE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC9D,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAMjC,4EAA4E;AAC5E,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,wBAAwB,GAC9B,wBAAwB,CAmD1B;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,MAAM,EACN,CAAC,GACF,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC;IAC7D,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC;CAC/B,+BAmCA"}
@@ -0,0 +1,89 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';
4
+ import { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';
5
+ import { GitLineStats } from './GitLineStats.js';
6
+ import styles from '../dashboard.css';
7
+ function isWorkingTreeCommit(commit) {
8
+ return commit.kind === 'working-tree' || commit.sha === WORKTREE_GIT_WORKING_TREE;
9
+ }
10
+ /** Read the compact Git projections needed by the Overview status facts. */
11
+ export function useWorktreeGitOverview(input) {
12
+ const baselineBranch = normalizeBaselineBranch(input.defaultBaselineBranch, input.currentBranch);
13
+ // A captured acquisition commit keeps the Overview readable without a selected
14
+ // branch; Main keeps this comparison-only Overview disconnected while its Git tab reads direct history.
15
+ const readable = input.capturedBaseline === true || baselineBranch !== undefined;
16
+ const [state, setState] = useState({ status: 'unavailable' });
17
+ useEffect(() => {
18
+ if (input.manager === undefined || isMainWorktreeId(input.worktreeId) || !readable) {
19
+ setState({ status: 'unavailable' });
20
+ return;
21
+ }
22
+ const manager = input.manager;
23
+ let active = true;
24
+ setState({ status: 'loading' });
25
+ void manager.listWorktreeCommits({
26
+ workspaceId: input.workspaceId,
27
+ worktreeId: input.worktreeId,
28
+ baseBranch: baselineBranch,
29
+ })
30
+ .then(async (history) => {
31
+ const workingTree = history.commits.find(isWorkingTreeCommit);
32
+ const committedFilesPromise = history.unavailableReason === undefined
33
+ ? manager.listWorktreeCommitFiles({
34
+ workspaceId: input.workspaceId,
35
+ worktreeId: input.worktreeId,
36
+ baseBranch: baselineBranch,
37
+ selection: { kind: 'summary', includeWorkingTree: false },
38
+ }).then((result) => result.files)
39
+ : Promise.resolve([]);
40
+ const workingTreeFilesPromise = workingTree === undefined
41
+ ? Promise.resolve([])
42
+ : manager.listWorktreeCommitFiles({
43
+ workspaceId: input.workspaceId,
44
+ worktreeId: input.worktreeId,
45
+ baseBranch: baselineBranch,
46
+ commit: workingTree.sha,
47
+ }).then((result) => result.files);
48
+ const [committedFiles, workingTreeFiles] = await Promise.all([
49
+ committedFilesPromise,
50
+ workingTreeFilesPromise,
51
+ ]);
52
+ if (active)
53
+ setState({ status: 'ready', history, committedFiles, workingTreeFiles });
54
+ })
55
+ .catch(() => {
56
+ if (active)
57
+ setState({ status: 'error' });
58
+ });
59
+ return () => {
60
+ active = false;
61
+ };
62
+ }, [baselineBranch, readable, input.manager, input.workspaceId, input.worktreeId]);
63
+ return state;
64
+ }
65
+ export function WorktreeGitOverviewValue({ state, metric, t, }) {
66
+ if (state.status !== 'ready') {
67
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });
68
+ }
69
+ if (metric === 'aheadBehind') {
70
+ const { ahead, behind } = state.history;
71
+ if (ahead === undefined || behind === undefined) {
72
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });
73
+ }
74
+ return (_jsx(GitLineStats, { additions: ahead, deletions: behind, ariaLabel: t('dashboard.git.aheadBehindStats', { ahead, behind }) }));
75
+ }
76
+ if (state.history.unavailableReason !== undefined) {
77
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });
78
+ }
79
+ const files = metric === 'committed' ? state.committedFiles : state.workingTreeFiles;
80
+ const totals = sumLineTotals(files);
81
+ if (totals === undefined) {
82
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.unknown') });
83
+ }
84
+ return (_jsx(GitLineStats, { additions: totals.additions, deletions: totals.deletions, ariaLabel: t('dashboard.git.lineStats', {
85
+ additions: totals.additions,
86
+ deletions: totals.deletions,
87
+ }) }));
88
+ }
89
+ //# sourceMappingURL=WorktreeGitOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitOverview.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitOverview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { WorktreeManager } from '../../../contract/index.js';
2
+ import type { WorktreeTranslate } from '../../surface/types.js';
3
+ export interface WorktreeGitPanelProps {
4
+ readonly manager?: Pick<WorktreeManager, 'listBranches' | 'listWorktreeCommits' | 'listWorktreeCommitFiles' | 'getWorktreeCommitFileDiff'>;
5
+ readonly workspaceId: string;
6
+ readonly worktreeId: string;
7
+ readonly defaultBaselineBranch?: string;
8
+ readonly currentBranch?: string;
9
+ /** The record captured an acquisition commit the Manager can use implicitly. */
10
+ readonly capturedBaseline?: boolean;
11
+ readonly onOpenFile?: (path: string) => void;
12
+ readonly t: WorktreeTranslate;
13
+ }
14
+ /** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */
15
+ export declare function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }: WorktreeGitPanelProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=WorktreeGitPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitPanel.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAkBhE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CACrB,eAAe,EACf,cAAc,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,2BAA2B,CACjG,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAgED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,CAAC,GACF,EAAE,qBAAqB,+BA+VvB"}
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';
4
+ import { GitChangedFiles } from './GitChangedFiles.js';
5
+ import { GitLineStats } from './GitLineStats.js';
6
+ import { GitCommitList } from './GitCommitList.js';
7
+ import { GitDiffView } from './GitDiffView.js';
8
+ import { GIT_SPLIT_DEFAULT_COLUMN_PERCENT, GIT_SPLIT_DEFAULT_ROW_PERCENT, GIT_SPLIT_MIN_COLUMN_PX, GIT_SPLIT_MIN_ROW_PX, } from './git-column-split.js';
9
+ import { useGitPaneSplit } from './useGitPaneSplit.js';
10
+ import { useWorktreeGitState } from './useWorktreeGitState.js';
11
+ import styles from './worktree-git.css';
12
+ function shortCommit(commit) {
13
+ return commit === undefined ? '—' : commit.slice(0, 7);
14
+ }
15
+ function selectedCommit(history, sha) {
16
+ return history?.commits.find((commit) => commit.sha === sha);
17
+ }
18
+ function commitCountLabel(history, t) {
19
+ const committedCount = history.commits.filter((commit) => commit.kind !== 'working-tree').length;
20
+ return history.commits.some((commit) => commit.kind === 'working-tree')
21
+ ? t('dashboard.git.commitCountWithWorkingTree', { commits: committedCount })
22
+ : t('dashboard.git.commitCount', { n: committedCount });
23
+ }
24
+ function commitLabel(commit, t) {
25
+ return commit.kind === 'working-tree'
26
+ ? t('dashboard.git.workingTree')
27
+ : shortCommit(commit.sha);
28
+ }
29
+ function readyFiles(value) {
30
+ return value?.files ?? [];
31
+ }
32
+ /** Empty-state copy per honest unavailable reason; one definition for both blocks. */
33
+ const UNAVAILABLE_COPY = {
34
+ main: {
35
+ title: 'dashboard.git.mainUnavailableTitle',
36
+ description: 'dashboard.git.mainUnavailableDescription',
37
+ },
38
+ 'baseline-unselected': {
39
+ title: 'dashboard.git.selectBaselineTitle',
40
+ description: 'dashboard.git.selectBaselineDescription',
41
+ },
42
+ 'baseline-unknown': {
43
+ title: 'dashboard.git.baselineUnknownTitle',
44
+ description: 'dashboard.git.baselineUnknownDescription',
45
+ },
46
+ };
47
+ function UnavailableNotice({ reason, t, }) {
48
+ return (_jsxs("div", { className: styles.gitUnavailable, "data-dashboard-git-unavailable": true, children: [_jsx("strong", { children: t(UNAVAILABLE_COPY[reason].title) }), _jsx("p", { children: t(UNAVAILABLE_COPY[reason].description) })] }));
49
+ }
50
+ /** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */
51
+ export function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }) {
52
+ const isMain = isMainWorktreeId(worktreeId);
53
+ const selectedDefaultBaseline = normalizeBaselineBranch(defaultBaselineBranch, currentBranch);
54
+ const state = useWorktreeGitState({
55
+ manager,
56
+ workspaceId,
57
+ worktreeId,
58
+ defaultBaselineBranch: isMain ? undefined : selectedDefaultBaseline,
59
+ capturedBaseline: isMain ? false : capturedBaseline,
60
+ });
61
+ const gridRef = useRef(null);
62
+ // Both dividers share the grid: one splits rows, one splits columns, in either layout.
63
+ const rows = useGitPaneSplit({
64
+ containerRef: gridRef,
65
+ orientation: 'horizontal',
66
+ property: '--git-rows-top',
67
+ minimum: GIT_SPLIT_MIN_ROW_PX,
68
+ fallback: GIT_SPLIT_DEFAULT_ROW_PERCENT,
69
+ });
70
+ const columns = useGitPaneSplit({
71
+ containerRef: gridRef,
72
+ orientation: 'vertical',
73
+ property: '--git-columns-left',
74
+ minimum: GIT_SPLIT_MIN_COLUMN_PX,
75
+ fallback: GIT_SPLIT_DEFAULT_COLUMN_PERCENT,
76
+ });
77
+ const historyValue = state.history.status === 'ready' ? state.history.value : undefined;
78
+ const commit = selectedCommit(historyValue, state.selectedCommit);
79
+ const files = state.files.status === 'ready' ? readyFiles(state.files.value) : [];
80
+ const diff = state.diff.status === 'ready' ? state.diff.value : undefined;
81
+ const refreshing = state.history.status === 'ready' && state.history.refreshing === true;
82
+ const unavailable = historyValue?.unavailableReason;
83
+ const branchOptions = (state.branches.status === 'ready' ? state.branches.value : [])
84
+ .filter((branch) => branch.name !== currentBranch);
85
+ const branchError = state.branches.status === 'error'
86
+ ? state.branches.error
87
+ : state.branches.status === 'ready'
88
+ ? state.branches.error
89
+ : undefined;
90
+ const baselineCommit = historyValue?.baseline?.commit;
91
+ const baselineRef = state.baselineBranch ?? historyValue?.baseline?.ref;
92
+ const targetLabel = state.view === 'summary'
93
+ ? t('dashboard.git.baselineSummary')
94
+ : state.selectedCommits.length > 1
95
+ ? t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length })
96
+ : commit === undefined
97
+ ? undefined
98
+ : commitLabel(commit, t);
99
+ const hasTarget = state.view === 'summary' || commit !== undefined;
100
+ const lineTotals = state.files.status === 'ready' && hasTarget ? sumLineTotals(files) : undefined;
101
+ return (_jsxs("section", { className: styles.gitPanel, "data-dashboard-git-panel": true, children: [_jsxs("header", { className: styles.gitPanelHeader, children: [_jsxs("div", { className: styles.gitPanelHeading, children: [_jsx("h2", { children: t('dashboard.git.title') }), !isMain && (_jsxs("label", { className: styles.gitBaselineSelector, children: [_jsx("span", { children: t('dashboard.git.baselineSelector') }), _jsxs("select", { value: state.baselineBranch ?? '', "data-dashboard-git-baseline": true, disabled: state.branches.status === 'loading', onChange: (event) => state.selectBaselineBranch(event.currentTarget.value || undefined), children: [_jsx("option", { value: "", children: t('dashboard.git.selectBaseline') }), state.baselineBranch !== undefined && !branchOptions.some((branch) => branch.name === state.baselineBranch) && (_jsx("option", { value: state.baselineBranch, children: state.baselineBranch })), branchOptions.map((branch) => (_jsx("option", { value: branch.name, children: branch.name }, branch.name)))] })] })), baselineCommit !== undefined && (_jsxs("dl", { className: styles.gitBaselineFacts, children: [_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.base') }), _jsxs("dd", { children: [baselineRef !== undefined ? (_jsxs(_Fragment, { children: [baselineRef, _jsxs("code", { children: ["@ ", shortCommit(baselineCommit)] })] })) : (_jsx("code", { children: shortCommit(baselineCommit) })), historyValue?.baseline?.source === 'derived' && (_jsx("span", { className: styles.gitDerived, children: t('dashboard.git.derived') }))] })] }), historyValue !== undefined && (_jsxs(_Fragment, { children: [_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.head') }), _jsx("dd", { children: _jsx("code", { children: shortCommit(historyValue.headCommit) }) })] }), _jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.commits') }), _jsx("dd", { children: commitCountLabel(historyValue, t) })] }), historyValue.ahead !== undefined && historyValue.behind !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.aheadBehind') }), _jsx("dd", { children: _jsx(GitLineStats, { additions: historyValue.ahead, deletions: historyValue.behind, ariaLabel: t('dashboard.git.aheadBehindStats', {
102
+ ahead: historyValue.ahead,
103
+ behind: historyValue.behind,
104
+ }) }) })] }))] }))] })), isMain && historyValue !== undefined && (_jsxs("dl", { className: styles.gitBaselineFacts, children: [_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.head') }), _jsx("dd", { children: _jsx("code", { children: shortCommit(historyValue.headCommit) }) })] }), _jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.commits') }), _jsx("dd", { children: commitCountLabel(historyValue, t) })] })] }))] }), _jsx("button", { type: "button", className: styles.gitRefresh, "data-dashboard-git-refresh": true, disabled: refreshing || state.history.status === 'loading', "aria-busy": refreshing || state.history.status === 'loading', onClick: () => void state.refresh(), children: refreshing ? t('dashboard.git.refreshing') : t('dashboard.git.refresh') })] }), branchError !== undefined && (_jsxs("div", { className: styles.gitError, role: "alert", children: [_jsx("p", { children: t('dashboard.git.loadFailed', { reason: errorText(branchError, t) }) }), _jsx("button", { type: "button", onClick: () => void state.loadBranches(), children: t('dashboard.git.retry') })] })), !isMain && unavailable === 'baseline-unselected' && (_jsxs("div", { className: styles.gitBaselinePrompt, "data-dashboard-git-baseline-prompt": true, children: [_jsx("strong", { children: t('dashboard.git.selectBaselineTitle') }), _jsx("p", { children: t('dashboard.git.selectBaselineDescription') })] })), state.history.status === 'loading' && (_jsx("div", { className: styles.gitLoading, role: "status", children: t('dashboard.git.loading') })), state.history.status === 'error' && (_jsxs("div", { className: styles.gitError, role: "alert", children: [_jsx("p", { children: t('dashboard.git.loadFailed', { reason: errorText(state.history.error, t) }) }), _jsx("button", { type: "button", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && state.history.error !== undefined && (_jsxs("div", { className: styles.gitError, role: "alert", children: [_jsx("p", { children: t('dashboard.git.refreshFailed', { reason: errorText(state.history.error, t) }) }), _jsx("button", { type: "button", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && historyValue !== undefined && unavailable !== undefined && (_jsx(UnavailableNotice, { reason: unavailable, t: t })), state.history.status === 'ready' && historyValue !== undefined && unavailable === undefined && (_jsxs("div", { className: styles.gitColumns, ref: gridRef, children: [_jsxs("section", { className: styles.gitColumn, "data-dashboard-git-pane": "commits", "aria-label": t('dashboard.git.commits'), children: [_jsxs("div", { className: styles.gitColumnHeader, children: [_jsx("h3", { children: t('dashboard.git.commits') }), _jsxs("div", { className: styles.gitColumnHeaderControls, children: [historyValue.truncated && _jsx("span", { children: t('dashboard.git.truncatedHistory') }), _jsxs("label", { className: styles.gitCommitMultiSelect, title: t('dashboard.git.multiSelectCommitsDescription'), children: [_jsx("input", { type: "checkbox", role: "switch", "data-dashboard-git-multi-select": true, "aria-describedby": "dashboard-git-commit-selection-hint", checked: state.commitMultiSelect, onChange: (event) => state.setCommitMultiSelect(event.currentTarget.checked) }), _jsx("span", { className: styles.gitCommitMultiSelectTrack, "aria-hidden": "true", children: _jsx("span", { className: styles.gitCommitMultiSelectThumb }) }), _jsx("span", { className: styles.gitCommitMultiSelectLabel, children: t('dashboard.git.multiSelectCommits') })] })] })] }), !isMain && (_jsxs("button", { type: "button", className: styles.gitSummaryButton, "data-dashboard-git-summary": true, "aria-pressed": state.view === 'summary', onClick: state.selectSummary, children: [_jsx("span", { children: t('dashboard.git.baselineSummary') }), _jsx("small", { children: t('dashboard.git.baselineSummaryDescription') })] })), !isMain && state.view === 'summary' && (_jsxs("label", { className: styles.gitSummaryToggle, "data-dashboard-git-include-working-tree": true, children: [_jsx("input", { type: "checkbox", checked: state.includeWorkingTree, disabled: state.files.status === 'loading', onChange: (event) => state.setIncludeWorkingTree(event.currentTarget.checked) }), _jsxs("span", { children: [_jsx("strong", { children: t('dashboard.git.includeWorkingTree') }), _jsx("small", { children: t('dashboard.git.includeWorkingTreeDescription') })] })] })), _jsx("span", { id: "dashboard-git-commit-selection-hint", className: styles.gitSrOnly, children: t('dashboard.git.commitSelectionHint') }), historyValue.commits.length === 0 && _jsx("div", { className: styles.gitEmpty, children: t('dashboard.git.noCommits') }), _jsx(GitCommitList, { commits: historyValue.commits, selectedCommit: state.selectedCommit, selectedCommits: state.selectedCommits, multiSelect: state.commitMultiSelect, onSelect: state.selectCommit, onToggle: state.toggleCommit, t: t })] }), _jsx(GitSplitter, { split: rows, orientation: "horizontal", axis: "rows", label: t('dashboard.git.resizeRows') }), _jsxs("section", { className: styles.gitColumn, "data-dashboard-git-pane": "changed-files", "aria-label": t('dashboard.git.changedFiles'), "aria-busy": state.files.status === 'loading', children: [_jsxs("div", { className: styles.gitColumnHeader, children: [_jsx("h3", { children: t('dashboard.git.changedFiles') }), _jsxs("div", { className: styles.gitColumnHeaderMeta, children: [targetLabel !== undefined && (state.selectedCommits.length > 1 || state.view === 'summary'
105
+ ? _jsx("span", { children: targetLabel })
106
+ : _jsx("code", { children: targetLabel })), state.files.status === 'ready' && hasTarget && (lineTotals === undefined ? (_jsx("span", { className: styles.gitColumnHeaderUnknown, children: t('dashboard.unknown') })) : (_jsx(GitLineStats, { additions: lineTotals.additions, deletions: lineTotals.deletions, ariaLabel: t('dashboard.git.lineStats', {
107
+ additions: lineTotals.additions,
108
+ deletions: lineTotals.deletions,
109
+ }) })))] })] }), state.commitMultiSelect && state.selectedCommits.length > 0 && state.view === 'commits' && (_jsxs("div", { className: styles.gitSelectionToolbar, children: [_jsx("span", { children: t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length }) }), _jsx("button", { type: "button", onClick: state.clearCommitSelection, children: t('dashboard.git.clearCommitSelection') })] })), !hasTarget ? (_jsx("div", { className: styles.gitEmpty, children: t('dashboard.git.selectCommit') })) : state.files.status === 'loading' ? (_jsx("div", { className: styles.gitLoading, role: "status", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryFiles') : t('dashboard.git.loadingFiles') })) : state.files.status === 'error' ? (_jsx("div", { className: styles.gitError, role: "alert", children: errorText(state.files.error, t) })) : (_jsxs(_Fragment, { children: [state.files.status === 'ready' && state.files.error !== undefined && (_jsx("div", { className: styles.gitError, role: "alert", children: errorText(state.files.error, t) })), state.files.status === 'ready' && state.files.value.truncated === true && (_jsx("div", { className: styles.gitEmpty, role: "status", "data-dashboard-git-files-truncated": true, children: t('dashboard.git.truncatedFiles') })), files.length === 0 && !(state.files.status === 'ready' && state.files.value.truncated === true) ? (_jsx("div", { className: styles.gitEmpty, children: state.view === 'summary'
110
+ ? state.includeWorkingTree
111
+ ? t('dashboard.git.noLiveBaselineChanges')
112
+ : t('dashboard.git.noBaselineChanges')
113
+ : t('dashboard.git.noFiles') })) : (_jsx(GitChangedFiles, { files: files, selectedPath: state.selectedPath, onSelect: state.selectPath, t: t }))] }))] }), _jsx(GitSplitter, { split: columns, orientation: "vertical", axis: "columns", label: t('dashboard.git.resizeColumns') }), _jsxs("section", { className: styles.gitColumn, "data-dashboard-git-pane": "diff", "aria-label": t('dashboard.git.diff'), "aria-busy": state.diff.status === 'loading', children: [_jsxs("div", { className: styles.gitColumnHeader, children: [_jsx("h3", { children: state.view === 'summary' ? t('dashboard.git.summaryDiff') : t('dashboard.git.diff') }), state.selectedPath !== undefined && _jsx("code", { title: state.selectedPath, children: state.selectedPath })] }), state.diff.status === 'loading' ? (_jsx("div", { className: styles.gitLoading, role: "status", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryDiff') : t('dashboard.git.loadingDiff') })) : state.diff.status === 'error' ? (_jsx("div", { className: styles.gitError, role: "alert", children: errorText(state.diff.error, t) })) : (_jsx(GitDiffView, { diff: diff, onOpenFile: onOpenFile, t: t }))] })] }))] }));
114
+ }
115
+ /**
116
+ * Draggable divider that resizes one axis of the Git grid. The wide layout puts
117
+ * the row divider inside the left column and the column divider beside it; the
118
+ * narrow layout keeps both, between the top panes and above the diff.
119
+ */
120
+ function GitSplitter({ split, orientation, axis, label }) {
121
+ return (_jsx("div", { className: styles.gitColumnSplitter, "data-dashboard-git-splitter": axis, "data-dashboard-git-splitting": split.dragging ? 'true' : undefined, role: "separator", "aria-orientation": orientation, "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(split.percent), title: label, tabIndex: 0, ref: split.splitterRef, onPointerDown: split.startDrag, onPointerMove: split.drag, onPointerUp: split.endDrag, onPointerCancel: split.endDrag, onLostPointerCapture: split.endDrag, onDoubleClick: split.reset, onKeyDown: split.onKeyDown }));
122
+ }
123
+ function errorText(error, t) {
124
+ return error.message || t('dashboard.unknownError');
125
+ }
126
+ //# sourceMappingURL=WorktreeGitPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitPanel.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function buildSessionFileAddress(sessionId: string, path: string): string;
2
+ //# sourceMappingURL=file-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-address.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/file-address.ts"],"names":[],"mappings":"AAaA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/E"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Canonical DSH session file address constructor.
3
+ * Equivalent to `sessionFileAddress` from `@deepseek-ai/dsh-util-workspace-path`.
4
+ * Address grammar: `dsh-resource://file/session/<sessionId>/<encodedPath>`
5
+ */
6
+ function encodeSegment(segment) {
7
+ return encodeURIComponent(segment).replace(/%3A/gi, ':');
8
+ }
9
+ function encodePath(path) {
10
+ return path.split('/').map(encodeSegment).join('/');
11
+ }
12
+ export function buildSessionFileAddress(sessionId, path) {
13
+ const normalized = path.replace(/\\/g, '/').replace(/^(?:\.\/)+/, '');
14
+ return `dsh-resource://file/session/${encodeSegment(sessionId)}/${encodePath(normalized)}`;
15
+ }
16
+ //# sourceMappingURL=file-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-address.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/file-address.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAE,IAAY;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,+BAA+B,aAAa,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Geometry for the two draggable Git dividers. Each divider splits one grid axis
3
+ * of the panel into a leading pane, the divider itself, and a trailing pane.
4
+ * These helpers stay free of DOM and React APIs so the drag math is testable.
5
+ */
6
+ /** Share of the stacked axis, in percent, given to the commits pane by default. */
7
+ export declare const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;
8
+ /** Share of the side-by-side axis, in percent, given to the left column by default. */
9
+ export declare const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;
10
+ /** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */
11
+ export declare const GIT_SPLIT_MIN_ROW_PX = 140;
12
+ /** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */
13
+ export declare const GIT_SPLIT_MIN_COLUMN_PX = 240;
14
+ /** Percentage points moved by one arrow-key press (Shift multiplies the step). */
15
+ export declare const GIT_SPLIT_KEY_STEP = 4;
16
+ /** Rendered box of the grid one divider splits, measured once per interaction. */
17
+ export interface GitSplitGeometry {
18
+ /** Viewport-relative leading edge: the top for row splits, the left for column splits. */
19
+ readonly start: number;
20
+ /** Rendered container size along the split axis, in CSS pixels. */
21
+ readonly size: number;
22
+ /** Rendered divider thickness, in CSS pixels. */
23
+ readonly divider: number;
24
+ /** Smallest pane size along the split axis, in CSS pixels. */
25
+ readonly minimum: number;
26
+ }
27
+ /**
28
+ * Clamp a leading-pane share to the range that keeps both panes usable, or
29
+ * undefined when the measured geometry cannot express a usable split at all.
30
+ */
31
+ export declare function clampGitSplitPercent(percent: number, geometry: GitSplitGeometry): number | undefined;
32
+ /** Resolve the share that keeps the divider centered under a pointer. */
33
+ export declare function gitSplitPercentFromPointer(pointer: number, geometry: GitSplitGeometry): number | undefined;
34
+ //# sourceMappingURL=git-column-split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-column-split.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-column-split.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mFAAmF;AACnF,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,uFAAuF;AACvF,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAQpB;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAIpB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Geometry for the two draggable Git dividers. Each divider splits one grid axis
3
+ * of the panel into a leading pane, the divider itself, and a trailing pane.
4
+ * These helpers stay free of DOM and React APIs so the drag math is testable.
5
+ */
6
+ /** Share of the stacked axis, in percent, given to the commits pane by default. */
7
+ export const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;
8
+ /** Share of the side-by-side axis, in percent, given to the left column by default. */
9
+ export const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;
10
+ /** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */
11
+ export const GIT_SPLIT_MIN_ROW_PX = 140;
12
+ /** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */
13
+ export const GIT_SPLIT_MIN_COLUMN_PX = 240;
14
+ /** Percentage points moved by one arrow-key press (Shift multiplies the step). */
15
+ export const GIT_SPLIT_KEY_STEP = 4;
16
+ function roundPercent(percent) {
17
+ return Math.round(percent * 100) / 100;
18
+ }
19
+ /**
20
+ * Clamp a leading-pane share to the range that keeps both panes usable, or
21
+ * undefined when the measured geometry cannot express a usable split at all.
22
+ */
23
+ export function clampGitSplitPercent(percent, geometry) {
24
+ if (!Number.isFinite(percent))
25
+ return undefined;
26
+ const { size, divider, minimum } = geometry;
27
+ if (!Number.isFinite(size) || size <= 0)
28
+ return undefined;
29
+ const lower = (minimum / size) * 100;
30
+ const upper = 100 - ((minimum + Math.max(divider, 0)) / size) * 100;
31
+ if (upper <= lower)
32
+ return undefined;
33
+ return roundPercent(Math.min(Math.max(percent, lower), upper));
34
+ }
35
+ /** Resolve the share that keeps the divider centered under a pointer. */
36
+ export function gitSplitPercentFromPointer(pointer, geometry) {
37
+ const halfDivider = Math.max(geometry.divider, 0) / 2;
38
+ const leadingPx = pointer - geometry.start - halfDivider;
39
+ return clampGitSplitPercent((leadingPx / geometry.size) * 100, geometry);
40
+ }
41
+ //# sourceMappingURL=git-column-split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-column-split.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-column-split.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEhD,uFAAuF;AACvF,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAEnD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAcpC,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,QAA0B;IAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACpE,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,QAA0B;IAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;IACzD,OAAO,oBAAoB,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface DiffHunk {
2
+ readonly oldStart: number;
3
+ readonly oldLines: number;
4
+ readonly newStart: number;
5
+ readonly newLines: number;
6
+ readonly lines: readonly DiffLine[];
7
+ }
8
+ export type DiffLine = {
9
+ readonly type: 'context';
10
+ readonly oldLine: number;
11
+ readonly newLine: number;
12
+ readonly text: string;
13
+ } | {
14
+ readonly type: 'add';
15
+ readonly newLine: number;
16
+ readonly text: string;
17
+ } | {
18
+ readonly type: 'delete';
19
+ readonly oldLine: number;
20
+ readonly text: string;
21
+ };
22
+ /** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */
23
+ export declare function parseUnifiedDiff(patch: string): readonly DiffHunk[];
24
+ //# sourceMappingURL=git-diff-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff-parser.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-diff-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,QAAQ,GAChB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAIN,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,CA0DnE"}
@@ -0,0 +1,56 @@
1
+ const HUNK_HEADER = /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/u;
2
+ /** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */
3
+ export function parseUnifiedDiff(patch) {
4
+ const hunks = [];
5
+ let current;
6
+ let oldLine = 0;
7
+ let newLine = 0;
8
+ const flush = () => {
9
+ if (current === undefined)
10
+ return;
11
+ hunks.push({
12
+ oldStart: current.oldStart,
13
+ oldLines: current.oldLines,
14
+ newStart: current.newStart,
15
+ newLines: current.newLines,
16
+ lines: current.lines,
17
+ });
18
+ current = undefined;
19
+ };
20
+ for (const rawLine of patch.split(/\r?\n/u)) {
21
+ const header = HUNK_HEADER.exec(rawLine);
22
+ if (header !== null) {
23
+ flush();
24
+ oldLine = Number(header[1]);
25
+ newLine = Number(header[3]);
26
+ current = {
27
+ oldStart: oldLine,
28
+ oldLines: Number(header[2] ?? '1'),
29
+ newStart: newLine,
30
+ newLines: Number(header[4] ?? '1'),
31
+ lines: [],
32
+ };
33
+ continue;
34
+ }
35
+ if (current === undefined || rawLine === '\')
36
+ continue;
37
+ const marker = rawLine[0];
38
+ const text = rawLine.slice(1);
39
+ if (marker === ' ') {
40
+ current.lines.push({ type: 'context', oldLine, newLine, text });
41
+ oldLine += 1;
42
+ newLine += 1;
43
+ }
44
+ else if (marker === '+') {
45
+ current.lines.push({ type: 'add', newLine, text });
46
+ newLine += 1;
47
+ }
48
+ else if (marker === '-') {
49
+ current.lines.push({ type: 'delete', oldLine, text });
50
+ oldLine += 1;
51
+ }
52
+ }
53
+ flush();
54
+ return hunks;
55
+ }
56
+ //# sourceMappingURL=git-diff-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff-parser.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-diff-parser.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,GAAG,8CAA8C,CAAC;AAEnE,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,OAQS,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,GAAG;gBACR,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBAClC,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBAClC,KAAK,EAAE,EAAE;aACV,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,8BAA8B;YAAE,SAAS;QAClF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { WorktreeGitChangedFile } from '../../../contract/index.js';
2
+ /**
3
+ * Shared Git-tab facts. These helpers stay free of React and DOM APIs so the
4
+ * Dashboard's branch, Main, and line-total rules have one definition.
5
+ */
6
+ /** Main (Local) Worktree ids never carry a Worktree-relative Git comparison. */
7
+ export declare function isMainWorktreeId(worktreeId: string): boolean;
8
+ /** Trim a branch value and drop empty strings. */
9
+ export declare function normalizeBranch(branch: string | undefined): string | undefined;
10
+ /** A baseline equal to the current Worktree branch is not a usable default. */
11
+ export declare function normalizeBaselineBranch(value: string | undefined, currentBranch: string | undefined): string | undefined;
12
+ export interface GitLineTotals {
13
+ readonly additions: number;
14
+ readonly deletions: number;
15
+ }
16
+ /**
17
+ * Sum the known text-file additions/deletions. Binary files have no line
18
+ * counts, so they are ignored when a target also contains readable files;
19
+ * binary-only targets remain explicitly unknown.
20
+ */
21
+ export declare function sumLineTotals(files: readonly WorktreeGitChangedFile[]): GitLineTotals | undefined;
22
+ //# sourceMappingURL=git-facts.d.ts.map